Previous 199869 Revisions Next

r19338 Wednesday 5th December, 2012 at 16:36:08 UTC by Angelo Salese
Simplified Kanji hook-up
[src/mess/drivers]pc9801.c

trunk/src/mess/drivers/pc9801.c
r19337r19338
55    preliminary driver by Angelo Salese
66
77    TODO:
8    - floppy interface doesn't seem to work at all with either floppy inserted or not, missing DMA irq?
98    - proper 8251 uart hook-up on keyboard
10    - boot is too slow right now, might be due of the floppy / HDD devices
119    - investigate on POR bit
12    - Write a PC80S31K device (also used on PC-8801 and PC-88VA, it's the FDC + Z80 sub-system);
1310   - Check for mouse support
14   - .FDI support, should be a standard raw image, but then it mis-match with the Western file format ...
1511   - kanji support;
12    - Write a PC80S31K device (also used on PC-8801 and PC-88VA, it's the FDC + Z80 sub-system);
1613
1714    TODO (PC-9801RS):
18    - floppy disk hook-up;
1915    - extra features;
2016    - clean-up duplicate code;
2117
r19337r19338
621617   int xi,yi;
622618   int x;
623619   UINT8 char_size,interlace_on;
624   UINT8 kanji_on;
625620   UINT16 tile;
626621   UINT8 pcg_sel, pcg_lr;
622   UINT8 kanji_sel;
627623
628624   if(state->m_video_ff[DISPLAY_REG] == 0) //screen is off
629625      return;
630626
631627   interlace_on = state->m_video_ff[INTERLACE_REG];
632628   char_size = (interlace_on) ? 16 : 8;
633   kanji_on = 0;
634629   tile = 0;
635630
636631   for(x=0;x<pitch;x++)
r19337r19338
643638
644639      tile_addr = addr+(x*(state->m_video_ff[WIDTH40_REG]+1));
645640
646      if(kanji_on)
647         kanji_on--;
648
649641      pcg_sel = 0;
642      kanji_sel = 0;
650643      pcg_lr = 0;
651644
652      if(kanji_on == 0)
645      tile = state->m_video_ram_1[(tile_addr*2) & 0x1fff] & 0xff;
646      knj_tile = state->m_video_ram_1[(tile_addr*2+1) & 0x1fff] & 0xff;
647      if((tile == 0x56 || tile == 0x57) && knj_tile)
653648      {
654         tile = state->m_video_ram_1[(tile_addr*2) & 0x1fff] & 0x00ff;
655         knj_tile = state->m_video_ram_1[(tile_addr*2+1) & 0x1fff] & 0xff;
656         if((tile & 0xe0) == 0 && knj_tile) // kanji select, TODO
657         {
658            tile <<= 8;
659            tile |= (knj_tile & 0x7f);
660            /* annoying kanji bit-swap applied on the address bus ... */
661            tile = BITSWAP16(tile,7,15,14,13,12,11,6,5,10,9,8,4,3,2,1,0);
662            tile &= 0x1fff;
663            kanji_on = 2;
664         }
665         else if((tile == 0x56 || tile == 0x57) && knj_tile)
666         {
667            pcg_sel = 1;
668            tile = knj_tile & 0x7f;
669            pcg_lr = (knj_tile & 0x80) >> 7;
670         }
649         pcg_sel = 1;
650         tile = knj_tile & 0x7f;
651         pcg_lr = (knj_tile & 0x80) >> 7;
671652      }
653      else if(knj_tile) // kanji select, TODO
654      {
655         pcg_lr = (knj_tile & 0x80) >> 7;
656         pcg_lr |= (tile & 0x80) >> 7; // Tokimeki Sports Gal 3
657         tile &= 0x7f;
658         tile <<= 8;
659         tile |= (knj_tile & 0x7f);
660         /* annoying kanji bit-swap applied on the address bus ... */
661         tile = BITSWAP16(tile,15,7,14,13,12,11,6,5,10,9,8,4,3,2,1,0);
662//         tile&=0x7fff;
663         kanji_sel = 1;
664      }
672665      attr = (state->m_video_ram_1[(tile_addr*2 & 0x1fff) | 0x2000] & 0x00ff);
673666
674667      secret = (attr & 1) ^ 1;
r19337r19338
694687
695688            if(!secret)
696689            {
697               if(kanji_on)
698                  tile_data = (state->m_kanji_rom[tile*0x20+yi*2+(kanji_on & 1)]);
690               if(kanji_sel)
691                  tile_data = (state->m_kanji_rom[tile*0x20+yi*2+pcg_lr]);
699692               else if(pcg_sel)
700693                  tile_data = (state->m_pcg_ram[0xac000*2+tile*0x40+yi*2+pcg_lr]);
701694               else
r19337r19338
34783471   ROM_LOAD("hn613128pac8.bin",0x00800, 0x01000, BAD_DUMP CRC(b5a15b5c) SHA1(e5f071edb72a5e9a8b8b1c23cf94a74d24cb648e) ) //bad dump, 8x16 charset? (it's on the kanji board)
34793472
34803473   ROM_REGION( 0x20000, "kanji", ROMREGION_ERASEFF )
3481   ROM_LOAD16_BYTE( "24256c-x01.bin", 0x00000, 0x8000, CRC(28ec1375) SHA1(9d8e98e703ce0f483df17c79f7e841c5c5cd1692) )
3482   ROM_LOAD16_BYTE( "24256c-x02.bin", 0x00001, 0x8000, CRC(90985158) SHA1(78fb106131a3f4eb054e87e00fe4f41193416d65) )
3483   ROM_LOAD16_BYTE( "24256c-x03.bin", 0x10000, 0x8000, CRC(d4893543) SHA1(eb8c1bee0f694e1e0c145a24152222d4e444e86f) )
3484   ROM_LOAD16_BYTE( "24256c-x04.bin", 0x10001, 0x8000, CRC(5dec0fc2) SHA1(41000da14d0805ed0801b31eb60623552e50e41c) )
3474   ROM_LOAD16_BYTE( "24256c-x01.bin", 0x00000, 0x8000, BAD_DUMP CRC(28ec1375) SHA1(9d8e98e703ce0f483df17c79f7e841c5c5cd1692) )
3475   ROM_LOAD16_BYTE( "24256c-x02.bin", 0x00001, 0x8000, BAD_DUMP CRC(90985158) SHA1(78fb106131a3f4eb054e87e00fe4f41193416d65) )
3476   ROM_LOAD16_BYTE( "24256c-x03.bin", 0x10000, 0x8000, BAD_DUMP CRC(d4893543) SHA1(eb8c1bee0f694e1e0c145a24152222d4e444e86f) )
3477   ROM_LOAD16_BYTE( "24256c-x04.bin", 0x10001, 0x8000, BAD_DUMP CRC(5dec0fc2) SHA1(41000da14d0805ed0801b31eb60623552e50e41c) )
34853478ROM_END
34863479
34873480/*
r19337r19338
35503543   ROM_REGION( 0x50000, "chargen", 0 )
35513544   ROM_LOAD( "font_rs.rom", 0x00000, 0x46800, BAD_DUMP CRC(da370e7a) SHA1(584d0c7fde8c7eac1f76dc5e242102261a878c5e) )
35523545
3553   ROM_REGION( 0x45000, "kanji", ROMREGION_ERASEFF )
3546   ROM_REGION( 0x40000, "kanji", ROMREGION_ERASEFF )
35543547   ROM_LOAD16_BYTE( "24256c-x01.bin", 0x00000, 0x8000, BAD_DUMP CRC(28ec1375) SHA1(9d8e98e703ce0f483df17c79f7e841c5c5cd1692) )
35553548   ROM_LOAD16_BYTE( "24256c-x02.bin", 0x00001, 0x8000, BAD_DUMP CRC(90985158) SHA1(78fb106131a3f4eb054e87e00fe4f41193416d65) )
35563549   ROM_LOAD16_BYTE( "24256c-x03.bin", 0x10000, 0x8000, BAD_DUMP CRC(d4893543) SHA1(eb8c1bee0f694e1e0c145a24152222d4e444e86f) )

Previous 199869 Revisions Next


© 1997-2024 The MAME Team