It is currently Fri Nov 16, 2018 6:57 am

All times are UTC - 7 hours





Post new topic Reply to topic  [ 4 posts ] 
Author Message
PostPosted: Thu Nov 01, 2018 12:52 pm 
Offline

Joined: Thu May 19, 2005 11:30 am
Posts: 694
A few of the games from Union Bond/Mars Productions seem to use a serial EPROM instead of the normal 8 KiB of WRAM at $6000-$7FFF:
  • 櫻桃小丸子 (Chibi Maruko, G-005)
  • 黑暗之蛊 (Dark Seed, G-009)
Using mapper 164 (more on other aspects of mappers 162-164 at a later time), I identify the following bit functions:
Code:
$5200 write:
 D~7654 3210
   ---------
    ..| .||+- DAT
      |  |+-- Inner 32 KiB bank number in mode 4
      |  +--- CLK
      +------ EN 1=Enable serial bus?
        
$5500 read:
 D~7654 3210
   ---------
    ... .|..
         +--- Data from serial bus
I am somewhat puzzled by the actual data being transferred. Either I am misunderstanding I²C, or the protocol is only I²C-like but not real I²C.

At the beginning of the game saving session:
Code:
EN: 0  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 1
EN: 1  CLK: 1  DAT: 1   ; cmd D2
EN: 1  CLK: 0  DAT: 1

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; cmd D1
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; cmd D0. cmd=100: clear? init?
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 1
EN: 1  CLK: 1  DAT: 1   ; A8?
EN: 1  CLK: 0  DAT: 1

EN: 1  CLK: 0  DAT: 1
EN: 1  CLK: 1  DAT: 1   ; A7?
EN: 1  CLK: 0  DAT: 1

EN: 1  CLK: 0  DAT: 1
EN: 1  CLK: 1  DAT: 1   ; A6?
EN: 1  CLK: 0  DAT: 1

EN: 1  CLK: 0  DAT: 1
EN: 1  CLK: 1  DAT: 1   ; A5?
EN: 1  CLK: 0  DAT: 1

EN: 1  CLK: 0  DAT: 1
EN: 1  CLK: 1  DAT: 1   ; A4?
EN: 1  CLK: 0  DAT: 1

EN: 1  CLK: 0  DAT: 1
EN: 1  CLK: 1  DAT: 1   ; A3?
EN: 1  CLK: 0  DAT: 1

EN: 1  CLK: 0  DAT: 1
EN: 1  CLK: 1  DAT: 1   ; A2?
EN: 1  CLK: 0  DAT: 1

EN: 1  CLK: 0  DAT: 1
EN: 1  CLK: 1  DAT: 1   ; A1?
EN: 1  CLK: 0  DAT: 1

EN: 1  CLK: 0  DAT: 1
EN: 1  CLK: 1  DAT: 1   ; A0?
EN: 1  CLK: 0  DAT: 1

EN: 0  CLK: 0  DAT: 1


For every byte (A0-A8, D0-D7) being saved:
Code:
EN: 1  CLK: 0  DAT: 1

EN: 1  CLK: 0  DAT: 1
EN: 1  CLK: 1  DAT: 1   ; cmd D2
EN: 1  CLK: 0  DAT: 1

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; cmd D1
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 1
EN: 1  CLK: 1  DAT: 1   ; cmd D0. cmd 101=write
EN: 1  CLK: 0  DAT: 1

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; A8
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; A7
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; A6
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; A5
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; A4
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; A3
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; A2
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; A1
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; A0
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; D7
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; D6
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; D5
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; D4
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; D3
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; D2
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; D1
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; D0
EN: 1  CLK: 0  DAT: 0

EN: 0  CLK: 0  DAT: 0
EN: 1  CLK: 0  DAT: 0
; wait for RDY
EN: 0  CLK: 0  DAT: 0


When loading a game, for every byte:
Code:
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 1
EN: 1  CLK: 1  DAT: 1   ; cmd D2
EN: 1  CLK: 0  DAT: 1

EN: 1  CLK: 0  DAT: 1
EN: 1  CLK: 1  DAT: 1   ; cmd D1
EN: 1  CLK: 0  DAT: 1

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; cmd D0. cmd 110=read
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; A8
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; A7
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; A6
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; A5
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; A4
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; A3
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; A2
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; A1
EN: 1  CLK: 0  DAT: 0

EN: 1  CLK: 0  DAT: 0
EN: 1  CLK: 1  DAT: 0   ; A0
EN: 1  CLK: 0  DAT: 0

Eight times:
EN: 1  CLK: 1  DAT: 0
EN: 1  CLK: 0  DAT: 0
; Read bit
Any idea what particular device this might be?


Top
 Profile  
 
PostPosted: Thu Nov 01, 2018 1:00 pm 
Offline

Joined: Sun Apr 13, 2008 11:12 am
Posts: 7714
Location: Seattle
With 9 bits of address, that looks like a 93c66.


Top
 Profile  
 
PostPosted: Thu Nov 01, 2018 1:05 pm 
Offline

Joined: Thu May 19, 2005 11:30 am
Posts: 694
That seems to check out. Thanks!

So what I called "EN" would be the Chip Select line of the Microwire (not I²C) interface?


Top
 Profile  
 
PostPosted: Thu Nov 01, 2018 1:09 pm 
Offline

Joined: Sun Apr 13, 2008 11:12 am
Posts: 7714
Location: Seattle
Yup.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 4 posts ] 

All times are UTC - 7 hours


Who is online

Users browsing this forum: Google [Bot] and 5 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group