import: add compiled in tile data, patch in a way to call it

This commit is contained in:
dwsJason 2018-08-17 23:34:35 -04:00
parent 05c91aba6b
commit 5ecc2034c8
6 changed files with 104 additions and 8 deletions

65
asm/drawtile.s Normal file
View File

@ -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

View File

@ -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

BIN
data/tiles.lz4 Normal file

Binary file not shown.

View File

@ -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();

View File

@ -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
}

View File

@ -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