# HG changeset patch # User Michael Pavone # Date 1642965067 28800 # Node ID f1c2415f4d1dee2cc53cd3deeba54f4923c15193 # Parent 6399a776e98196cdcb936554dbdffb574a6eecb5 Move old notes into a subdir and add CDD MCU notes diff -r 6399a776e981 -r f1c2415f4d1d notes.txt --- 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 , Dn 4(1/0) + time -cmp.l , Dn 6(1/0) + 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? - - diff -r 6399a776e981 -r f1c2415f4d1d notes/cdd_mcu_notes.txt --- /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 diff -r 6399a776e981 -r f1c2415f4d1d notes/notes.txt --- /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 , Dn 4(1/0) + time +cmp.l , Dn 6(1/0) + 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? + + diff -r 6399a776e981 -r f1c2415f4d1d notes/sf2_50mhz_analysis.txt --- /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? diff -r 6399a776e981 -r f1c2415f4d1d notes/sf2_vram_map.txt --- /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 diff -r 6399a776e981 -r f1c2415f4d1d sf2_50mhz_analysis.txt --- 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? diff -r 6399a776e981 -r f1c2415f4d1d sf2_vram_map.txt --- 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