This is only an idea and I need some opinions on whether you think this would be a good thing or not.
4kb of RAM
~3.50 MHz clock rate
16 bit program counter
supports bank switching
2 background layers (background/foreground)
4 tilemaps (nametables) 2 for background and 2 for foreground
tilemap mirroring setting.
12 palettes; 4 for sprites, 4 for background and 4 for foreground
each palette has 7 colors + alpha channel
color is defined by LLSS HHHH
H = hue
S = saturation (saturation 0 gives always grayscale regardless of hue)
L = lightness (or brightness)
Horizontal blank counter that can generate interrupts (similar to scanline interrupt found on some memory mappers on NES games)
256 different 8x8 sprites in memory at once
256 different 8x8 tiles in memory at once (shared for background and foreground)
CHR RAM
max 64 8x8 sprites on screen at once
no colors/sprites per scanline limitations
sprites can be layered either below, between or on top of the tilemaps
4 generators and 2 sample players and 2 waveshape players
generators can produce sine, pulse, saw or noise
different 'timbre' settings (sine and saw gets inverted, while pulse has pulse width and noise has either white or "gate" noise)
note periods are read from built in lookup table (coarse pitch)
fine pitch is given to a second register as a signed value
sample players can play samples as 1 - 4 bit delta samples depending on the channel settings
samples can be pitched from -7 to +8 semitones
waveshape players play a custom waveshape
waveshape can be either 8, 16, 24 or 32 units long
Code: Select all
SSB ; Store set bits. Stores only set bits of the value in accumulator to the given memory address
; e.g. A = #%1010 0110
; $005E = #%1001 1100
; SSB $5E = #%1011 1110
; useful for setting bit flags in variables/registers
SCB ; Store clear bits. Works with the same idea as SSB, but stores only cleared bits.
; e.g. A = #%1010 0110
; $005E = #%1001 1100
; SCB $5E = #%1000 0110
PHX/PHY ; Push X/Y register
PLX/PLY ; Pull X/Y register
TXY/TYX ; Transfer X to Y/Y to X
WAI ; Wait for interrupt
SWI ; Software interrupt (replaces BRK as it seems to generate interrupt)
What do you think of this whole project? I'm trying to make the engine to be somewhere between the 8 bit and 16 bit consoles in terms of processing power and functions and such. On this early stage of the whole project, feedback is really important. Are there anything you think I should add, remove or modify a bit?