From 1c0636e8ffe704f1ba6bfdc1c74698cb49c11cd9 Mon Sep 17 00:00:00 2001 From: Jurjen Ladenius Date: Fri, 3 Jul 2026 20:43:18 +0200 Subject: [PATCH] Add per-screen FM music (lVGM / MSX-Music) Each screen now plays its own looping MSX-Music (YM2413/OPLL) track: title, hints, gameplay, and victory. Tracks are lVGM files embedded in banked segments 26-29 (one per segment, each < 8KB so it never crosses a boundary); segments 30-31 remain free. - project_config.js: add psg/msx-music/vgm/lvgm_player modules; set EmulMSXMusic so ./build.sh run gives openMSX the FM-PAC (-ext fmpac). - msxgl_config.h: enable LVGM_USE_PSG/MSXMUSIC (rest off), PSG_DIRECT. - mazegame.c: MSXMusic_Initialize() once at boot; PlayTrack()/PlayFrame() bracket every player call with a bank-2 save/restore so music never disturbs the tile/sprite banking; a PlayFrame() follows every Halt() in the wait/animation loops (ScrollDraw, input loops now frame-synced, WaitKeySequence) to advance each track at 60 Hz. Logo stays silent. - CLAUDE.md: document the music pipeline, banking protocol, and segments. Co-Authored-By: Claude Opus 4.8 --- projects/mazegame/CLAUDE.md | 102 +++++- projects/mazegame/emul/rom/mazegame.rom | Bin 262144 -> 262144 bytes projects/mazegame/mazegame.c | 72 ++++- projects/mazegame/mazegame_s26_b2.c | 334 ++++++++++++++++++++ projects/mazegame/mazegame_s27_b2.c | 184 +++++++++++ projects/mazegame/mazegame_s28_b2.c | 215 +++++++++++++ projects/mazegame/mazegame_s29_b2.c | 132 ++++++++ projects/mazegame/msxgl_config.h | 20 ++ projects/mazegame/music/the maze.lvgm | Bin 0 -> 3290 bytes projects/mazegame/music/tips screen.lvgm | Bin 0 -> 2792 bytes projects/mazegame/music/title screen.lvgm | Bin 0 -> 5186 bytes projects/mazegame/music/victory screen.lvgm | Bin 0 -> 1966 bytes projects/mazegame/project_config.js | 6 +- 13 files changed, 1040 insertions(+), 25 deletions(-) create mode 100644 projects/mazegame/mazegame_s26_b2.c create mode 100644 projects/mazegame/mazegame_s27_b2.c create mode 100644 projects/mazegame/mazegame_s28_b2.c create mode 100644 projects/mazegame/mazegame_s29_b2.c create mode 100644 projects/mazegame/music/the maze.lvgm create mode 100644 projects/mazegame/music/tips screen.lvgm create mode 100644 projects/mazegame/music/title screen.lvgm create mode 100644 projects/mazegame/music/victory screen.lvgm diff --git a/projects/mazegame/CLAUDE.md b/projects/mazegame/CLAUDE.md index 0b8b683..df76ba3 100644 --- a/projects/mazegame/CLAUDE.md +++ b/projects/mazegame/CLAUDE.md @@ -7,7 +7,8 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co An MSX2+ maze game written in C against the **MSXgl** library (`../../engine`), built into a 256KB **Konami SCC mapper ROM**. SCREEN 8 (G7, 256 colors), 32×32-pixel tiles, player always centered with smooth easing scroll. The whole game is one translation unit -(`mazegame.c`) plus ~24 generated data files holding bitmap assets in banked ROM segments. +(`mazegame.c`) plus ~28 generated data files holding bitmap assets and per-screen music in +banked ROM segments. Each screen has its own looping **MSX-Music (FM/OPLL)** track. ## Build & run @@ -33,7 +34,10 @@ at runtime with `SET_BANK_SEGMENT(2, n)` / `GET_BANK_SEGMENT(2)` (from `rom_mapp The `_b2` suffix on the generated files means "bank 2". Always save and restore the previous segment around a bank switch — the existing code does this everywhere. -Segment allocation (each file is `const u8 g_*[8192]` filling one 8KB segment exactly): +Segment allocation. The build auto-discovers any `mazegame_s{N}_b2.c` (N up to 31) and +pins its data to the start of segment N at the bank-2 window; the file's one `const u8 g_*` +array need not fill the whole 8KB (bitmap assets do; music tracks are smaller and the rest +of the segment is zero-padded). | Segments | File(s) | Contents | |----------|--------------------------|---------------------------------------------------| @@ -43,10 +47,14 @@ Segment allocation (each file is `const u8 g_*[8192]` filling one 8KB segment ex | 17 | `mazegame_s17_b2.c` | Sprite frames: east + west, frames 0–3 | | 18 | `mazegame_s18_b2.c` | All 8 tile bitmaps (1024 B each, 32×32) | | 19–25 | `mazegame_s19..25_b2.c` | Hint screen image | +| 26 | `mazegame_s26_b2.c` | Music: title screen (lVGM, FM) | +| 27 | `mazegame_s27_b2.c` | Music: hints screen (lVGM, FM) | +| 28 | `mazegame_s28_b2.c` | Music: gameplay/maze (lVGM, FM) | +| 29 | `mazegame_s29_b2.c` | Music: victory screen (lVGM, FM) | -A 256×212 SCREEN 8 image is 53,248 bytes = 7 segments (last one zero-padded). Sprite -frames are 24×24 = 576 bytes each, addressed as `0x8000 + (localDir*4 + frame) * 576`. -Tiles are addressed as `0x8000 + index*1024`. +Segments 30–31 are free. A 256×212 SCREEN 8 image is 53,248 bytes = 7 segments (last one +zero-padded). Sprite frames are 24×24 = 576 bytes each, addressed as +`0x8000 + (localDir*4 + frame) * 576`. Tiles are addressed as `0x8000 + index*1024`. ### Asset pipeline (PNG → C, run manually, then rebuild) @@ -62,6 +70,30 @@ All converters encode pixels as SCREEN 8 **GRB** (bits 7–5 = G3, 4–2 = R3, 1 `to_grb()`. Any new color/asset code must use the same encoding. Sprite segments (16/17) have no checked-in converter — edit them as data directly. +### Music — per-screen lVGM (MSX-Music / FM) + +Each screen has its own looping track played by MSXgl's `vgm/lvgm_player`. The tracks are +**lVGM** (compact VGM) files in `music/`, all **MSX-Music (YM2413 / OPLL / FM)** — so FM must +exist: built into most MSX2+ machines, and `project_config.js` sets `EmulMSXMusic = true` +so `./build.sh run` gives openMSX the FM-PAC (`-ext fmpac`). The PSG carries no music. + +- **Source → ROM:** the `.lvgm` files were embedded as the `mazegame_s26..29_b2.c` data + files (one track per segment; each is < 8KB so it never crosses a segment boundary). To + regenerate after replacing a `.lvgm`, re-run the small embed step (bin2c-style: dump the + bytes as `const u8 g_Mus*[N]` in the matching `s{26..29}_b2.c`). See + `~/Repositories/msx-music-generator` (the generator + its `msxgl-example/README.md`). +- **Playback protocol (banking):** because the tracks live in the bank-2 window and gameplay + is constantly switching segment 2 for tiles/sprites, two helpers in `mazegame.c` bracket + every player call with a save/restore of the current segment: `PlayTrack(seg)` banks the + track in and calls `LVGM_Play((const u8*)0x8000, TRUE)`; `PlayFrame()` banks the current + track's segment (`g_MusSeg`) in, calls `LVGM_Decode()`, and restores. **Every `Halt()` in a + wait/animation loop is paired with a `PlayFrame()`** so the track advances at 60 Hz — + including inside `ScrollDraw`, the gameplay input loops (which were made frame-synced for + this), and `WaitKeySequence`. `MSXMusic_Initialize()` runs once at the top of `main()`. +- **Config:** `LibModules` adds `psg`, `msx-music`, `vgm/lvgm_player`; `msxgl_config.h` sets + `LVGM_USE_PSG`/`LVGM_USE_MSXMUSIC` on (rest off) and `PSG_ACCESS = PSG_DIRECT`. +- The boot **logo animation is intentionally silent** (no track). + ### VRAM layout (off-screen caches above the visible 256×212) `mazegame.c` reserves off-screen VRAM rows in the 128KB space and documents exact @@ -72,30 +104,68 @@ coordinates in the constants block — keep these regions non-overlapping when c Rendering uses VDP commands (HMMV/HMMM, enabled via `VDP_USE_COMMAND` in `msxgl_config.h`) to blit from these caches rather than re-drawing per frame. +### Scrolling model — VRAM torus (why there is no per-move flash) + +The visible page is treated as a **256×256 VRAM torus**. Two globals, `g_BaseX`/`g_BaseY`, +hold the *resting* hardware scroll offset (R#26/27 and R#23); both are always a multiple of +64 and cycle through `{0, 64, 128, 192}`. A screen pixel `(sx, sy)` maps to VRAM +`((sx+g_BaseX)&255, (sy+g_BaseY)&255)`. + +A move (`ScrollDraw`) animates the scroll register from `base` to `base ± 64` over the 8 +ease steps, rendering the two newly-exposed tile-rows/cols into the VRAM cells that scroll +off the *opposite* edge, then simply keeps the new offset as the resting base. **Nothing is +bulk-shifted or blanked afterwards** — the old content is already at the correct torus +position, so there is no offset reset, no bulk HMMM, no strip paste, and no display blank. +(The earlier "canonicalize after every move" design did all of those behind a +`VDP_EnableDisplay(FALSE)`, which was the visible per-move flash.) + +Consequences to respect when editing: +- **All gameplay VRAM drawing must go through the base.** `DrawTileData`/`DrawTile` add it + to their HMMM/HMMV destination; the `WriteVV` helper does it for per-row CPU writes + (sprite, compositors, cat-sense arrow) and **splits a run at the 256-column wrap**. Tiles + are 32-aligned and the base is a multiple of 64, so tiles never straddle; the 24px sprite + can straddle mid-animation, which is why `WriteVV` exists. +- Fill targets in `ScrollDraw` are **base-relative** but the fill *timing* (which animation + step is safe to write each row/col) is **base-invariant**; at `base = 0` every expression + reduces exactly to the pre-torus code, which is the easy case to reason about. +- Vertical has only 32px of slack in the 256-row torus, so one new tile-row is pre-filled + (off-screen slack) and the other is deferred until it scrolls off; horizontal fills + progressively as columns wrap. This is the delicate part — verify long straight runs in + each direction (the base crosses its wrap on the 4th move) and the sprite at screen edges. +- Anything that draws at **absolute** VRAM coords must zero the scroll offset while shown and + restore `g_BaseX`/`g_BaseY` after — the minimap overlay does this. +- `main()` game setup resets `g_BaseX = g_BaseY = 0` and the offset registers before the + first `DrawFull`. + ### Game flow (`main()`) -`ShowLogoAnimation()` (SCREEN 5 fade) → loop of: `TitleScreen()` (ordered dissolve from -opening to opening+titles using the banked images) → `srand(*0xFC9E)` seed from the BIOS +`ShowLogoAnimation()` (SCREEN 5 fade, silent) → loop of: `TitleScreen()` (ordered dissolve +from opening to opening+titles using the banked images) → `srand(*0xFC9E)` seed from the BIOS jiffy clock → `GenerateMaze()` (iterative DFS, `g_RW`/`g_DW` wall arrays) → `ShowHints()` -→ set up SCREEN 8, preload tiles/minimap into VRAM → inner movement loop. +→ set up SCREEN 8, preload tiles/minimap into VRAM → inner movement loop → `ShowWinScreen()` +on reaching the exit. Each of these screens starts its own looping track with `PlayTrack()` +(see "Music" above); `MSXMusic_Initialize()` runs once before the logo. Movement is an 8-step ease-in/out scroll (`g_AO` cumulative offsets summing to 64px = two -tiles) implemented with VDP register scroll + strip rendering; input (keyboard + joystick, -sampled at the last animation frame) chains directly into the next move if a direction is -still held. The player is a 24×24 **software** sprite (`DrawSpriteAt`) drawn into VRAM — -hardware sprites are disabled. Hold **M** for the minimap overlay. +tiles) implemented as a **VRAM torus** (see "Scrolling model" above) — VDP register scroll +plus edge-strip rendering, with no per-move blank/flash. Input (keyboard + joystick, sampled +at the last animation frame) chains directly into the next move if a direction is still +held. The player is a 24×24 **software** sprite (`DrawSpriteAt`) drawn into VRAM — hardware +sprites are disabled. Hold **M** for the minimap overlay. ### MSXgl configuration `msxgl_config.h` is the per-project feature switch for the dynamically-compiled library: SCREEN 5 (G4) and SCREEN 8 (G7) modes, VDP commands, 16×16 sprites, keyboard+joystick -input. Enabling a library feature the game starts using generally requires flipping the -matching `*_USE_*` define here. +input, and the lVGM/PSG/MSX-Music replayer (see "Music"). Enabling a library feature the +game starts using generally requires flipping the matching `*_USE_*` define here **and** +adding the module to `LibModules` in `project_config.js`. ## Conventions in this codebase - Globals use terse `g_XX` names (documented inline at the top of `mazegame.c`); section banners are `//==== … ====`. Match that style. - `out/` is generated build output (`.asm/.rel/.lst/.sym/.map/.rom`) — never edit by hand. -- This directory is **not** a git repository, and MSXgl itself was patched for macOS - (see `../../SETUP_MACOS.md`); those edits are untracked, so don't assume version control. +- The repo root is `../../` (the whole `MSXgl-1.4.1` tree, pushing to the `mazegame` remote); + work happens directly on `main`. MSXgl itself was patched for macOS (see + `../../SETUP_MACOS.md`); those engine edits are untracked, so don't assume they're versioned. diff --git a/projects/mazegame/emul/rom/mazegame.rom b/projects/mazegame/emul/rom/mazegame.rom index f8564398eb7a2ea6d0c840b9c8dd41c494535313..6d60f1fa2fa9a1bcec7a3769fde4b742092643e9 100644 GIT binary patch delta 21054 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 delta 6414 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 //============================================================================= @@ -96,6 +99,42 @@ u8 g_VSeed; // per-game seed for tile variant hash u8 g_BaseX; // resting horizontal scroll offset (mult of 64) u8 g_BaseY; // resting vertical scroll offset (mult of 64) +//============================================================================= +// MUSIC (lVGM, MSX-Music / OPLL) — one looping track per screen, in banked ROM +//============================================================================= +// Each track fills the start of its own bank-2 segment (0x8000 window). Only one +// plays at a time; LVGM_Decode advances a pointer inside that window, so the +// track's segment must be banked in around every decode. Each track is < 8KB, so +// it never crosses a segment boundary. PlayTrack/PlayFrame save & restore the +// caller's bank-2 segment, so the music never disturbs the tile/sprite banking +// that gameplay drawing relies on. +#define MUS_SEG_TITLE 26 // mazegame_s26_b2.c (g_MusTitle) +#define MUS_SEG_HINTS 27 // mazegame_s27_b2.c (g_MusHints) +#define MUS_SEG_MAZE 28 // mazegame_s28_b2.c (g_MusMaze) +#define MUS_SEG_WIN 29 // mazegame_s29_b2.c (g_MusWin) + +u8 g_MusSeg; // bank-2 segment of the currently playing track + +// Start a looping track: bank in its segment, begin playback, remember the segment. +static void PlayTrack(u8 seg) +{ + u8 prev = GET_BANK_SEGMENT(2); + SET_BANK_SEGMENT(2, seg); + LVGM_Play((const u8*)0x8000, TRUE); + g_MusSeg = seg; + SET_BANK_SEGMENT(2, prev); +} + +// Advance the current track by one frame. Safe with any bank-2 segment selected; +// the caller's segment is restored on return. Call once per VBlank (after Halt()). +static void PlayFrame(void) +{ + u8 prev = GET_BANK_SEGMENT(2); + SET_BANK_SEGMENT(2, g_MusSeg); + LVGM_Decode(); + SET_BANK_SEGMENT(2, prev); +} + //============================================================================= // MAZE GENERATION (iterative DFS) //============================================================================= @@ -601,6 +640,7 @@ u8 ScrollDraw(i8 dx, i8 dy) // Vertical: R#23 (MSX2). Offset runs base → base±64. for (u8 i = 0; i < ANIM_STEPS; i++) { Halt(); + PlayFrame(); u8 new_vy = (u8)((i16)SPR_DRAW_Y + (i16)dy * g_AO[i]); g_SprFrame = (g_SprFrame + 1) & 3; DrawSpriteCompV(spr_vx, spr_vy, new_vy, old_ox, old_oy); @@ -630,6 +670,7 @@ u8 ScrollDraw(i8 dx, i8 dy) u8 prev = 0; for (u8 i = 0; i < ANIM_STEPS; i++) { Halt(); + PlayFrame(); u8 cur = g_AO[i]; u8 w = cur - prev; if (dx == 1) { @@ -832,9 +873,11 @@ static u8 AnyInput(void) // Drain held inputs, wait for a fresh press, then wait for release. static void WaitKeySequence(void) { - while (AnyInput()); - while (!AnyInput()); - while (AnyInput()); + // Halt()+PlayFrame() keeps the current track advancing (60 Hz) while waiting, + // and syncs one keyboard read per VBlank. Callers (hints/win) have music playing. + while (AnyInput()) { Halt(); PlayFrame(); } + while (!AnyInput()) { Halt(); PlayFrame(); } + while (AnyInput()) { Halt(); PlayFrame(); } } // Show the hints screen image (SCREEN 8) before the game begins. @@ -846,6 +889,7 @@ static void ShowHints(void) for (u8 y = 0; y < IMG_ROWS; y++) WriteImgRow(IMG_SEG_HINTS, y); VDP_EnableDisplay(TRUE); + PlayTrack(MUS_SEG_HINTS); WaitKeySequence(); } @@ -862,9 +906,10 @@ void TitleScreen(void) WriteImgRow(IMG_SEG_A, y); VDP_EnableDisplay(TRUE); + PlayTrack(MUS_SEG_TITLE); // Hold image A for ~2 seconds (100 VBlanks at 50Hz) - for (u8 i = 0; i < 100; i++) Halt(); + for (u8 i = 0; i < 100; i++) { Halt(); PlayFrame(); } // 16-step scanline interleave dissolve to image B (with title). // Step S updates every 16th row starting at row S. @@ -872,12 +917,12 @@ void TitleScreen(void) for (u8 step = 0; step < 16; step++) { for (u8 y = step; y < IMG_ROWS; y += 16) WriteImgRow(IMG_SEG_B, y); - Halt(); Halt(); Halt(); + Halt(); PlayFrame(); Halt(); PlayFrame(); Halt(); PlayFrame(); } - // Wait for any key or joystick input, then release - while (!AnyInput()); - while (AnyInput()); + // Wait for any key or joystick input, then release (music keeps playing) + while (!AnyInput()) { Halt(); PlayFrame(); } + while (AnyInput()) { Halt(); PlayFrame(); } } //============================================================================= @@ -931,6 +976,7 @@ static void ShowWinScreen(void) Bios_SetCursorPosition(7, 15); Bios_TextPrintString("Press any key to return..."); + PlayTrack(MUS_SEG_WIN); WaitKeySequence(); } @@ -940,6 +986,9 @@ static void ShowWinScreen(void) void main(void) { + // Init the MSX-Music (OPLL) chip once, before any track plays. + MSXMusic_Initialize(); + ShowLogoAnimation(); while (1) { @@ -1009,6 +1058,7 @@ void main(void) g_MX = g_SX; g_MY = 0; DrawFull(); VDP_EnableDisplay(TRUE); + PlayTrack(MUS_SEG_MAZE); // Start timer: sample current jiffy clock, reset frame counter. g_PrevTick = *(volatile u8*)0xFC9E; @@ -1027,6 +1077,8 @@ void main(void) if (!hasDir) { // Wait for all arrow keys and joystick direction released (debounce) do { + Halt(); + PlayFrame(); UpdateTimer(); row8 = Keyboard_Read(8); g_Joy = Joystick_Read(JOY_PORT_1); @@ -1036,6 +1088,8 @@ void main(void) // Wait for an arrow key, joystick direction, C (cheat), M/joy-A (minimap), S (cat sense) u8 row3, row4, row5; do { + Halt(); + PlayFrame(); UpdateTimer(); row8 = Keyboard_Read(8); row3 = Keyboard_Read(3); @@ -1069,6 +1123,7 @@ void main(void) // past the BIOS interrupt that rewrites the keyboard row selector). do { Halt(); + PlayFrame(); row4 = Keyboard_Read(4); g_Joy = Joystick_Read(JOY_PORT_1); } while (IS_KEY_PRESSED(row4, KEY_M) || IS_JOY_PRESSED(g_Joy, JOY_INPUT_TRIGGER_A)); @@ -1088,6 +1143,7 @@ void main(void) DrawArrow(108, 108, GetExitDir()); do { Halt(); + PlayFrame(); row5 = Keyboard_Read(5); } while (IS_KEY_PRESSED(row5, KEY_S)); // Restore: redraw tile under player then redraw sprite diff --git a/projects/mazegame/mazegame_s26_b2.c b/projects/mazegame/mazegame_s26_b2.c new file mode 100644 index 0000000..63af5da --- /dev/null +++ b/projects/mazegame/mazegame_s26_b2.c @@ -0,0 +1,334 @@ +#include "msxgl.h" + +// lVGM music track — title screen. +// Occupies the start of banked segment 26 (bank-2 window 0x8000-0x9FFF, +// via SET_BANK_SEGMENT(2, 26)). MSX-Music (YM2413/OPLL), 60 Hz, looping. +// 5186 bytes; the rest of the 8KB segment is unused padding. +// Access: LVGM_Play((const u8*)0x8000, TRUE) with segment 26 banked in. +const u8 g_MusTitle[5186] = { + 0x6C, 0x56, 0x47, 0x4D, 0x06, 0x02, 0xF1, 0x16, 0x20, 0xFE, 0x26, 0x05, 0x17, 0x50, 0x27, 0x05, + 0x18, 0xC0, 0x28, 0x01, 0x56, 0x00, 0x0E, 0x20, 0x10, 0xB3, 0x20, 0x19, 0x30, 0x42, 0x11, 0x59, + 0x21, 0x17, 0x31, 0xB6, 0x12, 0x59, 0x22, 0x13, 0x32, 0xE4, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE6, + 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x03, 0x12, + 0x02, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE6, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE6, + 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0x22, 0x05, 0x12, 0x59, 0x22, 0x13, 0x0E, 0x28, 0xE0, 0x0E, + 0x20, 0xE6, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0x02, 0x20, 0x1B, 0x21, + 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x03, 0x12, 0x02, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, + 0xE6, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE6, 0x20, 0x0B, 0x10, 0x59, 0x20, 0x19, 0x21, 0x07, + 0x11, 0x83, 0x21, 0x17, 0x22, 0x05, 0x12, 0x83, 0x22, 0x13, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE6, + 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0x83, 0x20, 0x19, 0x21, 0x07, 0x11, + 0x22, 0x21, 0x19, 0x22, 0x03, 0x12, 0x22, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE6, 0x21, + 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x07, 0x11, 0x83, + 0x21, 0x17, 0x22, 0x05, 0x12, 0x83, 0x22, 0x13, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE6, 0x21, 0x07, + 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x03, 0x12, 0x22, 0x22, + 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE6, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x09, + 0x10, 0x02, 0x20, 0x1B, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0x22, 0x05, 0x12, 0xB3, 0x22, 0x13, + 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x05, 0xE0, 0x10, 0x02, 0xE0, 0x10, 0xFF, 0x20, 0x19, + 0xE0, 0x10, 0xFC, 0xE0, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0xE0, 0x10, 0xFF, 0xE0, 0x10, 0x02, + 0x20, 0x1B, 0xE0, 0x10, 0x05, 0xE0, 0x10, 0x07, 0xE1, 0x10, 0x05, 0xE0, 0x10, 0x02, 0x21, 0x09, + 0x11, 0x46, 0x21, 0x19, 0x22, 0x03, 0x12, 0x46, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x10, 0xFF, 0x20, + 0x19, 0x0E, 0x20, 0xE0, 0x10, 0xFC, 0xE1, 0x10, 0xFF, 0xE0, 0x10, 0x02, 0x20, 0x1B, 0xE0, 0x10, + 0x05, 0xE0, 0x10, 0x07, 0xE0, 0x21, 0x09, 0x11, 0x02, 0x21, 0x19, 0xE0, 0x10, 0x05, 0xE0, 0x10, + 0x02, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0xE0, 0x10, 0xFC, 0xE1, 0x10, 0xFF, 0xE0, 0x10, 0x02, 0x20, + 0x1B, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0x22, 0x05, 0x12, 0xB3, 0x22, 0x13, 0x0E, 0x28, 0xE0, + 0x10, 0x05, 0x0E, 0x20, 0xE0, 0x10, 0x07, 0xE1, 0x10, 0x05, 0xE0, 0x10, 0x02, 0xE0, 0x10, 0xFF, + 0x20, 0x19, 0xE0, 0x10, 0xFC, 0xE0, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0xE0, 0x10, 0xFF, 0xE0, + 0x10, 0x02, 0x20, 0x1B, 0xE0, 0x10, 0x05, 0xE0, 0x10, 0x07, 0xE1, 0x10, 0x05, 0xE0, 0x10, 0x02, + 0x21, 0x09, 0x11, 0x46, 0x21, 0x19, 0x22, 0x03, 0x12, 0x46, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x10, + 0xFF, 0x20, 0x19, 0x0E, 0x20, 0xE0, 0x10, 0xFC, 0xE1, 0x10, 0xFF, 0xE0, 0x10, 0x02, 0x20, 0x1B, + 0xE0, 0x10, 0x05, 0xE0, 0x10, 0x07, 0xE0, 0x21, 0x09, 0x11, 0x02, 0x21, 0x19, 0xE0, 0x10, 0x05, + 0xE0, 0x10, 0x02, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0xE0, 0x10, 0xFC, 0xE1, 0x10, 0xFF, 0xE0, 0x20, + 0x09, 0x21, 0x09, 0x11, 0x59, 0x21, 0x17, 0x22, 0x05, 0x12, 0x59, 0x22, 0x13, 0x0E, 0x30, 0xE0, + 0x0E, 0x20, 0xE6, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE6, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x07, + 0x11, 0x02, 0x21, 0x19, 0x22, 0x03, 0x12, 0x02, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, + 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, 0xE0, 0x21, 0x09, 0x11, 0xB3, + 0x21, 0x17, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0xE1, 0x10, + 0xB7, 0xE0, 0x20, 0x09, 0x10, 0x02, 0x20, 0x1B, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0x22, 0x05, + 0x12, 0x59, 0x22, 0x13, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x05, 0xE0, 0x10, 0x02, 0xE0, + 0x10, 0xFF, 0x20, 0x19, 0xE0, 0x10, 0xFC, 0xE0, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE0, 0x10, + 0xFF, 0xE0, 0x10, 0x02, 0x20, 0x1B, 0xE0, 0x10, 0x05, 0xE0, 0x10, 0x07, 0xE1, 0x10, 0x05, 0xE0, + 0x20, 0x0B, 0x10, 0x22, 0x20, 0x1B, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x03, 0x12, 0x02, + 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x25, 0xE0, 0x10, 0x22, 0xE0, 0x10, 0x1F, + 0xE0, 0x10, 0x1D, 0xE0, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE0, 0x10, 0x1F, 0xE0, 0x10, 0x22, + 0xE0, 0x10, 0x25, 0xE0, 0x10, 0x27, 0xE1, 0x10, 0x25, 0xE0, 0x20, 0x0B, 0x10, 0x02, 0x20, 0x1B, + 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x0E, + 0x20, 0xE2, 0x10, 0x05, 0xE0, 0x10, 0x02, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0xE0, 0x10, 0xFC, 0xE0, + 0x21, 0x09, 0x11, 0x59, 0x21, 0x19, 0xE0, 0x10, 0xFF, 0xE0, 0x10, 0x02, 0x20, 0x1B, 0xE0, 0x10, + 0x05, 0xE0, 0x10, 0x07, 0xE1, 0x10, 0x05, 0xE0, 0x10, 0x02, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x19, + 0x22, 0x05, 0x12, 0xB3, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0x0E, 0x20, 0xE0, + 0x10, 0xFC, 0xE1, 0x10, 0xFF, 0xE0, 0x10, 0x02, 0x20, 0x1B, 0xE0, 0x10, 0x05, 0xE0, 0x10, 0x07, + 0xE0, 0x21, 0x09, 0x11, 0x22, 0x21, 0x19, 0xE0, 0x10, 0x05, 0xE0, 0x10, 0x02, 0xE0, 0x10, 0xFF, + 0x20, 0x19, 0xE0, 0x10, 0xFC, 0xE1, 0x10, 0xFF, 0xE0, 0x10, 0x02, 0x20, 0x1B, 0x21, 0x09, 0x21, + 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, 0x28, 0xE0, 0x10, 0x05, 0x0E, 0x20, 0xE0, 0x10, + 0x07, 0xE1, 0x10, 0x05, 0xE0, 0x10, 0x02, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0xE0, 0x10, 0xFC, 0xE0, + 0x21, 0x09, 0x11, 0x59, 0x21, 0x19, 0xE0, 0x10, 0xFF, 0xE0, 0x10, 0x02, 0x20, 0x1B, 0xE0, 0x10, + 0x05, 0xE0, 0x10, 0x07, 0xE1, 0x10, 0x05, 0xE0, 0x20, 0x0B, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x09, + 0x11, 0xB3, 0x21, 0x19, 0x22, 0x07, 0x12, 0xB3, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, + 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, 0xE0, 0x21, 0x09, 0x11, 0x22, + 0x21, 0x19, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0xE1, 0x10, + 0xB7, 0xE0, 0x20, 0x09, 0x10, 0x83, 0x20, 0x19, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0x22, 0x07, + 0x12, 0xCC, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, + 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE0, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0xE0, 0x10, 0x7F, 0xE0, + 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x10, 0x83, 0x21, 0x09, + 0x11, 0x59, 0x21, 0x19, 0x22, 0x05, 0x12, 0x59, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x10, 0x7F, 0x0E, + 0x20, 0xE0, 0x10, 0x7C, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, + 0xE0, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, + 0xE0, 0x10, 0x7C, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0x21, 0x07, 0x21, 0x17, 0x22, 0x07, 0x12, + 0xCC, 0x22, 0x15, 0x0E, 0x28, 0xE0, 0x10, 0x87, 0x0E, 0x20, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, + 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE0, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, + 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, + 0x10, 0x83, 0x21, 0x09, 0x11, 0x59, 0x21, 0x19, 0x22, 0x05, 0x12, 0x59, 0x22, 0x17, 0x0E, 0x21, + 0xE0, 0x10, 0x7F, 0x0E, 0x20, 0xE0, 0x10, 0x7C, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, + 0x87, 0xE0, 0x10, 0x8A, 0xE0, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE0, 0x10, 0x87, 0xE0, 0x10, + 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE1, 0x10, 0x7F, 0xE0, 0x20, 0x09, 0x21, 0x07, 0x11, + 0x02, 0x21, 0x19, 0x22, 0x07, 0x12, 0x02, 0x22, 0x17, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE6, 0x21, + 0x09, 0x11, 0x46, 0x21, 0x19, 0xE6, 0x21, 0x09, 0x11, 0x83, 0x21, 0x19, 0x22, 0x07, 0x12, 0x83, + 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE6, 0x21, 0x09, 0x11, 0x02, 0x21, 0x19, 0xE6, 0x10, + 0x59, 0x20, 0x19, 0x21, 0x09, 0x21, 0x19, 0x22, 0x07, 0x12, 0x02, 0x22, 0x17, 0x0E, 0x28, 0xE0, + 0x0E, 0x20, 0xE2, 0x10, 0x5D, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, 0xE0, 0x21, + 0x09, 0x11, 0x46, 0x21, 0x19, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x5D, 0xE0, 0x10, + 0x5F, 0xE1, 0x10, 0x5D, 0xE0, 0x10, 0x59, 0x21, 0x09, 0x11, 0x83, 0x21, 0x19, 0x22, 0x07, 0x12, + 0x83, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x10, 0x55, 0x0E, 0x20, 0xE0, 0x10, 0x53, 0xE1, 0x10, 0x55, + 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x5D, 0xE0, 0x10, 0x5F, 0xE0, 0x21, 0x09, 0x11, 0x02, 0x21, 0x19, + 0xE0, 0x10, 0x5D, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, 0xE1, 0x10, 0x55, 0xE0, + 0x10, 0x59, 0x21, 0x09, 0x21, 0x19, 0x22, 0x07, 0x12, 0x02, 0x22, 0x17, 0x0E, 0x30, 0xE0, 0x10, + 0x5D, 0x0E, 0x20, 0xE0, 0x10, 0x5F, 0xE1, 0x10, 0x5D, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, + 0x10, 0x53, 0xE0, 0x21, 0x09, 0x11, 0x46, 0x21, 0x19, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, + 0x10, 0x5D, 0xE0, 0x10, 0x5F, 0xE1, 0x10, 0x5D, 0xE0, 0x20, 0x09, 0x10, 0x83, 0x20, 0x19, 0x21, + 0x09, 0x11, 0x83, 0x21, 0x19, 0x22, 0x07, 0x12, 0x83, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, + 0xE2, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE0, 0x21, 0x09, 0x11, + 0x02, 0x21, 0x19, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE1, + 0x10, 0x87, 0xE0, 0x20, 0x09, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x09, 0x21, 0x19, 0x22, 0x07, 0x12, + 0x02, 0x22, 0x17, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0xE0, 0x10, + 0xAE, 0xE0, 0x10, 0xAB, 0xE0, 0x21, 0x09, 0x11, 0x46, 0x21, 0x19, 0xE0, 0x10, 0xAE, 0xE0, 0x10, + 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0xE1, 0x10, 0xB7, 0xE0, 0x20, 0x09, 0x10, 0x02, 0x20, + 0x1B, 0x21, 0x09, 0x11, 0x83, 0x21, 0x19, 0x22, 0x07, 0x12, 0x83, 0x22, 0x17, 0x0E, 0x21, 0xE0, + 0x0E, 0x20, 0xE2, 0x10, 0x05, 0xE0, 0x10, 0x02, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0xE0, 0x10, 0xFC, + 0xE0, 0x21, 0x09, 0x11, 0x02, 0x21, 0x19, 0xE0, 0x10, 0xFF, 0xE0, 0x10, 0x02, 0x20, 0x1B, 0xE0, + 0x10, 0x05, 0xE0, 0x10, 0x07, 0xE1, 0x10, 0x05, 0xE0, 0x20, 0x0B, 0x10, 0xB3, 0x20, 0x19, 0x21, + 0x09, 0x11, 0x59, 0x21, 0x17, 0x22, 0x07, 0x12, 0x59, 0x22, 0x13, 0x0E, 0x30, 0xE0, 0x0E, 0x20, + 0xE2, 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, 0xE0, 0x21, 0x07, 0x11, + 0xB3, 0x21, 0x17, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0xE1, + 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x03, 0x12, 0x02, 0x22, + 0x15, 0x0E, 0x21, 0xE0, 0x10, 0xAE, 0x0E, 0x20, 0xE0, 0x10, 0xAB, 0xE1, 0x10, 0xAE, 0xE0, 0x10, + 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0xE0, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE0, 0x10, + 0xB7, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, 0xE1, 0x10, 0xAE, 0xE0, 0x20, 0x09, + 0x10, 0x83, 0x20, 0x19, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0x22, 0x05, 0x12, 0x59, 0x22, 0x13, + 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, + 0x7C, 0xE0, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, + 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x20, 0x09, 0x10, 0x59, 0x20, 0x19, 0x21, 0x07, + 0x11, 0x02, 0x21, 0x19, 0x22, 0x03, 0x12, 0x02, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, + 0x10, 0x5D, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, 0xE0, 0x21, 0x09, 0x11, 0xB3, + 0x21, 0x17, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x5D, 0xE0, 0x10, 0x5F, 0xE1, 0x10, + 0x5D, 0xE0, 0x20, 0x09, 0x10, 0x46, 0x20, 0x19, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x05, + 0x12, 0x83, 0x22, 0x13, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x49, 0xE0, 0x10, 0x46, 0xE0, + 0x10, 0x42, 0xE0, 0x10, 0x40, 0xE0, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE0, 0x10, 0x42, 0xE0, + 0x10, 0x46, 0xE0, 0x10, 0x49, 0xE0, 0x10, 0x4B, 0xE1, 0x10, 0x49, 0xE0, 0x10, 0x46, 0x21, 0x07, + 0x11, 0x22, 0x21, 0x19, 0x22, 0x03, 0x12, 0x22, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x10, 0x42, 0x0E, + 0x20, 0xE0, 0x10, 0x40, 0xE1, 0x10, 0x42, 0xE0, 0x10, 0x46, 0xE0, 0x10, 0x49, 0xE0, 0x10, 0x4B, + 0xE0, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE0, 0x10, 0x49, 0xE0, 0x10, 0x46, 0xE0, 0x10, 0x42, + 0xE0, 0x10, 0x40, 0xE1, 0x10, 0x42, 0xE0, 0x20, 0x09, 0x10, 0x59, 0x20, 0x19, 0x21, 0x07, 0x11, + 0x83, 0x21, 0x17, 0x22, 0x05, 0x12, 0x83, 0x22, 0x13, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE2, 0x10, + 0x5D, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, 0xE0, 0x21, 0x07, 0x11, 0xCC, 0x21, + 0x17, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x5D, 0xE0, 0x10, 0x5F, 0xE1, 0x10, 0x5D, + 0xE0, 0x10, 0x59, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x03, 0x12, 0x22, 0x22, 0x15, 0x0E, + 0x21, 0xE0, 0x10, 0x55, 0x0E, 0x20, 0xE0, 0x10, 0x53, 0xE1, 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, + 0x10, 0x5D, 0xE0, 0x10, 0x5F, 0xE0, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE0, 0x10, 0x5D, 0xE0, + 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, 0xE1, 0x10, 0x55, 0xE0, 0x20, 0x09, 0x10, 0x83, + 0x20, 0x19, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0x22, 0x05, 0x12, 0xB3, 0x22, 0x13, 0x0E, 0x30, + 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE0, + 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, + 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x20, 0x09, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x09, 0x11, 0x46, + 0x21, 0x19, 0x22, 0x03, 0x12, 0x46, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xB7, + 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, 0xE0, 0x21, 0x09, 0x11, 0x02, 0x21, 0x19, + 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0xE1, 0x10, 0xB7, 0xE0, + 0x20, 0x09, 0x10, 0x83, 0x20, 0x19, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0x22, 0x05, 0x12, 0xB3, + 0x22, 0x13, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, + 0xE0, 0x10, 0x7C, 0xE0, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x83, + 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x10, 0x83, 0x21, 0x09, 0x11, 0x46, + 0x21, 0x19, 0x22, 0x03, 0x12, 0x46, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x10, 0x7F, 0x0E, 0x20, 0xE0, + 0x10, 0x7C, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE0, 0x21, + 0x09, 0x11, 0x02, 0x21, 0x19, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, + 0x7C, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0x21, 0x09, 0x11, 0x59, 0x21, 0x17, 0x22, 0x05, 0x12, + 0x59, 0x22, 0x13, 0x0E, 0x30, 0xE0, 0x10, 0x87, 0x0E, 0x20, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, + 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE0, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, + 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, + 0x20, 0x09, 0x10, 0x59, 0x20, 0x19, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x03, 0x12, 0x02, + 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x5D, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, + 0xE0, 0x10, 0x53, 0xE0, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x59, + 0xE0, 0x10, 0x5D, 0xE0, 0x10, 0x5F, 0xE1, 0x10, 0x5D, 0xE0, 0x20, 0x09, 0x10, 0x46, 0x20, 0x19, + 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0x22, 0x05, 0x12, 0x59, 0x22, 0x13, 0x0E, 0x28, 0xE0, 0x0E, + 0x20, 0xE2, 0x10, 0x49, 0xE0, 0x10, 0x46, 0xE0, 0x10, 0x42, 0xE0, 0x10, 0x40, 0xE0, 0x21, 0x07, + 0x11, 0xB3, 0x21, 0x17, 0xE0, 0x10, 0x42, 0xE0, 0x10, 0x46, 0xE0, 0x10, 0x49, 0xE0, 0x10, 0x4B, + 0xE1, 0x10, 0x49, 0xE0, 0x10, 0x46, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x03, 0x12, 0x02, + 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x10, 0x42, 0x0E, 0x20, 0xE0, 0x10, 0x40, 0xE1, 0x10, 0x42, 0xE0, + 0x10, 0x46, 0xE0, 0x10, 0x49, 0xE0, 0x10, 0x4B, 0xE0, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE0, + 0x10, 0x49, 0xE0, 0x10, 0x46, 0xE0, 0x10, 0x42, 0xE0, 0x10, 0x40, 0xE1, 0x10, 0x42, 0xE0, 0x10, + 0x46, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x15, 0x0E, 0x30, 0xE0, + 0x10, 0x49, 0x0E, 0x20, 0xE0, 0x10, 0x4B, 0xE1, 0x10, 0x49, 0xE0, 0x10, 0x46, 0xE0, 0x10, 0x42, + 0xE0, 0x10, 0x40, 0xE0, 0x21, 0x09, 0x11, 0x59, 0x21, 0x19, 0xE0, 0x10, 0x42, 0xE0, 0x10, 0x46, + 0xE0, 0x10, 0x49, 0xE0, 0x10, 0x4B, 0xE1, 0x10, 0x49, 0xE0, 0x10, 0x46, 0x21, 0x09, 0x11, 0xB3, + 0x21, 0x19, 0x22, 0x05, 0x12, 0xB3, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x10, 0x42, 0x0E, 0x20, 0xE0, + 0x10, 0x40, 0xE1, 0x10, 0x42, 0xE0, 0x10, 0x46, 0xE0, 0x10, 0x49, 0xE0, 0x10, 0x4B, 0xE0, 0x21, + 0x09, 0x11, 0x22, 0x21, 0x19, 0xE0, 0x10, 0x49, 0xE0, 0x10, 0x46, 0xE0, 0x10, 0x42, 0xE0, 0x10, + 0x40, 0xE1, 0x10, 0x42, 0xE0, 0x20, 0x09, 0x21, 0x09, 0x21, 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, + 0x17, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE6, 0x21, 0x09, 0x11, 0x59, 0x21, 0x19, 0xE6, 0x21, 0x09, + 0x11, 0xB3, 0x21, 0x19, 0x22, 0x07, 0x12, 0xB3, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE6, + 0x21, 0x09, 0x11, 0x22, 0x21, 0x19, 0xE6, 0x10, 0x02, 0x20, 0x1B, 0x30, 0x11, 0x21, 0x09, 0x11, + 0xCC, 0x21, 0x17, 0x22, 0x07, 0x12, 0xCC, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, + 0x05, 0xE0, 0x10, 0x02, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0xE0, 0x10, 0xFC, 0xE0, 0x21, 0x07, 0x11, + 0x22, 0x21, 0x19, 0xE0, 0x10, 0xFF, 0xE0, 0x10, 0x02, 0x20, 0x1B, 0xE0, 0x10, 0x05, 0xE0, 0x10, + 0x07, 0xE1, 0x10, 0x05, 0xE0, 0x10, 0x02, 0x21, 0x09, 0x11, 0x59, 0x21, 0x19, 0x22, 0x05, 0x12, + 0x59, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0x0E, 0x20, 0xE0, 0x10, 0xFC, 0xE1, + 0x10, 0xFF, 0xE0, 0x10, 0x02, 0x20, 0x1B, 0xE0, 0x10, 0x05, 0xE0, 0x10, 0x07, 0xE0, 0x21, 0x09, + 0x11, 0xCC, 0x21, 0x17, 0xE0, 0x10, 0x05, 0xE0, 0x10, 0x02, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0xE0, + 0x10, 0xFC, 0xE1, 0x10, 0xFF, 0xE0, 0x10, 0x02, 0x20, 0x1B, 0x21, 0x07, 0x21, 0x17, 0x22, 0x07, + 0x12, 0xCC, 0x22, 0x15, 0x0E, 0x28, 0xE0, 0x10, 0x05, 0x0E, 0x20, 0xE0, 0x10, 0x07, 0xE1, 0x10, + 0x05, 0xE0, 0x10, 0x02, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0xE0, 0x10, 0xFC, 0xE0, 0x21, 0x07, 0x11, + 0x22, 0x21, 0x19, 0xE0, 0x10, 0xFF, 0xE0, 0x10, 0x02, 0x20, 0x1B, 0xE0, 0x10, 0x05, 0xE0, 0x10, + 0x07, 0xE1, 0x10, 0x05, 0xE0, 0x20, 0x0B, 0x10, 0x22, 0x20, 0x1B, 0x21, 0x09, 0x11, 0x59, 0x21, + 0x19, 0x22, 0x05, 0x12, 0x59, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x25, 0xE0, + 0x10, 0x22, 0xE0, 0x10, 0x1F, 0xE0, 0x10, 0x1D, 0xE0, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE0, + 0x10, 0x1F, 0xE0, 0x10, 0x22, 0xE0, 0x10, 0x25, 0xE0, 0x10, 0x27, 0xE1, 0x10, 0x25, 0xE0, 0x20, + 0x0B, 0x10, 0x02, 0x20, 0x1B, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x07, 0x12, 0x02, 0x22, + 0x17, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x05, 0xE0, 0x10, 0x02, 0xE0, 0x10, 0xFF, 0x20, + 0x19, 0xE0, 0x10, 0xFC, 0xE0, 0x21, 0x09, 0x11, 0x46, 0x21, 0x19, 0xE0, 0x10, 0xFF, 0xE0, 0x10, + 0x02, 0x20, 0x1B, 0xE0, 0x10, 0x05, 0xE0, 0x10, 0x07, 0xE1, 0x10, 0x05, 0xE0, 0x20, 0x0B, 0x10, + 0xB3, 0x20, 0x19, 0x21, 0x09, 0x11, 0x83, 0x21, 0x19, 0x22, 0x07, 0x12, 0x83, 0x22, 0x17, 0x0E, + 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, + 0xE0, 0x21, 0x09, 0x11, 0x02, 0x21, 0x19, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, + 0xE0, 0x10, 0xBA, 0xE1, 0x10, 0xB7, 0xE0, 0x20, 0x09, 0x10, 0x02, 0x20, 0x1B, 0x21, 0x09, 0x21, + 0x19, 0x22, 0x07, 0x12, 0x02, 0x22, 0x17, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x05, 0xE0, + 0x10, 0x02, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0xE0, 0x10, 0xFC, 0xE0, 0x21, 0x09, 0x11, 0x46, 0x21, + 0x19, 0xE0, 0x10, 0xFF, 0xE0, 0x10, 0x02, 0x20, 0x1B, 0xE0, 0x10, 0x05, 0xE0, 0x10, 0x07, 0xE1, + 0x10, 0x05, 0xE0, 0x10, 0x02, 0x21, 0x09, 0x11, 0x83, 0x21, 0x19, 0x22, 0x07, 0x12, 0x83, 0x22, + 0x17, 0x0E, 0x21, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0x0E, 0x20, 0xE0, 0x10, 0xFC, 0xE1, 0x10, 0xFF, + 0xE0, 0x10, 0x02, 0x20, 0x1B, 0xE0, 0x10, 0x05, 0xE0, 0x10, 0x07, 0xE0, 0x21, 0x09, 0x11, 0x02, + 0x21, 0x19, 0xE0, 0x10, 0x05, 0xE0, 0x10, 0x02, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0xE0, 0x10, 0xFC, + 0xE1, 0x10, 0xFF, 0xE0, 0x20, 0x09, 0x10, 0x22, 0x20, 0x1B, 0x21, 0x09, 0x21, 0x19, 0x22, 0x07, + 0x12, 0x02, 0x22, 0x17, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x25, 0xE0, 0x10, 0x22, 0xE0, + 0x10, 0x1F, 0xE0, 0x10, 0x1D, 0xE0, 0x21, 0x09, 0x11, 0x46, 0x21, 0x19, 0xE0, 0x10, 0x1F, 0xE0, + 0x10, 0x22, 0xE0, 0x10, 0x25, 0xE0, 0x10, 0x27, 0xE1, 0x10, 0x25, 0xE0, 0x10, 0x22, 0x21, 0x09, + 0x11, 0x83, 0x21, 0x19, 0x22, 0x07, 0x12, 0x83, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x10, 0x1F, 0x0E, + 0x20, 0xE0, 0x10, 0x1D, 0xE1, 0x10, 0x1F, 0xE0, 0x10, 0x22, 0xE0, 0x10, 0x25, 0xE0, 0x10, 0x27, + 0xE0, 0x21, 0x09, 0x11, 0x02, 0x21, 0x19, 0xE0, 0x10, 0x25, 0xE0, 0x10, 0x22, 0xE0, 0x10, 0x1F, + 0xE0, 0x10, 0x1D, 0xE1, 0x10, 0x1F, 0xE0, 0x10, 0x22, 0x21, 0x09, 0x21, 0x19, 0x22, 0x07, 0x12, + 0x02, 0x22, 0x17, 0x0E, 0x28, 0xE0, 0x10, 0x25, 0x0E, 0x20, 0xE0, 0x10, 0x27, 0xE1, 0x10, 0x25, + 0xE0, 0x10, 0x22, 0xE0, 0x10, 0x1F, 0xE0, 0x10, 0x1D, 0xE0, 0x21, 0x09, 0x11, 0x46, 0x21, 0x19, + 0xE0, 0x10, 0x1F, 0xE0, 0x10, 0x22, 0xE0, 0x10, 0x25, 0xE0, 0x10, 0x27, 0xE1, 0x10, 0x25, 0xE0, + 0x10, 0x22, 0x21, 0x09, 0x11, 0x83, 0x21, 0x19, 0x22, 0x07, 0x12, 0x83, 0x22, 0x17, 0x0E, 0x21, + 0xE0, 0x10, 0x1F, 0x0E, 0x20, 0xE0, 0x10, 0x1D, 0xE1, 0x10, 0x1F, 0xE0, 0x10, 0x22, 0xE0, 0x10, + 0x25, 0xE0, 0x10, 0x27, 0xE0, 0x21, 0x09, 0x11, 0x02, 0x21, 0x19, 0xE0, 0x10, 0x25, 0xE0, 0x10, + 0x22, 0xE0, 0x10, 0x1F, 0xE0, 0x10, 0x1D, 0xE1, 0x10, 0x1F, 0xE0, 0x20, 0x0B, 0x21, 0x09, 0x11, + 0x59, 0x21, 0x17, 0x22, 0x07, 0x12, 0x59, 0x22, 0x13, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE6, 0x21, + 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE6, 0x10, 0x02, 0x20, 0x1B, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, + 0x22, 0x03, 0x12, 0x02, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x05, 0xE0, 0x10, + 0x02, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0xE0, 0x10, 0xFC, 0xE0, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, + 0xE0, 0x10, 0xFF, 0xE0, 0x10, 0x02, 0x20, 0x1B, 0xE0, 0x10, 0x05, 0xE0, 0x10, 0x07, 0xE1, 0x10, + 0x05, 0xE0, 0x20, 0x0B, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0x22, 0x05, + 0x12, 0x59, 0x22, 0x13, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0xE0, + 0x10, 0xAE, 0xE0, 0x10, 0xAB, 0xE0, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE0, 0x10, 0xAE, 0xE0, + 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0xE1, 0x10, 0xB7, 0xE0, 0x20, 0x09, 0x10, 0x83, + 0x20, 0x19, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x03, 0x12, 0x02, 0x22, 0x15, 0x0E, 0x21, + 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE0, + 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, + 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x20, 0x09, 0x10, 0x59, 0x20, 0x19, 0x21, 0x07, 0x11, 0x83, + 0x21, 0x17, 0x22, 0x05, 0x12, 0x83, 0x22, 0x13, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x5D, + 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, 0xE0, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, + 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x5D, 0xE0, 0x10, 0x5F, 0xE1, 0x10, 0x5D, 0xE0, + 0x10, 0x59, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x03, 0x12, 0x22, 0x22, 0x15, 0x0E, 0x21, + 0xE0, 0x10, 0x55, 0x0E, 0x20, 0xE0, 0x10, 0x53, 0xE1, 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, 0x10, + 0x5D, 0xE0, 0x10, 0x5F, 0xE0, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE0, 0x10, 0x5D, 0xE0, 0x10, + 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, 0xE1, 0x10, 0x55, 0xE0, 0x10, 0x59, 0x21, 0x07, 0x11, + 0x83, 0x21, 0x17, 0x22, 0x05, 0x12, 0x83, 0x22, 0x13, 0x0E, 0x28, 0xE0, 0x10, 0x5D, 0x0E, 0x20, + 0xE0, 0x10, 0x5F, 0xE1, 0x10, 0x5D, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, 0xE0, + 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x5D, 0xE0, + 0x10, 0x5F, 0xE1, 0x10, 0x5D, 0xE0, 0x20, 0x09, 0x10, 0x46, 0x20, 0x19, 0x21, 0x07, 0x11, 0x22, + 0x21, 0x19, 0x22, 0x03, 0x12, 0x22, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x49, + 0xE0, 0x10, 0x46, 0xE0, 0x10, 0x42, 0xE0, 0x10, 0x40, 0xE0, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, + 0xE0, 0x10, 0x42, 0xE0, 0x10, 0x46, 0xE0, 0x10, 0x49, 0xE0, 0x10, 0x4B, 0xE1, 0x10, 0x49, 0xE0, + 0x20, 0x09, 0x10, 0x59, 0x20, 0x19, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0x22, 0x05, 0x12, 0xB3, + 0x22, 0x13, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x5D, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, + 0xE0, 0x10, 0x53, 0xE0, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x59, + 0xE0, 0x10, 0x5D, 0xE0, 0x10, 0x5F, 0xE1, 0x10, 0x5D, 0xE0, 0x10, 0x59, 0x21, 0x09, 0x11, 0x46, + 0x21, 0x19, 0x22, 0x03, 0x12, 0x46, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x10, 0x55, 0x0E, 0x20, 0xE0, + 0x10, 0x53, 0xE1, 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x5D, 0xE0, 0x10, 0x5F, 0xE0, 0x21, + 0x09, 0x11, 0x02, 0x21, 0x19, 0xE0, 0x10, 0x5D, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, + 0x53, 0xE1, 0x10, 0x55, 0xE0, 0x10, 0x59, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0x22, 0x05, 0x12, + 0xB3, 0x22, 0x13, 0x0E, 0x28, 0xE0, 0x10, 0x5D, 0x0E, 0x20, 0xE0, 0x10, 0x5F, 0xE1, 0x10, 0x5D, + 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, 0xE0, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, + 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x5D, 0xE0, 0x10, 0x5F, 0xE1, 0x10, 0x5D, 0xE0, + 0x10, 0x59, 0x21, 0x09, 0x11, 0x46, 0x21, 0x19, 0x22, 0x03, 0x12, 0x46, 0x22, 0x15, 0x0E, 0x21, + 0xE0, 0x10, 0x55, 0x0E, 0x20, 0xE0, 0x10, 0x53, 0xE1, 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, 0x10, + 0x5D, 0xE0, 0x10, 0x5F, 0xE0, 0x21, 0x09, 0x11, 0x02, 0x21, 0x19, 0xE0, 0x10, 0x5D, 0xE0, 0x10, + 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, 0xE1, 0x10, 0x55, 0xE0, 0x20, 0x09, 0x21, 0x09, 0x11, + 0x59, 0x21, 0x17, 0x22, 0x05, 0x12, 0x59, 0x22, 0x13, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE6, 0x21, + 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x03, 0x12, 0x02, + 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE6, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE6, 0x10, + 0xB3, 0x20, 0x19, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0x22, 0x05, 0x12, 0x59, 0x22, 0x13, 0x0E, + 0x28, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, + 0xE0, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, + 0xE0, 0x10, 0xBA, 0xE1, 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, + 0x03, 0x12, 0x02, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x10, 0xAE, 0x0E, 0x20, 0xE0, 0x10, 0xAB, 0xE1, + 0x10, 0xAE, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0xE0, 0x21, 0x09, 0x11, 0xB3, + 0x21, 0x17, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, 0xE1, 0x10, + 0xAE, 0xE0, 0x10, 0xB3, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x15, + 0x0E, 0x30, 0xE0, 0x10, 0xB7, 0x0E, 0x20, 0xE0, 0x10, 0xBA, 0xE1, 0x10, 0xB7, 0xE0, 0x10, 0xB3, + 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, 0xE0, 0x21, 0x09, 0x11, 0x59, 0x21, 0x19, 0xE0, 0x10, 0xAE, + 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0xE1, 0x10, 0xB7, 0xE0, 0x20, 0x09, 0x10, + 0x83, 0x20, 0x19, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x19, 0x22, 0x05, 0x12, 0xB3, 0x22, 0x15, 0x0E, + 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, + 0xE0, 0x21, 0x09, 0x11, 0x22, 0x21, 0x19, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, + 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x20, 0x09, 0x10, 0x59, 0x20, 0x19, 0x21, 0x09, 0x21, + 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x5D, 0xE0, + 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, 0xE0, 0x21, 0x09, 0x11, 0x59, 0x21, 0x19, 0xE0, + 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x5D, 0xE0, 0x10, 0x5F, 0xE1, 0x10, 0x5D, 0xE0, 0x20, + 0x09, 0x10, 0x46, 0x20, 0x19, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x19, 0x22, 0x07, 0x12, 0xB3, 0x22, + 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x49, 0xE0, 0x10, 0x46, 0xE0, 0x10, 0x42, 0xE0, + 0x10, 0x40, 0xE0, 0x21, 0x09, 0x11, 0x22, 0x21, 0x19, 0xE0, 0x10, 0x42, 0xE0, 0x10, 0x46, 0xE0, + 0x10, 0x49, 0xE0, 0x10, 0x4B, 0xE1, 0x10, 0x49, 0xE0, 0x20, 0x09, 0x10, 0x59, 0x20, 0x19, 0x21, + 0x09, 0x11, 0xCC, 0x21, 0x17, 0x22, 0x07, 0x12, 0xCC, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x0E, 0x20, + 0xE2, 0x10, 0x5D, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, 0xE0, 0x21, 0x07, 0x11, + 0x22, 0x21, 0x19, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x5D, 0xE0, 0x10, 0x5F, 0xE1, + 0x10, 0x5D, 0xE0, 0x10, 0x59, 0x21, 0x09, 0x11, 0x59, 0x21, 0x19, 0x22, 0x05, 0x12, 0x59, 0x22, + 0x17, 0x0E, 0x21, 0xE0, 0x10, 0x55, 0x0E, 0x20, 0xE0, 0x10, 0x53, 0xE1, 0x10, 0x55, 0xE0, 0x10, + 0x59, 0xE0, 0x10, 0x5D, 0xE0, 0x10, 0x5F, 0xE0, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE0, 0x10, + 0x5D, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, 0xE1, 0x10, 0x55, 0xE0, 0x20, 0x09, + 0x10, 0x83, 0x20, 0x19, 0x21, 0x07, 0x21, 0x17, 0x22, 0x07, 0x12, 0xCC, 0x22, 0x15, 0x0E, 0x28, + 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE0, + 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, + 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x20, 0x09, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x09, 0x11, 0x59, + 0x21, 0x19, 0x22, 0x05, 0x12, 0x59, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xB7, + 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, 0xE0, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, + 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0xE1, 0x10, 0xB7, 0xE0, + 0x20, 0x09, 0x10, 0xCC, 0x20, 0x19, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x07, 0x12, 0x02, + 0x22, 0x17, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xD1, 0xE0, 0x10, 0xCC, 0xE0, 0x10, 0xC7, + 0xE0, 0x10, 0xC4, 0xE0, 0x21, 0x09, 0x11, 0x46, 0x21, 0x19, 0xE0, 0x10, 0xC7, 0xE0, 0x10, 0xCC, + 0xE0, 0x10, 0xD1, 0xE0, 0x10, 0xD4, 0xE1, 0x10, 0xD1, 0xE0, 0x10, 0xCC, 0x21, 0x09, 0x11, 0x83, + 0x21, 0x19, 0x22, 0x07, 0x12, 0x83, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x10, 0xC7, 0x0E, 0x20, 0xE0, + 0x10, 0xC4, 0xE1, 0x10, 0xC7, 0xE0, 0x10, 0xCC, 0xE0, 0x10, 0xD1, 0xE0, 0x10, 0xD4, 0xE0, 0x21, + 0x09, 0x11, 0x02, 0x21, 0x19, 0xE0, 0x10, 0xD1, 0xE0, 0x10, 0xCC, 0xE0, 0x10, 0xC7, 0xE0, 0x10, + 0xC4, 0xE1, 0x10, 0xC7, 0xE0, 0x20, 0x09, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x09, 0x21, 0x19, 0x22, + 0x07, 0x12, 0x02, 0x22, 0x17, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xB7, 0xE0, 0x10, 0xB3, + 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, 0xE0, 0x21, 0x09, 0x11, 0x46, 0x21, 0x19, 0xE0, 0x10, 0xAE, + 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0xE1, 0x10, 0xB7, 0xE0, 0x20, 0x09, 0x10, + 0x83, 0x20, 0x19, 0x21, 0x09, 0x11, 0x83, 0x21, 0x19, 0x22, 0x07, 0x12, 0x83, 0x22, 0x17, 0x0E, + 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, + 0xE0, 0x21, 0x09, 0x11, 0x02, 0x21, 0x19, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, + 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x20, 0x09, 0x10, 0x59, 0x20, 0x19, 0x21, 0x09, 0x11, + 0x59, 0x21, 0x17, 0x22, 0x07, 0x12, 0x59, 0x22, 0x17, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, + 0x5D, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, 0xE0, 0x21, 0x07, 0x11, 0xB3, 0x21, + 0x17, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x5D, 0xE0, 0x10, 0x5F, 0xE1, 0x10, 0x5D, + 0xE0, 0x10, 0x59, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x07, 0x12, 0x02, 0x22, 0x19, 0x0E, + 0x21, 0xE0, 0x10, 0x55, 0x0E, 0x20, 0xE0, 0x10, 0x53, 0xE1, 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, + 0x10, 0x5D, 0xE0, 0x10, 0x5F, 0xE0, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE0, 0x10, 0x5D, 0xE0, + 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, 0xE1, 0x10, 0x55, 0xE0, 0x10, 0x59, 0x21, 0x07, + 0x11, 0x59, 0x21, 0x17, 0x22, 0x09, 0x12, 0x59, 0x22, 0x17, 0x0E, 0x28, 0xE0, 0x10, 0x5D, 0x0E, + 0x20, 0xE0, 0x10, 0x5F, 0xE1, 0x10, 0x5D, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, + 0xE0, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x5D, + 0xE0, 0x10, 0x5F, 0xE1, 0x10, 0x5D, 0xE0, 0x20, 0x09, 0x10, 0x83, 0x20, 0x19, 0x21, 0x07, 0x11, + 0x02, 0x21, 0x19, 0x22, 0x07, 0x12, 0x02, 0x22, 0x19, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, + 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE0, 0x21, 0x09, 0x11, 0xB3, 0x21, + 0x17, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, + 0xE0, 0xFF, +}; diff --git a/projects/mazegame/mazegame_s27_b2.c b/projects/mazegame/mazegame_s27_b2.c new file mode 100644 index 0000000..4516ca2 --- /dev/null +++ b/projects/mazegame/mazegame_s27_b2.c @@ -0,0 +1,184 @@ +#include "msxgl.h" + +// lVGM music track — tips/hints screen. +// Occupies the start of banked segment 27 (bank-2 window 0x8000-0x9FFF, +// via SET_BANK_SEGMENT(2, 27)). MSX-Music (YM2413/OPLL), 60 Hz, looping. +// 2792 bytes; the rest of the 8KB segment is unused padding. +// Access: LVGM_Play((const u8*)0x8000, TRUE) with segment 27 banked in. +const u8 g_MusHints[2792] = { + 0x6C, 0x56, 0x47, 0x4D, 0x06, 0x02, 0xF1, 0x16, 0x20, 0xFE, 0x26, 0x05, 0x17, 0x50, 0x27, 0x05, + 0x18, 0xC0, 0x28, 0x01, 0x56, 0x00, 0x0E, 0x20, 0x10, 0x83, 0x20, 0x19, 0x30, 0x71, 0x11, 0x83, + 0x21, 0x17, 0x31, 0xC6, 0x12, 0x83, 0x22, 0x13, 0x32, 0xE3, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, + 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x03, 0x12, + 0x22, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE6, + 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x05, 0x12, 0x83, 0x22, 0x13, 0x0E, 0x28, 0xE0, 0x0E, + 0x20, 0xE5, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0xCC, 0x20, 0x19, 0x21, + 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x03, 0x12, 0xB3, 0x22, 0x13, 0x0E, 0x21, 0xE0, 0x0E, 0x20, + 0xE5, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0x22, 0x20, 0x1B, 0x21, 0x07, + 0x11, 0x83, 0x21, 0x17, 0x22, 0x03, 0x12, 0x83, 0x22, 0x13, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, + 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x03, 0x12, + 0x22, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE6, + 0x20, 0x0B, 0x10, 0x02, 0x20, 0x1B, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x05, 0x12, 0x83, + 0x22, 0x13, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x20, + 0x0B, 0x10, 0xCC, 0x20, 0x19, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x03, 0x12, 0xB3, 0x22, + 0x13, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE7, 0x20, 0x09, + 0x10, 0xB3, 0x20, 0x19, 0x21, 0x07, 0x11, 0x12, 0x21, 0x19, 0x22, 0x03, 0x12, 0x12, 0x22, 0x15, + 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0x83, 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, + 0xCC, 0x21, 0x17, 0x22, 0x05, 0x12, 0x83, 0x22, 0x13, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, + 0x07, 0x11, 0x83, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0x83, 0x20, 0x19, 0x21, 0x07, 0x11, 0x12, + 0x21, 0x19, 0x22, 0x03, 0x12, 0x12, 0x22, 0x15, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, + 0x11, 0x83, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x07, 0x11, 0xCC, 0x21, + 0x17, 0x22, 0x05, 0x12, 0x22, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, + 0x83, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0xCC, 0x20, 0x19, 0x21, 0x07, 0x11, 0x12, 0x21, 0x19, + 0x22, 0x05, 0x12, 0x12, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0x83, + 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0x22, 0x05, 0x12, 0x83, 0x22, 0x13, 0x0E, + 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, 0x12, + 0x21, 0x19, 0x22, 0x03, 0x12, 0x12, 0x22, 0x15, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, + 0x11, 0x83, 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0x22, 0x05, 0x12, 0x22, 0x22, + 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0xE6, 0x20, 0x09, + 0x10, 0x02, 0x20, 0x1B, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0x22, 0x05, 0x12, 0xCC, 0x22, 0x13, + 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0xE6, 0x21, 0x09, 0x11, + 0x59, 0x21, 0x19, 0x22, 0x03, 0x12, 0x59, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, + 0x09, 0x11, 0x22, 0x21, 0x19, 0xE6, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0x22, 0x05, 0x12, 0xCC, + 0x22, 0x13, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0xE6, 0x20, + 0x0B, 0x10, 0xCC, 0x20, 0x19, 0x21, 0x09, 0x11, 0x59, 0x21, 0x19, 0x22, 0x03, 0x12, 0x02, 0x22, + 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0x22, 0x21, 0x19, 0xE6, 0x20, 0x09, + 0x10, 0xB3, 0x20, 0x19, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0x22, 0x05, 0x12, 0xCC, 0x22, 0x13, + 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0xE6, 0x21, 0x09, 0x11, + 0x59, 0x21, 0x19, 0x22, 0x03, 0x12, 0x59, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, + 0x09, 0x11, 0x22, 0x21, 0x19, 0xE6, 0x20, 0x09, 0x10, 0x59, 0x20, 0x19, 0x21, 0x09, 0x11, 0xCC, + 0x21, 0x17, 0x22, 0x05, 0x12, 0xCC, 0x22, 0x13, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, + 0x11, 0x22, 0x21, 0x19, 0xE6, 0x20, 0x09, 0x10, 0x83, 0x20, 0x19, 0x21, 0x09, 0x11, 0x59, 0x21, + 0x19, 0x22, 0x03, 0x12, 0x02, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, + 0x22, 0x21, 0x19, 0xE7, 0x20, 0x09, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x09, 0x11, 0x59, 0x21, 0x17, + 0x22, 0x05, 0x12, 0x59, 0x22, 0x13, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xB7, 0xE0, 0x10, + 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE1, 0x10, 0xAE, + 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0xE1, 0x10, 0xB7, 0x21, 0x07, 0x11, 0x02, + 0x21, 0x19, 0x22, 0x03, 0x12, 0x02, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x10, 0xB3, 0x0E, 0x20, 0xE0, + 0x10, 0xAE, 0xE0, 0x10, 0xAB, 0xE1, 0x10, 0xAE, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0x21, 0x09, + 0x11, 0xB3, 0x21, 0x17, 0xE0, 0x10, 0xBA, 0xE1, 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, + 0xE0, 0x10, 0xAB, 0xE0, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0x22, 0x05, 0x12, 0x59, 0x22, 0x13, + 0x0E, 0x28, 0xE0, 0x10, 0xAE, 0x0E, 0x20, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, + 0xE1, 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE0, 0x10, 0xAE, 0xE0, + 0x10, 0xAB, 0xE1, 0x10, 0xAE, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0x21, 0x07, + 0x11, 0x02, 0x21, 0x19, 0x22, 0x03, 0x12, 0xB3, 0x22, 0x13, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE0, + 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, 0xE1, 0x10, 0xAE, 0x21, 0x09, + 0x11, 0xB3, 0x21, 0x17, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0xE1, 0x10, 0xB7, + 0xE0, 0x10, 0xB3, 0xE0, 0x20, 0x09, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0x22, 0x03, 0x12, 0x59, + 0x22, 0x13, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE6, 0x21, + 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x03, 0x12, 0x02, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, + 0xE5, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE6, 0x10, 0x22, 0x20, 0x1B, 0x30, 0x42, 0x21, 0x07, + 0x11, 0x59, 0x21, 0x17, 0x22, 0x05, 0x12, 0x59, 0x22, 0x13, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE2, + 0x10, 0x25, 0xE0, 0x10, 0x22, 0xE0, 0x10, 0x1F, 0xE0, 0x10, 0x1D, 0x21, 0x07, 0x11, 0xB3, 0x21, + 0x17, 0xE1, 0x10, 0x1F, 0xE0, 0x10, 0x22, 0xE0, 0x10, 0x25, 0xE0, 0x10, 0x27, 0xE1, 0x10, 0x25, + 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x03, 0x12, 0xB3, 0x22, 0x13, 0x0E, 0x21, 0xE0, 0x10, + 0x22, 0x0E, 0x20, 0xE0, 0x10, 0x1F, 0xE0, 0x10, 0x1D, 0xE1, 0x10, 0x1F, 0xE0, 0x10, 0x22, 0xE0, + 0x10, 0x25, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE0, 0x10, 0x27, 0xE1, 0x10, 0x25, 0xE0, 0x10, + 0x22, 0xE0, 0x10, 0x1F, 0xE0, 0x10, 0x1D, 0xE0, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x03, + 0x12, 0x83, 0x22, 0x13, 0x0E, 0x30, 0xE0, 0x10, 0x1F, 0x0E, 0x20, 0xE0, 0x10, 0x22, 0xE0, 0x10, + 0x25, 0xE0, 0x10, 0x27, 0xE1, 0x10, 0x25, 0xE0, 0x10, 0x22, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, + 0xE0, 0x10, 0x1F, 0xE0, 0x10, 0x1D, 0xE1, 0x10, 0x1F, 0xE0, 0x10, 0x22, 0xE0, 0x10, 0x25, 0xE0, + 0x20, 0x0B, 0x10, 0x22, 0x20, 0x1B, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x03, 0x12, 0x22, + 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x25, 0xE0, 0x10, 0x22, 0xE0, 0x10, 0x1F, + 0xE0, 0x10, 0x1D, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE1, 0x10, 0x1F, 0xE0, 0x10, 0x22, 0xE0, + 0x10, 0x25, 0xE0, 0x10, 0x27, 0xE1, 0x20, 0x0B, 0x10, 0x02, 0x20, 0x1B, 0x21, 0x07, 0x11, 0x83, + 0x21, 0x17, 0x22, 0x05, 0x12, 0x83, 0x22, 0x13, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x05, + 0xE0, 0x10, 0x02, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0xE0, 0x10, 0xFC, 0x21, 0x07, 0x11, 0xCC, 0x21, + 0x17, 0xE1, 0x10, 0xFF, 0xE0, 0x10, 0x02, 0x20, 0x1B, 0xE0, 0x10, 0x05, 0xE0, 0x10, 0x07, 0xE1, + 0x10, 0x05, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x03, 0x12, 0xB3, 0x22, 0x13, 0x0E, 0x21, + 0xE0, 0x10, 0x02, 0x0E, 0x20, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0xE0, 0x10, 0xFC, 0xE1, 0x10, 0xFF, + 0xE0, 0x10, 0x02, 0x20, 0x1B, 0xE0, 0x10, 0x05, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE0, 0x10, + 0x07, 0xE1, 0x10, 0x05, 0xE0, 0x10, 0x02, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0xE0, 0x10, 0xFC, 0xE0, + 0x20, 0x09, 0x10, 0xCC, 0x20, 0x19, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x03, 0x12, 0x83, + 0x22, 0x13, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xD1, 0xE0, 0x10, 0xCC, 0xE0, 0x10, 0xC7, + 0xE0, 0x10, 0xC4, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE1, 0x10, 0xC7, 0xE0, 0x10, 0xCC, 0xE0, + 0x10, 0xD1, 0xE0, 0x10, 0xD4, 0xE1, 0x20, 0x09, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x07, 0x11, 0x22, + 0x21, 0x19, 0x22, 0x03, 0x12, 0x22, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xB7, + 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE1, + 0x10, 0xAE, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0xE1, 0x20, 0x09, 0x10, 0x83, + 0x20, 0x19, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x05, 0x12, 0x83, 0x22, 0x13, 0x0E, 0x28, + 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0x21, + 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, + 0x8A, 0xE1, 0x10, 0x87, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x03, 0x12, 0xB3, 0x22, 0x13, + 0x0E, 0x21, 0xE0, 0x10, 0x83, 0x0E, 0x20, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE1, 0x10, 0x7F, + 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE0, 0x10, 0x8A, 0xE1, + 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE1, 0x20, 0x09, 0x10, 0xCC, + 0x20, 0x19, 0x21, 0x07, 0x11, 0x12, 0x21, 0x19, 0x22, 0x03, 0x12, 0x12, 0x22, 0x15, 0x0E, 0x30, + 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xD1, 0xE0, 0x10, 0xCC, 0xE0, 0x10, 0xC7, 0xE0, 0x10, 0xC4, 0x21, + 0x09, 0x11, 0x83, 0x21, 0x17, 0xE1, 0x10, 0xC7, 0xE0, 0x10, 0xCC, 0xE0, 0x10, 0xD1, 0xE0, 0x10, + 0xD4, 0xE1, 0x20, 0x09, 0x10, 0x22, 0x20, 0x1B, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0x22, 0x05, + 0x12, 0x83, 0x22, 0x13, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x25, 0xE0, 0x10, 0x22, 0xE0, + 0x10, 0x1F, 0xE0, 0x10, 0x1D, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0xE1, 0x10, 0x1F, 0xE0, 0x10, + 0x22, 0xE0, 0x10, 0x25, 0xE0, 0x10, 0x27, 0xE1, 0x20, 0x0B, 0x10, 0x83, 0x20, 0x1B, 0x21, 0x07, + 0x11, 0x12, 0x21, 0x19, 0x22, 0x03, 0x12, 0x12, 0x22, 0x15, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE2, + 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0x21, 0x09, 0x11, 0x83, 0x21, + 0x17, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, + 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0x22, 0x05, 0x12, 0x22, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x10, + 0x83, 0x0E, 0x20, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, + 0x10, 0x87, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x10, + 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE0, 0x21, 0x07, 0x11, 0x12, 0x21, 0x19, 0x22, 0x05, + 0x12, 0x12, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x10, 0x7F, 0x0E, 0x20, 0xE0, 0x10, 0x83, 0xE0, 0x10, + 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x10, 0x83, 0x21, 0x09, 0x11, 0x83, 0x21, 0x17, + 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, + 0x10, 0x8A, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0x22, 0x05, 0x12, 0x83, 0x22, 0x13, 0x0E, 0x21, + 0xE0, 0x0E, 0x20, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE1, + 0x10, 0x7F, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, + 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x20, 0x0B, 0x10, 0x22, 0x20, 0x1B, 0x21, 0x07, + 0x11, 0x12, 0x21, 0x19, 0x22, 0x03, 0x12, 0x12, 0x22, 0x15, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE2, + 0x10, 0x25, 0xE0, 0x10, 0x22, 0xE0, 0x10, 0x1F, 0xE0, 0x10, 0x1D, 0x21, 0x09, 0x11, 0x83, 0x21, + 0x17, 0xE1, 0x10, 0x1F, 0xE0, 0x10, 0x22, 0xE0, 0x10, 0x25, 0xE0, 0x10, 0x27, 0xE1, 0x10, 0x25, + 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0x22, 0x05, 0x12, 0x22, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x10, + 0x22, 0x0E, 0x20, 0xE0, 0x10, 0x1F, 0xE0, 0x10, 0x1D, 0xE1, 0x10, 0x1F, 0xE0, 0x10, 0x22, 0xE0, + 0x10, 0x25, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0xE0, 0x10, 0x27, 0xE1, 0x10, 0x25, 0xE0, 0x10, + 0x22, 0xE0, 0x10, 0x1F, 0xE0, 0x10, 0x1D, 0xE0, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x05, + 0x12, 0x02, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x10, 0x1F, 0x0E, 0x20, 0xE0, 0x10, 0x22, 0xE0, 0x10, + 0x25, 0xE0, 0x10, 0x27, 0xE1, 0x10, 0x25, 0xE0, 0x10, 0x22, 0x21, 0x09, 0x11, 0x22, 0x21, 0x19, + 0x0E, 0x30, 0xE0, 0x10, 0x1F, 0x0E, 0x20, 0xE0, 0x10, 0x1D, 0xE1, 0x10, 0x1F, 0xE0, 0x10, 0x22, + 0xE0, 0x10, 0x25, 0xE0, 0x20, 0x0B, 0x10, 0x02, 0x20, 0x1B, 0x21, 0x09, 0x11, 0x59, 0x21, 0x19, + 0x22, 0x05, 0x12, 0x83, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x05, 0xE0, 0x10, + 0x02, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0xE0, 0x10, 0xFC, 0x21, 0x09, 0x11, 0x22, 0x21, 0x19, 0xE1, + 0x10, 0xFF, 0xE0, 0x10, 0x02, 0x20, 0x1B, 0xE0, 0x10, 0x05, 0xE0, 0x10, 0x07, 0xE1, 0x20, 0x0B, + 0x10, 0xCC, 0x20, 0x19, 0x21, 0x09, 0x11, 0x02, 0x21, 0x19, 0x22, 0x05, 0x12, 0x02, 0x22, 0x15, + 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xD1, 0xE0, 0x10, 0xCC, 0xE0, 0x10, 0xC7, 0xE0, 0x10, + 0xC4, 0x21, 0x09, 0x11, 0x22, 0x21, 0x19, 0xE1, 0x10, 0xC7, 0xE0, 0x10, 0xCC, 0xE0, 0x10, 0xD1, + 0xE0, 0x10, 0xD4, 0xE1, 0x10, 0xD1, 0x21, 0x09, 0x11, 0x59, 0x21, 0x19, 0x22, 0x05, 0x12, 0x22, + 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x10, 0xCC, 0x0E, 0x20, 0xE0, 0x10, 0xC7, 0xE0, 0x10, 0xC4, 0xE1, + 0x10, 0xC7, 0xE0, 0x10, 0xCC, 0xE0, 0x10, 0xD1, 0x21, 0x09, 0x11, 0x22, 0x21, 0x19, 0xE0, 0x10, + 0xD4, 0xE1, 0x10, 0xD1, 0xE0, 0x10, 0xCC, 0xE0, 0x10, 0xC7, 0xE0, 0x10, 0xC4, 0xE0, 0x20, 0x09, + 0x10, 0xB3, 0x20, 0x19, 0x21, 0x09, 0x11, 0x02, 0x21, 0x19, 0x22, 0x05, 0x12, 0x02, 0x22, 0x15, + 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0x10, + 0xAB, 0x21, 0x09, 0x11, 0x22, 0x21, 0x19, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE0, 0x10, 0xAE, 0xE0, + 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0xE1, 0x20, 0x09, 0x10, 0x83, 0x20, 0x19, 0x21, + 0x09, 0x11, 0x59, 0x21, 0x19, 0x22, 0x05, 0x12, 0x83, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, + 0xE2, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0x21, 0x09, 0x11, 0x22, + 0x21, 0x19, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x20, + 0x09, 0x10, 0x83, 0x20, 0x19, 0x21, 0x09, 0x11, 0x02, 0x21, 0x19, 0x22, 0x05, 0x12, 0x02, 0x22, + 0x15, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, + 0x10, 0x7C, 0x21, 0x09, 0x11, 0x22, 0x21, 0x19, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, + 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, 0x21, 0x09, 0x11, 0x59, 0x21, 0x19, 0x22, 0x05, 0x12, + 0x22, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x10, 0x83, 0x0E, 0x20, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, + 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0x21, 0x09, 0x11, 0x22, 0x21, 0x19, 0xE0, + 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE1, 0x10, + 0x7F, 0x21, 0x09, 0x21, 0x19, 0x22, 0x05, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x10, 0x83, 0x0E, 0x20, + 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0x21, + 0x09, 0x11, 0x59, 0x21, 0x19, 0x0E, 0x30, 0xE0, 0x10, 0x7C, 0x0E, 0x20, 0xE1, 0x10, 0x7F, 0xE0, + 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE0, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x19, 0x22, + 0x05, 0x12, 0xB3, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x10, 0x87, 0x0E, 0x20, 0xE0, 0x10, 0x83, 0xE0, + 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0x21, 0x09, 0x11, 0x59, 0x21, + 0x19, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, + 0xE0, 0x10, 0x7C, 0x21, 0x09, 0x11, 0x22, 0x21, 0x1B, 0x22, 0x05, 0x12, 0x22, 0x22, 0x15, 0x0E, + 0x28, 0xE0, 0x0E, 0x20, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, + 0xE1, 0x10, 0x87, 0x21, 0x0B, 0x11, 0x59, 0x21, 0x1B, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, + 0x10, 0x7C, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0x21, 0x0B, 0x11, 0xB3, 0x21, + 0x1B, 0x22, 0x05, 0x12, 0x59, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x10, 0x8A, 0x0E, 0x20, 0xE1, 0x10, + 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE0, 0x21, 0x0B, 0x11, 0x59, 0x21, + 0x1B, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, + 0xE0, 0x10, 0x83, 0x21, 0x0B, 0x11, 0x22, 0x21, 0x1D, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, + 0x30, 0xE0, 0x10, 0x7F, 0x0E, 0x20, 0xE0, 0x10, 0x7C, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, + 0x10, 0x87, 0xE0, 0x10, 0x8A, 0x21, 0x0D, 0x11, 0x59, 0x21, 0x1D, 0x0E, 0x30, 0xE0, 0x0E, 0x20, + 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE1, 0x10, 0x7F, 0x21, + 0x0D, 0x11, 0xB3, 0x21, 0x1D, 0x22, 0x07, 0x12, 0xB3, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x10, 0x83, + 0x0E, 0x20, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, + 0x7F, 0x21, 0x0D, 0x11, 0x59, 0x21, 0x1D, 0xE0, 0x10, 0x7C, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, + 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE0, 0xFF, +}; diff --git a/projects/mazegame/mazegame_s28_b2.c b/projects/mazegame/mazegame_s28_b2.c new file mode 100644 index 0000000..4f32a36 --- /dev/null +++ b/projects/mazegame/mazegame_s28_b2.c @@ -0,0 +1,215 @@ +#include "msxgl.h" + +// lVGM music track — gameplay (the maze). +// Occupies the start of banked segment 28 (bank-2 window 0x8000-0x9FFF, +// via SET_BANK_SEGMENT(2, 28)). MSX-Music (YM2413/OPLL), 60 Hz, looping. +// 3290 bytes; the rest of the 8KB segment is unused padding. +// Access: LVGM_Play((const u8*)0x8000, TRUE) with segment 28 banked in. +const u8 g_MusMaze[3290] = { + 0x6C, 0x56, 0x47, 0x4D, 0x06, 0x02, 0xF1, 0x16, 0x20, 0xFE, 0x26, 0x05, 0x17, 0x50, 0x27, 0x05, + 0x18, 0xC0, 0x28, 0x01, 0x56, 0x00, 0x0E, 0x20, 0x10, 0x83, 0x20, 0x19, 0x30, 0x44, 0x11, 0x83, + 0x21, 0x17, 0x31, 0xC4, 0x12, 0x83, 0x22, 0x15, 0x32, 0xE4, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, + 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0xCC, 0x20, 0x19, 0x21, 0x07, 0x11, + 0x22, 0x21, 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE4, 0x21, + 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0x22, 0x20, 0x1B, 0x21, 0x07, 0x11, 0x83, + 0x21, 0x17, 0x22, 0x07, 0x12, 0x83, 0x22, 0x15, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, + 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x0B, 0x10, 0x83, 0x20, 0x19, 0x21, 0x07, 0x11, 0x22, 0x21, + 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, + 0xCC, 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x07, 0x12, 0x83, 0x22, 0x15, + 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE4, 0x20, 0x09, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x10, + 0x22, 0x20, 0x1B, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, + 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x0B, 0x10, 0x02, + 0x20, 0x1B, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x07, 0x12, 0x83, 0x22, 0x15, 0x0E, 0x28, + 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE5, 0x20, 0x0B, 0x10, 0xCC, 0x20, + 0x19, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, 0x21, 0xE0, + 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, + 0x22, 0x07, 0x12, 0x83, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0xCC, + 0x21, 0x17, 0xE6, 0x20, 0x09, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, + 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE5, 0x10, 0xB3, + 0x20, 0x19, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x07, 0x12, 0x83, 0x22, 0x15, 0x0E, 0x28, + 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0xCC, 0x20, + 0x19, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, 0x21, 0xE0, + 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0x83, 0x20, 0x19, + 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0x22, 0x07, 0x12, 0x59, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x0E, + 0x20, 0xE4, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, + 0x05, 0x12, 0x02, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x20, 0x09, 0x21, 0x09, 0x11, + 0xB3, 0x21, 0x17, 0xE6, 0x20, 0x19, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0x22, 0x07, 0x12, 0x59, + 0x22, 0x15, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE6, 0x20, + 0x09, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x05, 0x12, 0x02, 0x22, + 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE4, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE6, 0x20, 0x09, + 0x10, 0xCC, 0x20, 0x19, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0x22, 0x07, 0x12, 0x59, 0x22, 0x15, + 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, + 0x02, 0x21, 0x19, 0x22, 0x05, 0x12, 0x02, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, + 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE5, 0x20, 0x09, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0x22, 0x07, + 0x12, 0x59, 0x22, 0x15, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, + 0xE6, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x05, 0x12, 0x02, 0x22, 0x17, 0x0E, 0x21, 0xE0, + 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE6, 0x10, 0x59, 0x20, 0x19, 0x21, 0x07, + 0x11, 0x22, 0x21, 0x17, 0x22, 0x07, 0x12, 0x22, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, + 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0xE5, 0x20, 0x09, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x07, 0x11, + 0xB3, 0x21, 0x17, 0x22, 0x05, 0x12, 0xB3, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, + 0x07, 0x11, 0x59, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0x02, 0x20, 0x1B, 0x21, 0x07, 0x11, 0x22, + 0x21, 0x17, 0x22, 0x05, 0x12, 0x22, 0x22, 0x15, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, + 0x11, 0x59, 0x21, 0x17, 0xE6, 0x20, 0x0B, 0x10, 0x59, 0x20, 0x19, 0x21, 0x07, 0x11, 0xB3, 0x21, + 0x17, 0x22, 0x05, 0x12, 0xB3, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE4, 0x21, 0x07, 0x11, + 0x59, 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x05, 0x12, 0x83, 0x22, 0x15, + 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x20, 0x09, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x10, + 0x02, 0x20, 0x1B, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, + 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x0B, 0x10, 0xCC, + 0x20, 0x19, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x07, 0x12, 0x83, 0x22, 0x15, 0x0E, 0x28, + 0xE0, 0x0E, 0x20, 0xE4, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0xB3, 0x20, + 0x19, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, 0x21, 0xE0, + 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, + 0x22, 0x07, 0x12, 0x59, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0xB3, + 0x21, 0x17, 0xE5, 0x20, 0x09, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x05, 0x12, 0x02, 0x22, + 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE6, 0x10, 0x83, + 0x20, 0x19, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0x22, 0x07, 0x12, 0x59, 0x22, 0x15, 0x0E, 0x28, + 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0xB3, 0x20, + 0x19, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x05, 0x12, 0x02, 0x22, 0x17, 0x0E, 0x21, 0xE0, + 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE5, 0x20, 0x09, 0x10, 0x59, 0x20, 0x19, + 0x21, 0x07, 0x11, 0x22, 0x21, 0x17, 0x22, 0x07, 0x12, 0x22, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x0E, + 0x20, 0xE5, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0x22, + 0x05, 0x12, 0xB3, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x20, 0x09, 0x21, 0x07, 0x11, + 0x59, 0x21, 0x17, 0xE6, 0x20, 0x19, 0x21, 0x07, 0x11, 0x22, 0x21, 0x17, 0x22, 0x05, 0x12, 0x22, + 0x22, 0x15, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE4, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0xE6, 0x20, + 0x09, 0x10, 0x46, 0x20, 0x19, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0x22, 0x05, 0x12, 0xB3, 0x22, + 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0xE6, 0x20, 0x09, + 0x10, 0x22, 0x20, 0x19, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x05, 0x12, 0x83, 0x22, 0x15, + 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, + 0x22, 0x21, 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE4, 0x21, + 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x07, + 0x12, 0x83, 0x22, 0x15, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, + 0xE6, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, 0x21, 0xE0, + 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE5, 0x10, 0x83, 0x20, 0x19, 0x21, 0x07, + 0x11, 0x83, 0x21, 0x17, 0x22, 0x07, 0x12, 0x83, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, + 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0x21, 0x07, 0x11, 0xCC, 0x21, + 0x17, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, + 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x10, + 0x83, 0x0E, 0x20, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, + 0x10, 0x87, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x10, + 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE0, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x07, + 0x12, 0x83, 0x22, 0x15, 0x0E, 0x28, 0xE0, 0x10, 0x7F, 0x0E, 0x20, 0xE0, 0x10, 0x83, 0xE0, 0x10, + 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x10, 0x83, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, + 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x20, 0x09, 0x10, + 0xB3, 0x20, 0x19, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, + 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, + 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE1, 0x10, 0xAE, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, + 0x10, 0xBA, 0xE1, 0x20, 0x09, 0x10, 0xCC, 0x20, 0x19, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, + 0x07, 0x12, 0x83, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xD1, 0xE0, 0x10, 0xCC, + 0xE0, 0x10, 0xC7, 0xE0, 0x10, 0xC4, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE1, 0x10, 0xC7, 0xE0, + 0x10, 0xCC, 0xE0, 0x10, 0xD1, 0xE0, 0x10, 0xD4, 0xE1, 0x10, 0xD1, 0x21, 0x07, 0x11, 0x22, 0x21, + 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x10, 0xCC, 0x0E, 0x20, 0xE0, 0x10, + 0xC7, 0xE0, 0x10, 0xC4, 0xE1, 0x10, 0xC7, 0xE0, 0x10, 0xCC, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, + 0xE0, 0x10, 0xD1, 0xE0, 0x10, 0xD4, 0xE1, 0x10, 0xD1, 0xE0, 0x10, 0xCC, 0xE0, 0x10, 0xC7, 0xE0, + 0x20, 0x09, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x07, 0x12, 0x83, + 0x22, 0x15, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, + 0xE0, 0x10, 0xAB, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE1, 0x10, 0xAE, 0xE0, 0x10, 0xB3, 0xE0, + 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0xE1, 0x20, 0x09, 0x10, 0x83, 0x20, 0x19, 0x21, 0x07, 0x11, 0x22, + 0x21, 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x87, + 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE1, + 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x20, 0x09, 0x10, 0x59, + 0x20, 0x19, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0x22, 0x07, 0x12, 0x59, 0x22, 0x15, 0x0E, 0x30, + 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x5D, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, 0x21, 0x07, 0x11, 0xB3, + 0x21, 0x17, 0xE0, 0x10, 0x53, 0xE1, 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x5D, 0xE0, 0x10, + 0x5F, 0xE0, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x05, 0x12, 0x02, 0x22, 0x17, 0x0E, 0x21, + 0xE0, 0x10, 0x5D, 0x0E, 0x20, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, 0xE1, 0x10, + 0x55, 0xE0, 0x10, 0x59, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE0, 0x10, 0x5D, 0xE0, 0x10, 0x5F, + 0xE1, 0x10, 0x5D, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, 0x21, 0x07, 0x11, 0x59, + 0x21, 0x17, 0x22, 0x07, 0x12, 0x59, 0x22, 0x15, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE0, 0x10, 0x55, + 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x5D, 0xE0, 0x10, 0x5F, 0xE1, 0x10, 0x5D, 0x21, 0x07, 0x11, 0xB3, + 0x21, 0x17, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, 0xE0, 0x10, 0x53, 0xE1, 0x10, 0x55, 0xE0, 0x20, + 0x09, 0x10, 0x83, 0x20, 0x19, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x05, 0x12, 0x02, 0x22, + 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, + 0x10, 0x7C, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, + 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x20, 0x09, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x07, 0x11, 0x59, 0x21, + 0x17, 0x22, 0x07, 0x12, 0x59, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xB7, 0xE0, + 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE1, 0x10, + 0xAE, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0xE1, 0x10, 0xB7, 0x21, 0x07, 0x11, + 0x02, 0x21, 0x19, 0x22, 0x05, 0x12, 0x02, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x10, 0xB3, 0x0E, 0x20, + 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, 0xE1, 0x10, 0xAE, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0x21, + 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE0, 0x10, 0xBA, 0xE1, 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0xE0, 0x10, + 0xAE, 0xE0, 0x20, 0x09, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0x22, 0x07, 0x12, 0x59, 0x22, 0x15, + 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE6, 0x10, 0xCC, 0x20, + 0x19, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x05, 0x12, 0x02, 0x22, 0x17, 0x0E, 0x21, 0xE0, + 0x0E, 0x20, 0xE2, 0x10, 0xD1, 0xE0, 0x10, 0xCC, 0xE0, 0x10, 0xC7, 0xE0, 0x10, 0xC4, 0x21, 0x09, + 0x11, 0xB3, 0x21, 0x17, 0xE1, 0x10, 0xC7, 0xE0, 0x10, 0xCC, 0xE0, 0x10, 0xD1, 0xE0, 0x10, 0xD4, + 0xE1, 0x20, 0x09, 0x10, 0x02, 0x20, 0x1B, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x07, 0x12, + 0x83, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x05, 0xE0, 0x10, 0x02, 0xE0, 0x10, + 0xFF, 0x20, 0x19, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE0, 0x10, 0xFC, 0xE1, 0x10, 0xFF, 0xE0, + 0x10, 0x02, 0x20, 0x1B, 0xE0, 0x10, 0x05, 0xE0, 0x10, 0x07, 0xE0, 0x21, 0x07, 0x11, 0x22, 0x21, + 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x10, 0x05, 0x0E, 0x20, 0xE0, 0x10, + 0x02, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0xE0, 0x10, 0xFC, 0xE1, 0x10, 0xFF, 0xE0, 0x10, 0x02, 0x20, + 0x1B, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE0, 0x10, 0x05, 0xE0, 0x10, 0x07, 0xE1, 0x10, 0x05, + 0xE0, 0x10, 0x02, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0xE0, 0x10, 0xFC, 0x21, 0x07, 0x11, 0x83, 0x21, + 0x17, 0x22, 0x07, 0x12, 0x83, 0x22, 0x15, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE0, 0x10, 0xFF, 0xE0, + 0x10, 0x02, 0x20, 0x1B, 0xE0, 0x10, 0x05, 0xE0, 0x10, 0x07, 0xE1, 0x10, 0x05, 0x21, 0x07, 0x11, + 0xCC, 0x21, 0x17, 0xE0, 0x10, 0x02, 0xE0, 0x10, 0xFF, 0x20, 0x19, 0xE0, 0x10, 0xFC, 0xE1, 0x10, + 0xFF, 0xE0, 0x10, 0x02, 0x20, 0x1B, 0xE0, 0x20, 0x0B, 0x10, 0xCC, 0x20, 0x19, 0x21, 0x07, 0x11, + 0x22, 0x21, 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, + 0xD1, 0xE0, 0x10, 0xCC, 0xE0, 0x10, 0xC7, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE0, 0x10, 0xC4, + 0xE1, 0x10, 0xC7, 0xE0, 0x10, 0xCC, 0xE0, 0x10, 0xD1, 0xE0, 0x10, 0xD4, 0xE0, 0x20, 0x09, 0x10, + 0xB3, 0x20, 0x19, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0x22, 0x07, 0x12, 0xCC, 0x22, 0x15, 0x0E, + 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, + 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0xE1, 0x10, 0xAE, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, + 0x10, 0xBA, 0xE1, 0x10, 0xB7, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x05, 0x12, 0x83, 0x22, + 0x15, 0x0E, 0x21, 0xE0, 0x10, 0xB3, 0x0E, 0x20, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, 0xE1, 0x10, + 0xAE, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE0, 0x10, 0xBA, + 0xE1, 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0x20, 0x09, 0x10, 0x83, 0x20, 0x19, + 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, 0x28, 0xE0, 0x0E, + 0x20, 0xE2, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0x21, 0x07, 0x11, + 0xB3, 0x21, 0x17, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE1, + 0x20, 0x09, 0x10, 0x59, 0x20, 0x19, 0x21, 0x07, 0x11, 0x02, 0x21, 0x19, 0x22, 0x07, 0x12, 0xCC, + 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x5D, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, + 0xE0, 0x10, 0x53, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x17, 0xE1, 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, + 0x10, 0x5D, 0xE0, 0x10, 0x5F, 0xE1, 0x20, 0x09, 0x10, 0x22, 0x20, 0x19, 0x21, 0x07, 0x11, 0x22, + 0x21, 0x17, 0x22, 0x05, 0x12, 0x59, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x25, + 0xE0, 0x10, 0x22, 0xE0, 0x10, 0x1F, 0xE0, 0x10, 0x1D, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0xE1, + 0x10, 0x1F, 0xE0, 0x10, 0x22, 0xE0, 0x10, 0x25, 0xE0, 0x10, 0x27, 0xE0, 0x21, 0x07, 0x11, 0xB3, + 0x21, 0x17, 0x22, 0x05, 0x12, 0x02, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x10, 0x25, 0x0E, 0x20, 0xE0, + 0x10, 0x22, 0xE0, 0x10, 0x1F, 0xE0, 0x10, 0x1D, 0xE1, 0x10, 0x1F, 0xE0, 0x10, 0x22, 0x21, 0x07, + 0x11, 0x59, 0x21, 0x17, 0xE0, 0x10, 0x25, 0xE0, 0x10, 0x27, 0xE1, 0x10, 0x25, 0xE0, 0x10, 0x22, + 0xE0, 0x10, 0x1F, 0xE0, 0x10, 0x1D, 0x21, 0x07, 0x11, 0x22, 0x21, 0x17, 0x22, 0x07, 0x12, 0x59, + 0x22, 0x15, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE0, 0x10, 0x1F, 0xE0, 0x10, 0x22, 0xE0, 0x10, 0x25, + 0xE0, 0x10, 0x27, 0xE1, 0x10, 0x25, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0xE0, 0x10, 0x22, 0xE0, + 0x10, 0x1F, 0xE0, 0x10, 0x1D, 0xE1, 0x10, 0x1F, 0xE0, 0x10, 0x22, 0xE0, 0x20, 0x09, 0x10, 0x59, + 0x20, 0x19, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0x22, 0x05, 0x12, 0x02, 0x22, 0x17, 0x0E, 0x21, + 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x5D, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x55, 0x21, 0x07, 0x11, 0x59, + 0x21, 0x17, 0xE0, 0x10, 0x53, 0xE1, 0x10, 0x55, 0xE0, 0x10, 0x59, 0xE0, 0x10, 0x5D, 0xE0, 0x10, + 0x5F, 0xE0, 0x20, 0x09, 0x10, 0x83, 0x20, 0x19, 0x21, 0x07, 0x11, 0x22, 0x21, 0x17, 0x22, 0x07, + 0x12, 0xB3, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, + 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0xE1, 0x10, 0x7F, 0xE0, 0x10, + 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, + 0x22, 0x05, 0x12, 0x59, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x10, 0x83, 0x0E, 0x20, 0xE0, 0x10, 0x7F, + 0xE0, 0x10, 0x7C, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0x21, 0x07, 0x11, 0x59, + 0x21, 0x17, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, + 0x7C, 0xE0, 0x21, 0x07, 0x11, 0x22, 0x21, 0x17, 0x22, 0x05, 0x12, 0x02, 0x22, 0x17, 0x0E, 0x28, + 0xE0, 0x10, 0x7F, 0x0E, 0x20, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x10, + 0x87, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, + 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0x21, 0x07, 0x11, 0xB3, 0x21, 0x17, 0x22, + 0x07, 0x12, 0xB3, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x10, 0x8A, 0x0E, 0x20, 0xE1, 0x10, 0x87, 0xE0, + 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, 0x10, 0x7C, 0xE0, 0x21, 0x07, 0x11, 0x59, 0x21, 0x17, 0xE0, + 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x10, 0x87, 0xE0, 0x20, + 0x09, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x05, 0x12, 0x22, 0x22, 0x15, 0x0E, 0x30, 0xE0, + 0x0E, 0x20, 0xE5, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE5, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, + 0x22, 0x05, 0x12, 0xB3, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0xCC, + 0x21, 0x17, 0xE6, 0x10, 0xCC, 0x20, 0x19, 0x30, 0x64, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, + 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xD1, 0xE0, 0x10, 0xCC, + 0xE0, 0x10, 0xC7, 0xE0, 0x10, 0xC4, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE1, 0x10, 0xC7, 0xE0, + 0x10, 0xCC, 0xE0, 0x10, 0xD1, 0xE0, 0x10, 0xD4, 0xE1, 0x20, 0x09, 0x10, 0x22, 0x20, 0x1B, 0x21, + 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x07, 0x12, 0xB3, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, + 0xE2, 0x10, 0x25, 0xE0, 0x10, 0x22, 0xE0, 0x10, 0x1F, 0xE0, 0x10, 0x1D, 0x21, 0x09, 0x11, 0xCC, + 0x21, 0x17, 0xE1, 0x10, 0x1F, 0xE0, 0x10, 0x22, 0xE0, 0x10, 0x25, 0xE0, 0x10, 0x27, 0xE0, 0x20, + 0x0B, 0x10, 0x83, 0x20, 0x1B, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x05, 0x12, 0x59, 0x22, + 0x15, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0x87, 0xE0, 0x10, 0x83, 0xE0, 0x10, 0x7F, 0xE0, + 0x10, 0x7C, 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE1, 0x10, 0x7F, 0xE0, 0x10, 0x83, 0xE0, 0x10, + 0x87, 0xE0, 0x10, 0x8A, 0xE1, 0x20, 0x0B, 0x10, 0xCC, 0x20, 0x1B, 0x21, 0x07, 0x11, 0x22, 0x21, + 0x19, 0x22, 0x05, 0x12, 0x22, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE2, 0x10, 0xD1, 0xE0, + 0x10, 0xCC, 0xE0, 0x10, 0xC7, 0xE0, 0x10, 0xC4, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE1, 0x10, + 0xC7, 0xE0, 0x10, 0xCC, 0xE0, 0x10, 0xD1, 0xE0, 0x10, 0xD4, 0xE1, 0x20, 0x0B, 0x10, 0xB3, 0x20, + 0x1B, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, 0x22, 0x05, 0x12, 0xB3, 0x22, 0x15, 0x0E, 0x28, 0xE0, + 0x0E, 0x20, 0xE2, 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0x21, 0x07, 0x11, 0xCC, 0x21, + 0x17, 0xE0, 0x10, 0xAB, 0xE1, 0x10, 0xAE, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, + 0xE0, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x05, 0x12, 0x59, 0x22, 0x15, 0x0E, 0x21, 0xE0, + 0x10, 0xB7, 0x0E, 0x20, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0x10, 0xAB, 0xE1, 0x10, 0xAE, + 0xE0, 0x10, 0xB3, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE0, 0x10, 0xB7, 0xE0, 0x10, 0xBA, 0xE1, + 0x10, 0xB7, 0xE0, 0x10, 0xB3, 0xE0, 0x10, 0xAE, 0xE0, 0xFF, +}; diff --git a/projects/mazegame/mazegame_s29_b2.c b/projects/mazegame/mazegame_s29_b2.c new file mode 100644 index 0000000..2cb8ee1 --- /dev/null +++ b/projects/mazegame/mazegame_s29_b2.c @@ -0,0 +1,132 @@ +#include "msxgl.h" + +// lVGM music track — victory screen. +// Occupies the start of banked segment 29 (bank-2 window 0x8000-0x9FFF, +// via SET_BANK_SEGMENT(2, 29)). MSX-Music (YM2413/OPLL), 60 Hz, looping. +// 1966 bytes; the rest of the 8KB segment is unused padding. +// Access: LVGM_Play((const u8*)0x8000, TRUE) with segment 29 banked in. +const u8 g_MusWin[1966] = { + 0x6C, 0x56, 0x47, 0x4D, 0x06, 0x02, 0xF1, 0x16, 0x20, 0xFE, 0x26, 0x05, 0x17, 0x50, 0x27, 0x05, + 0x18, 0xC0, 0x28, 0x01, 0x56, 0x00, 0x0E, 0x20, 0x10, 0x83, 0x20, 0x19, 0x30, 0x44, 0x11, 0x83, + 0x21, 0x17, 0x31, 0xC4, 0x12, 0x83, 0x22, 0x13, 0x32, 0xE4, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, + 0x21, 0x07, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0xCC, 0x20, 0x19, 0x21, 0x07, 0x11, + 0x22, 0x21, 0x19, 0x22, 0x03, 0x12, 0x22, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE4, 0x21, + 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0x22, 0x20, 0x1B, 0x21, 0x07, 0x11, 0x83, + 0x21, 0x17, 0x22, 0x05, 0x12, 0x83, 0x22, 0x13, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, + 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x0B, 0x10, 0x83, 0x20, 0x19, 0x21, 0x07, 0x11, 0x22, 0x21, + 0x19, 0x22, 0x03, 0x12, 0x22, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, + 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0x22, 0x20, 0x1B, 0x21, 0x07, 0x11, 0x83, 0x21, 0x17, + 0x22, 0x05, 0x12, 0x83, 0x22, 0x13, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE4, 0x21, 0x07, 0x11, 0xCC, + 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, 0x22, 0x03, 0x12, 0x22, 0x22, 0x15, 0x0E, + 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0xCC, 0x21, 0x17, 0xE6, 0x21, 0x07, 0x11, 0x83, + 0x21, 0x17, 0x22, 0x05, 0x12, 0x83, 0x22, 0x13, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x07, + 0x11, 0xCC, 0x21, 0x17, 0xE5, 0x20, 0x0B, 0x10, 0xCC, 0x20, 0x19, 0x21, 0x07, 0x11, 0x22, 0x21, + 0x19, 0x22, 0x03, 0x12, 0x22, 0x22, 0x15, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, + 0xCC, 0x21, 0x17, 0xE6, 0x20, 0x09, 0x10, 0x02, 0x20, 0x1B, 0x21, 0x07, 0x11, 0x22, 0x21, 0x19, + 0x22, 0x05, 0x22, 0x15, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0x59, 0x21, 0x19, + 0xE6, 0x21, 0x09, 0x11, 0xB3, 0x21, 0x19, 0x22, 0x05, 0x12, 0xB3, 0x22, 0x15, 0x0E, 0x21, 0xE0, + 0x0E, 0x20, 0xE5, 0x21, 0x09, 0x11, 0x59, 0x21, 0x19, 0xE5, 0x20, 0x0B, 0x10, 0xB3, 0x20, 0x19, + 0x21, 0x09, 0x11, 0x22, 0x21, 0x1B, 0x22, 0x05, 0x12, 0x22, 0x22, 0x17, 0x0E, 0x28, 0xE0, 0x0E, + 0x20, 0xE5, 0x21, 0x0B, 0x11, 0x59, 0x21, 0x1B, 0xE6, 0x20, 0x09, 0x10, 0x83, 0x20, 0x19, 0x21, + 0x0B, 0x11, 0xB3, 0x21, 0x1B, 0x22, 0x07, 0x12, 0xB3, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, + 0xE5, 0x21, 0x0B, 0x11, 0x59, 0x21, 0x1B, 0xE6, 0x20, 0x09, 0x10, 0xCC, 0x20, 0x19, 0x21, 0x0B, + 0x11, 0x22, 0x21, 0x1D, 0x22, 0x07, 0x12, 0x22, 0x22, 0x17, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE4, + 0x21, 0x0D, 0x11, 0x59, 0x21, 0x1D, 0xE6, 0x21, 0x0D, 0x11, 0xB3, 0x21, 0x1D, 0x22, 0x07, 0x12, + 0xB3, 0x22, 0x17, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0D, 0x11, 0x59, 0x21, 0x1D, 0xE6, + 0x21, 0x0D, 0x11, 0x22, 0x21, 0x1F, 0x22, 0x07, 0x12, 0x22, 0x22, 0x19, 0x0E, 0x28, 0xE0, 0x0E, + 0x20, 0xE5, 0x21, 0x0F, 0x11, 0x59, 0x21, 0x1F, 0xE6, 0x21, 0x0F, 0x11, 0xB3, 0x21, 0x1F, 0x22, + 0x09, 0x12, 0xB3, 0x22, 0x19, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE4, 0x21, 0x0F, 0x11, 0x59, 0x21, + 0x1F, 0xE6, 0x20, 0x09, 0x21, 0x0F, 0x11, 0x22, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x83, 0x22, 0x17, + 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x11, 0x59, 0x21, 0x1F, 0xE6, 0x10, 0x22, 0x20, + 0x1B, 0x21, 0x0F, 0x11, 0xB3, 0x21, 0x1F, 0x22, 0x07, 0x12, 0x22, 0x22, 0x19, 0x0E, 0x21, 0xE0, + 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x11, 0x59, 0x21, 0x1F, 0xE5, 0x20, 0x0B, 0x10, 0x59, 0x20, 0x1B, + 0x21, 0x0F, 0x11, 0xFF, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x83, 0x22, 0x17, 0x0E, 0x28, 0xE0, 0x0E, + 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x20, 0x0B, 0x10, 0x22, 0x20, 0x1B, 0x21, 0x0F, 0x21, + 0x1F, 0x22, 0x07, 0x12, 0x22, 0x22, 0x19, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, + 0x1F, 0xE6, 0x20, 0x0B, 0x10, 0x02, 0x20, 0x1B, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x83, + 0x22, 0x17, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE5, 0x21, 0x0F, 0x21, + 0x1F, 0x22, 0x07, 0x12, 0x22, 0x22, 0x19, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, + 0x1F, 0xE6, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x83, 0x22, 0x17, 0x0E, 0x28, 0xE0, 0x0E, + 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x20, 0x0B, 0x10, 0xCC, 0x20, 0x19, 0x21, 0x0F, 0x21, + 0x1F, 0x22, 0x07, 0x12, 0x22, 0x22, 0x19, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE4, 0x21, 0x0F, 0x21, + 0x1F, 0xE6, 0x20, 0x09, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x83, + 0x22, 0x17, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x21, 0x0F, 0x21, + 0x1F, 0x22, 0x07, 0x12, 0x22, 0x22, 0x19, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, + 0x1F, 0xE6, 0x20, 0x09, 0x10, 0x83, 0x20, 0x19, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x83, + 0x22, 0x17, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE4, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x20, 0x09, 0x10, + 0xB3, 0x20, 0x19, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x07, 0x12, 0x22, 0x22, 0x19, 0x0E, 0x21, 0xE0, + 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x20, 0x09, 0x10, 0xCC, 0x20, 0x19, 0x21, 0x0F, + 0x21, 0x1F, 0x22, 0x09, 0x12, 0x83, 0x22, 0x17, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, + 0x21, 0x1F, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x07, 0x12, 0x22, 0x22, 0x19, 0x0E, 0x21, 0xE0, + 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x83, + 0x22, 0x17, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x21, 0x0F, 0x21, + 0x1F, 0x22, 0x07, 0x12, 0x22, 0x22, 0x19, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, + 0x1F, 0xE5, 0x20, 0x09, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x02, 0x22, 0x19, 0x0E, 0x30, + 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x09, 0x12, + 0x83, 0x22, 0x19, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x10, 0x22, + 0x20, 0x1B, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x02, 0x22, 0x1B, 0x0E, 0x28, 0xE0, 0x0E, + 0x20, 0xE4, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x0B, 0x12, 0x83, 0x22, + 0x1B, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x21, 0x0F, 0x21, 0x1F, + 0x22, 0x0B, 0x12, 0x59, 0x22, 0x19, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, + 0xE6, 0x20, 0x0B, 0x20, 0x1B, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x02, 0x22, 0x1B, 0x0E, + 0x21, 0xE0, 0x0E, 0x20, 0xE4, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x20, 0x0B, 0x10, 0x02, 0x20, 0x1B, + 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x0B, 0x12, 0x59, 0x22, 0x19, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, + 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x20, 0x0B, 0x10, 0xCC, 0x20, 0x19, 0x21, 0x0F, 0x21, 0x1F, 0x22, + 0x09, 0x12, 0x02, 0x22, 0x1B, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE5, + 0x20, 0x09, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x0B, 0x12, 0x59, 0x22, 0x19, + 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x20, 0x09, 0x10, 0x83, 0x20, + 0x19, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x02, 0x22, 0x1B, 0x0E, 0x21, 0xE0, 0x0E, 0x20, + 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x20, 0x09, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x0F, 0x21, 0x1F, + 0x22, 0x0B, 0x12, 0x59, 0x22, 0x19, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, + 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x02, 0x22, 0x1B, 0x0E, 0x21, 0xE0, 0x0E, 0x20, + 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x20, 0x09, 0x10, 0xCC, 0x20, 0x19, 0x21, 0x0F, 0x21, 0x1F, + 0x22, 0x0B, 0x12, 0x83, 0x22, 0x19, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, + 0xE6, 0x20, 0x09, 0x10, 0x02, 0x20, 0x1B, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x22, 0x22, + 0x1B, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE4, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x21, 0x0F, 0x21, 0x1F, + 0x22, 0x0B, 0x12, 0x83, 0x22, 0x19, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, + 0xE6, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x22, 0x22, 0x1B, 0x0E, 0x21, 0xE0, 0x0E, 0x20, + 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x20, 0x0B, 0x10, 0xCC, 0x20, 0x19, 0x21, 0x0F, 0x21, 0x1F, + 0x22, 0x0B, 0x12, 0x83, 0x22, 0x19, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE4, 0x21, 0x0F, 0x21, 0x1F, + 0xE6, 0x20, 0x09, 0x10, 0xB3, 0x20, 0x19, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x22, 0x22, + 0x1B, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x21, 0x0F, 0x21, 0x1F, + 0x22, 0x0B, 0x12, 0x83, 0x22, 0x19, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, + 0xE5, 0x20, 0x09, 0x10, 0x83, 0x20, 0x19, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x22, 0x22, + 0x1B, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x20, 0x09, 0x10, 0x59, + 0x20, 0x19, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x0B, 0x12, 0x83, 0x22, 0x19, 0x0E, 0x30, 0xE0, 0x0E, + 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x20, 0x09, 0x10, 0x83, 0x20, 0x19, 0x21, 0x0F, 0x21, + 0x1F, 0x22, 0x09, 0x12, 0x22, 0x22, 0x1B, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, + 0x1F, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x0B, 0x12, 0x83, 0x22, 0x19, 0x0E, 0x28, 0xE0, 0x0E, + 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x22, 0x22, + 0x1B, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x21, 0x0F, 0x21, 0x1F, + 0x22, 0x0B, 0x12, 0x83, 0x22, 0x19, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE4, 0x21, 0x0F, 0x21, 0x1F, + 0xE6, 0x20, 0x09, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x22, 0x22, 0x1B, 0x0E, 0x21, 0xE0, + 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x0B, 0x12, 0x83, + 0x22, 0x19, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x20, 0x19, 0x21, + 0x0F, 0x21, 0x1F, 0x22, 0x09, 0x12, 0x22, 0x22, 0x1B, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE4, 0x21, + 0x0F, 0x21, 0x1F, 0xE6, 0x20, 0x09, 0x10, 0xCC, 0x20, 0x19, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x0B, + 0x22, 0x1B, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x20, 0x09, 0x10, + 0x22, 0x20, 0x1B, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x0B, 0x12, 0xB3, 0x22, 0x1B, 0x0E, 0x21, 0xE0, + 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE5, 0x20, 0x0B, 0x10, 0x59, 0x20, 0x1B, 0x21, 0x0F, + 0x21, 0x1F, 0x22, 0x0B, 0x12, 0x22, 0x22, 0x1D, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, + 0x21, 0x1F, 0xE6, 0x20, 0x0B, 0x10, 0x83, 0x20, 0x1B, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x0D, 0x12, + 0xB3, 0x22, 0x1D, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x21, 0x0F, + 0x21, 0x1F, 0x22, 0x0D, 0x12, 0x22, 0x22, 0x1D, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, + 0x21, 0x1F, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x0D, 0x12, 0xB3, 0x22, 0x1D, 0x0E, 0x21, 0xE0, + 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x20, 0x0B, 0x10, 0x22, 0x20, 0x1B, 0x21, 0x0F, + 0x21, 0x1F, 0x22, 0x0D, 0x12, 0x22, 0x22, 0x1F, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, + 0x21, 0x1F, 0xE6, 0x20, 0x0B, 0x10, 0x02, 0x20, 0x1B, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x0F, 0x12, + 0xB3, 0x22, 0x1F, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE4, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x21, 0x0F, + 0x21, 0x1F, 0x22, 0x0F, 0x12, 0x02, 0x22, 0x1F, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, + 0x21, 0x1F, 0xE6, 0x20, 0x0B, 0x10, 0xCC, 0x20, 0x19, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x0F, 0x12, + 0x83, 0x22, 0x1F, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x20, 0x09, + 0x10, 0xB3, 0x20, 0x19, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x0F, 0x12, 0xFF, 0x22, 0x1F, 0x0E, 0x28, + 0xE0, 0x0E, 0x20, 0xE4, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x20, 0x09, 0x10, 0x83, 0x20, 0x19, 0x21, + 0x0F, 0x21, 0x1F, 0x22, 0x0F, 0x22, 0x1F, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, + 0x1F, 0xE6, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x0F, 0x12, 0x83, 0x22, 0x1F, 0x0E, 0x30, 0xE0, 0x0E, + 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x0F, 0x12, 0xFF, 0x22, + 0x1F, 0x0E, 0x21, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0x21, 0x0F, 0x21, 0x1F, + 0x22, 0x0F, 0x12, 0x83, 0x22, 0x1F, 0x0E, 0x28, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, + 0xE6, 0x20, 0x09, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x0F, 0x12, 0xFF, 0x22, 0x1F, 0x0E, 0x21, 0xE0, + 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0x22, 0x0F, 0x12, 0x83, + 0x22, 0x1F, 0x0E, 0x30, 0xE0, 0x0E, 0x20, 0xE5, 0x21, 0x0F, 0x21, 0x1F, 0xE6, 0xFF, +}; diff --git a/projects/mazegame/msxgl_config.h b/projects/mazegame/msxgl_config.h index c0b100a..4aa5e72 100644 --- a/projects/mazegame/msxgl_config.h +++ b/projects/mazegame/msxgl_config.h @@ -48,3 +48,23 @@ #define INPUT_KB_UPDATE FALSE #define INPUT_KB_UPDATE_MIN 0 #define INPUT_KB_UPDATE_MAX 8 + +// Music: screen tracks are lVGM (MSX-Music / YM2413 / OPLL). The PSG parser is +// kept so the player links cleanly, but the tracks carry only FM data. +// PSG: direct register access (no PSG_Apply needed) — no PSG data is ever played. +#define PSG_CHIP PSG_INTERNAL +#define PSG_ACCESS PSG_DIRECT +#define PSG_USE_NOTES FALSE +#define PSG_USE_EXTRA FALSE +#define PSG_USE_RESUME FALSE +// MSX-Music (the chip the music actually uses). +#define MSXMUSIC_USE_RESUME FALSE +// lVGM replayer: enable only the chips these tracks target (PSG parser + MSX-Music). +#define LVGM_USE_PSG TRUE // parser kept for clean linking; tracks carry no PSG data +#define LVGM_USE_MSXMUSIC TRUE // MSX-Music (OPLL) — the music format used +#define LVGM_USE_MSXAUDIO FALSE +#define LVGM_USE_SCC FALSE +#define LVGM_USE_SCCI FALSE +#define LVGM_USE_PSG2 FALSE +#define LVGM_USE_OPL4 FALSE +#define LVGM_USE_NOTIFY FALSE diff --git a/projects/mazegame/music/the maze.lvgm b/projects/mazegame/music/the maze.lvgm new file mode 100644 index 0000000000000000000000000000000000000000..fc96122e8417087917681271c5ade840089fefe0 GIT binary patch literal 3290 zcma)9J!@1!6xD@wSpv&VKw}8v+XpczqrXA45(G(Li(q5vPY_aU5y)Q=Y_)P%Uqi19UEs*NtcF-4uc+CQHQ=f(>1}3RVY|!cfL>!wv2OBoB{Lt! zhA6u=3Ve`IMVNSvCeX;o3bGj@#ZS*`+cRxf5Mk)IJZC}$Wr>1Ob*aQMFSe}`By`AX zH>cuAJ=ji|oN?VxG8j0h;+6RzBL!cpfDk1& zqeh)rN_daL6rofnCh<1rg^jDq2I*k*jo)rzH8{Fd`|Xy#*rr1GDYZ%S09&Q1p}W>F zmW`EZlTgg$LN1(4ot!)QqNEMKv4Zu>MlM?BWIC$!bUX*?;j5mGwp`0UIVUce#kbNG z#$txbs26hOWai|XldsCw@Ea>wzixoiCTxfH)5+Y)4<|PvG<;(P>%SWL*$!<^7kRqj z-+743PMfXhVj^RW6)yVZwO#BQ(1rS5#;7Xw1eaE1niQI|Gba-#CkOy#<>W&nCw>L% zAE|s^;Bv;Wcsw4|W^uyf4gcCMkco*=c@Q@3VBpJ)!9@)$r)-s#Z_RdK+WCo21IzO4 zV=F|It9EEJy2z@C=R#=LO{|%FX06pt+xM()%=fHr5OMobRNwnfdQR?qJNt(C)5smx zs(mNe8!$0>T}z+dE5u1W9LkQ6hQN3N__FB0mf6Q)obb#M5(S1;HL?2*7~wXZ$m zVzFzU=630{iXAl=^=Ch3dE!H5j86T(JY~~cpFrAK7jdc}K2MfSsMsS+;$Vj^^5R?M zWo=1JJ;Kh?xvTeKxM3D@;G}l)+{rU=A?k+TSi$-s6R2ZcpAd4uumHiJ?m^EbNQ=ntg``9ua{iN6Es0NbOG3mV|9g|*F zq<=@4=Ts$4`rxEpGI0)IopkCT=q^VUuA7)@iVYwA^^lA~60EZe^r~fGcJc8?+bcbO z^zqCtKmL^A=q5`f>vJ2~WuMpn@k^t@OQNz8v5}op>Ck7>_+;+Kr%N&DjVlx1cPF3s zVLpT+&O9`(+`}!r`NDq+^v$Pn*%XC6KMm4!M0chsWNE%)y6ke*HV(4@X0kDQ_YZpZ Bx{?3@ literal 0 HcmV?d00001 diff --git a/projects/mazegame/music/tips screen.lvgm b/projects/mazegame/music/tips screen.lvgm new file mode 100644 index 0000000000000000000000000000000000000000..f1f810ade0ea549b71cc6c9b6b1b4220053f3d16 GIT binary patch literal 2792 zcma)8v2GJV5CvN%I$5zMMqsSS%H2sJDFdHCLxn^Y$^Sq@A1Q^4Ncj~cnkynvQAE(V ziNpu&8DVOAM0jszZ+GuvM`_@+yKmmSnR(-UIDPx>N$=0|{NKyLr@ zEc0o=Rk%)ZxGwX3Toc__^n>{Fq4WZ71MBcU*56>QG^w$Q8AFV*X3T>sA=ZnrY&F3( zaHtQiBhIuME`&97tWiK)DTp47AI!RyFXXv_$*N_D!){@SPxhh*7)ZyrMaG`srJXcqn@z|=94ce5H*1ye#3crQu~ zX2sk-re0v%f*7ZaO|T~FaDyqnvBI&5XQMpL)ZwPm_Ep+GxuE_yr8eNmDQt;wtFrge zc;-rV>VY`U#Snvm{n-k}B{BpfarW1PTr#6r7uVog{$(CRw05R^6DmtxqKm;F&?Ca$a}U|PSKZS+)iblUWA8=FOi%Ues(MwgdY?Z2?e`x>fB#(k`^$Lo z;Ani~&*N*4znc}ZEtV&z^L4qn^ZH<2{rKx&vlBNf&dbSsTQ2x#R4%LU4@T8bvr-qP z%>rzyF>PkYEsJ6*qvGbEU2$F3#S+UKwcfzG!P@~3)*D@}6t!xhhGm@BSU1>Q#=@YT zKNNhznYRITFJmVoCl|%i$v@5?8jpBc+;m)=)cQ#|ov-vjD?JbmW(7=Y^R2^Yh?W}0 zU7Js^mcWnk4L1neU;PP+DezOmnvgTaWPta)mFB&?ak6#t%E?Q*g%9-sudwj8#&1k? z+LpQK##C+dn1TmY4^8%R+ezi*(8;ZciwC^I!cmQ1So&Nt)#C$Fgzn_HbQh_}ab=|5 z&~p2!TmoPymjQYK>JMac03WAkycyADHNhDcT2^_y6&k^}@n&gE=U_T4chT?XPBu=? zoIE3g)e;YQg@qS2e>bo~G_+cYCubzzvzkWXI|dsYt5Mj^FPD=D2VbAlFl>5NnBc1K zIumrAMQ9INfaf^mM&q^#apRj&xjfgVGSwy8cp^S=vUc*w$wPXF0@eq-!onXlf7jWD z@`(ODtZ5X!qbU&72(P%CUoI2e307$sHoX)xbhzA+z2>P2X@E@WVH#nn)XBWGg{oe5 zh{J;EBHHE`FfX#^7YWNUpJ==H<<`bkvB(>QY_ql^uNb74HM>e6cC7KV8<(RDA>oU1fbIy1sk0)sVe6 zr7zY?N^(#O-@Ov1cl48(+P&I%1KmrHn|2G`%c|Z$|GF9;<=jn~Cyx{}@gwr6&D#MU zscG8H(=4!|5k$F13I=*M>7PK)()o8a7zjW+HpQ$K35#0Av8!UC$21_as z!~h?X%(rTeg@`jYIErm1?dF$TaF|za(@@98c7nbwW^ow5Nfw%1vy8Ed|^9I28eKxD0NnCeA^r(UyBu2Fqi zkf~2a;k8{4mR@)f1*3sUD&u{yBfQyd@Qa2uMBeU{%c0 zJ&2|yK_Ff(b2;%8v6pyV1+>IdON*(u6{CLr6u4yK(-EFG$G+LCKRjM|+OXYuPZ2vQ z*~R}Wv<2^jlbw_IPTnyk+KKUiS6KL1^LLkb|M%p z>GEeZ%%9l*{e9IkC{#)(o9ULj$yMUIpUuwXfdU=e%I1qiRY z`fq2!E^*a+_3Bl1{doTV_;&N>gZlev+dh5Xe*Ag=`uSC*_9xXnd^?6(!dLexS`z&NJ>5oA?Tf2@ z6L+iLq~xmFq~6A=rDnEhg*z38qwZ#CI@9Oo?0O^=0z`U769N|W2piM79wov(IYd25 zpnG!%bZZ@&@WqA6Kne7KFrm4}9m2z`cfe5~;zGda(IPrmuLfeAbq&O51Q4B@1qYNs zh%f?k;3^Zo5N1z9VjM|eoC{KaM;pEdEYGk85a){i-&%B}@ZQMzZ`AKHR zPxcT=RCZy0VSQiWhX+}{)5C*^`BY^=6{`f47m)e(UtO%}nP?u?n+*)-O~ZfIPNl*W z!hl?MZ|BX*ErmpO@3tyX$mW>wDj9~caoMhUx%YEo%&PmM@hIyH)Ccz$l~SWK6g>ud zE7W&Ui+7@^;?E1`lO@q7P4s2enth;6Miy;-Z@c~ z`3N0D*NZN0px6)^ZBoT=N8UxEhi?Z&z`9i}Np3RdQg^Vx@4ke=nfLzHOWc`c_rkTX z6Ew}}+dwdaGd18OKYc84(zu?ibdW+n%R^2eOtZ$u6L(O*A5{2D7fMt;)c+pA$S t=exa#ds;VFS0$L@Cst<|>nsxmr?>~EC@vjmCNto96}g^(