diff --git a/asm/drawtile.s b/asm/drawtile.s new file mode 100644 index 0000000..b5a22a4 --- /dev/null +++ b/asm/drawtile.s @@ -0,0 +1,65 @@ +* +* ORCA/M Format!! +* Thunk from C to compiled draw things +* + case on + longa on + longi on + +Dummy3 start ASMCODE + end + +* +* void DrawTile(short offset, short tileNo) +* + +DrawTile start ASMCODE + +iOffset equ 5 +iTileNo equ 7 + + phb + + lda iOffset,s + tay + lda iTileNo,s + asl A + tax ; jmp table offset in x + + anop ; adjust the stack + anop ; Copy the Return address + lda 1,s + sta iTileNo-2,s + lda 3,s + sta iTileNo,s + pla + + lda #$0101 + sta 1,s + plb + plb +TILEBANK gequ * + jsl >$880000 + + plb + rtl + +*------------------------------------------------------------------------------- + end + +SetTileBank start ASMCODE + +iBank equ 4 + sep #$30 + lda iBank,s + sta >TILEBANK+3 + rep #$30 + lda 2,s + sta iBank,s + lda 1,s + sta iBank-1,s + pla + rtl + +*------------------------------------------------------------------------------- + end diff --git a/data.bat b/data.bat index 59187a2..49570b8 100644 --- a/data.bat +++ b/data.bat @@ -42,10 +42,13 @@ rem iix mkobj splash_lz4 data:splash.lz4 data:splash.a iix mkobj img_splash_lz4 data:img_splash16.lz4 data:img_splash.a iix mkobj pic_haf_lz4 data:pic_haf.lz4 data:pic_haf.a +iix mkobj tiles_lz4 data:tiles.lz4 data:tiles.a rem rem Create Static Linked Binary data library rem iix makelib -P data.lib +data\splash.a iix makelib -P data.lib +data\img_splash.a iix makelib -P data.lib +data\pic_haf.a +iix makelib -P data.lib +data\tiles.a + diff --git a/data/tiles.lz4 b/data/tiles.lz4 new file mode 100644 index 0000000..987a22c Binary files /dev/null and b/data/tiles.lz4 differ diff --git a/include/system.h b/include/system.h index f5fb414..af0e0b7 100644 --- a/include/system.h +++ b/include/system.h @@ -88,7 +88,11 @@ extern void sys_sleep(int); */ #define SYSVID_ZOOM 2 #define SYSVID_MAXZOOM 4 +#ifdef GS +#define SYSVID_WIDTH 160 +#else #define SYSVID_WIDTH 320 +#endif #define SYSVID_HEIGHT 200 extern void sysvid_init(void); @@ -174,6 +178,10 @@ extern void sysjoy_shutdown(void); extern int LZ4_Unpack(char* pDest, char* pPackedSource); extern volatile unsigned long* tick; +// GS Rendering Stuff +extern void SetTileBank(short bank); +extern void DrawTile(short offset, short tileNo); + // ADB Support Code extern char KeyArray[128]; extern void RemoveKeyboardDriver(); diff --git a/src/draw.c b/src/draw.c index 0937c0b..82a90df 100644 --- a/src/draw.c +++ b/src/draw.c @@ -111,8 +111,8 @@ static U8 *fb; /* frame buffer pointer */ void draw_setfb(U16 x, U16 y) { -#ifdef IIGS - fb = sysvid_fb + x + y * (SYSVID_WIDTH/2); +#ifdef GSGFX + fb = sysvid_fb + (x>>1) + (y * SYSVID_WIDTH); #else fb = sysvid_fb + x + y * SYSVID_WIDTH; #endif @@ -237,6 +237,15 @@ draw_tilesSubList() void draw_tile(U8 tileNumber) { +#ifdef GFXGS + //$$JGA TODO convert to ASM + + int tileNo = (draw_tilesBank*256)+tileNumber; + + DrawTile((short)fb,tileNo); + + fb += 4; /* next tile */ +#else U8 i, k, *f; #ifdef GFXPC @@ -274,10 +283,6 @@ draw_tile(U8 tileNumber) } -#ifdef GFXGS -// fix crash I hope - fb += 4; /* next tile */ -#else fb += 8; /* next tile */ #endif } diff --git a/src/sysvid.c b/src/sysvid.c index 53ae772..9761bb1 100644 --- a/src/sysvid.c +++ b/src/sysvid.c @@ -52,6 +52,7 @@ static SDL_Surface *screen; #ifdef IIGS volatile char *VIDEO_REGISTER = (char*)0xC029; volatile char *SHADOW_REGISTER = (char*)0xC035; +extern U8 tiles_lz4; #endif static U32 videoFlags; @@ -225,7 +226,8 @@ sysvid_init(void) { #ifdef IIGS handle hndl; // "generic memory handle" - void *directPageHandle; + void* directPageHandle; + void* tilesPageHandle; // PushLong #0 ;/* Ask Shadowing Screen ($8000 bytes from $01/2000)*/ // PushLong #$8000 @@ -279,10 +281,23 @@ sysvid_init(void) printf("SUCCESS\n"); //BlitFieldHndl = NewHandle(0x10000, userid(), 0xC014, 0); + printf("Allocate Bank for 8x8 Tiles\n"); + tilesPageHandle = NewHandle(0x10000, userid(), 0xC014, 0); + if (toolerror()) + { + printf("Unable to allocate 64k Tiles Bank\n"); + printf("Game can't run\n"); + sys_sleep(5000); // Wait 5 seconds + exit(1); + } + printf("SUCCESS\n"); + SetTileBank(((U8*)*tilesPageHandle)[2]); + LZ4_Unpack((char*)*tilesPageHandle, &tiles_lz4); + sysvid_fb = (U8*)0x12000; // SHR ON - *VIDEO_REGISTER|=0xC0; + //*VIDEO_REGISTER|=0xC0; // ENABLE Shadowing of SHR *SHADOW_REGISTER&=~0x08; // Shadow Enable