nbg1 test

mrkotfw

Mid Boss
i'm having some problems in getting tiles displayed, it could be yabause not supporting a few things but i'd also like to know what i'm doing wrong.

well, here's what the code below does: it displays a 256 color 16x16 made up of 8x8 tiles. i think the problem is telling the saturn where the tiles and map data is stored.

Code:
#include <color.h>

#define NBG0_CEL_ADR (VDP2_VRAM_A0)

#define NBG0_MAP_ADR (VDP2_VRAM_A0 + 0x1000)

#define NBG0_COL_ADR (VDP2_COLRAM)

int

main(void)

{

  int j = 0;

  clear_vdp();

  TVMD = HRESO0 | VRESO0 | BDCLMD;

  BGON = N1ON;

  CHCTLA = N1CHCN0;

  RAMCTL = VRAMD | VRBMD;

  MPABN1 = N1MPA0 | N1MPB0;

  MPCDN1 = N1MPA0 | N1MPB0;

  back_screen((void *)BACK_CRAM,RGB(28,20,16));

  vram(nbg0_gfx,(u8 *)NBG0_CEL_ADR,SIZE(nbg0_gfx));

  pram(nbg0_pal,(u16 *)NBG0_COL_ADR,SIZE(nbg0_pal));

  TVMD |= DISP;

  for(;;)

  {

	while((TVSTAT & 8) == 0);

	*(u16 *)(NBG0_MAP_ADR + j) = 0x0;

	*(u16 *)(NBG0_MAP_ADR + (j + 1)) = 0x2;

	j++;

	while((TVSTAT & 8) != 0);

  }

  return 0;

}

void

clear_vdp(void)

{

  int j;

  u16 *vdp2_io = (u16 *)(VDP2_VRAM_A0 + 0x180000);

  for(j = 0; j < 0xFF; j++)

  {

	vdp2_io[j] = 0x0;

  }

}

void

back_screen(void *adr, u32 col)

{

  u32 *vram_s = (u32 *)adr;

  BKTAU = (((*vram_s >> 17) & 0x7) | (col & 0x8000));

  BKTAL = ((*vram_s >> 1) & 0xFFFF);

  *(u32 *)vram_s = (col & ~0x8000);

}

void

vram(const u8 *dat, void *adr, u32 len)

{

  int j;

  u8 *vram_s = (u8 *)adr;

  for(j = 0; j < len; j++) {

	*vram_s++ = *dat++;

  }

}

void

pram(const u16 *dat, void *adr, u32 len)

{

  int j;

  u16 *pram_s = (u16 *)adr;

  for(j = 0; j < len; j++) {

	*pram_s++ = *dat++;

  }

}

the macros below may be wrong (can't blame me, the names are difficult to remember) :angry:

Code:
#ifndef __CORE_H__

#define __CORE_H__

#include <type.h>

#define VDP2_VRAM_A0 0x25E00000

#define VDP2_VRAM_A1 0x25E20000

#define VDP2_VRAM_B0 0x25E40000

#define VDP2_VRAM_B1 0x25E60000

#define NBG0_MAP (CGN01_RAM + 0x16000)

#define NBG1_MAP (CGN01_RAM + 0x18000)

#define KTBL0_RAM VDP2_VRAM_A1

#define BACK_CRAM (KTBL0_RAM + 0x1FFFE)

#define VDP2_COLRAM 0x25F00000

#define TVMD *(vu16 *)(VDP2_VRAM_A0 + 0x180000)

#define EXTEN *(vu16 *)(VDP2_VRAM_A0 + 0x180002)

#define TVSTAT *(vu16 *)(VDP2_VRAM_A0 + 0x180004)

#define VRSIZE *(vu16 *)(VDP2_VRAM_A0 + 0x180006)

#define RAMCTL *(vu16 *)(VDP2_VRAM_A0 + 0x18000E)

#define BGON *(vu16 *)(VDP2_VRAM_A0 + 0x180020)

#define CHCTLA *(vu16 *)(VDP2_VRAM_A0 + 0x180028)

#define CHCTLB *(vu16 *)(VDP2_VRAM_A0 + 0x18002A)

#define BKTAU *(vu32 *)(VDP2_VRAM_A0 + 0x1800AC)

#define BKTAL *(vu32 *)(VDP2_VRAM_A0 + 0x1800AE)

#define LCTAL *(vu16 *)(VDP2_VRAM_A0 + 0x1800AA)

#define LCTAU *(vu16 *)(VDP2_VRAM_A0 + 0x1800AC)

#define PNCN0 *(vu16 *)(VDP2_VRAM_A0 + 0x180030)

#define PNCN1 *(vu16 *)(VDP2_VRAM_A0 + 0x180032)

#define PNCN2 *(vu16 *)(VDP2_VRAM_A0 + 0x180034)

#define PNCN3 *(vu16 *)(VDP2_VRAM_A0 + 0x180036)

#define PLSZ *(vu16 *)(VDP2_VRAM_A0 + 0x18003A)

#define MPABN0 *(vu16 *)(VDP2_VRAM_A0 + 0x180040)

#define MPCDN0 *(vu16 *)(VDP2_VRAM_A0 + 0x180042)

#define MPABN1 *(vu16 *)(VDP2_VRAM_A0 + 0x180044)

#define MPCDN1 *(vu16 *)(VDP2_VRAM_A0 + 0x180046)

#define DISP (1 << 15)

#define BDCLMD (1 << 8)

#define LSMD1 (1 << 7)

#define LSMD0 (1 << 6)

#define VRESO1 (1 << 5)

#define VRESO0 (1 << 4)

#define HRESO2 (1 << 2)

#define HRESO1 (1 << 1)

#define HRESO0 (1 << 0)

#define EXLTEN (1 << 9)

#define EXSYEN (1 << 8)

#define DASEL (1 << 1)

#define EXBGEN (1 << 0)

#define EXLTFG (1 << 9)

#define EXSYFG (1 << 8)

#define VBLANK (1 << 3)

#define HBLANK (1 << 2)

#define ODD (1 << 1)

#define PAL (1 << 0)

#define VRAMSZ (1 << 15)

#define R0TPON (1 << 12)

#define N3TPON (1 << 11)

#define N2TPON (1 << 10)

#define N1TPON (1 << 9)

#define N0TPON (1 << 8)

#define R1ON (1 << 5)

#define R0ON (1 << 4)

#define N3ON (1 << 3)

#define N2ON (1 << 2)

#define N1ON (1 << 1)

#define N0ON (1 << 0)

#define N0CHCN0 (1 << 4)

#define N0CHCN1 (1 << 5)

#define N0CHCN2 (1 << 6)

#define N0BMSZ0 (1 << 2)

#define N0CHSZ (1 << 0)

#define N1CHCN0 (1 << 12)

#define N1CHCN1 (1 << 13)

#define BKCLMD (1 << 15)

#define N0PNB (1 << 15)

#define N0CNSM (1 << 14)

#define N1PNB (1 << 15)

#define N1CNSM (1 << 14)

#define N0BMEN (1 << 1)

#define N1BMEN (1 << 9)

#define VRBMD (1 << 9)

#define VRAMD (1 << 9)

#define N0MPB0 (1 << 8)

#define N0MPA0 (1 << 0)

#define N1MPA0 (1 << 8)

#define N1MPB0 (1 << 0)

#ifndef NULL

#define NULL (void *)0

#endif

#define RGB(r,g,b) ((r) | ((g) << 5) | ((b) << 10))

#define SIZE(size) (sizeof(size) / sizeof(size[0]))

#endif
 
well, i guess i don't really need help with the code above but a nice explaination of how to use nbg in general will be good enough. i've read the manual but i don't really understand words like: cell, patterns. the way i look at it is: tiles and meta tiles. any info would be greatly appreciated!
 
If I recall correctly, the manual just uses cells and patterns like tiles in connotation: they're just collections of pixels that can be placed in different orders on a plane. Rather than a bitmap, which is just a complete picture (rather than an assembly of cells/patterns/tiles/whatever).

That's really not that much help, probably, but I haven't tried anything with it so I can't say.
 
well, the real problem for me is where the tiles and map is stored. i don't know what registers does that.

well, let me see if i understand this correctly,

1) enable display

2) enable backgrounds

3) enable the color type

4) select the planes

5) set the tile address

6) copy tiles and palette

7) copy map

is that it or am i missing something? :blush:
 
Originally posted by Piratero@Fri, 2005-03-04 @ 01:17 AM

well, let me see if i understand this correctly,


Seems correct to me. Check the SGL Developer's Manual, programmer's tutorial section, scrolls (chapter 8).
 
Back
Top