src/mess/drivers/x1.c
| r6295 | r6296 | |
| 994 | 994 | { |
| 995 | 995 | int addr; |
| 996 | 996 | int calc_pcg_offset; |
| 997 | static UINT32 kanji_offset; |
| 997 | 998 | static UINT8 bios_offset,pcg_index_r[3],res; |
| 998 | 999 | UINT8 *gfx_data; |
| 999 | 1000 | |
| r6295 | r6296 | |
| 1001 | 1002 | |
| 1002 | 1003 | if(addr == 0) |
| 1003 | 1004 | { |
| 1004 | | printf("%04x %02x\n",pcg_write_addr,bios_offset); |
| 1005 | | gfx_data = memory_region(space->machine, "font"); |
| 1006 | | res = gfx_data[0x0800+bios_offset+(pcg_write_addr*0x20)]; |
| 1005 | // printf("%04x %04x %02x\n",pcg_write_addr*4*8,pcg_write_addr,bios_offset); |
| 1006 | gfx_data = memory_region(space->machine, "kanji"); |
| 1007 | if(bios_offset == 0) |
| 1008 | kanji_offset = pcg_write_addr*4*8; |
| 1007 | 1009 | |
| 1010 | res = gfx_data[0x0000+bios_offset+kanji_offset]; |
| 1011 | |
| 1008 | 1012 | bios_offset++; |
| 1009 | 1013 | bios_offset&=0x1f; |
| 1010 | 1014 | return res; |
| r6295 | r6296 | |
| 1223 | 1227 | static UINT32 kanji_addr; |
| 1224 | 1228 | |
| 1225 | 1229 | /* |
| 1226 | | * FIXME: recheck this once that the kanji rom is redumped, it's confirmed bad for the following reasons: |
| 1227 | | * - A game lets you type stuff that's typed with this function, the index doesn't match with the typed char; |
| 1228 | | * - It search for chars that are out of the rom range; |
| 1230 | * FIXME: this makes no sense atm, the only game that uses this function so far is Hyper Olympics '84 disk version |
| 1229 | 1231 | */ |
| 1230 | 1232 | static READ8_HANDLER( x1_kanji_r ) |
| 1231 | 1233 | { |
| r6295 | r6296 | |
| 1234 | 1236 | |
| 1235 | 1237 | //res = 0; |
| 1236 | 1238 | |
| 1237 | | //printf("%08x\n",kanji_addr*0x20); |
| 1239 | printf("%08x\n",kanji_addr*0x20+kanji_count); |
| 1238 | 1240 | |
| 1239 | 1241 | res = kanji_rom[(kanji_addr*0x20)+(kanji_count)]; |
| 1240 | 1242 | kanji_count++; |
| r6295 | r6296 | |
| 1248 | 1250 | static WRITE8_HANDLER( x1_kanji_w ) |
| 1249 | 1251 | { |
| 1250 | 1252 | // if(offset < 2) |
| 1251 | | // printf("%04x %02x W\n",offset,data); |
| 1253 | printf("%04x %02x W\n",offset,data); |
| 1254 | |
| 1252 | 1255 | switch(offset) |
| 1253 | 1256 | { |
| 1254 | 1257 | case 0: kanji_addr_l = (data & 0xff); break; |
| r6295 | r6296 | |
| 1257 | 1260 | if(data) |
| 1258 | 1261 | { |
| 1259 | 1262 | kanji_addr = (kanji_addr_h<<8) | (kanji_addr_l); |
| 1260 | | kanji_addr &= 0x3fff; //<- temp kludge until the rom is redumped. |
| 1263 | //kanji_addr &= 0x3fff; //<- temp kludge until the rom is redumped. |
| 1261 | 1264 | //printf("%08x\n",kanji_addr); |
| 1262 | 1265 | //kanji_addr+= kanji_count; |
| 1263 | 1266 | } |
| r6295 | r6296 | |
| 2290 | 2293 | ROM_END |
| 2291 | 2294 | |
| 2292 | 2295 | |
| 2293 | | /* Convert the 8-bytes interleaving into something usable by the write handler */ |
| 2296 | /* Convert the ROM interleaving into something usable by the write handlers */ |
| 2294 | 2297 | static DRIVER_INIT( kanji ) |
| 2295 | 2298 | { |
| 2296 | 2299 | UINT32 i,j,k,l; |
| r6295 | r6296 | |
| 2300 | 2303 | k = 0; |
| 2301 | 2304 | for(l=0;l<2;l++) |
| 2302 | 2305 | { |
| 2303 | | for(j=l*8;j<(l*8)+0x10000;j+=16) |
| 2306 | for(j=l*16;j<(l*16)+0x10000;j+=32) |
| 2304 | 2307 | { |
| 2305 | | for(i=0;i<8;i++) |
| 2308 | for(i=0;i<16;i++) |
| 2306 | 2309 | { |
| 2307 | 2310 | kanji[j+i] = raw_kanji[k]; |
| 2308 | 2311 | kanji[j+i+0x10000] = raw_kanji[0x10000+k]; |