{"id":22108616,"url":"https://github.com/superdisk/hugedriver","last_synced_at":"2025-04-09T13:04:21.623Z","repository":{"id":38041088,"uuid":"211222505","full_name":"SuperDisk/hUGEDriver","owner":"SuperDisk","description":"An easy-to-use, fast, tracker-based, public domain sound driver for Game Boy homebrew","archived":false,"fork":false,"pushed_at":"2025-01-01T09:59:14.000Z","size":561,"stargazers_count":66,"open_issues_count":12,"forks_count":11,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-02T12:11:13.279Z","etag":null,"topics":["driver","gameboy","homebrew","music","sound"],"latest_commit_sha":null,"homepage":"https://nickfa.ro/index.php/HUGETracker","language":"Assembly","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SuperDisk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-09-27T02:46:08.000Z","updated_at":"2025-03-25T06:52:22.000Z","dependencies_parsed_at":"2025-02-24T02:10:39.378Z","dependency_job_id":"58cb3aaf-659b-49fa-9ce4-7b29caa6ed57","html_url":"https://github.com/SuperDisk/hUGEDriver","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperDisk%2FhUGEDriver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperDisk%2FhUGEDriver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperDisk%2FhUGEDriver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperDisk%2FhUGEDriver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SuperDisk","download_url":"https://codeload.github.com/SuperDisk/hUGEDriver/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248045230,"owners_count":21038553,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["driver","gameboy","homebrew","music","sound"],"created_at":"2024-12-01T09:16:46.851Z","updated_at":"2025-04-09T13:04:21.602Z","avatar_url":"https://github.com/SuperDisk.png","language":"Assembly","funding_links":[],"categories":[],"sub_categories":[],"readme":"![hUGEDriver](https://github.com/SuperDisk/hUGEDriver/assets/1688837/a6079751-20b5-4db3-bb48-0e748234f8ca)\n===\n\nThis is the repository for hUGEDriver, the music driver for the Game Boy which plays music created in [hUGETracker](https://github.com/SuperDisk/hUGETracker).\n\nIf you want help using the tracker, driver, or just want to chat, join the [hUGETracker Discord server!](https://discord.gg/abbHjEj5WH)\n\n## Quick start (RGBDS)\n\n1. Export your song in \"RGBDS .asm\" format in hUGETracker.\n2. Choose a *song descriptor* name. This is what you will refer to the song as in your code. It must be a valid RGBDS symbol.\n3. Place the exported `.asm` file in your RGBDS project.\n4. Load `hl` with your song descriptor name, and `call hUGE_init`\n5. In your game's main loop or in a VBlank interrupt, `call hUGE_dosound`\n6. When assembling your game, be sure to specify your music file and hUGEDriver.asm in your call to `rgbasm`/`rgblink`!\n\nBe sure to enable sound playback before you start!\n\n```asm\nld a, $80\nld [rAUDENA], a\nld a, $FF\nld [rAUDTERM], a\nld a, $77\nld [rAUDVOL], a\n```\n\nSee the `rgbds_example` directory for a working example!\n\n## Quick start (GBDK)\n\n1. Export your song in \"GBDK .c\" format in hUGETracker.\n2. Choose a *song descriptor* name. This is what you will refer to the song as in your code. It must be a valid C variable name.\n3. Place the exported .C file in your GBDK project.\n4. `#include \"hUGEDriver.h\"` in your game's main file\n5. Define `extern const hUGESong_t your_song_descriptor_here` in your game's main file\n6. Call `hUGE_init(\u0026your_song_descriptor_here)` in your game's main file\n7. In your game's main loop or in a VBlank interrupt, call `hUGE_dosound`\n8. When compiling your game, be sure to specify your music file and `hUGEDriver.o` in your call to `lcc`!\n\nBe sure to enable sound playback before you start!\n\n```c\nNR52_REG = 0x80;\nNR51_REG = 0xFF;\nNR50_REG = 0x77;\n```\n\nSee `gbdk_example/src/gbdk_player_example.c` for a working example!\n\n## Usage\n\nThis driver is suitable for use in homebrew games. hUGETracker exports data representing the various components of a song, as well as a *song descriptor* which is a small block of pointers that tell the driver how to initialize and play a song.\n\nhUGETracker can export the data and song descriptor as a `.asm` or `.c` for use in RGBDS or GBDK based projects, respectively. Playing a song is as simple as calling hUGE_init with a pointer to your song descriptor, and then calling `hUGE_dosound` at a regular interval (usually on VBlank, the timer interrupt, or simply in your game's main loop)\n\nIn assembly:\n```asm\nld hl, SONG_DESCRIPTOR\ncall hUGE_init\n\n;; Repeatedly\ncall hUGE_dosound\n```\n\nIn C:\n```c\nextern const hUGESong_t song;\n\n// In your initializtion code\n__critical {\n    hUGE_init(\u0026song);\n    add_VBL(hUGE_dosound);\n}\n```\n\nCheck out `player.asm` for a full fledged example of how to use the driver in an RGBDS project, and `gbdk_example/gbdk_player_example.c` for usage with GBDK C likewise.\n\n### `hUGE_mute_channel`\n\n**Caution**:\nAs an optimization, hUGEDriver avoids loading the same wave present in wave RAM; when \"muting\" CH3 and loading your own wave, make sure to set `hUGE_current_wave` to `hUGE_NO_WAVE` (a dummy value) to force a refresh.\n\n## License\n\nhUGETracker and hUGEDriver are dedicated to the public domain.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuperdisk%2Fhugedriver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsuperdisk%2Fhugedriver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuperdisk%2Fhugedriver/lists"}