view simple_console.txt @ 3:08b69e3f9f17

Fleshed out the video hardware design somewhat
author Michael Pavone <pavone@retrodev.com>
date Fri, 25 Mar 2016 09:06:29 -0700
parents 6204c81e2933
children 8170d60f188b
line wrap: on
line source

Key:
1 = literal 1 bit
0 = literal 0 bit
O = opcode bit
D = destination register bit
A = source A register bit
B = source B register bit

DDDD AAAA BBBB OOOO

0: ldim
	D = destination reg
	A and B form 8-bit immediate value
1: ldimh
	D = destination reg
	A and B form 8-bit immediate value
2: ld8
3: ld16
4: str8
5: str16
6: add
7: adc
8: and
9: or
A: xor
B: lsl
C: lsr
D: asr 
E: bcc
F: single source



DDDD AAAA OOOO 1111

single source

0: mov
1: neg
2: not
3: cmp
4: call
	A = register containing pointer to function
	D = register that will store PC value
5: swap
6: in
7: out
8: ini
9: outi
A: addi
B: andi
C: ori
D: ls[lr]i
	MSB of AAAA determines direction
	LS 3 bits determines magnitude
E: cmpi
F: single reg


DDDD OOOO 1111 1111  

0: reti - return from interrupt, D = register to restore from uer
1: trap
2: trapi
3: getepc
4: setepc
5: getesr
6: setesr
7: getenum
8: setenum
9: getuer
A: setuer
B: getenum
C: setenum
E: invalid
F: invalid


Registers:

r0 - r12 : general purpose
r13 : technically general purpose, but canonically the stack register
r14 : PC
r15 : status register

Special Registers
epc - Exception PC - Stores PC value to resume to when entering an exception handler
esr - Exception SR - same as above, but for SR
eur - Exceptuion User Reg - reg for temporary storage of a reg in a handler, intended to be used for the stack pointer
enum - Exception Number - holds the number of the most recent exception

IO: Ports

0: Controller 1
1: Controller 2
2: Controller 3
3: Controller 4

4: Channel A Freq
	Load value for a 16-bit down-counter
	Polarity of output is switched on transition from 1 to 0
	Value is loaded on cycles where counter is 0
	Special case value of 0 in this register forces polarity to positive
5: Channel B Freq
6: Channel C Freq
7: Channel D Freq

8: Channel A/B Vol
9: Channel C/D Vol

A: Timer Freq
B: "Serial" Debug Port

C: Write Vertical Scroll : Read Vertical Position
	MMMM MCCC CCCC CFFF
	C = coarse scroll bit
	F = fine scroll bit
	M = mask bit
		controls which bits come directly from register
		and which bits come from the sum of the register
		and the current line number
		
D: Write Horizontal Scroll : Read Horizontal Position
	xxxx xxxC CCCC CFFF
	C = coarse scroll bit
	F = fine scroll bit
	x = unused
E: Write Dest Address : Read Status
F: Write Data : Read Data


Name Table Start Address:
	0VVV VVVV VHHH HHH0
	
	V = Coarse scroll bit from vertical scroll value
	H = Coarse scroll bit from horizontal scroll value
	
VDP Memory Map
0000 - 7FFF = Pattern/Name Table RAM
8000 - FDFF = unused, returns $FFFF
FE00 - FEFF = Sprite RAM
FF00 - FF7F = Palette RAM
FF80 - FFFF = Palette RAM (mirror)

Another View -
	MSB determines whether destination is main RAM
	For MSB 1
		Next 7 MSB determines which special RAM is the destination
		Only values of 7E and 7F are valid for these bits at present
		8 LSB determine offset (1 LSB ignored)
		
Writing to Data port puts word into FIFO
Offset within memory type is increment when word is pulled from FIFO

Pattern Format:
4bpp in an 8x8 tile arrangement


Sprite Table Entry:

XXXXXXXX YYYYYYYY
IXPVHSNN NNNNNNNN

S: size -- 0 = 8x8, 1 = 16x16
P: Palette selector
H: Horizontal flip
V: Vertical flip
I: Priority
N: Name
X: X position (left of screen = 16, right of screen = ?)
Y: Y position (top of screen = 16, bottom of screen = 240)


Name Table Entry:

IPPVHxNN NNNNNNNN

P: Palette selector
H: Horizontal flip
V: Vertical flip
I: Priority
N: Name
x: Unused, should be set to 0

26.112 MHZ Clock
Dot Clock Divider 4
CPU Clock Divider 20 (assuming 1 cycle/instruction, 5 for 4 cycles/instruction)
Audio Timer Divider 34
Audio Output Divider 544

Alternatively 13.056 Mhz clock and cut the dividers in half



H-Counter goes from 0-415 and then wraps back to zero
V-Counter goes from 0-261 and then wraps back to zero
V-Counter increments when H-Counter wraps