changeset 2060:f1c2415f4d1d segacd

Move old notes into a subdir and add CDD MCU notes
author Michael Pavone <pavone@retrodev.com>
date Sun, 23 Jan 2022 11:11:07 -0800
parents 6399a776e981
children 7c1760b5b3e5
files notes.txt notes/cdd_mcu_notes.txt notes/notes.txt notes/sf2_50mhz_analysis.txt notes/sf2_vram_map.txt sf2_50mhz_analysis.txt sf2_vram_map.txt
diffstat 7 files changed, 742 insertions(+), 313 deletions(-) [+]
line wrap: on
line diff
--- a/notes.txt	Fri Jan 21 21:59:46 2022 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-cmp.w <ea>, Dn 4(1/0) + <ea> time
-cmp.l <ea>, Dn 6(1/0) + <ea> time
-cmp.w #num, Dn 4(1/0) + 4(1/0)
-cmp.l #num, Dn 6(1/0) + 8(2/0)
-
-cmpi.w #num, Dn 8(2/0)
-cmpi.l #num, Dn 14(3/0)
-
-
-movem
-
-subtype field (bits 9-11) = 110 or 100 depending on direction
-bit 8 = 0
-bit 7 = 1
-bit 6 = size
-
-
-
-x86-64 registers in 68K core
-
-1. native stack pointer
-2. current cycle count
-3. target cycle count
-4. cartridge address
-5. work ram address
-6. scratch register
-7. context pointer (contains 68K registers and memory pointers not in registers)
-8. status register (maybe, depends on how well I can abuse native x86 status stuff)
-Rest of registers used for holding 68K registers
-
-rax = cycle counter
-bl = N flag
-bh = V flag
-rcx = scratch register
-dl = Z flag
-dh = C flag
-rbp = target cycle count
-rsi = context pointer
-rdi = scratch register
-r8 = cartridge address
-r9 = work ram address
-r10 = d0
-r11 = d1
-r12 = d2
-r13 = a0
-r14 = a1
-r15 = a7
-rsp = native stack pointer
-
-68K context:
-uint8_t flags[5];
-uint8_t pad??[3]
-uint32_t dregs[8]; //8 + 4 * reg
-uint32_t aregs[8]; //40 + 4 * reg
-.....
-
-x86-64 registers in Z80 core
-
-ax = HL
-bx = BC
-cx = DE
-dx = IX
-ebp = current cycle count
-rsi = context pointer
-edi = target cycle count
-rsp = native stack pointer
-r8 = IY
-r9 = SP
-r10 = A (maybe AF?)
-r11 = z80 ram address
-r12 = cartridge address if bank is pointed at ROM
-r13 = scratch1
-r14 = scratch2
-r15 = ?maybe z80 bank register?
-
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/cdd_mcu_notes.txt	Sun Jan 23 11:11:07 2022 -0800
@@ -0,0 +1,429 @@
+CD Block Clock: 16.9344 MHz
+MCU Clock divider: 2.1168 MHz (cd clock / 8)
+
+State at Reset:
+	Status buffer is filled with zero
+	Mechanism is reset
+	Emulation state set to ES_CLOSING
+
+HSCK active low
+IRQ active high
+CDCK active high
+
+Main Loop:
+	wait for subcode data for next frame
+		seems to be delivered via a "bank" IRQ
+	if servo is not in PLAY state
+		set DOUT and EMP to inactive
+		set MUTE to active
+	elif Q subcode CRC is not valid
+		set MUTE to active
+	elif Q subcode CONTROL field indicates a DATA track
+		set DOUT and MUTE to active
+		set EMP to inactive
+	else
+		set DOUT and MUTE to inactive
+		set EMP based on emphasis bit in Q subcode CONTROL field
+	run drive emulation state machine
+	if we received a valid command last loop
+		populate status buffer based on request format (see table below)
+		if drive error status is valid
+			override status format (2nd nibble) to RF_NOTREADY
+			put error status in STATUS (1st nibble) of status buffer
+			set error status valid to false
+		else
+			put drive status in STATUS (1st nibble) of status buffer
+	Communication with Host via gate array:
+		goes to fail state if HSCK is active (i.e. low)
+		IRQ line is asserted
+		Waits ~2ms (4234 cycles) for HSCK to go active (i.e lo)
+			on timeout, resets outputs to host to inactive and quits comms this loop
+		deasserts irq
+		Sends 10 status nibbles
+			nibbles are inverted
+			HSCK is handshake from host
+			CDCK is handshake frm MCU
+			minimum 77 cycles per nibble
+
+			HSCK 1 (inactive) -> 0 (active)
+			nibble output
+			CDCK 0 (inactive) ->1 (active)
+			HSCK 0->1
+			CDCK 1->0
+		sets status sent flag
+		Gets 10 command nibbles
+			HSCK 1->0
+			nibble input
+			CDCK 0->1
+			HSCK 0->1
+			CDCK 1->0
+		Entire status/command transfer has timeout of ~3ms (6351 cycles)
+			on timeout, resets outputs to host to inactive and quits comms this loop
+		sets command received flag
+		Checksum of command is checked
+			if bad, resets outputs to host to inactive and quits comms this loop
+		set command valid flag
+		resets outputs to host to inactive
+	Runs command from host
+		Generally comms failures cause it to just run a Nop command
+		checksum failures cause drive error status to be set to STATUS_SUMERROR
+		command is specified by first 2 nibbles of command packet
+		second nibble must be zero or command is invalid
+		first nibble must be < 0xE and != 0x5 or command is invalid
+		command is sent to PC
+		command implementation is run
+
+
+format Absolute
+	if Q subcode CRC is bad OR Q subcode Control ADR mode is not 1 or Q subcode tracknum indicates leadin
+		set status format (2nd nibble) to RF_NOTREADY
+	else
+		store Absolute (RF_A == 0) in status format (2nd nibble)
+		copy ATIME in BCD format from Q subcode buffer to 3rd through 8th nibble (inclusive)
+		store flags in 9th nibble
+			these seem to correspond to the data, emphasis and mute control bits sent to CD hardware
+format Relative
+	if Q subcode CRC is bad OR Q subcode Control ADR mode is not 1 or Q subcode tracknum indicates leadin
+		set status format (2nd nibble) to RF_NOTREADY
+	else
+		store Relative (RF_R == 1) in status format (2nd nibble)
+		copy relative track TIME in BCD format from Q subcode buffer to 3rd through 8th nibble (inclusive)
+		store flags in 9th nibble
+			these seem to correspond to the data, emphasis and mute control bits sent to CD hardware
+format Track
+	if Q subcode CRC is bad OR Q subcode Control ADR mode is not 1 or Q subcode tracknum indicates leadin
+		set status format (2nd nibble) to RF_NOTREADY
+	else
+		store Track (RF_T == 2) in status format (2nd nibble)
+		copy track number to 3rd and 4th status buffer nibbles
+		copy Q subcode CONTROL field to 5th status buffer nibble
+		copy Q subcode ADR field to 6th status buffer nibble
+		store flags in 9th nibble
+			these seem to correspond to the data, emphasis and mute control bits sent to CD hardware
+format TOCO
+	if disc is not validated
+		set status format (2nd nibble) to RF_NOTREADY
+	else
+		set status format (2nd nibble) to RF_TOCO(3)
+		copy leadout start in MM:SS:FF format (BCD) to 3rd through 8th nibble (inclusive)
+	store flags in 9th nibble
+		these seem to correspond to the data, emphasis and mute control bits sent to CD hardware
+format TOCT
+	if disc is not validated
+		set status format (2nd nibble) to RF_NOTREADY
+	else
+		set status format (2nd nibble) to RF_TOCT(4)
+		copy first track number in BCD format to 3rd and 4th nibbles
+		copy last track number in BCD format to 5th and 6th nibbles
+		copy TOCTVERSION(0) in BCD format to 7th and 8th nibbles
+	store flags in 9th nibble
+		these seem to correspond to the data, emphasis and mute control bits sent to CD hardware
+format TOCN
+	if disc is not validated
+		set status format (2nd nibble) to RF_NOTREADY
+		store flags in 9th nibble
+			these seem to correspond to the data, emphasis and mute control bits sent to CD hardware
+	else
+		set status format (2nd nibble) to RF_TOCN(5)
+		if requested trac is not valid
+			set status format (2nd nibble) to RF_NOTREADY(F)
+			store flags in 9th nibble
+				these seem to correspond to the data, emphasis and mute control bits sent to CD hardware
+		else
+			copy track start time in MM:SS:FF format (BCD) to 3rd through 8th nibble (includisve)
+			if track is a data track, force MSB of frame to 1
+				notably, since frame numbers sould be <75 this bit would always be zero otherwise
+			store low nibble of BCD track number in 8th nibble
+format Error
+	set status format (2nd nibble) to RF_E(6)
+	error number is placed in 3rd nibble
+		note emulator always writes 0
+	store flags in 9th nibble
+		these seem to correspond to the data, emphasis and mute control bits sent to CD hardware
+
+state Stopping:
+	if servo is in STOP status
+		if disc is known present or disc status is unknown
+			set drive status to STOP
+		else
+			set drive status to NODISC
+state TOCing:
+	if servo is in STOP status
+		if focus is in NOTFOCUSING status
+			set haveDisc to FALSE
+			set haveDiscValid to TRUE
+			set drive status to NODISC
+		else
+			do nothing this tick
+	elif haveDisc is FALSE
+		do nothing this tick (comments suggest this is an abnormal situation)
+	else
+		set drive status to TOCREAD
+		if servo is NOT in PLAY status
+			stop here
+		if haveTOCValid is FALSE
+			process current Q subcode data for TOC entry (see GetTOC)
+			if TOC reading is done
+				set haveTOCValid to true
+				SEEK command is set to mechanism for PBA of program area start
+				stop until next tick
+			else
+				stop until next tick
+		else
+			if havePAValid is TRUE (comments say this isn't supposed to happen)
+				PAUSE command is sent to mechanism
+			else
+				check Q subcode data to see if we have found the start of the Program Area
+				if we have
+					set havePAValid to TRUE
+					SEEK command for start of first track is sent to mechanism
+					PAUSE command is sent to mechanism
+				else if current block Q subcode is invalid or not Mode 1
+					SEEK to next block
+				else
+					SEEK forward 250 blocks
+state Reading:
+state Seeking:
+state Pausing:
+state Playing:
+state Cuing:
+	These 5 states share a common implementation
+	if servo status is STOP
+		do nothing
+	elif servo status is SEEK
+		if mechanism error status is NOERROR
+			set drive status to SEEK
+		else
+			STOP command sent to mechanism
+			emulation state set to STOPPING
+	else
+		if servo status is PAUSE
+			if drive status is NOT DISCEND
+				set drive status to PAUSE
+		else
+			if Q subcode CRC is bad OR Q Control ADR is not mode 1 OR Q subcode tracknum is not lead out
+				set drive status to PLAY
+			else
+				PAUSE command sent to mechanism
+				set drive status to DISCEND
+
+state FWDing:
+	if servo status is STOP
+		do nothing
+	elif servo status is SEEK
+		if mechanism error status is NOERROR
+			set drive status to SCAN
+		else
+			STOP command is sent to mechanism
+			emulation state is set to STOPPING
+	elif servo status is PAUSE
+		set drive status to DISCEND
+	else:
+		set drive status to SCAN
+		if Q subcode CRC is valid AND Q Control ADR is mode 1
+			if Q subcode tracknum indicates leadout
+				PAUSE command is sent to mechanism
+				set drive status to DISCEND
+			else
+				if scanClock is 0
+					get ATIME from current Q subcode block
+					turn it into an LBA, then PBA
+					Add 100 to it
+					SEEK command sent to mechanism
+					reset scanClock to SCANPLAYTIME(10)
+state RVSing:
+	if servo status is STOP
+		do nothing
+	elif servo status is SEEK
+		if mechanism error status is NOERROR
+			set drive status to SCAN
+		else
+			STOP command is sent to mechanism
+			emulation state is set to STOPPING
+	elif servo status is PAUSE
+		do nothing
+	else
+		set drive status to SCAN
+		if Q subcode CRC is valid AND Q Control ADR is mode 1
+			if Q subcode tracknum indcates we're in the leadin area
+				SEEK command is sent to mechanism for beginning of first track
+				PLAY command is sent to mechanism
+				Set emulation state to PLAYING
+			else
+				if scanClock is 0
+					get ATIME from current Q subcode block
+					turn it into an LBA, then PBA
+					subtract 140 from it
+					SEEK command sent to mechanism
+					reset scanClock to SCANPLAYTIME(10)
+state Skipping:
+	if servo status is STOP
+		do nothing
+	elif servo status is SEEK
+		if mechanism error status is NOERROR
+			set drive status to TRACKING
+		else
+			STOP command is sent to mechanism
+			emulation state is set to STOPPING
+	elif servo status is PAUSE
+		set drive status to PAUSE
+	else
+		PAUSE command sent to mechanism
+state DoorClosing:
+	if door state is CLOSING
+		set drive status to TRAYMOVING
+	elif door state is CLOSED
+		set drive status to STOP
+		set request format to absolute
+		set emulation state to CLOSED
+state DoorClosed:
+	do nothing
+state DoorOpening:
+	if door state is OPENING
+		set drive status to TRAYMOVING
+	elif door state is OPEN
+		set drive status to DOOROPEN
+		set emulation state to OPEN
+state DoorOpen:
+	if door status is NOT one of OPEN or OPENING
+		set emulation state to CLOSING
+
+command Nop
+command Stop
+	set request format to absolute
+	if drive status is not DOOROPEN and status is notTRAYMOVING
+		send stop command to mechanism
+		set emulation state to ES_STOPPING
+command Report Request
+	4th nibble specifies request type
+	RF_A(0)
+		set absolute time format
+	RF_R(1)
+		set relative time format
+	RF_T(2)
+		request current track info
+	RF_TOCO(3)
+		request disc completion time
+		will be ignored if disc has not been validated yet
+			drive error status will be set to COMMANDERROR
+			request format will be set back to absolute
+	RF_TOCT(4)
+		request start/end tracks on disc
+		if disc is validated and drive is stopped
+			will seek to start of disc and pause there
+			emulation state set to TOCing
+		if disc is validated and drive is not stopped
+			only request format is changed
+		else
+			prepares memory state for TOC read
+			will seek to start of disc and tell mechanism to play
+			emulation state set to TOCing
+	RF_TOCN(5)
+		request start time of track N
+		if drivestatus is DOOROPEN, TRAYMOVING or STOP
+			command will be ignore dand drive error status will be set to COMMANDERROR
+			request format will be set back to absolute
+		requested track number is in the 5th and 6th nibbles in BCD format
+		SEEK command sent to mechanism for start of disc
+		PAUSE command sent to mechansim
+		emulation state set to TOCing
+	RF_E(6)
+		request error info
+
+command Read
+	if drive status is DOOROPEN or TRAYMOVING
+		set drive error status to COMMANDERROR and stop processing command
+	check request format, if it's TOCT or TOCN, force it to absolute
+	if disc is not validated
+		set drive error status to COMMANDERROR and stop processing command
+	location specified in MM:SS:FF format (BCD) in the 3rd through 8th nibbles (inclusive)
+	location is converted to an LBA
+	if location >= leadout start
+		set drive error status to COMMANDERROR and stop processing command
+	program area offset is added to location to convert it to a physical block address
+	PBA is adjusted back 4
+	SEEK command is sent to mechanism for adjusted PBA
+	PLAY command is sent to mechanism
+	Emulation state set to Reading
+command Seek
+	Same as Read, except sends Pause instead of Play for second command to mechanism
+	Emulation state set to Seeking
+command Pause
+	if drive status is DOOROPEN or TRAYMOVING or SCAN
+		set drive error status to COMMANDERROR and stop processing command
+	check request format, if it's TOCT or TOCN, force it to absolute
+	if disc is not validated
+		set drive error status to COMMANDERROR and stop processing command
+	if drive status is STOP
+		calculates PBA of first track from TOC
+		PBA is NOT adjusted back
+		send SEEK command to mechanism for calculated PBA
+	send PAUSE to mechanism
+	set emulation state to Pausing
+command Play
+	if drive status is DOOROPEN or TRAYMOVING or DISCEND or DISCIN
+		set drive error status to COMMANDERROR and stop processing command
+	check request format, if it's TOCT or TOCN, force it to absolute
+	if disc is not validated
+		set drive error status to COMMANDERROR and stop processing command
+	if drive status is TOCREAD or STOP
+		calculates PBA of first track from TOC
+		PBA is adjusted back by 4
+		SEEK command is sent to mechanism for adjusted PBA
+	send PLAY command to mechanism
+	set emulation state to Playing
+command Fwd
+	if drive status is NOT one of PLAY, PAUSE or DISCIN
+		set drive error status to COMMANDERROR and stop processing command
+	check request format, if it's TOCT or TOCN, force it to absolute
+	if disc is not validated
+		set drive error status to COMMANDERROR and stop processing command
+	Send PLAY command to mechanism
+	Emulation state set to Fwding
+	scanClock is set to SCANPLAYTIME(10)??
+command Rvs
+	if drive status is NOT one of PLAY, PAUSE or DISCEND
+		set drive error status to COMMANDERROR and stop processing command
+	check request format, if it's TOCT or TOCN, force it to absolute
+	if disc is not validated
+		set drive error status to COMMANDERROR and stop processing command
+	Send PLAY command to mechanism
+	Emulation state set to Rvsing
+command TrackSkip
+	if drive status is NOT one of PLAY, PAUSE or DISCEND
+		set drive error status to COMMANDERROR and stop processing command
+	check request format, if it's TOCT or TOCN, force it to absolute
+	if disc is not validated
+		set drive error status to COMMANDERROR and stop processing command
+	direction to skip is in 4th nibble of command
+	number of tracks to skip is a 16-bit value in the 5th-8th nibbles
+		note tese are physical tracks i.e. loops of the spiral
+	SKIP command is sent to mechanism
+	PAUSE command is sent to mechanism
+	emulation state is set to TSkping
+command TrackCue
+	if drive status is NOT one of STOP, PLAY, PAUSE, DISCEND, DISCIN or TOCREAD
+		set drive error status to COMMANDERROR and stop processing command
+	if drive status is TOCREAD
+		check request format, if it's TOCT or TOCN, force it to absolute
+		if disc is not validated
+			set drive error status to COMMANDERROR and stop processing command
+	track number is in nibbles 3 and 4 in BCD format
+	calculates PBA of requested track from TOC
+	Sends SEEK command to mechanism for calculated PBA
+	if drive status at start of command was STOP, DISCEND or DISCIN
+		send PLAY command to mechanism
+	emulation state is set to CUING
+command DoorClose
+	if drive status is NOT one of DOOROPEN or TRAYMOVING
+		set drive error status to COMMANDERROR and stop processing command
+	CLOSE command is set to mechanism
+	emulation state is set to CLOSING
+command DoorOpen
+	if drive status is DOOROPEN
+		set drive error status to COMMANDERROR and stop processing command
+	if drive servo is not stopped:
+		set request format to absolute
+	OPEN command is sent to mechanism
+	emulation state set to OPENING
+	disc, TOC and program area validitly flags are cleared
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notes.txt	Sun Jan 23 11:11:07 2022 -0800
@@ -0,0 +1,76 @@
+cmp.w <ea>, Dn 4(1/0) + <ea> time
+cmp.l <ea>, Dn 6(1/0) + <ea> time
+cmp.w #num, Dn 4(1/0) + 4(1/0)
+cmp.l #num, Dn 6(1/0) + 8(2/0)
+
+cmpi.w #num, Dn 8(2/0)
+cmpi.l #num, Dn 14(3/0)
+
+
+movem
+
+subtype field (bits 9-11) = 110 or 100 depending on direction
+bit 8 = 0
+bit 7 = 1
+bit 6 = size
+
+
+
+x86-64 registers in 68K core
+
+1. native stack pointer
+2. current cycle count
+3. target cycle count
+4. cartridge address
+5. work ram address
+6. scratch register
+7. context pointer (contains 68K registers and memory pointers not in registers)
+8. status register (maybe, depends on how well I can abuse native x86 status stuff)
+Rest of registers used for holding 68K registers
+
+rax = cycle counter
+bl = N flag
+bh = V flag
+rcx = scratch register
+dl = Z flag
+dh = C flag
+rbp = target cycle count
+rsi = context pointer
+rdi = scratch register
+r8 = cartridge address
+r9 = work ram address
+r10 = d0
+r11 = d1
+r12 = d2
+r13 = a0
+r14 = a1
+r15 = a7
+rsp = native stack pointer
+
+68K context:
+uint8_t flags[5];
+uint8_t pad??[3]
+uint32_t dregs[8]; //8 + 4 * reg
+uint32_t aregs[8]; //40 + 4 * reg
+.....
+
+x86-64 registers in Z80 core
+
+ax = HL
+bx = BC
+cx = DE
+dx = IX
+ebp = current cycle count
+rsi = context pointer
+edi = target cycle count
+rsp = native stack pointer
+r8 = IY
+r9 = SP
+r10 = A (maybe AF?)
+r11 = z80 ram address
+r12 = cartridge address if bank is pointed at ROM
+r13 = scratch1
+r14 = scratch2
+r15 = ?maybe z80 bank register?
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/sf2_50mhz_analysis.txt	Sun Jan 23 11:11:07 2022 -0800
@@ -0,0 +1,173 @@
+HSYNC End
+Plane A: D13C
+??slot??
+tile
+tile
+Plane B: F29C
+?sprite tile slot?
+tile
+tile
+Plane A: D100
+68K Slot
+tile
+tile
+Plane B: F2A0
+?sprite table slot?
+tile
+tile
+Plane A: D104
+68K slot
+tile
+tile
+Plane B: F2A4
+?sprite table slot?
+tile
+tile
+Plane A: D108
+68K slot
+?tile?
+?tile?
+Plane B: F2A8
+?sprite table slot?
+tile
+tile
+Plane A: D10C
+refresh
+?tile?
+?tile?
+Plane B: F22C
+?sprite table slot?
+tile
+tile
+Plane A: D110
+68K slot
+?tile?
+?tile?
+Plane B: F230
+?sprite table slot?
+tile
+tile
+Plane A: D114
+68K slot
+?tile?
+?tile?
+Plane B: F2F4
+?sprite table slot?
+tile
+tile
+Plane A: D118
+68K slot
+?tile?
+?tile?
+Plane B: F238
+?sprite table slot?
+ttile tile
+Plane A: D11C
+refresh
+?tile?
+?tile?
+Plane B: F23C
+?sprite table slot?
+tile
+tile
+Plane A: D120
+68K slot
+?tile?
+?tile?
+Plane B: F240
+?sprite table slot?
+tile
+tile
+Plane A: D124
+68K Slot
+?tile?
+?tile?
+Plane B: F244
+?sprite table slot?
+tile
+tile
+Plane A: D128
+68K Slot
+?tile?
+?tile?
+Plane B: F3C8
+?sprite table slot?
+tile
+tile
+Plane A: D12C
+refresh
+?tile?
+?tile?
+Plane B: F24C
+?sprite table slot?
+tile
+tile
+Plane A: D130
+68K slot
+?tile?
+?tile?
+Plane B: F250
+?sprite table slot?
+tile
+tile
+Plane A: D134
+68K Slot
+?tile?
+?tile?
+Plane B: F254
+?sprite table slot?
+tile
+tile
+Plane A: D138
+68K slot
+?tile?
+?tile?
+Plane B: F3D8
+?sprite table slot?
+tile
+tile
+Plane A: D13C
+refresh
+tile
+tile
+Plane B: F3DC
+?sprite table slot?
+tile
+tile
+---------------
+68K Slot
+68K Slot
+sprite tile slot
+sprite tile slot
+sprite tile slot
+sprite tile slot
+?sprite tile slot?
+?sprite tile slot?
+?sprite tile slot?
+?sprite tile slot?
+?sprite tile slot?
+?sprite tile slot?
+?sprite tile slot?
+?sprite tile slot?
+?sprite tile slot?
+?sprite tile slot?
+68K Slot
+?sprite tile slot?
+?sprite tile slot?
+?sprite tile slot?
+?sprite tile slot?
+?sprite tile slot?
+HSYNC Start
+?sprite tile slot?
+?sprite tile slot?
+?sprite tile slot?
+?sprite tile slot?
+?sprite tile slot?
+?sprite tile slot?
+?unkown tile slot?
+68K Slot
+Horizontal Scroll
+?sprite tile slot?
+?sprite tile slot?
+?sprite tile slot?
+?unkown tile slot?
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/sf2_vram_map.txt	Sun Jan 23 11:11:07 2022 -0800
@@ -0,0 +1,64 @@
+0000: single color blocks
+0200: Random symbols????
+0400-0C00: Font
+0C00-0E??: Score font
+0E??: Player name displays
+
+2000-3000: floor (mostly, some garbage around 2800 and 2A00)
+3000-6C00: background
+6C00-8000: not graphics
+8000-~8A00: bat/bird sprites, special attack text
+8A00-9000: ?????
+9000-9200: More special attack text
+9200-9600: another font
+9800-AA00: special attack effects?
+AC00-B000: ????
+B000-B500: character sprite
+????
+C000-C500: chracter sprite
+D000-DA00: window name table
+DA00-DC00: Sprite attribute table
+DC00-E000: horizontal scroll data
+E000-????: plane A&B name table
+C500-FFFF: not graphics
+
+VDP Registers:
+Mode
+00 - 14
+01 - 64
+Scroll A Name Table Address: E000
+02 - 38
+Window Name Table Address: D000
+03 - 34
+Scroll B Name Table Address: E000
+04 - 07
+Sprite Attribute Table Address: DA00
+05 - 6D
+06 - 00
+Backdrop color - 0
+07 - 00
+08 - 00
+09 - 00
+HINT Counter
+0A - AF
+Mode - Full screen vertical scroll, line horizontal scroll, external ints disabled, 32 cell display, no interlacing
+0B - 03
+0C - 00
+H Scroll Data Address: DC00
+0D - 37
+0E - 00
+Auto increment
+0F - 02
+Scroll Size
+10 - 11
+Window H Pos
+11 - 00
+Window V Pos
+12 - 05
+DMA transfer length
+13 - 00
+14 - 00
+DMA source address and mode
+15 - DB
+16 - CF
+17 - 7F
--- a/sf2_50mhz_analysis.txt	Fri Jan 21 21:59:46 2022 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,173 +0,0 @@
-HSYNC End
-Plane A: D13C
-??slot??
-tile
-tile
-Plane B: F29C
-?sprite tile slot?
-tile
-tile
-Plane A: D100
-68K Slot
-tile
-tile
-Plane B: F2A0
-?sprite table slot?
-tile
-tile
-Plane A: D104
-68K slot
-tile
-tile
-Plane B: F2A4
-?sprite table slot?
-tile
-tile
-Plane A: D108
-68K slot
-?tile?
-?tile?
-Plane B: F2A8
-?sprite table slot?
-tile
-tile
-Plane A: D10C
-refresh
-?tile?
-?tile?
-Plane B: F22C
-?sprite table slot?
-tile
-tile
-Plane A: D110
-68K slot
-?tile?
-?tile?
-Plane B: F230
-?sprite table slot?
-tile
-tile
-Plane A: D114
-68K slot
-?tile?
-?tile?
-Plane B: F2F4
-?sprite table slot?
-tile
-tile
-Plane A: D118
-68K slot
-?tile?
-?tile?
-Plane B: F238
-?sprite table slot?
-ttile tile
-Plane A: D11C
-refresh
-?tile?
-?tile?
-Plane B: F23C
-?sprite table slot?
-tile
-tile
-Plane A: D120
-68K slot
-?tile?
-?tile?
-Plane B: F240
-?sprite table slot?
-tile
-tile
-Plane A: D124
-68K Slot
-?tile?
-?tile?
-Plane B: F244
-?sprite table slot?
-tile
-tile
-Plane A: D128
-68K Slot
-?tile?
-?tile?
-Plane B: F3C8
-?sprite table slot?
-tile
-tile
-Plane A: D12C
-refresh
-?tile?
-?tile?
-Plane B: F24C
-?sprite table slot?
-tile
-tile
-Plane A: D130
-68K slot
-?tile?
-?tile?
-Plane B: F250
-?sprite table slot?
-tile
-tile
-Plane A: D134
-68K Slot
-?tile?
-?tile?
-Plane B: F254
-?sprite table slot?
-tile
-tile
-Plane A: D138
-68K slot
-?tile?
-?tile?
-Plane B: F3D8
-?sprite table slot?
-tile
-tile
-Plane A: D13C
-refresh
-tile
-tile
-Plane B: F3DC
-?sprite table slot?
-tile
-tile
----------------
-68K Slot
-68K Slot
-sprite tile slot
-sprite tile slot
-sprite tile slot
-sprite tile slot
-?sprite tile slot?
-?sprite tile slot?
-?sprite tile slot?
-?sprite tile slot?
-?sprite tile slot?
-?sprite tile slot?
-?sprite tile slot?
-?sprite tile slot?
-?sprite tile slot?
-?sprite tile slot?
-68K Slot
-?sprite tile slot?
-?sprite tile slot?
-?sprite tile slot?
-?sprite tile slot?
-?sprite tile slot?
-HSYNC Start
-?sprite tile slot?
-?sprite tile slot?
-?sprite tile slot?
-?sprite tile slot?
-?sprite tile slot?
-?sprite tile slot?
-?unkown tile slot?
-68K Slot
-Horizontal Scroll
-?sprite tile slot?
-?sprite tile slot?
-?sprite tile slot?
-?unkown tile slot?
--- a/sf2_vram_map.txt	Fri Jan 21 21:59:46 2022 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-0000: single color blocks
-0200: Random symbols????
-0400-0C00: Font
-0C00-0E??: Score font
-0E??: Player name displays
-
-2000-3000: floor (mostly, some garbage around 2800 and 2A00)
-3000-6C00: background
-6C00-8000: not graphics
-8000-~8A00: bat/bird sprites, special attack text
-8A00-9000: ?????
-9000-9200: More special attack text
-9200-9600: another font
-9800-AA00: special attack effects?
-AC00-B000: ????
-B000-B500: character sprite
-????
-C000-C500: chracter sprite
-D000-DA00: window name table
-DA00-DC00: Sprite attribute table
-DC00-E000: horizontal scroll data
-E000-????: plane A&B name table
-C500-FFFF: not graphics
-
-VDP Registers:
-Mode
-00 - 14
-01 - 64
-Scroll A Name Table Address: E000
-02 - 38
-Window Name Table Address: D000
-03 - 34
-Scroll B Name Table Address: E000
-04 - 07
-Sprite Attribute Table Address: DA00
-05 - 6D
-06 - 00
-Backdrop color - 0
-07 - 00
-08 - 00
-09 - 00
-HINT Counter
-0A - AF
-Mode - Full screen vertical scroll, line horizontal scroll, external ints disabled, 32 cell display, no interlacing
-0B - 03
-0C - 00
-H Scroll Data Address: DC00
-0D - 37
-0E - 00
-Auto increment
-0F - 02
-Scroll Size
-10 - 11
-Window H Pos
-11 - 00
-Window V Pos
-12 - 05
-DMA transfer length
-13 - 00
-14 - 00
-DMA source address and mode
-15 - DB
-16 - CF
-17 - 7F