Previous 15994 Revisions Next

r4142 Friday 16th January, 2009 at 13:51:18 UTC by Miodrag Milanović
[AC1] Added new driver
[docs]messnew.txt
[src/mess]mess.mak messdriv.c
[src/mess/drivers]ac1.c*
[src/mess/includes]ac1.h*
[src/mess/machine]ac1.c*
[src/mess/video]ac1.c*

src/mess/video/ac1.c
r0r4142
1/***************************************************************************
2
3        AC1 video driver by Miodrag Milanovic
4
5        15/01/2009 Preliminary driver.
6
7****************************************************************************/
8
9#include "driver.h"
10#include "includes/ac1.h"
11
12#define AC1_VIDEO_MEMORY      0x1000
13
14const gfx_layout ac1_charlayout =
15{
16   6, 8,            /* 6x8 characters */
17   256,            /* 256 characters */
18   1,                /* 1 bits per pixel */
19   {0},            /* no bitplanes; 1 bit per pixel */
20   {7, 6, 5, 4, 3, 2},
21   {0 * 8, 1 * 8, 2 * 8, 3 * 8, 4 * 8, 5 * 8, 6 * 8, 7 * 8},
22   8*8               /* size of one char */
23};
24
25VIDEO_START( ac1 )
26{
27}
28
29VIDEO_UPDATE( ac1 )
30{
31   int x,y;
32   const address_space *space = cpu_get_address_space(screen->machine->cpu[0], ADDRESS_SPACE_PROGRAM);
33   
34   for(y = 0; y < 16; y++ )
35   {
36      for(x = 0; x < 64; x++ )
37      {
38         int code = memory_read_byte(space, AC1_VIDEO_MEMORY + x + y*64);
39         drawgfx(bitmap, screen->machine->gfx[0],  code , 0, 0,0, 63*6-x*6,15*8-y*8,
40            NULL, TRANSPARENCY_NONE, 0);
41      }
42   }
43   return 0;
44}
45
46VIDEO_UPDATE( ac1_32 )
47{
48   int x,y;
49   const address_space *space = cpu_get_address_space(screen->machine->cpu[0], ADDRESS_SPACE_PROGRAM);
50   
51   for(y = 0; y < 32; y++ )
52   {
53      for(x = 0; x < 64; x++ )
54      {
55         int code = memory_read_byte(space, AC1_VIDEO_MEMORY + x + y*64);
56         drawgfx(bitmap, screen->machine->gfx[0],  code , 0, 0,0, 63*6-x*6,31*8-y*8,
57            NULL, TRANSPARENCY_NONE, 0);
58      }
59   }
60   return 0;
61}
62
63
src/mess/includes/ac1.h
r0r4142
1/*****************************************************************************
2 *
3 * includes/ac1.h
4 *
5 ****************************************************************************/
6
7#ifndef AC1_H_
8#define AC1_H_
9
10#include "machine/z80pio.h"
11
12/*----------- defined in machine/ac1.c -----------*/
13
14DRIVER_INIT( ac1 );
15MACHINE_RESET( ac1 );
16
17extern const z80pio_interface ac1_z80pio_intf;
18
19/*----------- defined in video/ac1.c -----------*/
20
21extern const gfx_layout ac1_charlayout;
22
23VIDEO_START( ac1 );
24VIDEO_UPDATE( ac1 );
25VIDEO_UPDATE( ac1_32 );
26
27
28#endif /* AC1_h_ */
src/mess/messdriv.c
r4141r4142
10651065   /* Kramer */
10661066   DRIVER(kramermc) /* 1987 Kramer MC            */
10671067
1068   /* AC1 */
1069   DRIVER(ac1)    /* 1984 Amateurcomputer AC1            */
1070   DRIVER(ac1_32)    /* 1984 Amateurcomputer AC1 (32 lines)   */
1071
10681072   /* Ei Nis */
10691073   DRIVER(pecom64)
10701074
src/mess/machine/ac1.c
r0r4142
1/***************************************************************************
2
3        AC1 video driver by Miodrag Milanovic
4
5        15/01/2009 Preliminary driver.
6
7****************************************************************************/
8
9#include "driver.h"
10#include "machine/z80pio.h"
11#include "includes/ac1.h"
12
13static READ8_DEVICE_HANDLER (ac1_port_b_r)
14{   
15   return 0xff;
16}
17
18#define BNOT(x) ((x) ? 0 : 1)
19
20static READ8_DEVICE_HANDLER (ac1_port_a_r)
21{
22   UINT8 line0 = input_port_read(device->machine, "LINE0");
23   UINT8 line1 = input_port_read(device->machine, "LINE1");
24   UINT8 line2 = input_port_read(device->machine, "LINE2");
25   UINT8 line3 = input_port_read(device->machine, "LINE3");
26   UINT8 line4 = input_port_read(device->machine, "LINE4");
27   UINT8 line5 = input_port_read(device->machine, "LINE5");
28   UINT8 line6 = input_port_read(device->machine, "LINE6");
29   
30   UINT8 SH    = BNOT(BIT(line6,0));
31   UINT8 CTRL  = BNOT(BIT(line6,1));
32   UINT8 SPACE = BIT(line6,2);
33   UINT8 ENTER = BIT(line6,3);
34   UINT8 BACK  = BIT(line6,4);
35   
36   UINT8 all = line0 | line1 | line2 | line3 | line4 | line5;
37   UINT8 s1 = BNOT(BIT(all,0));UINT8 z1 = (line0 !=0) ? 0 : 1;
38   UINT8 s2 = BNOT(BIT(all,1));UINT8 z2 = (line1 !=0) ? 0 : 1;
39   UINT8 s3 = BNOT(BIT(all,2));UINT8 z3 = (line2 !=0) ? 0 : 1;
40   UINT8 s4 = BNOT(BIT(all,3));UINT8 z4 = (line3 !=0) ? 0 : 1;
41   UINT8 s5 = BNOT(BIT(all,4));UINT8 z5 = (line4 !=0) ? 0 : 1;
42   UINT8 s6 = BNOT(BIT(all,5));UINT8 z6 = (line5 !=0) ? 0 : 1;
43   UINT8 s7 = BNOT(BIT(all,6));
44   UINT8 s8 = BNOT(BIT(all,7));
45   UINT8 tast,td0,td1,td2,td3,td4,td5,td6,dg5;
46   
47   /* Additional double keys */
48   if (SPACE) {
49      z1 = 0; s1 = 0; SH = 0;
50   }
51   if (ENTER) {
52      z4 = 0; s6 = 0; CTRL = 0;
53   }
54   if (BACK) {
55      z4 = 0; s1 = 0; CTRL = 0;
56   }
57   
58   tast = BNOT(s1 & s2 & s3 & s4 & s5 &s6 & s7 & s8);
59   td0  = BNOT(s2 & s4 & s6 & s8);
60   td1  = BNOT(s3 & s4 & s7 & s8);
61   td2  = BNOT(s5 & s6 & s7 & s8);
62   td3  = BNOT(z2 & z4 & z6);
63   td4  = BNOT(BNOT(BNOT(z1 & z2) & SH) & z5 & z6);
64   dg5  = BNOT(z3 & z4 & z5 & z6);
65   td5  = BNOT(BNOT(dg5 & BNOT(SH)) & z1 & z2);
66   td6  = (dg5 & CTRL);
67   return td0 + (td1 << 1) +(td2 << 2) +(td3 << 3) +(td4 << 4) +(td5 << 5) +(td6 << 6) +(tast << 7);   
68}
69
70static WRITE8_DEVICE_HANDLER (ac1_port_a_w)
71{
72}
73
74static WRITE8_DEVICE_HANDLER (ac1_port_b_w)
75{
76}
77
78const z80pio_interface ac1_z80pio_intf =
79{
80   NULL,   /* callback when change interrupt status */
81   ac1_port_a_r,
82   ac1_port_b_r,
83   ac1_port_a_w,
84   ac1_port_b_w,
85   NULL,
86   NULL
87};
88
89/* Driver initialization */
90DRIVER_INIT(ac1)
91{
92}
93
94MACHINE_RESET( ac1 )
95{
96}
src/mess/mess.mak
r4141r4142
376376DRVLIBS = \
377377   $(MESSOBJ)/messdriv.o \
378378   $(MESSOBJ)/3do.a \
379   $(MESSOBJ)/ac1.a \
379380   $(MESSOBJ)/acorn.a \
380381   $(MESSOBJ)/advision.a \
381382   $(MESSOBJ)/amiga.a \
r4141r4142
13881389   $(MESS_MACHINE)/pecom.o \
13891390   $(MESS_VIDEO)/pecom.o \
13901391   
1392$(MESSOBJ)/ac1.a:      \
1393   $(MESS_DRIVERS)/ac1.o \
1394   $(MESS_MACHINE)/ac1.o \
1395   $(MESS_VIDEO)/ac1.o \
1396
13911397$(MESSOBJ)/grundy.a: \
13921398   $(MESS_DRIVERS)/newbrain.o \
13931399   $(MESS_VIDEO)/newbrain.o \
src/mess/drivers/ac1.c
r0r4142
1/***************************************************************************
2
3        AC1 video driver by Miodrag Milanovic
4
5        15/01/2009 Preliminary driver.
6
7****************************************************************************/
8
9#include "driver.h"
10#include "cpu/z80/z80.h"
11#include "machine/z80pio.h"
12#include "includes/ac1.h"
13
14static GFXDECODE_START( ac1 )
15   GFXDECODE_ENTRY( "gfx1", 0x0000, ac1_charlayout, 0, 1 )
16GFXDECODE_END
17
18/* Address maps */
19static ADDRESS_MAP_START(ac1_mem, ADDRESS_SPACE_PROGRAM, 8)
20   ADDRESS_MAP_UNMAP_HIGH
21    AM_RANGE( 0x0000, 0x07ff ) AM_ROM  // Monitor
22    AM_RANGE( 0x0800, 0x0fff ) AM_ROM  // BASIC
23    AM_RANGE( 0x1000, 0x17ff ) AM_RAM  // Video RAM
24    AM_RANGE( 0x1800, 0x1fff ) AM_RAM  // RAM
25ADDRESS_MAP_END
26
27static ADDRESS_MAP_START( ac1_io, ADDRESS_SPACE_IO, 8 )
28   ADDRESS_MAP_GLOBAL_MASK(0xff)
29   AM_RANGE(0x04, 0x07) AM_DEVREADWRITE(Z80PIO, "z80pio", z80pio_r, z80pio_w)
30ADDRESS_MAP_END
31
32/* Input ports */
33static INPUT_PORTS_START( ac1 )
34   PORT_START("LINE0")
35      PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0)
36      PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1)
37      PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2)
38      PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3)
39      PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4)
40      PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5)
41      PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6)
42      PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7)
43   PORT_START("LINE1")
44      PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8)
45      PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9)
46      PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(":") PORT_CODE(KEYCODE_QUOTE)
47      PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(";") PORT_CODE(KEYCODE_COLON)
48      PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("<") PORT_CODE(KEYCODE_COMMA)
49      PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("=") PORT_CODE(KEYCODE_EQUALS)
50      PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(">") PORT_CODE(KEYCODE_STOP)
51      PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("?") PORT_CODE(KEYCODE_SLASH)
52   PORT_START("LINE2")
53      PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("@") PORT_CODE(KEYCODE_MINUS)
54      PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A)
55      PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B)
56      PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C)
57      PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D)
58      PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E)
59      PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F)
60      PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G)
61   PORT_START("LINE3")
62      PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H)
63      PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I)
64      PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J)
65      PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K)
66      PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L)
67      PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M)
68      PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N)
69      PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O)
70   PORT_START("LINE4")
71      PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P)
72      PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q)
73      PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R)
74      PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S)
75      PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T)
76      PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U)
77      PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V)
78      PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W)
79   PORT_START("LINE5")
80      PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X)
81      PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y)
82      PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z)
83      PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED)
84      PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNUSED)
85      PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED)
86      PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED)
87      PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
88   PORT_START("LINE6")
89      PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT)   PORT_CODE(KEYCODE_RSHIFT)
90      PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Ctrl")  PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL)
91      PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE)
92      PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER)
93      PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE)     
94INPUT_PORTS_END
95
96/* Machine driver */
97static MACHINE_DRIVER_START( ac1 )
98   /* basic machine hardware */
99   MDRV_CPU_ADD("main", Z80, XTAL_8MHz / 4)
100   MDRV_CPU_PROGRAM_MAP(ac1_mem, 0)
101   MDRV_CPU_IO_MAP(ac1_io, 0)
102   MDRV_MACHINE_RESET( ac1 )
103
104   MDRV_Z80PIO_ADD( "z80pio", ac1_z80pio_intf )
105
106   /* video hardware */
107   MDRV_SCREEN_ADD("main", RASTER)
108   MDRV_SCREEN_REFRESH_RATE(50)
109   MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
110   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
111   MDRV_SCREEN_SIZE(64*6, 16*8)
112   MDRV_SCREEN_VISIBLE_AREA(0, 64*6-1, 0, 16*8-1)
113   MDRV_GFXDECODE( ac1 )
114
115   MDRV_PALETTE_LENGTH(2)
116   MDRV_PALETTE_INIT(black_and_white)
117
118   MDRV_VIDEO_START(ac1)
119   MDRV_VIDEO_UPDATE(ac1)
120MACHINE_DRIVER_END
121
122static MACHINE_DRIVER_START( ac1_32 )
123   MDRV_IMPORT_FROM( ac1 )
124   MDRV_SCREEN_MODIFY("main")
125   MDRV_SCREEN_SIZE(64*6, 32*8)
126   MDRV_SCREEN_VISIBLE_AREA(0, 64*6-1, 0, 32*8-1)
127   MDRV_VIDEO_UPDATE(ac1_32)
128MACHINE_DRIVER_END
129   
130/* ROM definition */
131ROM_START( ac1 )
132   ROM_REGION( 0x10000, "main", ROMREGION_ERASEFF )
133   ROM_LOAD( "mon_v31_16.bin",  0x0000, 0x0800, CRC(1ba65e4d) SHA1(3382b8d03f31166a56aea49fd1ec1e82a7108300))
134   ROM_LOAD( "minibasic.bin",   0x0800, 0x0800, CRC(06782639) SHA1(3fd57b3ae3f538374b0d794d8aa15d06bcaaddd8))
135   ROM_REGION(0x0800, "gfx1",0)
136   ROM_LOAD ("zg_128.bin", 0x0000, 0x0400, CRC(0a6f7796) SHA1(64d77639b1ea23f45b4bd38c251851acb2d03822))
137   ROM_FILL( 0x0400, 0x0400, 0xFF )
138ROM_END
139
140ROM_START( ac1_32 )
141   ROM_REGION( 0x10000, "main", ROMREGION_ERASEFF )
142   ROM_LOAD( "mon_v31_32.bin",  0x0000, 0x0800, CRC(bea78b1a) SHA1(8a3e2ac2033aa0bb016be742cfea7e4b09c0813b))
143   ROM_LOAD( "minibasic.bin",   0x0800, 0x0800, CRC(06782639) SHA1(3fd57b3ae3f538374b0d794d8aa15d06bcaaddd8))
144   ROM_REGION(0x0800, "gfx1",0)
145   ROM_LOAD ("zg_256.bin", 0x0000, 0x0800, CRC(b4171df5) SHA1(abdec4e00257f86b1a57e02b9c6b4d2df2a2a2db))
146ROM_END
147
148/* Driver */
149
150/*    YEAR  NAME   PARENT  COMPAT  MACHINE  INPUT   INIT  CONFIG COMPANY                 FULLNAME   FLAGS */
151COMP( 1984, ac1,     0,      0,    ac1,    ac1,    ac1, NULL,  "", "Amateurcomputer AC1",       0)
152COMP( 1984, ac1_32,  ac1,    0,    ac1_32,   ac1,    ac1, NULL,  "", "Amateurcomputer AC1 (32 lines)",       0)
docs/messnew.txt
r4141r4142
44------------------------------------------------------
55- Intelligent Software Enterprise 64  [Dirk Best]
66- Hegener & Glaser Mephisto PHC 64  [Dirk Best]
7- Amateurcomputer AC1 [Miodrag Milanovic]
78
89
9
1010System Driver Changes:
1111----------------------
1212- [TI81, TI85, TI86] Added the new ROM_DEFAULT_BIOS feature to select the most

Previous 15994 Revisions Next


© 1998-2018 The MESS Team