Previous 15994 Revisions Next

r5286 Tuesday 21st July, 2009 at 14:30:14 UTC by Miodrag Milanović
[PK8020] Promoted to working driver
[docs]messnew.txt
[src/mess/drivers]pk8020.c
[src/mess/includes]pk8020.h
[src/mess/machine]pk8020.c
[src/mess/video]pk8020.c

src/mess/video/pk8020.c
r5285r5286
1515
1616VIDEO_UPDATE( pk8020 )
1717{
18    //UINT8 code1,code2,code3,code4;
19    //UINT8 col;
20   int y, x, b, j;
18    int y, x, b, j;
2119   UINT8 *gfx = memory_region(screen->machine, "gfx1");
2220   
23   // draw image
24/*   for (x = 0; x < 32; x++)
25   {
26      for (y = 0; y < 256; y++)
27      {
28         code1 = mess_ram[0x10000 + x*256 + y];
29         code2 = mess_ram[0x14000 + x*256 + y];
30         code3 = mess_ram[0x18000 + x*256 + y];
31         code4 = mess_ram[0x1C000 + x*256 + y];
32         for (b = 0; b < 8; b++)
33         {
34            col = ((code1 >> b) & 0x01) * 8 + ((code2 >> b) & 0x01) * 4 + ((code3 >> b) & 0x01)* 2+ ((code4 >> b) & 0x01);
35            *BITMAP_ADDR16(bitmap, 255-y, x*8+(7-b)) =  col;
36         }
37      }
38   }
39*/
40
4121   for (y = 0; y < 16; y++)
4222   {
4323      for (x = 0; x < 64; x++)
4424      {
45         UINT8 chr = mess_ram[x +(y*64) + 0x20000] ;
46         for (j = 0; j < 16; j++) {
47            UINT8 code = gfx[((chr<<4) + j)];
25         UINT8 chr = mess_ram[x +(y*64) + 0x40000];
26         UINT8 attr= mess_ram[x +(y*64) + 0x40400];         
27         for (j = 0; j < 16; j++) {           
28            UINT32 addr = 0x10000 + x + ((y*16+j)*64) + (pk8020_video_page * 0xC000);
29            UINT8 code1 = mess_ram[addr];
30            UINT8 code2 = mess_ram[addr + 0x4000];
31            UINT8 code3 = mess_ram[addr + 0x8000];
32            UINT8 code4 = gfx[((chr<<4) + j) + (pk8020_font*0x1000)];           
33            if(attr) code4 ^= 0xff;
4834            for (b = 0; b < 8; b++)
4935            {                       
50               UINT8 col = ((code >> b) & 0x01) ? ((pk8020_color >> 4)& 0xf)^ 0x0f : ((pk8020_color >> 1) & 0x07);
36               UINT8 col = (((code4 >> b) & 0x01) ? 0x08 : 0x00);
37               col |= (((code3 >> b) & 0x01) ? 0x04 : 0x00);
38               col |= (((code2 >> b) & 0x01) ? 0x02 : 0x00);
39               col |= (((code1 >> b) & 0x01) ? 0x01 : 0x00);
5140               *BITMAP_ADDR16(bitmap, (y*16)+j, x*8+(7-b)) =  col;
5241            }
5342         }
src/mess/includes/pk8020.h
r5285r5286
1616
1717/*----------- defined in machine/pk8020.c -----------*/
1818extern UINT8 pk8020_color;
19extern UINT8 pk8020_video_page;
20extern UINT8 pk8020_wide;
21extern UINT8 pk8020_font;
1922extern DRIVER_INIT( pk8020 );
2023extern MACHINE_RESET( pk8020 );
2124extern const i8255a_interface pk8020_ppi8255_interface_1;
src/mess/machine/pk8020.c
r5285r5286
1111#include "cpu/i8085/i8085.h"
1212#include "includes/pk8020.h"
1313
14static UINT8 vpage = 0;
1514static UINT8 attr = 0;
15static UINT8 text_attr = 0;
1616static UINT8 takt = 0;
1717UINT8 pk8020_color = 0;
18UINT8 pk8020_video_page = 0;
19UINT8 pk8020_wide = 0;
20UINT8 pk8020_font = 0;
21static UINT8 pk8020_video_page_access = 0;
22static UINT8 portc_data;
1823
1924static void pk8020_set_bank(running_machine *machine,UINT8 data);
2025
2126/* Driver initialization */
2227DRIVER_INIT(pk8020)
2328{
24   memset(mess_ram,0,129*1024);
29   memset(mess_ram,0,(64 + 4*48 + 2)*1024);
2530}
2631
2732static READ8_HANDLER(keyboard_r)
r5285r5286
4853   line++;
4954   if (offset & 0x0080) retVal|=input_port_read(space->machine,keynames[line]);
5055   line++;
56
5157   return retVal;
5258}
5359
5460static READ8_HANDLER(sysreg_r)
5561{
56   logerror("sysreg_r %02x\n",offset);
57   return 0xff;
62   return mess_ram[offset];
5863}
5964static WRITE8_HANDLER(sysreg_w)
6065{
61   logerror("sysreg_w %02x %02x\n",offset,data);
6266   if (BIT(offset,7)==0) {
6367      pk8020_set_bank(space->machine,data >> 2);
6468   } else if (BIT(offset,6)==0) {
6569      // Color
66      pk8020_color = data;
70      pk8020_color = data;     
6771   } else if (BIT(offset,2)==0) {
6872      // Palette set
6973      UINT8 number = data & 0x0f;
r5285r5286
7882
7983static READ8_HANDLER(text_r)
8084{
81   return mess_ram[0x20000+offset];   
85    if (attr == 3) text_attr=mess_ram[0x40400+offset];
86   return mess_ram[0x40000+offset];   
8287}
8388
8489static WRITE8_HANDLER(text_w)
8590{
86   mess_ram[0x20000+offset] = data;
91   mess_ram[0x40000+offset] = data;
92   switch (attr) {
93        case 0: break;
94        case 1: mess_ram[0x40400+offset]=0x01;break;
95        case 2: mess_ram[0x40400+offset]=0x00;break;
96        case 3: mess_ram[0x40400+offset]=text_attr;break;
97    }   
8798}
8899
100static READ8_HANDLER(gzu_r)
101{   
102   UINT8 *addr = mess_ram + 0x10000 + (pk8020_video_page_access * 0xC000);
103   UINT8 p0 = addr[offset];
104   UINT8 p1 = addr[offset + 0x4000];
105   UINT8 p2 = addr[offset + 0x8000];
106   UINT8 retVal = 0;
107   if(pk8020_color & 0x80) {
108      // Color mode
109      if (!(pk8020_color & 0x10)) {
110         p0 ^= 0xff;
111      }
112      if (!(pk8020_color & 0x20)) {
113         p1 ^= 0xff;
114      }
115      if (!(pk8020_color & 0x40)) {
116         p2 ^= 0xff;
117      }
118      retVal = (p0 & p1 & p2) ^ 0xff;
119   } else {
120      // Plane mode
121      if (pk8020_color & 0x10) {
122         retVal |= p0;
123      }
124      if (pk8020_color & 0x20) {
125         retVal |= p1;
126      }
127      if (pk8020_color & 0x40) {
128         retVal |= p2;
129      }
130   }
131   return retVal;
132}
133
134static WRITE8_HANDLER(gzu_w)
135{
136   UINT8 *addr = mess_ram + 0x10000 + (pk8020_video_page_access * 0xC000);
137   UINT8 *plane_0 = addr;
138   UINT8 *plane_1 = addr + 0x4000;
139   UINT8 *plane_2 = addr + 0x8000;
140   
141   if(pk8020_color & 0x80)
142   {
143      // Color mode
144      plane_0[offset] = (plane_0[offset] & ~data) | ((pk8020_color & 2) ? data : 0);
145      plane_1[offset] = (plane_1[offset] & ~data) | ((pk8020_color & 4) ? data : 0);
146      plane_2[offset] = (plane_2[offset] & ~data) | ((pk8020_color & 8) ? data : 0);
147   } else {
148      // Plane mode
149      UINT8 mask = (pk8020_color & 1) ? data : 0;
150         if (!(pk8020_color & 0x02)) {
151            plane_0[offset] = (plane_0[offset] & ~data) | mask;
152         }
153         if (!(pk8020_color & 0x04)) {
154            plane_1[offset] = (plane_1[offset] & ~data) | mask;
155         }
156         if (!(pk8020_color & 0x08)) {
157            plane_2[offset] = (plane_2[offset] & ~data) | mask;
158         }
159   }
160}
161
89162static READ8_HANDLER(devices_r)
90163{
91164   const device_config *ppi1 = devtag_get_device(space->machine, "ppi8255_1");
r5285r5286
96169   const device_config *rs232 = devtag_get_device(space->machine, "rs232");
97170   const device_config *lan = devtag_get_device(space->machine, "lan");
98171   const device_config *fdc = devtag_get_device(space->machine, "wd1793");   
99   switch(offset & 0x38)
100   {
101      case 0x00:
102      case 0x18:
103      case 0x20:
104      case 0x28:
105      case 0x38:
106         //logerror("devices_r %02x %04x\n",offset,cpu_get_pc(space->cpu));
107         break;
108   }
109172   
110173   switch(offset & 0x38)
111174   {
r5285r5286
145208   const device_config *rs232 = devtag_get_device(space->machine, "rs232");
146209   const device_config *lan = devtag_get_device(space->machine, "lan");
147210   const device_config *fdc = devtag_get_device(space->machine, "wd1793");
148   switch(offset & 0x38)
149   {
150      case 0x00:
151      case 0x18:
152      case 0x20:
153      case 0x28:
154      case 0x38:
155         //logerror("devices_w %02x %02x %04x\n",offset,data,cpu_get_pc(space->cpu));
156         break;
157   }
158211   
159212   switch(offset & 0x38)
160213   {
r5285r5286
166219               }
167220               break;         
168221      case 0x18: switch(offset & 3) {
169                  case 0 : wd17xx_command_w(fdc,0,data);
170                  case 1 : wd17xx_track_w(fdc,0,data);
171                  case 2 : wd17xx_sector_w(fdc,0,data);
172                  case 3 : wd17xx_data_w(fdc,0,data);
222                  case 0 : wd17xx_command_w(fdc,0,data);break;
223                  case 1 : wd17xx_track_w(fdc,0,data);break;
224                  case 2 : wd17xx_sector_w(fdc,0,data);break;
225                  case 3 : wd17xx_data_w(fdc,0,data);break;
173226               }
174227               break;                 
175228      case 0x20: switch(offset & 1) {
r5285r5286
186239static void pk8020_set_bank(running_machine *machine,UINT8 data)
187240{
188241   const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM);   
189   
190242   switch(data & 0x1F) {
191243      case 0x00 :
192244               {
r5285r5286
309361                  // RAM
310362                  memory_install_read8_handler (space, 0x0000, 0xf7ff, 0, 0, SMH_BANK(1));
311363                  memory_install_write8_handler(space, 0x0000, 0xf7ff, 0, 0, SMH_BANK(2));
312                  memory_set_bankptr(machine, 1, mess_ram + 0x4000);
313                  memory_set_bankptr(machine, 2, mess_ram + 0x4000);
364                  memory_set_bankptr(machine, 1, mess_ram);
365                  memory_set_bankptr(machine, 2, mess_ram);
314366                  // Keyboard
315367                  memory_install_read8_handler (space, 0xf800, 0xf9ff, 0, 0, keyboard_r);
316368                  memory_install_write8_handler(space, 0xf800, 0xf9ff, 0, 0, SMH_BANK(3));
r5285r5286
352404                  memory_set_bankptr(machine, 4, mess_ram + 0x4000);
353405                  memory_set_bankptr(machine, 5, mess_ram + 0x4000);
354406                  // Video RAM
355                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(6));
356                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(7));
357                  memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000);
358                  memory_set_bankptr(machine, 7, mess_ram + 0x10000 + vpage * 0x4000);
407                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r);
408                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w);
359409                 
360410               }
361411               break;
r5285r5286
372422                  memory_set_bankptr(machine, 3, mess_ram + 0x2000);
373423                  memory_set_bankptr(machine, 4, mess_ram + 0x2000);
374424                  // Video RAM
375                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(5));
376                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(6));
377                  memory_set_bankptr(machine, 5, mess_ram + 0x10000 + vpage * 0x4000);
378                  memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000);
379                 
425                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r);
426                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w);                 
380427               }
381428               break;
382429      case 0x0A :
r5285r5286
392439                  memory_set_bankptr(machine, 3, mess_ram + 0x4000);
393440                  memory_set_bankptr(machine, 4, mess_ram + 0x4000);
394441                  // Video RAM
395                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(5));
396                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(6));
397                  memory_set_bankptr(machine, 5, mess_ram + 0x10000 + vpage * 0x4000);
398                  memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000);
399                 
442                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r);
443                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w);
400444               }
401445               break;
402446      case 0x0B :
r5285r5286
407451                  memory_set_bankptr(machine, 1, mess_ram + 0x0000);
408452                  memory_set_bankptr(machine, 2, mess_ram + 0x0000);
409453                  // Video RAM
410                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(3));
411                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(4));
412                  memory_set_bankptr(machine, 3, mess_ram + 0x10000 + vpage * 0x4000);
413                  memory_set_bankptr(machine, 4, mess_ram + 0x10000 + vpage * 0x4000);
414                 
454                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r);
455                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w);
415456               }
416457               break;
417458      case 0x0C :
r5285r5286
428469                  memory_set_bankptr(machine, 3, mess_ram + 0x2000);
429470                  memory_set_bankptr(machine, 4, mess_ram + 0x2000);
430471                  // Video RAM
431                  memory_install_read8_handler (space, 0x4000, 0x7fff, 0, 0, SMH_BANK(5));
432                  memory_install_write8_handler(space, 0x4000, 0x7fff, 0, 0, SMH_BANK(6));
433                  memory_set_bankptr(machine, 5, mess_ram + 0x10000 + vpage * 0x4000);
434                  memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000);
472                  memory_install_read8_handler (space, 0x4000, 0x7fff, 0, 0, gzu_r);
473                  memory_install_write8_handler(space, 0x4000, 0x7fff, 0, 0, gzu_w);
435474                  // RAM
436                  memory_install_read8_handler (space, 0x8000, 0xfdff, 0, 0, SMH_BANK(7));
437                  memory_install_write8_handler(space, 0x8000, 0xfdff, 0, 0, SMH_BANK(8));
438                  memory_set_bankptr(machine, 7, mess_ram + 0x8000);
439                  memory_set_bankptr(machine, 8, mess_ram + 0x8000);
475                  memory_install_read8_handler (space, 0x8000, 0xfdff, 0, 0, SMH_BANK(5));
476                  memory_install_write8_handler(space, 0x8000, 0xfdff, 0, 0, SMH_BANK(6));
477                  memory_set_bankptr(machine, 5, mess_ram + 0x8000);
478                  memory_set_bankptr(machine, 6, mess_ram + 0x8000);
440479                  // Devices
441480                  memory_install_read8_handler (space, 0xfe00, 0xfeff, 0, 0, devices_r);
442481                  memory_install_write8_handler(space, 0xfe00, 0xfeff, 0, 0, devices_w);
r5285r5286
453492                  memory_set_bankptr(machine, 1, memory_region(machine,"maincpu") + 0x10000);
454493                  memory_set_bankptr(machine, 2, mess_ram + 0x0000);
455494                  // Video RAM
456                  memory_install_read8_handler (space, 0x4000, 0x7fff, 0, 0, SMH_BANK(3));
457                  memory_install_write8_handler(space, 0x4000, 0x7fff, 0, 0, SMH_BANK(4));
458                  memory_set_bankptr(machine, 3, mess_ram + 0x10000 + vpage * 0x4000);
459                  memory_set_bankptr(machine, 4, mess_ram + 0x10000 + vpage * 0x4000);
495                  memory_install_read8_handler (space, 0x4000, 0x7fff, 0, 0, gzu_r);
496                  memory_install_write8_handler(space, 0x4000, 0x7fff, 0, 0, gzu_w);
460497                  // RAM
461498                  memory_install_read8_handler (space, 0x8000, 0xfdff, 0, 0, SMH_BANK(5));
462499                  memory_install_write8_handler(space, 0x8000, 0xfdff, 0, 0, SMH_BANK(6));
r5285r5286
478515                  memory_set_bankptr(machine, 1, mess_ram + 0x0000);
479516                  memory_set_bankptr(machine, 2, mess_ram + 0x0000);
480517                  // Video RAM
481                  memory_install_read8_handler (space, 0x4000, 0x7fff, 0, 0, SMH_BANK(3));
482                  memory_install_write8_handler(space, 0x4000, 0x7fff, 0, 0, SMH_BANK(4));
483                  memory_set_bankptr(machine, 3, mess_ram + 0x10000 + vpage * 0x4000);
484                  memory_set_bankptr(machine, 4, mess_ram + 0x10000 + vpage * 0x4000);
518                  memory_install_read8_handler (space, 0x4000, 0x7fff, 0, 0, gzu_r);
519                  memory_install_write8_handler(space, 0x4000, 0x7fff, 0, 0, gzu_w);
485520                  // RAM
486                  memory_install_read8_handler (space, 0x8000, 0xfdff, 0, 0, SMH_BANK(5));
487                  memory_install_write8_handler(space, 0x8000, 0xfdff, 0, 0, SMH_BANK(6));
488                  memory_set_bankptr(machine, 5, mess_ram + 0x8000);
489                  memory_set_bankptr(machine, 6, mess_ram + 0x8000);
521                  memory_install_read8_handler (space, 0x8000, 0xfdff, 0, 0, SMH_BANK(3));
522                  memory_install_write8_handler(space, 0x8000, 0xfdff, 0, 0, SMH_BANK(4));
523                  memory_set_bankptr(machine, 3, mess_ram + 0x8000);
524                  memory_set_bankptr(machine, 4, mess_ram + 0x8000);
490525                  // Devices
491526                  memory_install_read8_handler (space, 0xfe00, 0xfeff, 0, 0, devices_r);
492527                  memory_install_write8_handler(space, 0xfe00, 0xfeff, 0, 0, devices_w);
r5285r5286
689724                  memory_install_read8_handler (space, 0xbf00, 0xbfff, 0, 0, sysreg_r);
690725                  memory_install_write8_handler(space, 0xbf00, 0xbfff, 0, 0, sysreg_w);                 
691726                  // Video RAM
692                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(5));
693                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(6));
694                  memory_set_bankptr(machine, 5, mess_ram + 0x10000 + vpage * 0x4000);
695                  memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000);
727                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r);
728                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w);
696729               }
697730               break;
698731      case 0x19 :
r5285r5286
711744                  memory_install_read8_handler (space, 0xbf00, 0xbfff, 0, 0, sysreg_r);
712745                  memory_install_write8_handler(space, 0xbf00, 0xbfff, 0, 0, sysreg_w);                 
713746                  // Video RAM
714                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(5));
715                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(6));
716                  memory_set_bankptr(machine, 5, mess_ram + 0x10000 + vpage * 0x4000);
717                  memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000);
747                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r);
748                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w);
718749               }
719750               break;
720751      case 0x1A :
r5285r5286
733764                  memory_install_read8_handler (space, 0xbf00, 0xbfff, 0, 0, sysreg_r);
734765                  memory_install_write8_handler(space, 0xbf00, 0xbfff, 0, 0, sysreg_w);                 
735766                  // Video RAM
736                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(5));
737                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(6));
738                  memory_set_bankptr(machine, 5, mess_ram + 0x10000 + vpage * 0x4000);
739                  memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000);
767                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r);
768                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w);
740769               }
741770               break;
742771      case 0x1B :
r5285r5286
750779                  memory_install_read8_handler (space, 0xbf00, 0xbfff, 0, 0, sysreg_r);
751780                  memory_install_write8_handler(space, 0xbf00, 0xbfff, 0, 0, sysreg_w);                 
752781                  // Video RAM
753                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(3));
754                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(4));
755                  memory_set_bankptr(machine, 3, mess_ram + 0x10000 + vpage * 0x4000);
756                  memory_set_bankptr(machine, 4, mess_ram + 0x10000 + vpage * 0x4000);
782                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r);
783                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w);
757784               }
758785               break;
759786      case 0x1C :
r5285r5286
769796                  memory_set_bankptr(machine, 3, mess_ram + 0x6000);
770797                  memory_set_bankptr(machine, 4, mess_ram + 0x6000);
771798                  // Video RAM
772                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(5));
773                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(6));
774                  memory_set_bankptr(machine, 5, mess_ram + 0x10000 + vpage * 0x4000);
775                  memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000);
799                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r);
800                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w);
776801               }
777802               break;
778803      case 0x1D :
r5285r5286
788813                  memory_set_bankptr(machine, 3, mess_ram + 0x2000);
789814                  memory_set_bankptr(machine, 4, mess_ram + 0x2000);
790815                  // Video RAM
791                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(5));
792                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(6));
793                  memory_set_bankptr(machine, 5, mess_ram + 0x10000 + vpage * 0x4000);
794                  memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000);
816                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r);
817                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w);
795818               }
796819               break;
797820      case 0x1E :
r5285r5286
807830                  memory_set_bankptr(machine, 3, mess_ram + 0x4000);
808831                  memory_set_bankptr(machine, 4, mess_ram + 0x4000);
809832                  // Video RAM
810                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(5));
811                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(6));
812                  memory_set_bankptr(machine, 5, mess_ram + 0x10000 + vpage * 0x4000);
813                  memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000);
833                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r);
834                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w);
814835               }
815836               break;
816837      case 0x1F :
r5285r5286
821842                  memory_set_bankptr(machine, 1, mess_ram);
822843                  memory_set_bankptr(machine, 2, mess_ram);
823844                  // Video RAM
824                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(3));
825                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(4));
826                  memory_set_bankptr(machine, 3, mess_ram + 0x10000 + vpage * 0x4000);
827                  memory_set_bankptr(machine, 4, mess_ram + 0x10000 + vpage * 0x4000);
845                  memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r);
846                  memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w);
828847               }
829848               break;
830849               
r5285r5286
833852
834853static READ8_DEVICE_HANDLER(pk8020_porta_r)
835854{   
836   return 0xf0 | (takt <<1) | (attr &1)<<3;
855   return 0xf0 | (takt <<1) | (text_attr)<<3;
837856}
838857
839858static WRITE8_DEVICE_HANDLER(pk8020_portc_w)
840{   
841   if (((data & 0x30) >> 4)==3) {
842      attr ^=1;
859{
860   pk8020_video_page_access =(data>>6) & 3;
861   attr = (data >> 4) & 3;
862   pk8020_wide = (data >> 3) & 1;
863   pk8020_font = (data >> 2) & 1;   
864   pk8020_video_page = (data & 3);   
865   
866   
867   portc_data = data;
868}
869
870static WRITE8_DEVICE_HANDLER(pk8020_portb_w)
871{
872   const device_config *fdc = devtag_get_device(device->machine, "wd1793");
873   wd17xx_set_side(fdc,BIT(data,4));
874   if (BIT(data,0)) {
875       wd17xx_set_drive(fdc,0);
876   } else if (BIT(data,1)) {
877       wd17xx_set_drive(fdc,1);
878   } else if (BIT(data,2)) {
879       wd17xx_set_drive(fdc,2);
880   } else if (BIT(data,3)) {
881       wd17xx_set_drive(fdc,3);
843882   }
844883}
845884
885static READ8_DEVICE_HANDLER(pk8020_portc_r)
886{   
887   return portc_data;
888}
889
890
846891I8255A_INTERFACE( pk8020_ppi8255_interface_1 )
847892{
848893   DEVCB_HANDLER(pk8020_porta_r),
849894   DEVCB_NULL,
895   DEVCB_HANDLER(pk8020_portc_r),
850896   DEVCB_NULL,
851   DEVCB_NULL,
852   DEVCB_NULL,
897   DEVCB_HANDLER(pk8020_portb_w),
853898   DEVCB_HANDLER(pk8020_portc_w)
854899};
855900static READ8_DEVICE_HANDLER(pk8020_unk_r)
r5285r5286
926971
927972MACHINE_RESET( pk8020 )
928973{
974   const device_config *fdc = devtag_get_device(machine, "wd1793");
929975   pk8020_set_bank(machine,0);
930976   cpu_set_irq_callback(cputag_get_cpu(machine, "maincpu"), pk8020_irq_callback);
977     
978   wd17xx_set_density (fdc,DEN_FM_HI);   
931979}
932980
933981DEVICE_IMAGE_LOAD( pk8020_floppy )
r5285r5286
9581006INTERRUPT_GEN( pk8020_interrupt )
9591007{
9601008   takt ^= 1;
1009   pic8259_set_irq_line(devtag_get_device(device->machine, "pic8259"),4,1);
9611010}
9621011
src/mess/drivers/pk8020.c
r5285r5286
199199ROM_END
200200
201201static SYSTEM_CONFIG_START(pk8020)
202    CONFIG_RAM_DEFAULT((128 + 1) * 1024)
202    CONFIG_RAM_DEFAULT((64 + 4*48 + 2) * 1024) // Text video ram is 1KB but it is 9bit, so we take 2 KB for that
203203    CONFIG_DEVICE(pk8020_floppy_getinfo);
204204SYSTEM_CONFIG_END
205205
206206/* Driver */
207207
208208/*    YEAR  NAME    PARENT  COMPAT  MACHINE     INPUT       INIT     CONFIG COMPANY                  FULLNAME   FLAGS */
209COMP( 1987, korvet,     0,      0,   pk8020,    pk8020,    pk8020, pk8020,  "",                 "PK8020 Korvet",    GAME_NOT_WORKING)
209COMP( 1987, korvet,     0,      0,   pk8020,    pk8020,    pk8020, pk8020,  "",                 "PK8020 Korvet",    0)
docs/messnew.txt
r5285r5286
2222- Lerncomputer LC-80.2 [Curt Coder]
2323- PK8000 Sura/Hobby [Miodrag Milanovic]
2424- PK8000 Vesta [Miodrag Milanovic]
25- PK8020 Korvet [Miodrag Milanovic]
2526- Poly-Computer 880 [Curt Coder]
2627- TI-83 [Xander]
2728- TIKI 100 [Curt Coder]

Previous 15994 Revisions Next


© 1998-2018 The MESS Team