mirror of
https://github.com/holub/mame
synced 2025-10-07 09:25:34 +03:00
(MESS) hprot1: Felipe Sanches
* new derivative "CARD I PCB rev.08A" * new derivative "CARD II PCB rev.6" * fixed LCD rendering (now both lines are displayed properly) * inverted logic of the inputs so that now we can navigate the menu
This commit is contained in:
parent
9660d58c21
commit
e7fca62c13
@ -1,6 +1,6 @@
|
||||
/***************************************************************************
|
||||
|
||||
HENRY Prot I - brazilian document timestamp printer
|
||||
HENRY Prot I/II - brazilian document timestamp printers
|
||||
http://www.dataponto.com.br/protocoladores-prot1.html
|
||||
|
||||
Driver by Felipe Sanches
|
||||
@ -12,6 +12,12 @@
|
||||
|
||||
Changelog:
|
||||
|
||||
2014 JUN 13 [Felipe Sanches]:
|
||||
* new derivative "CARD I PCB rev.08A"
|
||||
* new derivative "CARD II PCB rev.6"
|
||||
* fixed LCD rendering (now both lines are displayed properly)
|
||||
* inverted logic of the inputs so that now we can navigate the menu
|
||||
|
||||
2014 JAN 03 [Felipe Sanches]:
|
||||
* Initial driver skeleton
|
||||
* Address lines bitswaping
|
||||
@ -20,6 +26,25 @@
|
||||
|
||||
TO-DO list:
|
||||
|
||||
======= hprotr8a ===========
|
||||
Loops during boot displaying an error message related to low power supply voltage.
|
||||
We need to emulate the ADM695AN chip (Microprocessor Supervisory Circuits) in order to properly boot the device.
|
||||
|
||||
======= hprot2r6 ===========
|
||||
There are unhandled memory writes at 0xE000 and 0xA000
|
||||
|
||||
LCD commands are sent, but nothing shows up on screen.
|
||||
The commands sent are supposed to display the message:
|
||||
|
||||
"*Pouca Energia*" (LCD cmds range: 80-8F) (cmds logged but not displayed on screen)
|
||||
"* no Sistema *" (LCD cmds range: C0-CF) (cmds logged but not displayed on screen)
|
||||
|
||||
which means something like "too little energy for the system to operate".
|
||||
We need to emulate the ADM695AN chip (Microprocessor Supervisory Circuits) in order to properly boot the device.
|
||||
|
||||
Infinite loop is reached at address 0x7699
|
||||
======= hprot1 ===========
|
||||
|
||||
There seems to be an eeprom or a realtime clock placed at U2 (DIP8):
|
||||
pin1 -> 8031 pin 14 (T0: Timer 0 external input)
|
||||
pin2 -> crystal at X2 (labeled 32.768)
|
||||
@ -30,25 +55,12 @@ TO-DO list:
|
||||
pin7 -> 8031 pin 4 (Port 1 bit 3)
|
||||
pin8 -> VCC
|
||||
|
||||
(no context): unmapped io memory write to 20003 = FF & FF
|
||||
(no context): unmapped io memory write to 20002 = FF & FF
|
||||
(no context): unmapped io memory write to 20001 = FF & FF
|
||||
(no context): unmapped io memory write to 20000 = FF & FF
|
||||
':maincpu' (01EB): unmapped io memory write to 20001 = 7F & FF
|
||||
':maincpu' (01EE): unmapped io memory write to 20003 = FF & FF
|
||||
':maincpu' (01F0): unmapped io memory write to 20001 = 77 & FF
|
||||
':maincpu' (3500): unmapped io memory write to 20003 = FF & FF
|
||||
':maincpu' (0208): unmapped io memory write to 20001 = 77 & FF
|
||||
':maincpu' (13F7): unmapped io memory write to 20001 = 77 & FF
|
||||
':maincpu' (13EF): unmapped io memory write to 20001 = 67 & FF
|
||||
':maincpu' (13F7): unmapped io memory write to 20001 = 77 & FF
|
||||
The last 2 lines repeat endlessly.
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/mcs51/mcs51.h"
|
||||
#include "video/hd44780.h"
|
||||
#include "sound/speaker.h"
|
||||
#include "rendlay.h"
|
||||
|
||||
class hprot1_state : public driver_device
|
||||
@ -100,8 +112,8 @@ DRIVER_INIT_MEMBER( hprot1_state, hprot1 )
|
||||
//11?? 00?? ??11 ???? read command
|
||||
//mirror=0x33cf
|
||||
|
||||
//write: 0xc400 => U12 (?)
|
||||
//write: 0xc800 => U11 (?)
|
||||
//write: 0xc400 => U12 (74373 - possibly for the dot matrix printhead ?)
|
||||
//write: 0xc800 => U11 (74373 - possibly for the dot matrix printhead ?)
|
||||
//read: 0xc020 => display
|
||||
//write: 0xc000 => display
|
||||
//write: 0xc010 => display
|
||||
@ -110,21 +122,64 @@ DRIVER_INIT_MEMBER( hprot1_state, hprot1 )
|
||||
|
||||
static ADDRESS_MAP_START(i80c31_io, AS_IO, 8, hprot1_state)
|
||||
AM_RANGE(0x0000,0x7fff) AM_RAM
|
||||
AM_RANGE(0xc000,0xc000) AM_MIRROR(0x33cf) AM_DEVWRITE("hd44780", hd44780_device, control_write)
|
||||
AM_RANGE(0xc010,0xc010) AM_MIRROR(0x33cf) AM_DEVWRITE("hd44780", hd44780_device, data_write)
|
||||
AM_RANGE(0xc020,0xc020) AM_MIRROR(0x33cf) AM_DEVREAD("hd44780", hd44780_device, control_read)
|
||||
AM_RANGE(0xc030,0xc030) AM_MIRROR(0x33cf) AM_DEVREAD("hd44780", hd44780_device, data_read)
|
||||
/*TODO: verify the mirror mask value for the HD44780 device */
|
||||
AM_RANGE(0xc000,0xc000) AM_MIRROR(0x13cf) AM_DEVWRITE("hd44780", hd44780_device, control_write)
|
||||
AM_RANGE(0xc010,0xc010) AM_MIRROR(0x13cf) AM_DEVWRITE("hd44780", hd44780_device, data_write)
|
||||
AM_RANGE(0xc020,0xc020) AM_MIRROR(0x13cf) AM_DEVREAD("hd44780", hd44780_device, control_read)
|
||||
AM_RANGE(0xc030,0xc030) AM_MIRROR(0x13cf) AM_DEVREAD("hd44780", hd44780_device, data_read)
|
||||
/*TODO: attach the watchdog/brownout reset device:
|
||||
AM_RANGE(0xe000,0xe0??) AM_MIRROR(?) AM_DEVREAD("adm965an", adm965an_device, data_read) */
|
||||
|
||||
//AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P3) AM_READWRITE(henry_io_r, henry_io_w)
|
||||
AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P3) AM_READ(henry_io_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static INPUT_PORTS_START( hprot1 )
|
||||
/* FIXME: I am still unsure whether all these inputs are Active High or Active Low: */
|
||||
PORT_START("inputs")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Upper Black Button") PORT_CODE(KEYCODE_A)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Lower Black Button") PORT_CODE(KEYCODE_B)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Blue Button") PORT_CODE(KEYCODE_C)
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Upper Black Button") PORT_CODE(KEYCODE_A)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Lower Black Button") PORT_CODE(KEYCODE_B)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Blue Button") PORT_CODE(KEYCODE_C)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Paper Detector") PORT_CODE(KEYCODE_D)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("XMIN Endstop") PORT_CODE(KEYCODE_E)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( hprot_jumpers )
|
||||
/*
|
||||
There is a set of 3 jumpers that switch the communications circuitry between a
|
||||
RS232 chip (U8: MAX232AN) and a differential bus transceiver (U7: SN65176BP)
|
||||
|
||||
It seems that all three jumpers must select the same configuration:
|
||||
eighter differential bus or RS232.
|
||||
And I don't see yet how this could affect the emulation of the device, so, for now, I'll
|
||||
simply leave this note here but not actually include this details in the driver code.
|
||||
|
||||
PORT_START("jumpers")
|
||||
PORT_DIPNAME( 0x01, 0x01, "TX")
|
||||
PORT_DIPSETTING( 0x01, "differential bus")
|
||||
PORT_DIPSETTING( 0x00, "RS232")
|
||||
PORT_DIPNAME( 0x02, 0x02, "RX")
|
||||
PORT_DIPSETTING( 0x02, "differential bus")
|
||||
PORT_DIPSETTING( 0x00, "RS232")
|
||||
PORT_DIPNAME( 0x04, 0x04, "CPU-TX")
|
||||
PORT_DIPSETTING( 0x04, "differential bus")
|
||||
PORT_DIPSETTING( 0x00, "RS232")
|
||||
*/
|
||||
INPUT_PORTS_END
|
||||
|
||||
/* TODO: meanings for the jumpers may be different among machines,
|
||||
so we may have to have individual declarations for each board. */
|
||||
static INPUT_PORTS_START( hprot2r6 )
|
||||
PORT_INCLUDE(hprot1)
|
||||
PORT_INCLUDE(hprot_jumpers)
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( hprotr8a )
|
||||
PORT_INCLUDE(hprot1)
|
||||
PORT_INCLUDE(hprot_jumpers)
|
||||
INPUT_PORTS_END
|
||||
|
||||
void hprot1_state::machine_start()
|
||||
@ -141,7 +196,7 @@ READ8_MEMBER(hprot1_state::henry_io_r)
|
||||
{
|
||||
case 0x01:
|
||||
{
|
||||
UINT8 value = (ioport("inputs")->read()) & 0x67;
|
||||
UINT8 value = ioport("inputs")->read();
|
||||
#if LOG_IO_PORTS
|
||||
printf("value:%02X\n", value);
|
||||
#endif
|
||||
@ -231,6 +286,19 @@ static GFXDECODE_START( hprot1 )
|
||||
GFXDECODE_ENTRY( "hd44780:cgrom", 0x0000, henry_prot_charlayout, 0, 1 )
|
||||
GFXDECODE_END
|
||||
|
||||
static HD44780_PIXEL_UPDATE(hprot1_pixel_update)
|
||||
{
|
||||
if ( pos < 16 && line==0 )
|
||||
{
|
||||
bitmap.pix16(y, pos*6 + x) = state;
|
||||
}
|
||||
|
||||
if ( pos >= 64 && pos < 80 && line==0 )
|
||||
{
|
||||
bitmap.pix16(y+9,(pos-64)*6 + x) = state;
|
||||
}
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( hprot1, hprot1_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", I80C31, XTAL_10MHz)
|
||||
@ -253,6 +321,40 @@ static MACHINE_CONFIG_START( hprot1, hprot1_state )
|
||||
|
||||
MCFG_HD44780_ADD("hd44780")
|
||||
MCFG_HD44780_LCD_SIZE(2, 16)
|
||||
MCFG_HD44780_PIXEL_UPDATE_CB(hprot1_pixel_update)
|
||||
|
||||
/* TODO: figure out which RTC chip is in use. */
|
||||
|
||||
/* TODO: emulate the ADM695AN chip (watchdog/brownout reset)*/
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( hprotr8a, hprot1 )
|
||||
MCFG_CPU_REPLACE("maincpu", I80C31, 11059200) // value of X1 cristal on the PCB
|
||||
MCFG_CPU_PROGRAM_MAP(i80c31_prg)
|
||||
MCFG_CPU_IO_MAP(i80c31_io)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
|
||||
/* TODO: add an RS232 interface (emulate MAX232N chip)
|
||||
(the board has GND/VCC/RX/TX pins available in a connector) */
|
||||
|
||||
/* TODO: add an I2C interface (the board has GND/VCC/SDA/SCL pins available in a connector) */
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( hprot2r6, hprot1 )
|
||||
MCFG_CPU_REPLACE("maincpu", I80C31, 11059200) // value of X1 cristal on the PCB
|
||||
MCFG_CPU_PROGRAM_MAP(i80c31_prg)
|
||||
MCFG_CPU_IO_MAP(i80c31_io)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
|
||||
/* TODO: add an RS232 interface (emulate MAX232N chip) */
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
ROM_START( hprot1 )
|
||||
@ -260,5 +362,22 @@ ROM_START( hprot1 )
|
||||
ROM_LOAD( "henry_prot1_rev1_v19.bin", 0x00000, 0x10000, CRC(dd7787fd) SHA1(61a37dd406b3440d568bd6da75a9fdc8a0f0e1e3) )
|
||||
ROM_END
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||
COMP( 2004, hprot1, 0, 0, hprot1, hprot1, hprot1_state, hprot1, "HENRY", "Henry Prot I v19 (REV.1)", GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND)
|
||||
ROM_START( hprotr8a )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "hprot_card1_rev08a.u2", 0x00000, 0x10000, CRC(e827480f) SHA1(bd53e6cce9a0832ca01f1a485ddaab43c0baa136) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( hprot2r6 )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "hprot_card2_rev6.u2", 0x00000, 0x10000, CRC(791f2425) SHA1(70af8911a27921cac6d98a5cd07602a7f59c2848) )
|
||||
ROM_END
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||
COMP( 2002, hprot1, 0, 0, hprot1, hprot1, hprot1_state, hprot1, "HENRY", "Henry Prot I v19 (REV.1)", GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND)
|
||||
/* fw version: "R19" Release date: February 1st, 2002. */
|
||||
|
||||
COMP( 2006, hprotr8a, hprot1, 0, hprotr8a, hprotr8a, hprot1_state, hprot1, "HENRY", "Henry Prot CARD I (REV.08A)", GAME_NOT_WORKING)
|
||||
/* fw version: "V6.5QI I" Release date: September 18th, 2006. */
|
||||
|
||||
COMP( 2003, hprot2r6, hprot1, 0, hprot2r6, hprot2r6, hprot1_state, hprot1, "HENRY", "Henry Prot CARD II (REV.6)", GAME_NOT_WORKING)
|
||||
/* fw version: "V5.8CF II" Release date: June 23rd, 2003. */
|
||||
|
@ -2380,6 +2380,8 @@ cpu09
|
||||
ivg09
|
||||
pulsarlb
|
||||
hprot1
|
||||
hprotr8a
|
||||
hprot2r6
|
||||
compclr2
|
||||
m6805evs
|
||||
mx2178
|
||||
|
Loading…
Reference in New Issue
Block a user