From f37e8d831f62b040d4a44f4899983afe2821a35c Mon Sep 17 00:00:00 2001 From: Scott Duensing Date: Sun, 16 Aug 2020 18:52:12 -0500 Subject: [PATCH] Fixed blitting from the display to a surface. Timer now 60Hz instead of 10Hz. --- joeylib/build.sh | 6 +++ joeylib/src/biff-stencil.png | Bin 0 -> 16061 bytes joeylib/src/biff.png | Bin 0 -> 17615 bytes joeylib/src/jIIgs.asm | 61 +++++++++++++++++++++++------ joeylib/src/jIIgs.c | 28 ++++---------- joeylib/src/jSDL2.c | 16 +++++--- joeylib/src/joey.c | 4 +- joeylib/src/joey.h | 2 +- joeylib/src/test.c | 73 ++++++++++++++++++++++++++++++++++- scripts/build-IIgs.helper.sh | 1 + 10 files changed, 149 insertions(+), 42 deletions(-) create mode 100644 joeylib/src/biff-stencil.png create mode 100644 joeylib/src/biff.png diff --git a/joeylib/build.sh b/joeylib/build.sh index 37aa55e..f41f22b 100755 --- a/joeylib/build.sh +++ b/joeylib/build.sh @@ -90,6 +90,7 @@ function doIIgsBuild() { popd cp -f "${OUT}/joeylib" "${DIST}/joeylib#b20000" + cp -f "${JOEY}/sdks/IIgs/Tool035#ba0000" "${JOEY}/dist/IIgs/." cp -f "${JOEY}/sdks/IIgs/Tool222#ba0000" "${JOEY}/dist/IIgs/." cp -f "${JOEY}/joeylib/scripts/build-IIgs.helper.sh" "${JOEY}/dist/." @@ -102,15 +103,20 @@ function doIIgsBuild() { cp "${JOEY}/joeylib/joeylib/src/kanga.img" "${OUT}/kanga.img#060000" cp "${JOEY}/joeylib/joeylib/src/font.img" "${OUT}/font.img#060000" cp "${JOEY}/joeylib/joeylib/src/font.stn" "${OUT}/font.stn#060000" + cp "${JOEY}/joeylib/joeylib/src/biff.img" "${OUT}/biff.img#060000" + cp "${JOEY}/joeylib/joeylib/src/biff.stn" "${OUT}/biff.stn#060000" cp "${JOEY}/joeylib/joeylib/src/music.ntp" "${OUT}/music.ntp#D50008" "${CADIUS}" createvolume "${IMPORT}" ${VOL} 32MB > /dev/null "${CADIUS}" createfolder "${IMPORT}" ${VOL}/data > /dev/null "${CADIUS}" addfile "${IMPORT}" ${VOL} "${OUT}/Test#b3db03" > /dev/null + "${CADIUS}" addfile "${IMPORT}" ${VOL}/data "${JOEY}/dist/IIgs/Tool035#ba0000" > /dev/null "${CADIUS}" addfile "${IMPORT}" ${VOL}/data "${JOEY}/dist/IIgs/Tool222#ba0000" > /dev/null "${CADIUS}" addfile "${IMPORT}" ${VOL}/data "${OUT}/kanga.img#060000" > /dev/null "${CADIUS}" addfile "${IMPORT}" ${VOL}/data "${OUT}/font.img#060000" > /dev/null "${CADIUS}" addfile "${IMPORT}" ${VOL}/data "${OUT}/font.stn#060000" > /dev/null + "${CADIUS}" addfile "${IMPORT}" ${VOL}/data "${OUT}/biff.img#060000" > /dev/null + "${CADIUS}" addfile "${IMPORT}" ${VOL}/data "${OUT}/biff.stn#060000" > /dev/null "${CADIUS}" addfile "${IMPORT}" ${VOL}/data "${OUT}/music.ntp#D50008" > /dev/null pushd "${JOEY}/sdks/IIgs/gsplus" diff --git a/joeylib/src/biff-stencil.png b/joeylib/src/biff-stencil.png new file mode 100644 index 0000000000000000000000000000000000000000..b74ecce5d9939c44bdb7813798f4aa644b0f0bf6 GIT binary patch literal 16061 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 + lda isPal ; Is this a PAL machine? + sta >VblIsPal - lda #0 ; Reset timer - sta >VblTime + lda #0 + sta >VblTime ; Reset timer + sta >VblExtra ; Reset "extra tick" counter ph4 #VblHdr ; Start VBL interrupt task ldx #$1203 ;_SetHeartBeat @@ -1463,21 +1483,38 @@ asmStop start ;---------------------------------------- -; Increment time counter using VBLs every 1/10 second +; Increment time counter using VBLs every 1/60 second ;---------------------------------------- VblHdr start dc i4'0' ; Space for task pointer -VblCount dc i2'1' ; How many VBLs between calls (1 only on initial call) +VblCount dc i2'1' ; Call on every VBL dc i2'$A55A' ; Task signature using GlobalData long m,i - lda >VblRate ; Reset hearbeat counter + + lda #1 ; Reset task counter sta >VblCount - lda >VblTime ; Increment timer + + lda >VblIsPal ; Is this a PAL machine? + bne ntsc + + lda >VblExtra ; Load extra tick counter for PAL clock + inc a ; Increment it + cmp #5 ; Do we need an additional tick? + bne noTick + lda >VblTime ; Increment timer an extra tick inc a sta >VblTime + lda #0 ; Reset extra tick counter + +noTick sta >VblExtra ; Store count for next time + +ntsc lda >VblTime ; Increment timer + inc a + sta >VblTime + short m,i rtl end diff --git a/joeylib/src/jIIgs.c b/joeylib/src/jIIgs.c index 6935a14..c40802e 100644 --- a/joeylib/src/jIIgs.c +++ b/joeylib/src/jIIgs.c @@ -59,7 +59,7 @@ extern void asmGrOff(void); extern void asmGrOn(void); extern int asmJoy(void); extern void asmSlam(void); -extern void asmStart(jint16 myID, jint16 hertzBy10); +extern void asmStart(jint16 myID, jint16 isPal); extern void asmStop(void); @@ -125,26 +125,17 @@ jlSurfaceT jlDrawSurfaceGet(void) { void jlDrawSurfaceSet(jlSurfaceT target) { _jlDrawTarget = target; - if (target == NULL) { - _jlDrawTargetActual = (jlSurfaceT)0x012000L; - } + _jlDrawTargetActual = (target == NULL) ? (jlSurfaceT)0x012000L : target; } int jlGameGetAxis(byte which) { - static jint16 paddles = 0; jint16 r; if (which == 0) { - if (xRead) { - paddles = asmJoy(); - } - r = paddles & 0x00ff; + r = asmJoy() & 0x00ff; } else { - if (yRead) { - paddles = asmJoy(); - } - r = (paddles & 0xff00) >> 8; + r = (asmJoy() & 0xff00) >> 8; } return r - 128; @@ -352,11 +343,9 @@ void jlUtilShutdown(void) { // Shutdown tools NTPShutDown(); // NinjaTracker UnloadOneTool(222); - /* MSShutDown(); // MIDI Synth UnloadOneTool(35); SoundShutDown(); // Sound Tool Set - */ MTShutDown(); // Misc Tools DisposeAll(userid()); MMShutDown(userid()); // Memory Manager @@ -387,7 +376,6 @@ void jlUtilStartup(char *appTitle) { tempHandle = NewHandle((LongWord)0x8000, userid(), (Word)(attrLocked | attrFixed | attrAddr | attrBank), (Pointer)0x012000); JOEY_CHECK_TOOL_ERROR("NewHandle SHR") - /* // Sound Tool Set tempHandle = NewHandle((Long)DPTotal, userid(), (Word)(attrLocked | attrFixed | attrPage | attrBank), (Long)0); JOEY_CHECK_TOOL_ERROR("NewHandle Sound") @@ -404,11 +392,11 @@ void jlUtilStartup(char *appTitle) { JOEY_CHECK_TOOL_ERROR("Tool035") SetTSPtr(0, 35, initialLoad.startAddr); MSBootInit(); - JOEY_CHECK_TOOL_ERROR("MSBootInit") + // Do not JOEY_CHECK_TOOL_ERROR("MSBootInit") - it will fail when in fact it's just garbage in the A register. + // If we REALLY want to know, check carry clear. } MSStartUp(); // MIDI Synth JOEY_CHECK_TOOL_ERROR("MSStartUp") - */ // Try to load NinjaTrackerPlus from SYSTEM:TOOLS LoadOneTool(222, 0); @@ -424,8 +412,8 @@ void jlUtilStartup(char *appTitle) { } // Start assembly module - _jlHertz = (int)ReadBParam((Word)0x1D) == 0 ? 60 : 50; // Is this a PAL or NTSC machine? - asmStart(userid(), _jlHertz / 10); + _jlHertz = (int)ReadBParam((Word)0x1D) == 0 ? 60 : 50; // Is this a PAL or NTSC (0) machine? + asmStart(userid(), _jlHertz == 60 ? 0 : 1); // SHR on asmGrOn(); diff --git a/joeylib/src/jSDL2.c b/joeylib/src/jSDL2.c index 94e4e36..e10d849 100644 --- a/joeylib/src/jSDL2.c +++ b/joeylib/src/jSDL2.c @@ -168,6 +168,10 @@ void jlDrawBlit8x8(jlSurfaceT source, jint16 sx, jint16 sy, jint16 tx, jint16 ty jlPixelPairT *pixels = (jlPixelPairT *)source; jlPixelPairT *target = (jlPixelPairT *)_jlDrawTargetActual; + if (pixels == NULL) { + pixels = (jlPixelPairT *)_jlBackingStore->pixels; + } + if (jlUtilIsOdd(sx)) sx--; // sx must be even because there are two pixels per byte o1 = sy * 160 + (int)(sx * 0.5); // This is in pixels... @@ -196,6 +200,10 @@ void jlDrawBlit8x8a(jlSurfaceT source, jlStnT *stencil, jint16 sx, jint16 sy, ji jlPixelPairT *pixels = (jlPixelPairT *)source; jlPixelPairT *target = (jlPixelPairT *)_jlDrawTargetActual; + if (pixels == NULL) { + pixels = (jlPixelPairT *)_jlBackingStore->pixels; + } + if (jlUtilIsOdd(sx)) sx--; // sx must be even because there are two pixels per byte so = sy * 160 + (int)(sx * 0.5); // This is in pixels... @@ -355,9 +363,7 @@ jlSurfaceT jlDrawSurfaceGet(void) { void jlDrawSurfaceSet(jlSurfaceT target) { _jlDrawTarget = target; - if (target == NULL) { - _jlDrawTargetActual = (jlSurfaceT)_jlBackingStore->pixels; - } + _jlDrawTargetActual = (target == NULL) ? (jlSurfaceT)_jlBackingStore->pixels : target; } @@ -752,8 +758,8 @@ void jlUtilStartup(char *appTitle) { jlDrawColorSet(15); jlDisplayPresent(); - // Start 1/10th second timer - _jlTimerId = SDL_AddTimer(100, _jlUtilTimer, NULL); + // Start 1/60th second timer + _jlTimerId = SDL_AddTimer(1000 / 60, _jlUtilTimer, NULL); } diff --git a/joeylib/src/joey.c b/joeylib/src/joey.c index 8a3e01d..4db943f 100644 --- a/joeylib/src/joey.c +++ b/joeylib/src/joey.c @@ -612,11 +612,11 @@ void jlUtilRandomSeedSet(juint32 seed) { } -void jlUtilSleep(juint16 tenths) { +void jlUtilSleep(juint16 sixtieths) { juint16 t = jlUtilTimer(); juint16 d = 0; - while ((d < tenths) && !jlUtilMustExit()) { + while ((d < sixtieths) && !jlUtilMustExit()) { d = jlUtilTimeSpan(t, jlUtilTimer()); } } diff --git a/joeylib/src/joey.h b/joeylib/src/joey.h index 116f534..a33d505 100644 --- a/joeylib/src/joey.h +++ b/joeylib/src/joey.h @@ -310,7 +310,7 @@ juint16 jlUtilRandom(void); juint32 jlUtilRandomSeedGet(void); void jlUtilRandomSeedSet(juint32 seed); void jlUtilShutdown(void) __attribute__((noreturn)); -void jlUtilSleep(juint16 tenths); +void jlUtilSleep(juint16 sixtieths); #define jlUtilStackPop(stack) _jlUtilStackPop((jlStackT **)&(stack)) // Syntatic Sugar void *_jlUtilStackPop(jlStackT **stack); #define jlUtilStackPush(stack, data) _jlUtilStackPush((jlStackT **)&(stack), data) // Syntatic Sugar diff --git a/joeylib/src/test.c b/joeylib/src/test.c index 7c3d600..369203d 100644 --- a/joeylib/src/test.c +++ b/joeylib/src/test.c @@ -354,7 +354,7 @@ void showStencil(void) { jlDrawClear(); jlDrawColorSet(15); - // Draw stencil by pixel location + // 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); @@ -372,15 +372,84 @@ void showStencil(void) { } +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 Test"); //blitTest(); - exerciseAPI(); + //exerciseAPI(); //grid(); //lineTest(); //musicTest(); //showStencil(); + stencilTest(); + //timerTest(); jlUtilShutdown(); } diff --git a/scripts/build-IIgs.helper.sh b/scripts/build-IIgs.helper.sh index 3cbaae1..74c6217 100644 --- a/scripts/build-IIgs.helper.sh +++ b/scripts/build-IIgs.helper.sh @@ -62,6 +62,7 @@ function buildIIgs() { ${CADIUS} createvolume ${IMPORT} ${VOL} 32MB > /dev/null ${CADIUS} createfolder ${IMPORT} ${VOL}/data > /dev/null ${CADIUS} addfile ${IMPORT} ${VOL} ${TARGET}/${PROJECT}#b3db03 > /dev/null + ${CADIUS} addfile ${IMPORT} ${VOL}/data ${JOEY}/dist/IIgs/Tool035#ba0000 > /dev/null ${CADIUS} addfile ${IMPORT} ${VOL}/data ${JOEY}/dist/IIgs/Tool222#ba0000 > /dev/null for F in "${DATA[@]}"; do N=${WORK}/data/`basename ${F}`#060000