Compare commits
11 commits
master
...
jason/deve
Author | SHA1 | Date | |
---|---|---|---|
e0e1b9f286 | |||
f9c800bc91 | |||
0c3ed17dd4 | |||
f68595821f | |||
f52cc8a434 | |||
6b8b837d2f | |||
5dd95de26d | |||
1cd0d1c140 | |||
1eebc3d17f | |||
15edcc6cc1 | |||
43b3b14236 |
23 changed files with 30237 additions and 0 deletions
456
audioplayer/player.c
Normal file
456
audioplayer/player.c
Normal file
|
@ -0,0 +1,456 @@
|
||||||
|
/*
|
||||||
|
* JoeyLib Based Example Audio Player
|
||||||
|
* Copyright (C) 2020 Scott Duensing <scott@kangaroopunch.com>
|
||||||
|
*
|
||||||
|
* This software is provided 'as-is', without any express or implied
|
||||||
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
|
* arising from the use of this software.
|
||||||
|
*
|
||||||
|
* Permission is granted to anyone to use this software for any purpose,
|
||||||
|
* including commercial applications, and to alter it and redistribute it
|
||||||
|
* freely, subject to the following restrictions:
|
||||||
|
*
|
||||||
|
* 1. The origin of this software must not be misrepresented; you must not
|
||||||
|
* claim that you wrote the original software. If you use this software
|
||||||
|
* in a product, an acknowledgment in the product documentation would be
|
||||||
|
* appreciated but is not required.
|
||||||
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
* misrepresented as being the original software.
|
||||||
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define JOEY_MAIN
|
||||||
|
#include "joey.h"
|
||||||
|
#ifdef JOEY_IIGS
|
||||||
|
segment "audioapp";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef DMALLOC
|
||||||
|
#define DMALLOC_FUNC_CHECK
|
||||||
|
#include "dmalloc.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
void help(jlSurfaceT source, jlStnT *stencil, jint16 sx, jint16 sy, jint16 tx, jint16 ty) {
|
||||||
|
|
||||||
|
int mo; // Mask offset
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
byte b; // Mask bit index
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
mo = ((sy & 0x1f) * 8 * 40) + (sx & 0x3f); // This is in tiles
|
||||||
|
|
||||||
|
printf("Offset: %04x sx: %02x sy: %02x\n", mo, sx, sy);
|
||||||
|
|
||||||
|
for (y=0; y<8; y++) {
|
||||||
|
b = 7;
|
||||||
|
printf("Byte: %02x ", stencil->pixels[mo]);
|
||||||
|
for (x=0; x<4; x++) {
|
||||||
|
if ((stencil->pixels[mo] & (1 << b--)) != 0) {
|
||||||
|
printf("X");
|
||||||
|
} else {
|
||||||
|
printf(".");
|
||||||
|
}
|
||||||
|
if ((stencil->pixels[mo] & (1 << b--)) != 0) {
|
||||||
|
printf("X");
|
||||||
|
} else {
|
||||||
|
printf(".");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mo += 40;
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
jlDrawBlit8x8a(source, stencil, sx, sy, tx, ty);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Font hacking!
|
||||||
|
__attribute__((__format__ (__printf__, 5, 0)))
|
||||||
|
void fontPrint(jlImgT *font, jlStnT *stencil, jint16 cx, jint16 cy, const char *what, ...) {
|
||||||
|
jint16 x;
|
||||||
|
jint16 y;
|
||||||
|
jint16 tx;
|
||||||
|
jint16 ty;
|
||||||
|
jint16 counter;
|
||||||
|
char msg[40]; // Very short messages (screen width). Be careful!
|
||||||
|
va_list va;
|
||||||
|
|
||||||
|
va_start(va, what);
|
||||||
|
vsprintf(msg, what, va);
|
||||||
|
va_end(va);
|
||||||
|
|
||||||
|
tx = cx * 8;
|
||||||
|
ty = cy * 8;
|
||||||
|
|
||||||
|
for (counter=0; counter<(int)strlen(msg); counter++) {
|
||||||
|
x = (msg[counter] % 40) * 8;
|
||||||
|
y = (msg[counter] / 40) * 8;
|
||||||
|
if (stencil) {
|
||||||
|
#ifdef JOEY_PC
|
||||||
|
help(jlImgSurfaceGet(font), stencil, x, y, tx, ty);
|
||||||
|
#else
|
||||||
|
jlDrawBlit8x8a(jlImgSurfaceGet(font), stencil, x, y, tx, ty);
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
jlDrawBlit8x8(jlImgSurfaceGet(font), x, y, tx, ty);
|
||||||
|
}
|
||||||
|
tx += 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void blitTest(void) {
|
||||||
|
jlImgT *font = NULL;
|
||||||
|
jlStnT *stencil = NULL;
|
||||||
|
jint16 y;
|
||||||
|
jint16 x;
|
||||||
|
|
||||||
|
if (!jlImgLoad(font, "font")) jlUtilDie("Unable to load font.img!");
|
||||||
|
if (!jlStnLoad(stencil, "font")) jlUtilDie("Unable to load font.stn!");
|
||||||
|
|
||||||
|
jlImgDisplay(font);
|
||||||
|
jlDisplayPresent();
|
||||||
|
jlKeyWaitForAny();
|
||||||
|
|
||||||
|
jlDrawColorSet(1);
|
||||||
|
jlDrawClear();
|
||||||
|
jlPaletteSet(15, 15, 15, 15);
|
||||||
|
|
||||||
|
fontPrint(font, NULL, 1, 2, "%s", "Blitting without stencil buffer.");
|
||||||
|
fontPrint(font, stencil, 1, 4, "%s", "Blitting with stencil buffer.");
|
||||||
|
jlDisplayPresent();
|
||||||
|
jlKeyWaitForAny();
|
||||||
|
|
||||||
|
y = 91;
|
||||||
|
while (!jlKeyPressed()) {
|
||||||
|
for (x=0; x<319-8; x++) {
|
||||||
|
jlDrawBlit8x8(jlImgSurfaceGet(font), 8, 0, x, y);
|
||||||
|
fontPrint(font, NULL, 1, 6, "Drawing at %d x %d ", x, y);
|
||||||
|
jlDisplayPresent();
|
||||||
|
jlDrawBlit8x8(jlImgSurfaceGet(font), 0, 0, x, y);
|
||||||
|
jlUtilSleep(1);
|
||||||
|
if (jlKeyPressed()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
jlKeyRead();
|
||||||
|
|
||||||
|
jlStnFree(stencil);
|
||||||
|
jlImgFree(font);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void exerciseAPI(void) {
|
||||||
|
|
||||||
|
jlImgT *screen = NULL;
|
||||||
|
|
||||||
|
jlDrawColorSet(0);
|
||||||
|
jlDrawClear();
|
||||||
|
jlDrawColorSet(15);
|
||||||
|
|
||||||
|
jlDrawPixelSet(10, 10);
|
||||||
|
assert(jlDrawPixelGet(10, 10) == 15);
|
||||||
|
|
||||||
|
// Should be able to grab the screen twice without allocation issues.
|
||||||
|
jlImgCreate(screen);
|
||||||
|
jlImgCreate(screen);
|
||||||
|
jlImgFree(screen);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void grid(void) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
jlDrawColorSet(0);
|
||||||
|
jlDrawClear();
|
||||||
|
jlDrawColorSet(15);
|
||||||
|
|
||||||
|
for (i=0; i<320; i+=8) {
|
||||||
|
jlDrawLine(i, 0, i, 199);
|
||||||
|
}
|
||||||
|
for (i=0; i<200; i+=8) {
|
||||||
|
jlDrawLine(0, i, 319, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!jlKeyPressed()) {
|
||||||
|
jlDisplayPresent();
|
||||||
|
}
|
||||||
|
jlKeyRead();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void lineTest(void) {
|
||||||
|
|
||||||
|
jlImgT *kanga = NULL;
|
||||||
|
jlImgT *font = NULL;
|
||||||
|
jint16 y;
|
||||||
|
jint16 phase = 0;
|
||||||
|
jint16 x2 = 0;
|
||||||
|
jint16 y2 = 0;
|
||||||
|
jint16 ox = 0;
|
||||||
|
jint16 oy = 0;
|
||||||
|
jint16 op = 0;
|
||||||
|
jint16 color = 15;
|
||||||
|
jint16 nextColor = 1;
|
||||||
|
char what[32];
|
||||||
|
|
||||||
|
if (!jlImgLoad(kanga, "kanga")) jlUtilDie("Unable to load kanga.img!");
|
||||||
|
if (!jlImgLoad(font, "font")) jlUtilDie("Unable to load font.img!");
|
||||||
|
|
||||||
|
jlImgDisplay(kanga);
|
||||||
|
jlDrawColorSet(1);
|
||||||
|
jlDrawBox(0, 0, 319, 199);
|
||||||
|
|
||||||
|
//jlSoundMusicPlay("music");
|
||||||
|
|
||||||
|
jlPaletteSet(15, 15, 15, 15);
|
||||||
|
strcpy(what, "Left to Right");
|
||||||
|
|
||||||
|
while (!jlKeyPressed()) {
|
||||||
|
y = 17;
|
||||||
|
fontPrint(font, NULL, 1, y++, "Drawing %s ", what);
|
||||||
|
|
||||||
|
jlDrawColorSet((byte)color);
|
||||||
|
if (phase < 2) {
|
||||||
|
jlDrawLine(x2, y2, 319-x2, 199-y2);
|
||||||
|
} else {
|
||||||
|
jlDrawLine(319-x2, 199-y2, x2, y2);
|
||||||
|
}
|
||||||
|
ox = x2;
|
||||||
|
oy = y2;
|
||||||
|
op = phase;
|
||||||
|
|
||||||
|
switch (phase) {
|
||||||
|
// Left, Y incrementing
|
||||||
|
case 0:
|
||||||
|
y2++;
|
||||||
|
if (y2 == 199) {
|
||||||
|
strcpy(what, "Bottom to Top");
|
||||||
|
phase = 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Bottom, X incrementing
|
||||||
|
case 1:
|
||||||
|
x2++;
|
||||||
|
if (x2 == 319) {
|
||||||
|
strcpy(what, "Right to Left");
|
||||||
|
phase = 2;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Right, Y decrementing
|
||||||
|
case 2:
|
||||||
|
y2--;
|
||||||
|
if (y2 == 0) {
|
||||||
|
strcpy(what, "Top to Bottom");
|
||||||
|
phase = 3;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Top, X decrementing
|
||||||
|
case 3:
|
||||||
|
x2--;
|
||||||
|
if (x2 == 0) {
|
||||||
|
strcpy(what, "Left to Right");
|
||||||
|
phase = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
jlDisplayPresent();
|
||||||
|
|
||||||
|
jlDrawColorSet((byte)0);
|
||||||
|
if (op < 2) {
|
||||||
|
jlDrawLine(ox, oy, 319-ox, 199-oy);
|
||||||
|
} else {
|
||||||
|
jlDrawLine(319-ox, 199-oy, ox, oy);
|
||||||
|
}
|
||||||
|
|
||||||
|
color = nextColor;
|
||||||
|
nextColor++;
|
||||||
|
if (nextColor > 15) {
|
||||||
|
nextColor = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
jlKeyRead();
|
||||||
|
|
||||||
|
jlImgFree(font);
|
||||||
|
jlImgFree(kanga);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void musicTest(void) {
|
||||||
|
jlImgT *kanga = NULL;
|
||||||
|
jlImgT *font = NULL;
|
||||||
|
|
||||||
|
if (!jlImgLoad(kanga, "kanga")) jlUtilDie("Unable to load kanga.img!");
|
||||||
|
if (!jlImgLoad(font, "font")) jlUtilDie("Unable to load font.img!");
|
||||||
|
|
||||||
|
jlImgDisplay(kanga);
|
||||||
|
jlDisplayPresent();
|
||||||
|
|
||||||
|
jlSoundModPlay("music");
|
||||||
|
|
||||||
|
while (!jlKeyPressed()) {
|
||||||
|
fontPrint(font, NULL, 1, 1, "%dx%d %d %d ", jlGameGetAxis(0), jlGameGetAxis(1), jlGameGetButton(0), jlGameGetButton(1));
|
||||||
|
jlDisplayPresent();
|
||||||
|
}
|
||||||
|
jlKeyRead();
|
||||||
|
|
||||||
|
jlSoundModStop();
|
||||||
|
|
||||||
|
jlImgFree(font);
|
||||||
|
jlImgFree(kanga);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void showStencil(void) {
|
||||||
|
jlStnT *stencil = NULL;
|
||||||
|
jint16 y;
|
||||||
|
jint16 x;
|
||||||
|
jint16 count;
|
||||||
|
juint16 index;
|
||||||
|
byte bit;
|
||||||
|
|
||||||
|
if (!jlStnLoad(stencil, "font")) jlUtilDie("Unable to load font.stn!");
|
||||||
|
|
||||||
|
jlDrawColorSet(0);
|
||||||
|
jlDrawClear();
|
||||||
|
jlDrawColorSet(15);
|
||||||
|
|
||||||
|
// Draw stencil to screen linerally
|
||||||
|
index = -1;
|
||||||
|
count = 0;
|
||||||
|
for (y=0; y<200; y++) {
|
||||||
|
for (x=0; x<320; x++) {
|
||||||
|
count--;
|
||||||
|
if (count < 0) {
|
||||||
|
count = 7;
|
||||||
|
index++;
|
||||||
|
bit = stencil->pixels[index];
|
||||||
|
}
|
||||||
|
if (bit & (1 << count)) {
|
||||||
|
jlDrawPixelSet(x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
jlDisplayPresent();
|
||||||
|
}
|
||||||
|
jlKeyWaitForAny();
|
||||||
|
|
||||||
|
jlDrawColorSet(0);
|
||||||
|
jlDrawClear();
|
||||||
|
jlDrawColorSet(15);
|
||||||
|
|
||||||
|
// Draw stencil by pixel location - this fails on the IIgs
|
||||||
|
for (y=0; y<200; y++) {
|
||||||
|
for (x=0; x<320; x++) {
|
||||||
|
index = (y * 320 + x);
|
||||||
|
count = 7 - (index % 8);
|
||||||
|
index /= 8;
|
||||||
|
bit = stencil->pixels[index];
|
||||||
|
if (bit & (1 << count)) {
|
||||||
|
jlDrawPixelSet(x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
jlDisplayPresent();
|
||||||
|
}
|
||||||
|
jlKeyWaitForAny();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void stencilTest(void) {
|
||||||
|
jlImgT *kangaI = NULL;
|
||||||
|
jlImgT *biffI = NULL;
|
||||||
|
jlStnT *biffS = NULL;
|
||||||
|
jint16 y;
|
||||||
|
jint16 x;
|
||||||
|
jint16 i;
|
||||||
|
jint16 j;
|
||||||
|
|
||||||
|
if (!jlImgLoad(kangaI, "kanga")) jlUtilDie("Unable to load kanga.img!");
|
||||||
|
if (!jlImgLoad(biffI, "biff")) jlUtilDie("Unable to load biff.img!");
|
||||||
|
if (!jlStnLoad(biffS, "biff")) jlUtilDie("Unable to load biff.stn!");
|
||||||
|
|
||||||
|
jlImgDisplay(kangaI);
|
||||||
|
|
||||||
|
y = 50;
|
||||||
|
|
||||||
|
while (!jlKeyPressed()) {
|
||||||
|
// Draw Biff & grab background
|
||||||
|
for (x=0; x<319-32; x++) {
|
||||||
|
for (i=0; i<3; i++) {
|
||||||
|
for (j=0; j<4; j++) {
|
||||||
|
jlDrawSurfaceSet(jlImgSurfaceGet(biffI));
|
||||||
|
jlDrawBlit8x8(JOEY_DISPLAY, x + (j * 8), y + (i * 8), j * 8 + 32, i * 8 + 32);
|
||||||
|
jlDrawSurfaceSet(JOEY_DISPLAY);
|
||||||
|
jlDrawBlit8x8a(jlImgSurfaceGet(biffI), biffS, j * 8, i * 8, x + (j * 8), y + (i * 8));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
jlDisplayPresent();
|
||||||
|
// Erase Biff
|
||||||
|
for (i=0; i<3; i++) {
|
||||||
|
for (j=0; j<4; j++) {
|
||||||
|
jlDrawBlit8x8(jlImgSurfaceGet(biffI), j * 8 + 32, i * 8 + 32, x + (j * 8), y + (i * 8));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Check for early quit
|
||||||
|
if (jlKeyPressed()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
jlKeyRead();
|
||||||
|
|
||||||
|
jlStnFree(biffS);
|
||||||
|
jlImgFree(biffI);
|
||||||
|
jlImgFree(kangaI);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void timerTest(void) {
|
||||||
|
jlImgT *font = NULL;
|
||||||
|
|
||||||
|
if (!jlImgLoad(font, "font")) jlUtilDie("Unable to load font.img!");
|
||||||
|
|
||||||
|
jlDrawColorSet(0);
|
||||||
|
jlDrawClear();
|
||||||
|
|
||||||
|
while (!jlKeyPressed()) {
|
||||||
|
fontPrint(font, NULL, 1, 1, "Timer: %d ", jlUtilTimer());
|
||||||
|
jlDisplayPresent();
|
||||||
|
}
|
||||||
|
jlKeyRead();
|
||||||
|
|
||||||
|
jlImgFree(font);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
jlUtilStartup("JoeyLib Audio");
|
||||||
|
|
||||||
|
//blitTest();
|
||||||
|
//exerciseAPI();
|
||||||
|
//grid();
|
||||||
|
//lineTest();
|
||||||
|
//musicTest();
|
||||||
|
//showStencil();
|
||||||
|
stencilTest();
|
||||||
|
//timerTest();
|
||||||
|
|
||||||
|
jlUtilShutdown();
|
||||||
|
}
|
||||||
|
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
BIN
joeylib/data/font.xcf
(Stored with Git LFS)
Normal file
BIN
joeylib/data/font.xcf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
joeylib/data/kanga.xcf
(Stored with Git LFS)
Normal file
BIN
joeylib/data/kanga.xcf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
joeylib/data/music.mod
(Stored with Git LFS)
Normal file
BIN
joeylib/data/music.mod
(Stored with Git LFS)
Normal file
Binary file not shown.
Binary file not shown.
29445
joeylib/src/iigs/blit.asm
Normal file
29445
joeylib/src/iigs/blit.asm
Normal file
File diff suppressed because it is too large
Load diff
101
joeylib/src/iigs/song.c
Normal file
101
joeylib/src/iigs/song.c
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
/*
|
||||||
|
JoeyLib NTP Player
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "song.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
jlSongT - A pointer to single song, including it’s instruments
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
} jlSong_t;
|
||||||
|
|
||||||
|
typedef jlSong_t* jlSongT;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Startup Song Library
|
||||||
|
*/
|
||||||
|
void jlSongStartup()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Shutdown Song Library
|
||||||
|
*/
|
||||||
|
void jlSongShutdown()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
jlSongLoad - Loads a song into memory, and into DOC RAM, so that it's ready
|
||||||
|
to play
|
||||||
|
*/
|
||||||
|
jlSongT jlSongLoad(const char* pSongPath)
|
||||||
|
{
|
||||||
|
jlSongT result = NULL;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
jlSongLoadAt - Load a song from memory into DOC RAM
|
||||||
|
DO NOT FREE THIS MEMORY UNTIL AFTER A CALL TO jlSongFree
|
||||||
|
*/
|
||||||
|
jlSongT jlSongLoadAt(const char* pSongInRAM)
|
||||||
|
{
|
||||||
|
jlSongT result = NULL;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
jlSongPlay
|
||||||
|
jlSongT song - song handle
|
||||||
|
jlBool bLoop - Play once, or Loop continuously
|
||||||
|
*/
|
||||||
|
void jlSongPlay(jlSongT song, jlBool bLoop)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Stop the current song
|
||||||
|
*/
|
||||||
|
void jlSongStop(jlSongT song)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
bPaused to TRUE to pause the song
|
||||||
|
bPaused to FALSE to result song from where it is
|
||||||
|
*/
|
||||||
|
void jlSongSetPause(jlSongT song, jlBool bPaused)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Volume from 0 which is silent, to 255 which is the loudest
|
||||||
|
*/
|
||||||
|
void jlSongSetVolume(jlSongT song, U8 volume)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
// 0x100 is a tempo of 1x, and is the default
|
||||||
|
// 0x080 will run the tempo at half speed
|
||||||
|
// 0x200 will run the tempo at 2X
|
||||||
|
*/
|
||||||
|
void jlSongSetTempo(jlSongT song, U16 tempo)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Release memory and resources
|
||||||
|
*/
|
||||||
|
void jlSongFree(jlSontT song)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* JL_SONG_H */
|
||||||
|
|
78
joeylib/src/iigs/song.h
Normal file
78
joeylib/src/iigs/song.h
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
/*
|
||||||
|
JoeyLib NTP Player
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef JL_SONG_H
|
||||||
|
#define JL_SONG_H 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
jlSongT - A pointer to single song, including it’s instruments
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
} jlSong_t;
|
||||||
|
|
||||||
|
typedef jlSong_t* jlSongT;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Startup Song Library
|
||||||
|
*/
|
||||||
|
void jlSongStartup();
|
||||||
|
|
||||||
|
/*
|
||||||
|
Shutdown Song Library
|
||||||
|
*/
|
||||||
|
void jlSongShutdown();
|
||||||
|
|
||||||
|
/*
|
||||||
|
jlSongLoad - Loads a song into memory, and into DOC RAM, so that it's ready
|
||||||
|
to play
|
||||||
|
*/
|
||||||
|
jlSongT jlSongLoad(const char* pSongPath);
|
||||||
|
/*
|
||||||
|
jlSongLoadAt - Load a song from memory into DOC RAM
|
||||||
|
DO NOT FREE THIS MEMORY UNTIL AFTER A CALL TO jlSongFree
|
||||||
|
*/
|
||||||
|
jlSongT jlSongLoadAt(const char* pSongInRAM);
|
||||||
|
|
||||||
|
/*
|
||||||
|
jlSongPlay
|
||||||
|
jlSongT song - song handle
|
||||||
|
jlBool bLoop - Play once, or Loop continuously
|
||||||
|
*/
|
||||||
|
void jlSongPlay(jlSongT song, jlBool bLoop);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Stop the current song
|
||||||
|
*/
|
||||||
|
void jlSongStop(jlSongT song);
|
||||||
|
|
||||||
|
/*
|
||||||
|
bPaused to TRUE to pause the song
|
||||||
|
bPaused to FALSE to result song from where it is
|
||||||
|
*/
|
||||||
|
void jlSongSetPause(jlSongT song, jlBool bPaused);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Volume from 0 which is silent, to 255 which is the loudest
|
||||||
|
*/
|
||||||
|
void jlSongSetVolume(jlSongT song, U8 volume);
|
||||||
|
|
||||||
|
/*
|
||||||
|
// 0x100 is a tempo of 1x, and is the default
|
||||||
|
// 0x080 will run the tempo at half speed
|
||||||
|
// 0x200 will run the tempo at 2X
|
||||||
|
*/
|
||||||
|
void jlSongSetTempo(jlSongT song, U16 tempo);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Release memory and resources
|
||||||
|
*/
|
||||||
|
void jlSongFree(jlSontT song);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* JL_SONG_H */
|
||||||
|
|
||||||
|
|
91
joeylib/src/iigs/sound.c
Normal file
91
joeylib/src/iigs/sound.c
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
/*
|
||||||
|
JoeyLib Sound for the IIgs
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "sound.h"
|
||||||
|
|
||||||
|
#ifndef NULL
|
||||||
|
#define NULL 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Call this before any other Sound Function */
|
||||||
|
void jlSoundStartup()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Call this when done, for proper shutdown */
|
||||||
|
void jlSoundShutdown()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Load .jla Sound Bank into memory, or into DOC RAM
|
||||||
|
*/
|
||||||
|
jlSoundT jlSoundLoad(const char* pSoundBankPath)
|
||||||
|
{
|
||||||
|
jlSoundT result = NULL;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Load .jla Sound Bank from memory, into DOC RAM
|
||||||
|
DO NOT FREE THIS MEMORY (pointers in the library will point into it)
|
||||||
|
it may be free after the jlSoundFree hsa been called
|
||||||
|
*/
|
||||||
|
jlSoundT jlSoundLoadAt(const char* pBankInRAM)
|
||||||
|
{
|
||||||
|
jlSoundT result = NULL;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Returns back an index into the audio definition table, which is required
|
||||||
|
in order to call jlSoundPlay
|
||||||
|
|
||||||
|
Returns -1 if the sound isn't found
|
||||||
|
*/
|
||||||
|
signed short jlSoundFind(jlSoundT soundbank, const char* sfxName)
|
||||||
|
{
|
||||||
|
signed short result = -1;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Play a Sound
|
||||||
|
*/
|
||||||
|
void jlSoundPlay(jlSoundT soundbank, signed short audio_index)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Return the number of SFX in this Bank
|
||||||
|
*/
|
||||||
|
signed short jlSoundGetNumSFX(jlSoundT soundbank)
|
||||||
|
{
|
||||||
|
signed short result = 0;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Return a C string name of the sound effect with this index
|
||||||
|
DO NOT FREE THIS POINTER
|
||||||
|
*/
|
||||||
|
char *jlSoundGetName(signed short audio_index)
|
||||||
|
{
|
||||||
|
char* pResult = NULL;
|
||||||
|
return pResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Called when you are done with this soundbank
|
||||||
|
*/
|
||||||
|
void jlSoundFree(jlSoundT soundbank)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
56
joeylib/src/iigs/sound.h
Normal file
56
joeylib/src/iigs/sound.h
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
JoeyLib Sound Header File, with Sound Function Prototypes
|
||||||
|
*/
|
||||||
|
#ifndef JL_SOUND_H
|
||||||
|
#define JL_SOUND_H
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
|
||||||
|
} jlSound_t;
|
||||||
|
|
||||||
|
/* jlSoundT - A pointer to a sound bank / collection of sounds */
|
||||||
|
typedef jlSound_t* jlSoundT;
|
||||||
|
|
||||||
|
/* Call this before any other Sound Function */
|
||||||
|
void jlSoundStartup();
|
||||||
|
/* Call this when done, for proper shutdown */
|
||||||
|
void jlSoundShutdown();
|
||||||
|
|
||||||
|
/*
|
||||||
|
Load .jla Sound Bank into memory, or into DOC RAM
|
||||||
|
*/
|
||||||
|
jlSoundT jlSoundLoad(const char* pSoundBankPath);
|
||||||
|
/*
|
||||||
|
Load .jla Sound Bank from memory, into DOC RAM
|
||||||
|
DO NOT FREE THIS MEMORY (pointers in the library will point into it)
|
||||||
|
it may be free after the jlSoundFree hsa been called
|
||||||
|
*/
|
||||||
|
jlSoundT jlSoundLoadAt(const char* pBankInRAM);
|
||||||
|
/*
|
||||||
|
Returns back an index into the audio definition table, which is required
|
||||||
|
in order to call jlSoundPlay
|
||||||
|
*/
|
||||||
|
signed short jlSoundFind(jlSoundT soundbank, const char* sfxName);
|
||||||
|
/*
|
||||||
|
Play a Sound
|
||||||
|
*/
|
||||||
|
void jlSoundPlay(jlSoundT soundbank, signed short audio_index);
|
||||||
|
/*
|
||||||
|
Return the number of SFX in this Bank
|
||||||
|
*/
|
||||||
|
signed short jlSoundGetNumSFX(jlSoundT soundbank);
|
||||||
|
/*
|
||||||
|
Return a C string name of the sound effect with this index
|
||||||
|
DO NOT FREE THIS POINTER
|
||||||
|
*/
|
||||||
|
char *jlSoundGetName(signed short audio_index);
|
||||||
|
/*
|
||||||
|
Called when you are done with this soundbank
|
||||||
|
*/
|
||||||
|
void jlSoundFree(jlSoundT soundbank);
|
||||||
|
|
||||||
|
#endif /* JL_SOUND_H */
|
||||||
|
|
||||||
|
|
||||||
|
|
1
joeylib/src/iigs/unroll.macros
Normal file
1
joeylib/src/iigs/unroll.macros
Normal file
|
@ -0,0 +1 @@
|
||||||
|
MACRO
&lab _pushpage
&lab lcla &addr
&addr seta 254
lcla &loop
&loop seta 128
.ploop
pei &addr
&addr seta &addr-2
&loop seta &loop-1
aif &loop,^ploop
MEND
macro
&lab asl4
&lab lcla &ct
&ct seta 4
.top
asl a
&ct seta &ct-1
aif &ct>0,^top
mend
macro
&lab _auxON
&lab lda >$00C068
ora #$0030
sta >$00C068
mend
macro
&lab _auxOFF
&lab lda >$00C068
and #$FFCF
sta >$00C068
mend
macro
&lab _shadowON
&lab lda >$00C035
and #$FFF7
sta >$00C035
mend
macro
&lab _shadowOFF
&lab lda >$00C035
ora #$0008
sta >$00C035
mend
|
Binary file not shown.
Binary file not shown.
Loading…
Add table
Reference in a new issue