2 BANDAI FCG-3 + X24C01 style cartridge
\r
5 1990-08-11 B50EEP, LZ93D50+X24C01
\r
7 1990-10-27 DRAGON BALLZ, LZ93D50+X24C01
\r
8 まじかる☆タルるートくん ファンタスティックワールド
\r
9 1991-03-21 DRAGON BALLZ-B, LZ93D50+X24C01
\r
11 1992-06-19 DRAGON BALLZ-B, LZ93D50+X24C01 ← 24C02 ではない
\r
16 size_base = 2 * mega, size_max = 2 * mega,
\r
20 size_base = 0x0080, size_max = 0x0080,
\r
24 size_base = 1 * mega, size_max = 2 * mega,
\r
27 ppu_ramfind = false,
\r
28 vram_mirrorfind = false
\r
31 const register_offset = 0x8000;
\r
35 =====================
\r
36 X24C01 frame sequence
\r
37 =====================
\r
38 <START>[EEPROM address+RW]<A-ACK>[data]<D-ACK><STOP>
\r
40 <> is 1bit, [] is 8bit, A-ACK is address acknowledge,
\r
41 D-ACK is data acknowledge, R is 1, W is 0
\r
43 8bit data send MSB to LSB (bit7 to bit0)
\r
44 Dragon Ball Z1's program send address LSB to MSB (bug).
\r
46 slave address does not exist.
\r
48 --current address read--
\r
49 <START>[EEPROM address,R]<A-ACK>[EEPROM data]<D-ACK><STOP>
\r
51 --sequenctial read--
\r
52 <START>[EEPROM address,R]<A-ACK>|[EEPROM data]<D-ACK>|<STOP>
\r
53 |<- loop any times ->|
\r
56 |<START>[EEPROM address,W]<A-ACK>|[EEPROM data]<D-ACK>|<STOP>
\r
57 |<- loop A-ACK is H ->|<- loop 1to4times ->|
\r
60 function cpu_ram_access(d, pagesize, banksize)
\r
62 local I2C_WRITE = I2C_SEND_L;
\r
63 local I2C_READ = I2C_SEND_H;
\r
65 if(mode_is_read(d) == true){
\r
67 i2c_address_set(d, 0, I2C_READ);
\r
68 for(local i = 0; i < pagesize * banksize; i++){
\r
69 for(local bit = 0; bit < 8; bit++){
\r
70 cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_L | I2C_SEND_H);
\r
71 cpu_write(d, 0x800d, I2C_DIR_READ | I2C_CLOCK_H | I2C_SEND_H);
\r
72 cpu_read_bit_msb(d, 0x6000, 4);
\r
75 send_bit(d, I2C_SEND_L);
\r
79 //page write (4byte)
\r
80 for(local i = 0; i < pagesize * banksize; i+=4){
\r
81 i2c_address_set(d, i, I2C_WRITE);
\r
82 for(local j = 0; j < 4; j++){
\r
83 for(local bit = 0; bit < 8; bit++){
\r
84 local n = I2C_SEND_L;
\r
85 if(cpu_fetch_bit_msb(d) != 0){
\r