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 f856439..6d60f1f 100644 Binary files a/projects/mazegame/emul/rom/mazegame.rom and b/projects/mazegame/emul/rom/mazegame.rom differ diff --git a/projects/mazegame/mazegame.c b/projects/mazegame/mazegame.c index 191f987..b6984d4 100644 --- a/projects/mazegame/mazegame.c +++ b/projects/mazegame/mazegame.c @@ -7,6 +7,9 @@ //----------------------------------------------------------------------------- #include "msxgl.h" #include "rom_mapper.h" +#include "psg.h" +#include "msx-music.h" +#include "vgm/lvgm_player.h" #include //============================================================================= @@ -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 0000000..fc96122 Binary files /dev/null and b/projects/mazegame/music/the maze.lvgm differ diff --git a/projects/mazegame/music/tips screen.lvgm b/projects/mazegame/music/tips screen.lvgm new file mode 100644 index 0000000..f1f810a Binary files /dev/null and b/projects/mazegame/music/tips screen.lvgm differ diff --git a/projects/mazegame/music/title screen.lvgm b/projects/mazegame/music/title screen.lvgm new file mode 100644 index 0000000..b1d27d7 Binary files /dev/null and b/projects/mazegame/music/title screen.lvgm differ diff --git a/projects/mazegame/music/victory screen.lvgm b/projects/mazegame/music/victory screen.lvgm new file mode 100644 index 0000000..c4de9ee Binary files /dev/null and b/projects/mazegame/music/victory screen.lvgm differ diff --git a/projects/mazegame/project_config.js b/projects/mazegame/project_config.js index afba433..9206d7e 100644 --- a/projects/mazegame/project_config.js +++ b/projects/mazegame/project_config.js @@ -2,7 +2,7 @@ ProjName = "mazegame"; ProjModules = [ ProjName ]; -LibModules = [ "system", "bios", "vdp", "input" ]; +LibModules = [ "system", "bios", "vdp", "input", "psg", "msx-music", "vgm/lvgm_player" ]; Machine = "2P"; Target = "ROM_KONAMI_SCC"; @@ -15,4 +15,8 @@ AppSignature = true; AppCompany = "MZ"; AppID = "01"; +// The screen music is MSX-Music (YM2413/OPLL). Give openMSX the FM-PAC extension +// so `./build.sh run` has an FM chip (real MSX2+ machines have MSX-Music built in). +EmulMSXMusic = true; + Verbose = true;