mirror of
https://github.com/holub/mame
synced 2025-04-25 09:50:04 +03:00
(MESS) mbee: various cleanups and notes (nw)
This commit is contained in:
parent
e1d0a45ffc
commit
32373975f1
@ -30,31 +30,6 @@
|
||||
- Although certain models came with particular drives as standard, users could add
|
||||
the other size if they wished. We support both sizes on any model.
|
||||
|
||||
Microbee Standard / Plus memory map
|
||||
|
||||
0000-7FFF RAM
|
||||
8000-BFFF SYSTEM roms
|
||||
C000-DFFF Edasm or WBee (edasm.rom or wbeee12.rom, optional)
|
||||
E000-EFFF Telcom 1.2 (netrom.ic34; optional)
|
||||
F000-F7FF Video RAM
|
||||
F800-FFFF PCG RAM (graphics)
|
||||
|
||||
Microbee IC memory map (preliminary)
|
||||
|
||||
0000-7FFF RAM
|
||||
8000-BFFF SYSTEM roms (bas522a.rom, bas522b.rom)
|
||||
C000-DFFF Edasm or WBee (edasm.rom or wbeee12.rom, optional)
|
||||
E000-EFFF Telcom (optional)
|
||||
F000-F7FF Video RAM
|
||||
F800-FFFF PCG RAM (graphics), Colour RAM (banked)
|
||||
|
||||
Microbee 56KB ROM memory map (preliminary)
|
||||
|
||||
0000-DFFF RAM
|
||||
E000-EFFF ROM 56kb.rom CP/M bootstrap loader
|
||||
F000-F7FF Video RAM
|
||||
F800-FFFF PCG RAM (graphics), Colour RAM (banked)
|
||||
|
||||
Early machines have 'standard' video (128 hires characters).
|
||||
Later machines had the option of 'premium' video which
|
||||
provides thousands of hires characters, enough to simulate
|
||||
@ -65,7 +40,7 @@
|
||||
This rom can be replaced with the Dreamdisk Chip-8 rom.
|
||||
Note that Telcom 3.21 is 8k, it uses a rombank switch
|
||||
(by reading port 0A) to swap between the two halves.
|
||||
See Telcom notes below.
|
||||
See Telcom notes below.
|
||||
|
||||
EDASM - Jump to C000, usually the Editor/Assembler package.
|
||||
|
||||
@ -75,7 +50,6 @@
|
||||
|
||||
These early colour computers have a PROM to create the foreground palette.
|
||||
|
||||
|
||||
Notes about the printer:
|
||||
- When computer turned on, defaults to 1200 baud serial printer
|
||||
- Change it to parallel by entering OUTL#1
|
||||
@ -96,24 +70,44 @@
|
||||
- Telcom 1.2 (used in mbeeic) has a bug. If you enter NET CLOCK, the status line is
|
||||
filled with inverse K. You can fix this from Basic by doing NET CLOCK 3 times.
|
||||
|
||||
Notes about Disk System
|
||||
- Ports 44 to 47 are for standard connection to FD2793.
|
||||
- Port 48 is used for drive/side/density select on write, and intrq/drq on read.
|
||||
intrq and drq are OR'd together, then gated to bit 7 of the data bus whenever
|
||||
port 48 is activated on read. There are no interrupts used.
|
||||
|
||||
Tests of old keyboard. Start mbeeic.
|
||||
1. Load ASTEROIDS PLUS, stay in attract mode, hold down spacebar,
|
||||
it should only fire bullets. If it sometimes starts turning,
|
||||
thrusting or using the shield, then there is a problem.
|
||||
|
||||
2. Load SCAVENGER and make sure it doesn't go to the next level
|
||||
until you find the Exit.
|
||||
|
||||
3. At the Basic prompt, type in EDASM press enter. At the memory size
|
||||
prompt press enter. Now, make sure the keyboard works properly.
|
||||
|
||||
***************************************************************************
|
||||
|
||||
TODO/not working:
|
||||
|
||||
- Printer needs to be understood and fixed.
|
||||
- Keyboard loses characters if you type at a normal rate.
|
||||
- Fix Paste (it loses most of the characters)
|
||||
|
||||
- 256tc: Paste ignores shift key
|
||||
- All others: Paste drops most characters, shift operates randomly.
|
||||
|
||||
- various fdc issues:
|
||||
- B drive doesn't work.
|
||||
- some disks cause MESS to freeze.
|
||||
- ENMF pin missing from wd_fdc.
|
||||
- incorrect timing for track register causes 256tc failure to boot a disk.
|
||||
- 56k model takes about 2 minutes to boot a disk if loaded via command line.
|
||||
|
||||
- 56k model takes 120 seconds to boot a disk if loaded via command line.
|
||||
|
||||
- mbeeppc, mbee128p: In Basic, keyboard loses characters. Works fine in Wordbee.
|
||||
|
||||
- 256tc: At the menu, if F2 pressed to activate the Monitor, the emulated machine
|
||||
crashes due to a bug in z80pio emulation.
|
||||
|
||||
|
||||
- 256tc: Keyboard ROM U60 needs to be dumped.
|
||||
- 128k: GOLD PAL needs to be dumped for the bankswitching.
|
||||
- 64k: RED PAL needs to be dumped for the bankswitching.
|
||||
@ -125,25 +119,13 @@
|
||||
|
||||
- Mouse: a few programs support the use of a serial mouse which interfaced
|
||||
directly to the Z80PIO. However there's little info to be found.
|
||||
PIO B3 to ground activates the mouse pointer in Shell v3.01.
|
||||
|
||||
***************************************************************************
|
||||
|
||||
Description of Disk System
|
||||
|
||||
- Ports 44 to 47 are for standard connection to FD2793.
|
||||
- Port 48 is used for drive/side/density select on write,
|
||||
and intrq/drq on read.
|
||||
intrq and drq are OR'd together, then gated to bit 7 of the
|
||||
data bus whenever port 48 is activated on read. There are
|
||||
no interrupts used.
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include "includes/mbee.h"
|
||||
#include "formats/mbee_cas.h"
|
||||
|
||||
|
||||
#define XTAL_13_5MHz 13500000
|
||||
|
||||
/********** NOTE !!! ***********************************************************
|
||||
@ -156,7 +138,7 @@ static ADDRESS_MAP_START(mbee_mem, AS_PROGRAM, 8, mbee_state)
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x0fff) AM_RAMBANK("boot")
|
||||
AM_RANGE(0x1000, 0x3fff) AM_RAM
|
||||
AM_RANGE(0x4000, 0x7fff) AM_WRITENOP /* Needed because quickload to here will crash MESS otherwise */
|
||||
AM_RANGE(0x4000, 0x7fff) AM_WRITENOP // Needed because quickload to here will crash MESS
|
||||
AM_RANGE(0x8000, 0xefff) AM_ROM
|
||||
AM_RANGE(0xf000, 0xf7ff) AM_READWRITE(mbee_low_r, mbee_low_w)
|
||||
AM_RANGE(0xf800, 0xffff) AM_READWRITE(mbee_high_r, mbee_high_w)
|
||||
@ -312,6 +294,9 @@ static ADDRESS_MAP_START(mbee128_io, AS_IO, 8, mbee_state)
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt)
|
||||
AM_RANGE(0x04, 0x04) AM_WRITE(mbee_04_w)
|
||||
AM_RANGE(0x06, 0x06) AM_WRITE(mbee_06_w)
|
||||
AM_RANGE(0x07, 0x07) AM_READ(mbee_07_r)
|
||||
AM_RANGE(0x08, 0x08) AM_READWRITE(mbeeic_08_r, mbeeic_08_w)
|
||||
AM_RANGE(0x0b, 0x0b) AM_READWRITE(mbee_0b_r, mbee_0b_w)
|
||||
AM_RANGE(0x0c, 0x0c) AM_READWRITE(m6545_status_r, m6545_index_w)
|
||||
@ -363,7 +348,7 @@ static ADDRESS_MAP_START(mbeett_io, AS_IO, 8, mbee_state)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static INPUT_PORTS_START( mbee )
|
||||
PORT_START("X0") /* IN0 KEY ROW 0 [000] */
|
||||
PORT_START("X.0") /* IN0 KEY ROW 0 [000] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("@") PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR('@') PORT_CHAR('`')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') PORT_CHAR(0x01)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') PORT_CHAR(0x02)
|
||||
@ -373,7 +358,7 @@ static INPUT_PORTS_START( mbee )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') PORT_CHAR(0x06)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') PORT_CHAR(0x07)
|
||||
|
||||
PORT_START("X1") /* IN1 KEY ROW 1 [080] */
|
||||
PORT_START("X.1") /* IN1 KEY ROW 1 [080] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') PORT_CHAR(0x08)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') PORT_CHAR(0x09)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') PORT_CHAR(0x0a)
|
||||
@ -383,7 +368,7 @@ static INPUT_PORTS_START( mbee )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') PORT_CHAR(0x0e)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') PORT_CHAR(0x0f)
|
||||
|
||||
PORT_START("X2") /* IN2 KEY ROW 2 [100] */
|
||||
PORT_START("X.2") /* IN2 KEY ROW 2 [100] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') PORT_CHAR(0x10)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') PORT_CHAR(0x11)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') PORT_CHAR(0x12)
|
||||
@ -393,7 +378,7 @@ static INPUT_PORTS_START( mbee )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') PORT_CHAR(0x16)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') PORT_CHAR(0x17)
|
||||
|
||||
PORT_START("X3") /* IN3 KEY ROW 3 [180] */
|
||||
PORT_START("X.3") /* IN3 KEY ROW 3 [180] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') PORT_CHAR(0x18)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('u') PORT_CHAR('Y') PORT_CHAR(0x19)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') PORT_CHAR(0x1a)
|
||||
@ -403,7 +388,7 @@ static INPUT_PORTS_START( mbee )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("^") PORT_CODE(KEYCODE_TILDE) PORT_CHAR('^') PORT_CHAR('~') PORT_CHAR(0x1e)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Delete") PORT_CODE(KEYCODE_DEL) PORT_CHAR(8) PORT_CHAR(0x5f) PORT_CHAR(0x1f) // port_char not working - hijacked
|
||||
|
||||
PORT_START("X4") /* IN4 KEY ROW 4 [200] */
|
||||
PORT_START("X.4") /* IN4 KEY ROW 4 [200] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("1 !") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("2 \"") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('\"')
|
||||
@ -413,7 +398,7 @@ static INPUT_PORTS_START( mbee )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("6 &") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7 '") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
|
||||
|
||||
PORT_START("X5") /* IN5 KEY ROW 5 [280] */
|
||||
PORT_START("X.5") /* IN5 KEY ROW 5 [280] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("8 (") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9 )") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("; +") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
|
||||
@ -423,7 +408,7 @@ static INPUT_PORTS_START( mbee )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(". >") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("/ ?") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
|
||||
|
||||
PORT_START("X6") /* IN6 KEY ROW 6 [300] */
|
||||
PORT_START("X.6") /* IN6 KEY ROW 6 [300] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Escape") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR(9)
|
||||
@ -433,7 +418,7 @@ static INPUT_PORTS_START( mbee )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Break") PORT_CODE(KEYCODE_END) PORT_CHAR(3)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
|
||||
|
||||
PORT_START("X7") /* IN7 KEY ROW 7 [380] */
|
||||
PORT_START("X.7") /* IN7 KEY ROW 7 [380] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Up)") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Down)") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
|
||||
@ -465,7 +450,7 @@ static INPUT_PORTS_START( mbee )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( mbee256 )
|
||||
PORT_START("X0") /* IN0 KEY ROW 0 [+00] */
|
||||
PORT_START("Y.0") /* IN0 KEY ROW 0 [+00] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F1") PORT_CODE(KEYCODE_F1)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Escape") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR(9)
|
||||
@ -474,7 +459,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("DEL (num)") PORT_CODE(KEYCODE_DEL_PAD)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
|
||||
|
||||
PORT_START("X1") /* IN1 KEY ROW 1 [+08] */
|
||||
PORT_START("Y.1") /* IN1 KEY ROW 1 [+08] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F2") PORT_CODE(KEYCODE_F2)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("1 !") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') PORT_CHAR(0x11)
|
||||
@ -483,7 +468,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Linefeed") PORT_CODE(KEYCODE_HOME) PORT_CHAR(10)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Insert") PORT_CODE(KEYCODE_INSERT)
|
||||
|
||||
PORT_START("X2") /* IN2 KEY ROW 2 [+10] */
|
||||
PORT_START("Y.2") /* IN2 KEY ROW 2 [+10] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F3") PORT_CODE(KEYCODE_F3)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("2 @") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') PORT_CHAR(0x17)
|
||||
@ -493,7 +478,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3 (num)") PORT_CODE(KEYCODE_3_PAD)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') PORT_CHAR(0x1a)
|
||||
|
||||
PORT_START("X3") /* IN3 KEY ROW 3 [+18] */
|
||||
PORT_START("Y.3") /* IN3 KEY ROW 3 [+18] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F4") PORT_CODE(KEYCODE_F4)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3 #") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') PORT_CHAR(0x05)
|
||||
@ -503,7 +488,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("6 (num)") PORT_CODE(KEYCODE_6_PAD)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') PORT_CHAR(0x18)
|
||||
|
||||
PORT_START("X4") /* IN4 KEY ROW 4 [+20] */
|
||||
PORT_START("Y.4") /* IN4 KEY ROW 4 [+20] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F5") PORT_CODE(KEYCODE_F5)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("4 $") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') PORT_CHAR(0x12)
|
||||
@ -513,7 +498,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9 (num)") PORT_CODE(KEYCODE_9_PAD)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') PORT_CHAR(0x03)
|
||||
|
||||
PORT_START("X5") /* IN5 KEY ROW 5 [+28] */
|
||||
PORT_START("Y.5") /* IN5 KEY ROW 5 [+28] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F6") PORT_CODE(KEYCODE_F6)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("5 %") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') PORT_CHAR(0x14)
|
||||
@ -523,7 +508,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("4 (num)") PORT_CODE(KEYCODE_4_PAD)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') PORT_CHAR(0x16)
|
||||
|
||||
PORT_START("X6") /* IN6 KEY ROW 6 [+30] */
|
||||
PORT_START("Y.6") /* IN6 KEY ROW 6 [+30] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F7") PORT_CODE(KEYCODE_F7)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("6 &") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') PORT_CHAR(0x19)
|
||||
@ -533,7 +518,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Right)") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') PORT_CHAR(0x02)
|
||||
|
||||
PORT_START("X7") /* IN7 KEY ROW 7 [+38] */
|
||||
PORT_START("Y.7") /* IN7 KEY ROW 7 [+38] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F8") PORT_CODE(KEYCODE_F8)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7 &") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') PORT_CHAR(0x15)
|
||||
@ -541,7 +526,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Left)") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') PORT_CHAR(0x0e)
|
||||
|
||||
PORT_START("X8") /* IN0 KEY ROW 0 [+40] */
|
||||
PORT_START("Y.8") /* IN0 KEY ROW 0 [+40] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F9") PORT_CODE(KEYCODE_F9)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("8 *") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') PORT_CHAR(0x09)
|
||||
@ -549,7 +534,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Up)") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') PORT_CHAR(0x0d)
|
||||
|
||||
PORT_START("X9") /* IN1 KEY ROW 1 [+48] */
|
||||
PORT_START("Y.9") /* IN1 KEY ROW 1 [+48] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F10") PORT_CODE(KEYCODE_F10)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9 (") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') PORT_CHAR(0x0f)
|
||||
@ -558,7 +543,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(13)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(", <") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
|
||||
|
||||
PORT_START("X10") /* IN2 KEY ROW 2 [+50] */
|
||||
PORT_START("Y.10") /* IN2 KEY ROW 2 [+50] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F11") PORT_CODE(KEYCODE_F11)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0 )") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') PORT_CHAR(0x10)
|
||||
@ -568,7 +553,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\\ |") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|') PORT_CHAR(0x1c)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(". >") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
|
||||
|
||||
PORT_START("X11") /* IN3 KEY ROW 3 [+58] */
|
||||
PORT_START("Y.11") /* IN3 KEY ROW 3 [+58] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F12") PORT_CODE(KEYCODE_F12)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("[ {") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') PORT_CHAR(0x1b)
|
||||
@ -577,13 +562,13 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("] }") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}') PORT_CHAR(0x1d)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("/ ?") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
|
||||
|
||||
PORT_START("X12") /* IN4 KEY ROW 4 [+60] */
|
||||
PORT_START("Y.12") /* IN4 KEY ROW 4 [+60] */
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
|
||||
|
||||
PORT_START("X13") /* IN5 KEY ROW 5 [+68] */
|
||||
PORT_START("Y.13") /* IN5 KEY ROW 5 [+68] */
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
|
||||
|
||||
PORT_START("X14") /* IN6 KEY ROW 6 [+70] */
|
||||
PORT_START("Y.14") /* IN6 KEY ROW 6 [+70] */
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Alt") PORT_CODE(KEYCODE_LALT) PORT_CODE(KEYCODE_RALT)
|
||||
|
||||
// Autorun on quickload
|
||||
@ -619,15 +604,15 @@ static const gfx_layout mbee_charlayout =
|
||||
8*16 /* every char takes 16 bytes */
|
||||
};
|
||||
|
||||
static GFXDECODE_START( mbee )
|
||||
static GFXDECODE_START( mono )
|
||||
GFXDECODE_ENTRY( "gfx", 0x0000, mbee_charlayout, 0, 1 )
|
||||
GFXDECODE_END
|
||||
|
||||
static GFXDECODE_START( mbeeic )
|
||||
static GFXDECODE_START( standard )
|
||||
GFXDECODE_ENTRY( "gfx", 0x0000, mbee_charlayout, 0, 48 )
|
||||
GFXDECODE_END
|
||||
|
||||
static GFXDECODE_START( mbeeppc )
|
||||
static GFXDECODE_START( premium )
|
||||
GFXDECODE_ENTRY( "gfx", 0x0000, mbee_charlayout, 0, 8 )
|
||||
GFXDECODE_END
|
||||
|
||||
@ -662,10 +647,10 @@ static MACHINE_CONFIG_START( mbee, mbee_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0, 19*16-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(mbee_state, screen_update_mbee)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mbee)
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mono)
|
||||
MCFG_PALETTE_ADD_MONOCHROME_AMBER("palette") // usually sold with amber or green monitor
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(mbee_state, mbee)
|
||||
MCFG_VIDEO_START_OVERRIDE(mbee_state, mono)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
@ -678,8 +663,8 @@ static MACHINE_CONFIG_START( mbee, mbee_state )
|
||||
MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_12MHz / 8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(mbee_state, mbee_update_row)
|
||||
MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, mbee_update_addr)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(mbee_state, mono_update_row)
|
||||
MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, crtc_update_addr)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(mbee_state, crtc_vs))
|
||||
|
||||
MCFG_QUICKLOAD_ADD("quickload", mbee_state, mbee, "mwb,com,bee", 2)
|
||||
@ -718,12 +703,12 @@ static MACHINE_CONFIG_START( mbeeic, mbee_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 80*8-1, 0, 19*16-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(mbee_state, screen_update_mbee)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mbeeic)
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", standard)
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 96)
|
||||
MCFG_PALETTE_INIT_OWNER(mbee_state, mbeeic)
|
||||
MCFG_PALETTE_INIT_OWNER(mbee_state, standard)
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(mbee_state, mbeeic)
|
||||
MCFG_VIDEO_START_OVERRIDE(mbee_state, standard)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
@ -736,8 +721,8 @@ static MACHINE_CONFIG_START( mbeeic, mbee_state )
|
||||
MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_13_5MHz / 8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(mbee_state, mbeeic_update_row)
|
||||
MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, mbee_update_addr)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(mbee_state, colour_update_row)
|
||||
MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, crtc_update_addr)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(mbee_state, crtc_vs))
|
||||
|
||||
MCFG_QUICKLOAD_ADD("quickload", mbee_state, mbee, "mwb,com,bee", 2)
|
||||
@ -773,19 +758,11 @@ static MACHINE_CONFIG_DERIVED( mbeeppc, mbeeic )
|
||||
MCFG_CPU_MODIFY( "maincpu" )
|
||||
MCFG_CPU_PROGRAM_MAP(mbeeppc_mem)
|
||||
MCFG_CPU_IO_MAP(mbeeppc_io)
|
||||
MCFG_VIDEO_START_OVERRIDE(mbee_state, mbeeppc)
|
||||
MCFG_GFXDECODE_MODIFY("gfxdecode", mbeeppc)
|
||||
MCFG_VIDEO_START_OVERRIDE(mbee_state, premium)
|
||||
MCFG_GFXDECODE_MODIFY("gfxdecode", premium)
|
||||
MCFG_PALETTE_MODIFY("palette")
|
||||
MCFG_PALETTE_ENTRIES(16)
|
||||
MCFG_PALETTE_INIT_OWNER(mbee_state, mbeeppc)
|
||||
|
||||
MCFG_DEVICE_REMOVE("crtc")
|
||||
MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_13_5MHz / 8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(mbee_state, mbeeppc_update_row)
|
||||
MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, mbee_update_addr)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(mbee_state, crtc_vs))
|
||||
MCFG_PALETTE_INIT_OWNER(mbee_state, premium)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( mbee56, mbeeic )
|
||||
@ -805,6 +782,7 @@ static MACHINE_CONFIG_DERIVED( mbee128, mbee56 )
|
||||
MCFG_CPU_PROGRAM_MAP(mbee256_mem)
|
||||
MCFG_CPU_IO_MAP(mbee128_io)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbee128)
|
||||
MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( mbee128p, mbeeppc )
|
||||
@ -812,6 +790,7 @@ static MACHINE_CONFIG_DERIVED( mbee128p, mbeeppc )
|
||||
MCFG_CPU_PROGRAM_MAP(mbee256_mem)
|
||||
MCFG_CPU_IO_MAP(mbee128_io)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbee128)
|
||||
MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz )
|
||||
MCFG_WD2793x_ADD("fdc", XTAL_4MHz / 4)
|
||||
MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(mbee_state, fdc_intrq_w))
|
||||
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(mbee_state, fdc_drq_w))
|
||||
@ -824,14 +803,7 @@ static MACHINE_CONFIG_DERIVED( mbee256, mbee128p )
|
||||
MCFG_CPU_PROGRAM_MAP(mbee256_mem)
|
||||
MCFG_CPU_IO_MAP(mbee256_io)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbee256)
|
||||
MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz )
|
||||
|
||||
MCFG_DEVICE_REMOVE("crtc")
|
||||
MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_13_5MHz / 8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(mbee_state, mbeeppc_update_row)
|
||||
MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, mbee256_update_addr)
|
||||
MCFG_DEVICE_REMOVE("fdc:0")
|
||||
MCFG_DEVICE_REMOVE("fdc:1")
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:0", mbee_floppies, "drive3a", floppy_image_device::default_floppy_formats)
|
||||
@ -842,15 +814,8 @@ static MACHINE_CONFIG_DERIVED( mbeett, mbeeppc )
|
||||
MCFG_CPU_MODIFY( "maincpu" )
|
||||
MCFG_CPU_PROGRAM_MAP(mbeett_mem)
|
||||
MCFG_CPU_IO_MAP(mbeett_io)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbeett )
|
||||
MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbeett)
|
||||
MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz )
|
||||
|
||||
MCFG_DEVICE_REMOVE("crtc")
|
||||
MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_13_5MHz / 8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(mbee_state, mbeeppc_update_row)
|
||||
MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, mbee256_update_addr)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
/* Unused roms:
|
||||
|
@ -52,23 +52,10 @@ public:
|
||||
, m_pak(*this, "pak")
|
||||
, m_telcom(*this, "telcom")
|
||||
, m_basic(*this, "basic")
|
||||
, m_io_x0(*this, "X0")
|
||||
, m_io_x1(*this, "X1")
|
||||
, m_io_x2(*this, "X2")
|
||||
, m_io_x3(*this, "X3")
|
||||
, m_io_x4(*this, "X4")
|
||||
, m_io_x5(*this, "X5")
|
||||
, m_io_x6(*this, "X6")
|
||||
, m_io_x7(*this, "X7")
|
||||
, m_io_extra(*this, "EXTRA")
|
||||
, m_io_config(*this, "CONFIG")
|
||||
, m_io_x8(*this, "X8")
|
||||
, m_io_x9(*this, "X9")
|
||||
, m_io_x10(*this, "X10")
|
||||
, m_io_x11(*this, "X11")
|
||||
, m_io_x12(*this, "X12")
|
||||
, m_io_x13(*this, "X13")
|
||||
, m_io_x14(*this, "X14")
|
||||
, m_io_oldkb(*this, "X")
|
||||
, m_io_newkb(*this, "Y")
|
||||
, m_screen(*this, "screen")
|
||||
{ }
|
||||
|
||||
@ -123,12 +110,12 @@ public:
|
||||
DECLARE_DRIVER_INIT(mbeeic);
|
||||
DECLARE_DRIVER_INIT(mbee128);
|
||||
DECLARE_MACHINE_RESET(mbee);
|
||||
DECLARE_VIDEO_START(mbee);
|
||||
DECLARE_VIDEO_START(mbeeic);
|
||||
DECLARE_PALETTE_INIT(mbeeic);
|
||||
DECLARE_VIDEO_START(mono);
|
||||
DECLARE_VIDEO_START(standard);
|
||||
DECLARE_VIDEO_START(premium);
|
||||
DECLARE_PALETTE_INIT(standard);
|
||||
DECLARE_PALETTE_INIT(mbeepc85b);
|
||||
DECLARE_VIDEO_START(mbeeppc);
|
||||
DECLARE_PALETTE_INIT(mbeeppc);
|
||||
DECLARE_PALETTE_INIT(premium);
|
||||
DECLARE_MACHINE_RESET(mbee56);
|
||||
DECLARE_MACHINE_RESET(mbee128);
|
||||
DECLARE_MACHINE_RESET(mbee256);
|
||||
@ -152,19 +139,18 @@ public:
|
||||
void mbee_video_kbd_scan(int param);
|
||||
UINT8 m_sy6545_cursor[16];
|
||||
|
||||
MC6845_UPDATE_ROW(mbee_update_row);
|
||||
MC6845_UPDATE_ROW(mbeeic_update_row);
|
||||
MC6845_UPDATE_ROW(mbeeppc_update_row);
|
||||
MC6845_ON_UPDATE_ADDR_CHANGED(mbee_update_addr);
|
||||
MC6845_ON_UPDATE_ADDR_CHANGED(mbee256_update_addr);
|
||||
MC6845_UPDATE_ROW(mono_update_row);
|
||||
MC6845_UPDATE_ROW(colour_update_row);
|
||||
MC6845_ON_UPDATE_ADDR_CHANGED(crtc_update_addr);
|
||||
|
||||
required_device<palette_device> m_palette;
|
||||
private:
|
||||
bool m_is_premium;
|
||||
bool m_has_oldkb;
|
||||
size_t m_size;
|
||||
bool m_b7_rtc;
|
||||
bool m_b7_vs;
|
||||
UINT8 m_mbee256_key_available;
|
||||
bool m_b2;
|
||||
UINT8 m_mbee256_was_pressed[15];
|
||||
UINT8 m_mbee256_q[20];
|
||||
UINT8 m_mbee256_q_pos;
|
||||
@ -196,23 +182,10 @@ private:
|
||||
optional_memory_bank m_pak;
|
||||
optional_memory_bank m_telcom;
|
||||
optional_memory_bank m_basic;
|
||||
required_ioport m_io_x0;
|
||||
required_ioport m_io_x1;
|
||||
required_ioport m_io_x2;
|
||||
required_ioport m_io_x3;
|
||||
required_ioport m_io_x4;
|
||||
required_ioport m_io_x5;
|
||||
required_ioport m_io_x6;
|
||||
required_ioport m_io_x7;
|
||||
optional_ioport m_io_extra;
|
||||
optional_ioport m_io_config;
|
||||
optional_ioport m_io_x8;
|
||||
optional_ioport m_io_x9;
|
||||
optional_ioport m_io_x10;
|
||||
optional_ioport m_io_x11;
|
||||
optional_ioport m_io_x12;
|
||||
optional_ioport m_io_x13;
|
||||
optional_ioport m_io_x14;
|
||||
required_ioport m_io_config;
|
||||
optional_ioport_array<8> m_io_oldkb;
|
||||
optional_ioport_array<15> m_io_newkb;
|
||||
required_device<screen_device> m_screen;
|
||||
};
|
||||
|
||||
|
@ -88,7 +88,8 @@ READ8_MEMBER( mbee_state::pio_port_b_r )
|
||||
break;
|
||||
}
|
||||
|
||||
data |= m_mbee256_key_available;
|
||||
data |= (UINT8)m_b2 << 1; // key pressed on new keyboard
|
||||
data |= 8; // CTS held high via resistor. If low, the disk-based models think a mouse is plugged in.
|
||||
|
||||
return data;
|
||||
};
|
||||
@ -114,7 +115,7 @@ WRITE_LINE_MEMBER( mbee_state::fdc_drq_w )
|
||||
|
||||
READ8_MEMBER( mbee_state::mbee_fdc_status_r )
|
||||
{
|
||||
/* d7 indicate if IRQ or DRQ is occuring (1=happening)
|
||||
/* d7 indicate if IRQ or DRQ is occurring (1=happening)
|
||||
d6..d0 not used */
|
||||
|
||||
return m_fdc_rq ? 0xff : 0x7f;
|
||||
@ -164,49 +165,34 @@ TIMER_CALLBACK_MEMBER(mbee_state::mbee256_kbd)
|
||||
It includes up to 4 KB of mask-programmable ROM, 64 bytes of scratchpad RAM and up to 64 bytes
|
||||
of executable RAM. The MCU also integrates 32-bit I/O and a programmable timer. */
|
||||
|
||||
UINT8 i, j;
|
||||
UINT8 pressed[15];
|
||||
UINT8 i, j, pressed;
|
||||
|
||||
|
||||
/* see what is pressed */
|
||||
pressed[0] = m_io_x0->read();
|
||||
pressed[1] = m_io_x1->read();
|
||||
pressed[2] = m_io_x2->read();
|
||||
pressed[3] = m_io_x3->read();
|
||||
pressed[4] = m_io_x4->read();
|
||||
pressed[5] = m_io_x5->read();
|
||||
pressed[6] = m_io_x6->read();
|
||||
pressed[7] = m_io_x7->read();
|
||||
pressed[8] = m_io_x8->read();
|
||||
pressed[9] = m_io_x9->read();
|
||||
pressed[10] = m_io_x10->read();
|
||||
pressed[11] = m_io_x11->read();
|
||||
pressed[12] = m_io_x12->read();
|
||||
pressed[13] = m_io_x13->read();
|
||||
pressed[14] = m_io_x14->read();
|
||||
|
||||
/* find what has changed */
|
||||
// find what has changed
|
||||
for (i = 0; i < 15; i++)
|
||||
{
|
||||
if (pressed[i] != m_mbee256_was_pressed[i])
|
||||
pressed = m_io_newkb[i]->read();
|
||||
if (pressed != m_mbee256_was_pressed[i])
|
||||
{
|
||||
/* get scankey value */
|
||||
// get scankey value
|
||||
for (j = 0; j < 8; j++)
|
||||
{
|
||||
if (BIT(pressed[i]^m_mbee256_was_pressed[i], j))
|
||||
if (BIT(pressed^m_mbee256_was_pressed[i], j))
|
||||
{
|
||||
/* put it in the queue */
|
||||
m_mbee256_q[m_mbee256_q_pos] = (i << 3) | j | (BIT(pressed[i], j) ? 0x80 : 0);
|
||||
// put it in the queue
|
||||
m_mbee256_q[m_mbee256_q_pos] = (i << 3) | j | (BIT(pressed, j) ? 0x80 : 0);
|
||||
if (m_mbee256_q_pos < 19) m_mbee256_q_pos++;
|
||||
}
|
||||
}
|
||||
m_mbee256_was_pressed[i] = pressed[i];
|
||||
m_mbee256_was_pressed[i] = pressed;
|
||||
}
|
||||
}
|
||||
|
||||
/* if anything queued, cause an interrupt */
|
||||
// if anything queued, cause an interrupt
|
||||
if (m_mbee256_q_pos)
|
||||
m_mbee256_key_available = 2; // set irq
|
||||
{
|
||||
m_b2 = 1; // set irq
|
||||
//breaks keyboard m_pio->port_b_write(pio_port_b_r(generic_space(),0,0xff));
|
||||
}
|
||||
|
||||
timer_set(attotime::from_hz(25), TIMER_MBEE256_KBD);
|
||||
}
|
||||
@ -221,7 +207,7 @@ READ8_MEMBER( mbee_state::mbee256_18_r )
|
||||
for (i = 0; i < m_mbee256_q_pos; i++) m_mbee256_q[i] = m_mbee256_q[i+1]; // ripple queue
|
||||
}
|
||||
|
||||
m_mbee256_key_available = 0; // clear irq
|
||||
m_b2 = 0; // clear irq
|
||||
return data;
|
||||
}
|
||||
|
||||
@ -270,6 +256,9 @@ READ8_MEMBER( mbee_state::mbee_07_r ) // read
|
||||
// This doesn't seem to do anything; the time works without it.
|
||||
TIMER_CALLBACK_MEMBER( mbee_state::mbee_rtc_irq )
|
||||
{
|
||||
if (!m_rtc)
|
||||
return;
|
||||
|
||||
UINT8 data = m_rtc->read(m_maincpu->space(AS_IO), 12);
|
||||
m_b7_rtc = (data) ? 1 : 0;
|
||||
|
||||
@ -292,6 +281,10 @@ TIMER_CALLBACK_MEMBER( mbee_state::mbee_rtc_irq )
|
||||
|
||||
b_mask = total dynamic ram (1=64k; 3=128k; 7=256k)
|
||||
|
||||
Certain software (such as the PJB system) constantly switch banks around,
|
||||
causing slowness. Therefore this function only changes the banks that need
|
||||
changing, leaving the others as is.
|
||||
|
||||
************************************************************/
|
||||
|
||||
void mbee_state::setup_banks(UINT8 data, bool first_time, UINT8 b_mask)
|
||||
@ -304,7 +297,7 @@ void mbee_state::setup_banks(UINT8 data, bool first_time, UINT8 b_mask)
|
||||
UINT16 b_vid;
|
||||
char banktag[10];
|
||||
|
||||
if (first_time || (b_data != m_bank_array[0]))
|
||||
if (first_time || (b_data != m_bank_array[0])) // if same data as last time, leave now
|
||||
{
|
||||
m_bank_array[0] = b_data;
|
||||
|
||||
@ -551,6 +544,7 @@ DRIVER_INIT_MEMBER( mbee_state, mbee )
|
||||
UINT8 *RAM = memregion("maincpu")->base();
|
||||
m_boot->configure_entries(0, 2, &RAM[0x0000], 0x8000);
|
||||
m_size = 0x4000;
|
||||
m_has_oldkb = 1;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( mbee_state, mbeeic )
|
||||
@ -563,6 +557,7 @@ DRIVER_INIT_MEMBER( mbee_state, mbeeic )
|
||||
|
||||
m_pak->set_entry(0);
|
||||
m_size = 0x8000;
|
||||
m_has_oldkb = 1;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( mbee_state, mbeepc )
|
||||
@ -579,6 +574,7 @@ DRIVER_INIT_MEMBER( mbee_state, mbeepc )
|
||||
m_pak->set_entry(0);
|
||||
m_telcom->set_entry(0);
|
||||
m_size = 0x8000;
|
||||
m_has_oldkb = 1;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( mbee_state, mbeepc85 )
|
||||
@ -595,6 +591,7 @@ DRIVER_INIT_MEMBER( mbee_state, mbeepc85 )
|
||||
m_pak->set_entry(5);
|
||||
m_telcom->set_entry(0);
|
||||
m_size = 0x8000;
|
||||
m_has_oldkb = 1;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( mbee_state, mbeeppc )
|
||||
@ -616,6 +613,7 @@ DRIVER_INIT_MEMBER( mbee_state, mbeeppc )
|
||||
m_telcom->set_entry(0);
|
||||
m_basic->set_entry(0);
|
||||
m_size = 0x8000;
|
||||
m_has_oldkb = 1;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( mbee_state, mbee56 )
|
||||
@ -623,6 +621,7 @@ DRIVER_INIT_MEMBER( mbee_state, mbee56 )
|
||||
UINT8 *RAM = memregion("maincpu")->base();
|
||||
m_boot->configure_entries(0, 2, &RAM[0x0000], 0xe000);
|
||||
m_size = 0xe000;
|
||||
m_has_oldkb = 1;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( mbee_state, mbee128 )
|
||||
@ -641,7 +640,11 @@ DRIVER_INIT_MEMBER( mbee_state, mbee128 )
|
||||
membank(banktag)->configure_entries(0, 32, &RAM[0x0000], 0x1000); // RAM banks
|
||||
membank(banktag)->configure_entries(64, 1, &ROM[0x4000], 0x1000); // dummy rom
|
||||
}
|
||||
|
||||
timer_set(attotime::from_hz(1), TIMER_MBEE_RTC_IRQ); /* timer for rtc */
|
||||
|
||||
m_size = 0x8000;
|
||||
m_has_oldkb = 1;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( mbee_state, mbee256 )
|
||||
@ -665,6 +668,7 @@ DRIVER_INIT_MEMBER( mbee_state, mbee256 )
|
||||
timer_set(attotime::from_hz(50), TIMER_MBEE256_KBD); /* timer for kbd */
|
||||
|
||||
m_size = 0x8000;
|
||||
m_has_oldkb = 0;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( mbee_state, mbeett )
|
||||
@ -685,6 +689,7 @@ DRIVER_INIT_MEMBER( mbee_state, mbeett )
|
||||
timer_set(attotime::from_hz(25), TIMER_MBEE256_KBD); /* timer for kbd */
|
||||
|
||||
m_size = 0x8000;
|
||||
m_has_oldkb = 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -4,24 +4,7 @@
|
||||
video hardware
|
||||
Juergen Buchmueller <pullmoll@t-online.de>, Dec 1999
|
||||
|
||||
Tests of keyboard. Start mbeeic.
|
||||
|
||||
1. Load ASTEROIDS PLUS, stay in attract mode, hold down spacebar,
|
||||
it should only fire bullets. If it sometimes starts turning,
|
||||
thrusting or using the shield, then there is a problem.
|
||||
|
||||
2. Load SCAVENGER and make sure it doesn't go to the next level
|
||||
until you find the Exit.
|
||||
|
||||
3. At the Basic prompt, type in EDASM press enter. At the memory size
|
||||
prompt press enter. Now, make sure the keyboard works properly.
|
||||
|
||||
|
||||
|
||||
TODO:
|
||||
|
||||
1. mbeeppc keyboard response is quite slow. You need to hold each
|
||||
key until it responds. It works much better if you overclock the cpu.
|
||||
Rewritten by Robbbert
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
@ -214,65 +197,36 @@ WRITE8_MEMBER ( mbee_state::mbeeppc_high_w )
|
||||
************************************************************/
|
||||
|
||||
|
||||
/* The direction keys are used by the pc85 menu. Do not know what uses the "insert" key. */
|
||||
void mbee_state::keyboard_matrix_r(int offs)
|
||||
{
|
||||
UINT8 port = (offs >> 7) & 7;
|
||||
UINT8 bit = (offs >> 4) & 7;
|
||||
UINT8 data = 0;
|
||||
UINT8 data = m_io_oldkb[port]->read();
|
||||
bool keydown = ( data >> bit ) & 1;
|
||||
|
||||
switch ( port )
|
||||
{
|
||||
case 0: data = m_io_x0->read(); break;
|
||||
case 1: data = m_io_x1->read(); break;
|
||||
case 2: data = m_io_x2->read(); break;
|
||||
case 3: data = m_io_x3->read(); break;
|
||||
case 4: data = m_io_x4->read(); break;
|
||||
case 5: data = m_io_x5->read(); break;
|
||||
case 6: data = m_io_x6->read(); break;
|
||||
case 7: data = m_io_x7->read(); break;
|
||||
}
|
||||
data = ( data >> bit ) & 1;
|
||||
|
||||
if ((data | m_is_premium) == 0)
|
||||
// This adds premium-style cursor keys to the old keyboard
|
||||
// They are used by the pc85 & ppc menu, and the 128k shell.
|
||||
if (!keydown)
|
||||
{
|
||||
UINT8 extra = m_io_extra->read();
|
||||
|
||||
if( extra & 0x01 ) /* extra: cursor up */
|
||||
{
|
||||
if( port == 7 && bit == 1 ) data = 1; /* Control */
|
||||
if( port == 0 && bit == 5 ) data = 1; /* E */
|
||||
}
|
||||
if (extra && port == 7 && bit == 1) keydown = 1; /* Control */
|
||||
|
||||
if (BIT(extra, 0) && ( port == 0 && bit == 5 )) keydown = 1; // cursor up = ^E
|
||||
else
|
||||
if( extra & 0x02 ) /* extra: cursor down */
|
||||
{
|
||||
if( port == 7 && bit == 1 ) data = 1; /* Control */
|
||||
if( port == 3 && bit == 0 ) data = 1; /* X */
|
||||
}
|
||||
if (BIT(extra, 1) && ( port == 3 && bit == 0 )) keydown = 1; // cursor down = ^X
|
||||
else
|
||||
if( extra & 0x04 ) /* extra: cursor left */
|
||||
{
|
||||
if( port == 7 && bit == 1 ) data = 1; /* Control */
|
||||
if( port == 2 && bit == 3 ) data = 1; /* S */
|
||||
}
|
||||
if (BIT(extra, 2) && ( port == 2 && bit == 3 )) keydown = 1; // cursor left = ^S
|
||||
else
|
||||
if( extra & 0x08 ) /* extra: cursor right */
|
||||
{
|
||||
if( port == 7 && bit == 1 ) data = 1; /* Control */
|
||||
if( port == 0 && bit == 4 ) data = 1; /* D */
|
||||
}
|
||||
if (BIT(extra, 3) && ( port == 0 && bit == 4 )) keydown = 1; // cursor right = ^D
|
||||
#if 0
|
||||
// this key doesn't appear on any keyboard afaik
|
||||
// this key doesn't appear on any keyboard afaik. It is a Wordbee function.
|
||||
else
|
||||
if( extra & 0x10 ) /* extra: insert */
|
||||
{
|
||||
if( port == 7 && bit == 1 ) data = 1; /* Control */
|
||||
if( port == 2 && bit == 6 ) data = 1; /* V */
|
||||
}
|
||||
if (BIT(extra, 4) && ( port == 2 && bit == 6 )) keydown = 1; // insert = ^V
|
||||
#endif
|
||||
}
|
||||
|
||||
if( data )
|
||||
if( keydown )
|
||||
{
|
||||
m_sy6545_reg[17] = offs;
|
||||
m_sy6545_reg[16] = (offs >> 8) & 0x3f;
|
||||
@ -283,8 +237,8 @@ void mbee_state::keyboard_matrix_r(int offs)
|
||||
|
||||
void mbee_state::mbee_video_kbd_scan( int param )
|
||||
{
|
||||
if (m_0b) return;
|
||||
|
||||
if (m_0b) return; // can't remember why this is here
|
||||
if (param & 15) return; // only scan once per row instead of 16 times
|
||||
keyboard_matrix_r(param);
|
||||
}
|
||||
|
||||
@ -375,14 +329,14 @@ WRITE8_MEMBER ( mbee_state::m6545_data_w )
|
||||
|
||||
************************************************************/
|
||||
|
||||
VIDEO_START_MEMBER( mbee_state, mbee )
|
||||
VIDEO_START_MEMBER( mbee_state, mono )
|
||||
{
|
||||
m_p_videoram = memregion("videoram")->base();
|
||||
m_p_gfxram = memregion("gfx")->base()+0x1000;
|
||||
m_is_premium = 0;
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER( mbee_state, mbeeic )
|
||||
VIDEO_START_MEMBER( mbee_state, standard )
|
||||
{
|
||||
m_p_videoram = memregion("videoram")->base();
|
||||
m_p_colorram = memregion("colorram")->base();
|
||||
@ -390,7 +344,7 @@ VIDEO_START_MEMBER( mbee_state, mbeeic )
|
||||
m_is_premium = 0;
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER( mbee_state, mbeeppc )
|
||||
VIDEO_START_MEMBER( mbee_state, premium )
|
||||
{
|
||||
m_p_videoram = memregion("videoram")->base();
|
||||
m_p_colorram = memregion("colorram")->base();
|
||||
@ -407,19 +361,15 @@ UINT32 mbee_state::screen_update_mbee(screen_device &screen, bitmap_rgb32 &bitma
|
||||
}
|
||||
|
||||
|
||||
MC6845_ON_UPDATE_ADDR_CHANGED( mbee_state::mbee_update_addr )
|
||||
MC6845_ON_UPDATE_ADDR_CHANGED( mbee_state::crtc_update_addr )
|
||||
{
|
||||
/* not sure what goes in here - parameters passed are device, address, strobe */
|
||||
}
|
||||
|
||||
MC6845_ON_UPDATE_ADDR_CHANGED( mbee_state::mbee256_update_addr )
|
||||
{
|
||||
/* not used on 256TC */
|
||||
// not sure what goes in here - parameters passed are device, address, strobe
|
||||
// not used on 256TC
|
||||
}
|
||||
|
||||
|
||||
/* monochrome bee */
|
||||
MC6845_UPDATE_ROW( mbee_state::mbee_update_row )
|
||||
MC6845_UPDATE_ROW( mbee_state::mono_update_row )
|
||||
{
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT8 chr,gfx;
|
||||
@ -453,76 +403,43 @@ MC6845_UPDATE_ROW( mbee_state::mbee_update_row )
|
||||
}
|
||||
}
|
||||
|
||||
/* prom-based colours */
|
||||
MC6845_UPDATE_ROW( mbee_state::mbeeic_update_row )
|
||||
/* colour bee */
|
||||
MC6845_UPDATE_ROW( mbee_state::colour_update_row )
|
||||
{
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT8 chr,gfx,fg,bg;
|
||||
UINT16 mem,x,col;
|
||||
UINT8 inv,attr,gfx,fg,bg;
|
||||
UINT16 mem,x,col,chr;
|
||||
UINT16 colourm = (m_08 & 0x0e) << 7;
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
|
||||
for (x = 0; x < x_count; x++) // for each character
|
||||
{
|
||||
UINT8 inv=0;
|
||||
mem = (ma + x) & 0x7ff;
|
||||
chr = m_p_videoram[mem];
|
||||
col = m_p_colorram[mem] | colourm; // read a byte of colour
|
||||
|
||||
mbee_video_kbd_scan(x+ma);
|
||||
|
||||
/* process cursor */
|
||||
if (x == cursor_x)
|
||||
inv ^= m_sy6545_cursor[ra]; // cursor scan row
|
||||
|
||||
/* get pattern of pixels for that character scanline */
|
||||
gfx = m_p_gfxram[(chr<<4) | ra] ^ inv;
|
||||
fg = (col & 0x001f) | 64; // map to foreground palette
|
||||
bg = (col & 0x07e0) >> 5; // and background palette
|
||||
|
||||
/* Display a scanline of a character (8 pixels) */
|
||||
*p++ = palette[BIT(gfx, 7) ? fg : bg];
|
||||
*p++ = palette[BIT(gfx, 6) ? fg : bg];
|
||||
*p++ = palette[BIT(gfx, 5) ? fg : bg];
|
||||
*p++ = palette[BIT(gfx, 4) ? fg : bg];
|
||||
*p++ = palette[BIT(gfx, 3) ? fg : bg];
|
||||
*p++ = palette[BIT(gfx, 2) ? fg : bg];
|
||||
*p++ = palette[BIT(gfx, 1) ? fg : bg];
|
||||
*p++ = palette[BIT(gfx, 0) ? fg : bg];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* new colours & hires2 */
|
||||
MC6845_UPDATE_ROW( mbee_state::mbeeppc_update_row )
|
||||
{
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT8 gfx,fg,bg;
|
||||
UINT16 mem,x,col,chr;
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
|
||||
for (x = 0; x < x_count; x++) // for each character
|
||||
{
|
||||
UINT8 inv=0;
|
||||
inv = 0;
|
||||
mem = (ma + x) & 0x7ff;
|
||||
chr = m_p_videoram[mem];
|
||||
col = m_p_colorram[mem]; // read a byte of colour
|
||||
|
||||
if (m_1c & 0x80) // are extended features enabled?
|
||||
if (m_is_premium)
|
||||
{
|
||||
UINT8 attr = m_p_attribram[mem];
|
||||
if (m_1c & 0x80) // are extended features enabled?
|
||||
{
|
||||
attr = m_p_attribram[mem];
|
||||
|
||||
if (chr & 0x80)
|
||||
chr += ((attr & 15) << 7); // bump chr to its particular pcg definition
|
||||
if (chr & 0x80)
|
||||
chr += ((attr & 15) << 7); // bump chr to its particular pcg definition
|
||||
|
||||
if (attr & 0x40)
|
||||
inv ^= 0xff; // inverse attribute
|
||||
if (attr & 0x40)
|
||||
inv ^= 0xff; // inverse attribute
|
||||
|
||||
if ((attr & 0x80) && (m_framecnt & 0x10)) // flashing attribute
|
||||
chr = 0x20;
|
||||
if ((attr & 0x80) && (m_framecnt & 0x10)) // flashing attribute
|
||||
chr = 0x20;
|
||||
}
|
||||
}
|
||||
else
|
||||
col |= colourm;
|
||||
|
||||
mbee_video_kbd_scan(x+ma);
|
||||
if (m_has_oldkb)
|
||||
mbee_video_kbd_scan(x+ma);
|
||||
|
||||
/* process cursor */
|
||||
if (x == cursor_x)
|
||||
@ -530,8 +447,18 @@ MC6845_UPDATE_ROW( mbee_state::mbeeppc_update_row )
|
||||
|
||||
/* get pattern of pixels for that character scanline */
|
||||
gfx = m_p_gfxram[(chr<<4) | ra] ^ inv;
|
||||
fg = col & 15; // map to foreground palette
|
||||
bg = (col & 0xf0) >> 4; // and background palette
|
||||
|
||||
// get colours
|
||||
if (m_is_premium)
|
||||
{
|
||||
fg = col & 15;
|
||||
bg = (col & 0xf0) >> 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
fg = (col & 0x001f) | 64;
|
||||
bg = (col & 0x07e0) >> 5;
|
||||
}
|
||||
|
||||
/* Display a scanline of a character (8 pixels) */
|
||||
*p++ = palette[BIT(gfx, 7) ? fg : bg];
|
||||
@ -552,7 +479,7 @@ MC6845_UPDATE_ROW( mbee_state::mbeeppc_update_row )
|
||||
|
||||
************************************************************/
|
||||
|
||||
PALETTE_INIT_MEMBER( mbee_state, mbeeic )
|
||||
PALETTE_INIT_MEMBER( mbee_state, standard )
|
||||
{
|
||||
const UINT8 *color_prom = memregion("proms")->base();
|
||||
UINT16 i;
|
||||
@ -610,7 +537,7 @@ PALETTE_INIT_MEMBER( mbee_state, mbeepc85b )
|
||||
}
|
||||
|
||||
|
||||
PALETTE_INIT_MEMBER( mbee_state, mbeeppc )
|
||||
PALETTE_INIT_MEMBER( mbee_state, premium )
|
||||
{
|
||||
UINT16 i;
|
||||
UINT8 r, b, g;
|
||||
|
Loading…
Reference in New Issue
Block a user