mirror of
https://github.com/holub/mame
synced 2025-06-05 12:26:35 +03:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
3fad928706
@ -1048,6 +1048,7 @@ function linkProjects_mame_mess(_target, _subtarget)
|
||||
"unisys",
|
||||
"usp",
|
||||
"veb",
|
||||
"verifone",
|
||||
"vidbrain",
|
||||
"videoton",
|
||||
"visual",
|
||||
@ -3087,6 +3088,12 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/sc2.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "verifone")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/drivers/tranz330.cpp",
|
||||
MAME_DIR .. "src/mame/includes/tranz330.h"
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "vidbrain")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/drivers/vidbrain.cpp",
|
||||
@ -3210,6 +3217,7 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/alphasma.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/ampro.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/amust.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/anzterm.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/applix.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/argox.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/attache.cpp",
|
||||
|
@ -128,17 +128,17 @@ WRITE8_MEMBER(sega_fm_unit_device::peripheral_w)
|
||||
m_audio_control = data & 0x01;
|
||||
if (m_audio_control == 0x01)
|
||||
{
|
||||
m_ym->set_output_gain(0, 1.0);
|
||||
m_ym->set_output_gain(ALL_OUTPUTS, 1.0);
|
||||
// assume the PSG output is muted when FM is active.
|
||||
// Out Run need this. Needs confirmation (see TODO).
|
||||
if (m_psg.found())
|
||||
m_psg->set_output_gain(0, 0.0);
|
||||
m_psg->set_output_gain(ALL_OUTPUTS, 0.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ym->set_output_gain(0, 0.0);
|
||||
m_ym->set_output_gain(ALL_OUTPUTS, 0.0);
|
||||
if (m_psg.found())
|
||||
m_psg->set_output_gain(0, 1.0);
|
||||
m_psg->set_output_gain(ALL_OUTPUTS, 1.0);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -530,7 +530,7 @@ void scc8530_t::write_reg(int offset, UINT8 data)
|
||||
case 0: /* Channel B (Printer Port) Control */
|
||||
case 1: /* Channel A (Modem Port) Control */
|
||||
{
|
||||
int chan = ((offset == 2) ? 1 : 0);
|
||||
int chan = ((offset == 0) ? 1 : 0);
|
||||
if (mode == 0)
|
||||
{
|
||||
if((data & 0xf0) == 0) // not a reset command
|
||||
|
@ -125,8 +125,6 @@ static const int roc10937poslut[]=
|
||||
0//15
|
||||
};
|
||||
|
||||
const device_type ROC10937 = &device_creator<roc10937_t>;
|
||||
|
||||
rocvfd_t::rocvfd_t(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) :
|
||||
device_t(mconfig, type, name, tag, owner, clock, shortname, source)
|
||||
{
|
||||
@ -246,6 +244,8 @@ void rocvfd_t::shift_clock(int state)
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
const device_type ROC10937 = &device_creator<roc10937_t>;
|
||||
|
||||
roc10937_t::roc10937_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: rocvfd_t(mconfig, ROC10937, "Rockwell 10937 VFD controller and compatible", tag, owner, clock, "roc10937", __FILE__)
|
||||
{
|
||||
@ -260,6 +260,22 @@ msc1937_t::msc1937_t(const machine_config &mconfig, const char *tag, device_t *o
|
||||
m_port_val=0;
|
||||
}
|
||||
|
||||
const device_type MIC10937 = &device_creator<mic10937_t>;
|
||||
|
||||
mic10937_t::mic10937_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: rocvfd_t(mconfig, MIC10937, "Micrel MIC10937 VFD controller", tag, owner, clock, "mic10937", __FILE__)
|
||||
{
|
||||
m_port_val=0;
|
||||
}
|
||||
|
||||
const device_type S16LF01 = &device_creator<s16lf01_t>;
|
||||
|
||||
s16lf01_t::s16lf01_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: rocvfd_t(mconfig, S16LF01, "Samsung 16LF01 Series VFD controller and compatible", tag, owner, clock, "s16lf01", __FILE__)
|
||||
{
|
||||
m_port_val=0;
|
||||
}
|
||||
|
||||
void rocvfd_t::write_char(int data)
|
||||
{
|
||||
if ( data & 0x80 )
|
||||
@ -378,11 +394,3 @@ void roc10957_t::write_char(int data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const device_type S16LF01 = &device_creator<s16lf01_t>;
|
||||
|
||||
s16lf01_t::s16lf01_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: rocvfd_t(mconfig, S16LF01, "Samsung 16LF01 Series VFD controller and compatible", tag, owner, clock, "s16lf01", __FILE__)
|
||||
{
|
||||
m_port_val=0;
|
||||
}
|
||||
|
@ -40,6 +40,16 @@
|
||||
#define MCFG_MSC1937_REMOVE(_tag) \
|
||||
MCFG_DEVICE_REMOVE(_tag)
|
||||
|
||||
#define MCFG_MIC10937_ADD(_tag,_val) \
|
||||
MCFG_DEVICE_ADD(_tag, MIC10937,60)\
|
||||
MCFG_MIC10937_PORT(_val)
|
||||
|
||||
#define MCFG_MIC10937_PORT(_val) \
|
||||
MCFG_ROC10937_PORT(_val)
|
||||
|
||||
#define MCFG_MIC10937_REMOVE(_tag) \
|
||||
MCFG_DEVICE_REMOVE(_tag)
|
||||
|
||||
#define MCFG_S16LF01_ADD(_tag,_val) \
|
||||
MCFG_DEVICE_ADD(_tag, S16LF01,60)\
|
||||
MCFG_S16LF01_PORT(_val)
|
||||
@ -95,6 +105,11 @@ public:
|
||||
msc1937_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
};
|
||||
|
||||
class mic10937_t : public rocvfd_t {
|
||||
public:
|
||||
mic10937_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
};
|
||||
|
||||
class roc10957_t : public rocvfd_t {
|
||||
public:
|
||||
roc10957_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
@ -109,6 +124,7 @@ public:
|
||||
|
||||
extern const device_type ROC10937;
|
||||
extern const device_type MSC1937;
|
||||
extern const device_type MIC10937;
|
||||
extern const device_type ROC10957;
|
||||
extern const device_type S16LF01;
|
||||
|
||||
|
@ -122,6 +122,7 @@ void menu_input_general::populate()
|
||||
item->defseq = &entry.defseq(seqtype);
|
||||
item->sortorder = sortorder * 4 + suborder[seqtype];
|
||||
item->type = ioport_manager::type_is_analog(entry.type()) ? (INPUT_TYPE_ANALOG + seqtype) : INPUT_TYPE_DIGITAL;
|
||||
item->is_optional = false;
|
||||
item->name = entry.name();
|
||||
item->owner_name = nullptr;
|
||||
item->next = itemlist;
|
||||
@ -199,6 +200,7 @@ void menu_input_specific::populate()
|
||||
item->defseq = &field.defseq(seqtype);
|
||||
item->sortorder = sortorder + suborder[seqtype];
|
||||
item->type = field.is_analog() ? (INPUT_TYPE_ANALOG + seqtype) : INPUT_TYPE_DIGITAL;
|
||||
item->is_optional = field.optional();
|
||||
item->name = field.name();
|
||||
item->owner_name = field.device().tag();
|
||||
item->next = itemlist;
|
||||
@ -420,6 +422,8 @@ void menu_input::populate_and_sort(input_item_data *itemlist)
|
||||
}
|
||||
|
||||
std::string text = string_format(nameformat[item->type], item->name);
|
||||
if (item->is_optional)
|
||||
text = "(" + text + ")";
|
||||
|
||||
/* if we're polling this item, use some spaces with left/right arrows */
|
||||
if (pollingref == item->ref)
|
||||
|
@ -55,6 +55,7 @@ protected:
|
||||
const char * owner_name; /* pointer to the name of the owner of the item */
|
||||
UINT32 sortorder; /* sorting information */
|
||||
UINT8 type; /* type of port */
|
||||
bool is_optional; /* true if this input is considered optional */
|
||||
};
|
||||
|
||||
void populate_and_sort(struct input_item_data *itemlist);
|
||||
|
479
src/mame/drivers/anzterm.cpp
Normal file
479
src/mame/drivers/anzterm.cpp
Normal file
@ -0,0 +1,479 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Vas Crabb
|
||||
/**************************************************************************
|
||||
|
||||
Burroughs EF315-I220 bank teller terminal
|
||||
|
||||
These 8-bit terminals were used by banks before they were displaced
|
||||
by cheap PCs. There's an external customer PIN pad with its own
|
||||
ROMs, and a keyboard for the teller. Unfortunately the teller
|
||||
keyboard was missing from the unit that was dumped. These terminals
|
||||
contain a hardware DES chip which was a controlled item due to trade
|
||||
restrictions on encryption technology.
|
||||
|
||||
The main system consists of three large boards in a stack: D8302
|
||||
(I/O board), A8301 (memory board), and C8209 (CPU board).
|
||||
|
||||
The MICR/OCR unit appears to be an off-the-shelf unit built by
|
||||
Recognition Equipment and has a single board mounted in the top
|
||||
case. Its main CPU is a MOSTEK MK3870/42 which has an undumped
|
||||
4032-byte internal mask ROM.
|
||||
|
||||
Onboard peripherals:
|
||||
- Small "green-screen" CRT display mounted on an adjustable "stalk"
|
||||
- Thermal printer
|
||||
- Card swipe
|
||||
- MICR/OCR for reading cheque numbers (swiped the same way as cards)
|
||||
|
||||
Rear panel connectors:
|
||||
- J1 (25-pin D-sub male)
|
||||
- J2 (25-pin D-sub male)
|
||||
- J3 (7-pin MIL-C-5015 connector)
|
||||
- J4 (5-pin 180-degree DIN female)
|
||||
- J5 (25-pin D-sub male)
|
||||
- J6 (15-pin D-sub female)
|
||||
|
||||
TODO:
|
||||
- Check designation of MICR board.
|
||||
- Does U2 on the MICR board exist? I can't find it on the overlay.
|
||||
- Finish parts list and ASCII art for CPU board.
|
||||
- Do IC50 and IC56 on the I/O board exist? I can't find them on the overlay.
|
||||
- Work out how clocks are derived.
|
||||
- Hook everything up.
|
||||
- Emulate DES engine.
|
||||
- Photograph the guts of the PIN pad and check ROM labels.
|
||||
- Find way to dump MK3870/42 in MICR reader.
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
/*
|
||||
|
||||
(Despite my ASCII art, the main boards are actually all the same size.)
|
||||
|
||||
C8209 CPU Board
|
||||
==================
|
||||
|
||||
Components:
|
||||
IC1 - SN75189N
|
||||
IC3 - unpopulated (16-pin DIP)
|
||||
IC7 - SN75174NG
|
||||
IC8 - SN75175N
|
||||
IC9 - MC6850P
|
||||
IC12 - SN75189N
|
||||
IC13 - SN75188N
|
||||
IC14, IC15 - unpopulated (16-pin DIP)
|
||||
IC16 - MC6854P
|
||||
IC17 - MC6850P
|
||||
IC18 - HD46850P
|
||||
IC19 - MC6854P
|
||||
IC20 - unpopulated (24-pin DIP)
|
||||
IC21 - SN74LS74AN
|
||||
IC22 - SN74LS51N
|
||||
IC23 - SN75189N
|
||||
IC24 - unpopulated (16-pin DIP)
|
||||
IC25 - SN74LS08N
|
||||
IC26 - SN74LS00N
|
||||
IC27 - DM74LS04N
|
||||
IC28 - SN74LS367AN
|
||||
IC29 - SN74LS161AN
|
||||
IC30, IC31, IC32 - SN74LS367AN
|
||||
IC33 - SN74LS74AN
|
||||
IC34 - SN74LS393N
|
||||
IC36 - SN74LS367AN
|
||||
IC37 - SN74LS20N
|
||||
IC38 - SN74LS74AN
|
||||
IC39 - P8214
|
||||
IC42 - SN74LS245N
|
||||
IC45 - SN74LS10N
|
||||
IC46 - SN74LS86N
|
||||
IC48 - 74LS05N
|
||||
IC50 - WD200IAH-20
|
||||
IC51 - DM74LS04N
|
||||
IC52 - CD4093BE
|
||||
IC53 - SN74LS393N
|
||||
IC54 - SN74LS74AN
|
||||
IC55 - SN74LS00AN
|
||||
IC56 - SN74LS367AN
|
||||
IC57 - SN74LS132AN
|
||||
IC58 - SN74LS32N
|
||||
IC60 - unpopulated (16-pin DIP)
|
||||
J7 - System bus (50-pin DIL IDC)
|
||||
J8 - Power (24-pin SIL)
|
||||
|
||||
|
||||
A8301 Memory Board
|
||||
==================
|
||||
|
||||
+------------------------------+------------J1------------+---+ +---+
|
||||
| +--------------------------+ +---------J2---------+ |
|
||||
| [=IC9==] [=IC19=] +--------------------+ |
|
||||
| |
|
||||
| +--J-IC8---+ +--A-IC18--+ [=IC25=] [=IC29=] [=IC34=] [=RP12=] |
|
||||
| +----------+ +----------+ Q5 Q6 Q7 |
|
||||
| +--IC23---+ |
|
||||
| +--K-IC7---+ +--B-IC17--+ +---------+ [=IC28==] [=IC42==] |
|
||||
| +----------+ +----------+ [=IC55=] [=IC66=] |
|
||||
| [=IC22=] [=RP10=] [=IC33=] [=RP11=] |
|
||||
| +--L-IC6---+ +--C-IC16--+ [=IC54=] [=IC65=] |
|
||||
| +----------+ +----------+ |
|
||||
| [=HP3==] [=IC27=] [=IC41=] [=IC53=] [=RP14=] |
|
||||
| +--M-IC5---+ +--D-IC15--+ |
|
||||
| +----------+ +----------+ [=HP2==] [=IC52=] [=IC64=] |
|
||||
| [=IC40=] |
|
||||
| +--N-IC4--+ +--E-IC14-+ +---HP1---+ [=IC26=] [=IC51=] [=IC63=] |
|
||||
| +---------+ +---------+ +---------+ [=IC39==] [=IC50=] [=IC62=] |
|
||||
| +-----+ [=IC49=] [=IC61=] |
|
||||
| +--P-IC3--+ +--F-IC13-+ | | [=IC21=] [=IC32=] [=IC38=] |
|
||||
| +---------+ +---------+ | B1 | [=IC48=] [=IC60=] |
|
||||
| | B2 | [=IC31=] [=IC37=] [=IC47=] [=IC59=] |
|
||||
| +--Q-IC2--+ +--G-IC12-+ | B3 | Q4 [=IC46=] [=IC58=] |
|
||||
| +---------+ +---------+ | B4 | Q2 [=IC30=] [=IC36=] [=IC45=] [=IC57=] |
|
||||
| | B5 | Q3 |
|
||||
| +--R-IC1--+ +--H-IC11-+ | | Q1 [=IC35=] [=IC44=] [=IC56=] |
|
||||
| +---------+ +---------+ +-----+ |
|
||||
| [=RP2=] [=IC10=] [=IC43=] |
|
||||
+--------------------------------------------------------------------------------------+
|
||||
|
||||
Components:
|
||||
B1, B2, B3, B4, B5 - space provided for various NiCd batteries - B4 is populated (3.6V 100mAh)
|
||||
HP1 - 24-pin DIP wired links - 1/2/16/22/24 3/4/5 6 7/8/9/10 11/12 13/14 15/17/18 19/20 21 23
|
||||
HP2 - 16-pin DIP wired links - 1/2/3/16 4/6/7/8/14 5/9/10/12 11/13/15
|
||||
HP3 - 16-pin DIP wired links - 1/4 2 3 5/12 6/11 7/10 8/9 13 14 15 16
|
||||
IC1, IC2 - HM6116LP-3
|
||||
IC3, IC4 - unpopulated (24-pin DIP socket)
|
||||
IC5, IC6, IC7, IC8 - HN482764G
|
||||
IC9 - HM6147LP-3 (18-pin DIP in 20-pin socket; overlay says "CMOS PARITY 1")
|
||||
IC10 - DM74LS156N
|
||||
IC11, IC12 - unpopulated (24-pin DIP socket)
|
||||
IC13, IC14 - TMS2516JL-45
|
||||
IC15 - unpopulated (28-pin DIP socket)
|
||||
IC16, IC17, IC18 - HN482764G
|
||||
IC19 - unpopulated (20-pin DIP socket; overlay says "CMOS PARITY 2")
|
||||
IC20 - location for 14-pin DIP integrated transistor pack replacing Q1/Q2/Q3/Q4
|
||||
IC21 - SN74LS03N
|
||||
IC22 - DM74LS156N
|
||||
IC23 - TBP28S166N
|
||||
IC24 - location for 16-pin DIP under IC23 (for smaller address decoding ROM/PLD?)
|
||||
IC25 - SN74LS367AN
|
||||
IC26 - DM74LS156N
|
||||
IC27 - SN74LS157N
|
||||
IC28 - SN74LS273N
|
||||
IC29 - SN74LS367AN
|
||||
IC30 - SN74LS139N
|
||||
IC31 - SN74LS32N
|
||||
IC32 - SN74LS20N
|
||||
IC33 - SN74LS280N
|
||||
IC34 - SN74LS367AN
|
||||
IC35 - SN74LS32N
|
||||
IC36 - SN74LS13N
|
||||
IC37 - SN74LS163AN
|
||||
IC38 - SN74S74N
|
||||
IC39 - BELFUSE 8331 0447-0439-99 (DRAM timing device?)
|
||||
IC40 - SN74LS132N
|
||||
IC41 - SN74S02N
|
||||
IC42 - SN74LS245N
|
||||
IC43 - SN74S08N
|
||||
IC44 - IC52 - HM4864P-2 (DRAM BANK 1 BIT 0 - 8 and PARITY, respectively)
|
||||
IC53, IC54 - SN74LS158N
|
||||
IC55 - SN74LS393N
|
||||
IC56 - IC64 - HM4864P-2 (DRAM BANK 2 BIT 0 - 8 and PARITY, respectively)
|
||||
IC65, IC66 - SN74LS158N
|
||||
J1 - System bus (50-pin DIL IDC)
|
||||
J2 - Power (24-pin SIL)
|
||||
|
||||
|
||||
D8302 I/O Board
|
||||
==================
|
||||
|
||||
+----------------------------+--------------J5--------------+----+ +----+
|
||||
| +------------------------------+ +-----------J7-----------+ |
|
||||
| J4 | +------------------------+ |
|
||||
| | |
|
||||
| J1 | | [=IC18=] [=RP2=] |
|
||||
| | [==IC26=] |
|
||||
| J3 | +---IC25---+ |
|
||||
| [=IC7=] | [=IC17=] +----------+ [=IC45=] |
|
||||
| [=IC44=] |
|
||||
| +---IC6---+ +---IC16--+ |
|
||||
| +---------+ +---------+ [==IC34=] [=IC43=] |
|
||||
| |
|
||||
| [==IC5==] +-------IC15-------+ ++
|
||||
| +------------------+ [=IC33=] [=IC42=] Q12 [=IC51=] Q13 ||
|
||||
| [==IC4==] ||
|
||||
| [=IC11=] [=IC24=] [=IC41=] ||
|
||||
| [==IC3==] [==IC32=] ||
|
||||
| [=IC10=] [=IC14=] [=IC23=] [=IC40=] [=IC62=] [=IC61=] J9 ||
|
||||
| [==IC2==] [==IC31=] ||
|
||||
| +-------IC39-------+ [=IC55=] ||
|
||||
| [==IC1==] [=IC22=] [==IC30=] +------------------+ ||
|
||||
| ++ [=IC29=] [==IC38=] [=IC49=] ++
|
||||
| J2 [=IC54=] [=IC60=] |
|
||||
| || [=IC21=] IC28 +---IC37--+ |
|
||||
| ++ +---------+ [=IC48=] [=IC53=] [=IC59=] |
|
||||
| J6 [=IC27=] [=IC36=] [=IC63=] [=IC47=] [=IC58=] |
|
||||
| [=IC9==] | [=IC13=] [=IC20=]+-X1-+ |
|
||||
| [=IC8==] | [=IC12=] [=IC19=]+----+ [J10] [=IC35=] [=IC46=] [=IC52=] [=IC57=] |
|
||||
+----------------------------------------------------------------------------------------------+
|
||||
|
||||
Components:
|
||||
IC1, IC2 - SN74LS273N
|
||||
IC3, IC4 - SN74LS245N
|
||||
IC5 - SN74LS273N
|
||||
IC6 - D2716D
|
||||
IC7 - DM7404N
|
||||
IC8 - SN74LS04N
|
||||
IC9 - SN74LS74AN
|
||||
IC10 - SN74LS157N
|
||||
IC11 - SN74LS166AN
|
||||
IC12 - SN74LS21N
|
||||
IC13 - SN74LS93N
|
||||
IC14 - SN74LS157N
|
||||
IC15 - HD46505SP-1 HD68A45SP
|
||||
IC16 - HD46850P HD6850P
|
||||
IC17 - MC1488 75188N
|
||||
IC18 - SN74LS86N
|
||||
IC19 - SN74LS08N
|
||||
IC20 - SN74LS93N
|
||||
IC21 - SN74LS132N
|
||||
IC22 - SN74LS08N
|
||||
IC23 - MC1489A SN75189AN
|
||||
IC24 - SN74LS157N
|
||||
IC25 - D8251AC
|
||||
IC26 - SN74LS245N
|
||||
IC27 - SN7406N
|
||||
IC28 - NE555P
|
||||
IC29 - DM74LS00N
|
||||
IC30, IC31, IC32 - MCM2114P20
|
||||
IC33 - SN74LS157N
|
||||
IC34 - SN74LS273N
|
||||
IC35 - SN74LS27N
|
||||
IC36 - 74LS168
|
||||
IC37 - D2716D
|
||||
IC38 - SN74LS273N
|
||||
IC39 - HD46821P HD6821P
|
||||
IC40 - SN74LS74AN
|
||||
IC41, IC42, IC43 - 74LS32
|
||||
IC44 - SN74LS04N
|
||||
IC45 - SN74LS367AN
|
||||
IC47 - SN74LS10N
|
||||
IC48 - SN74LS74AN
|
||||
IC49 - 74LS03
|
||||
IC51 - 74LS138N
|
||||
IC52 - 74LS02
|
||||
IC53 - 74LS00N
|
||||
IC54 - SN74121N
|
||||
IC55 - SN74LS09N
|
||||
IC57, IC58 - SN74LS74AN
|
||||
IC59 - SN74LS14N
|
||||
IC60 - 74LS132N
|
||||
IC61 - SN74LS09N
|
||||
IC62 - SN74LS08N
|
||||
IC63 - 74LS03
|
||||
J1 - Card Swipe (6-pin SIL)
|
||||
J2 - MICR Reader Board (10-pin DIL IDC)
|
||||
J3 - not populated (6-pin SIL)
|
||||
J4 - CRT (8-pin SIL)
|
||||
J5 - System bus (50-pin DIL IDC)
|
||||
J6 - External connector on left side of case (6-pin SIL)
|
||||
J7 - Power (24-pin SIL)
|
||||
J9 - Printer (30-pin double-sided female edge connector)
|
||||
J10 - Possibly service mode - case contains a loose connector for shorting two pins (6-pin SIL)
|
||||
X1 - CK1100AC 15974.40KHz (oscillator module)
|
||||
|
||||
|
||||
MICR Board
|
||||
==================
|
||||
|
||||
+-------------------------------------------------------------+
|
||||
| +---K1---+ |
|
||||
| +---U15----+ +--------+ |
|
||||
| Q5 [=U23=] +----------+ [=U1==] |
|
||||
| Q6 |
|
||||
| +---U16----+ Q8 |
|
||||
| Q7 [=U24=] +----------+ Q10 Q3 |
|
||||
| |
|
||||
| +---U17----+ +---U11---+ +---U7----+ |
|
||||
| [=U25=] +----------+ +---------+ +---------+ U4 |
|
||||
| |
|
||||
| ++ [=U26=] +---U18----+ |
|
||||
| || +----------+ [=U12=] +-----U5------+ |
|
||||
| || JP5 +-------------+ U3 |
|
||||
| || [=U27=] +---U19----+ ++ |
|
||||
| || +----------+ U6 |
|
||||
| || +---U8----+ ++ |
|
||||
| ++ [=U28=] +---U20----+ +---------+ |
|
||||
| Q9 [=JP==] +----------+ ++ |
|
||||
| || |
|
||||
| +---U29---+ +----+ Q2 Q1 || |
|
||||
| +---------+ +U13 | U10 || |
|
||||
| Q4 +----+ || |
|
||||
| [=U31=] [=U21=] || |
|
||||
| +-----U14-----+ [=U9==] ++ |
|
||||
| [=U30=] [=U22=] +-------------+ |
|
||||
+-------------------------------------------------------------+
|
||||
|
||||
Components:
|
||||
JP - Jumpers JP1, JP2, JP3, JP4
|
||||
K1 - SPDT Relay
|
||||
U1 - TL497ACN
|
||||
U3, U4 - DS0026CN
|
||||
U5 - CF11000A
|
||||
U6 - CXO-043D 36.0000MHz 4E (oscillator module)
|
||||
U7 - AMI 8336CK 5020056 CO4423
|
||||
U8 - 5020884-002 853C
|
||||
U9 - SN7414N
|
||||
U10 - ICL8211CPA
|
||||
U11 - ET2732Q-3
|
||||
U12 - SN74LS00N
|
||||
U13 - MB63303A
|
||||
U14 - MK3870/42
|
||||
U15 - AM2716DC (24-pin DIP in 28-pin socket)
|
||||
U16 - ET2732Q-3 (24-pin DIP in 28-pin socket)
|
||||
U17, U18, U19 - unpopulated (28-pin DIP socket)
|
||||
U20 - ET2732Q-3 (24-pin DIP in 28-pin socket)
|
||||
U21 - SN74LS26N
|
||||
U22 - SN74LS245N
|
||||
U23 - SN7406N
|
||||
U24 - unpopulated (14-pin DIP socket)
|
||||
U25 - SN74LS08N
|
||||
U26, U27 - SN75189AN
|
||||
U28 - SN74LS367AN
|
||||
U29 - TMS2732AJL-45
|
||||
U30 - unpopulated (20-pin SDIP socket)
|
||||
U31 - SN74LS374N
|
||||
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
#include "cpu/m6809/m6809.h"
|
||||
#include "machine/6850acia.h"
|
||||
#include "machine/i8214.h"
|
||||
#include "machine/mc6854.h"
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class anzterm_state : public driver_device
|
||||
{
|
||||
public:
|
||||
anzterm_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
{
|
||||
}
|
||||
|
||||
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
gfx_layout const screenfont =
|
||||
{
|
||||
8, 16, // 8x8
|
||||
RGN_FRAC(1, 1), // whole region
|
||||
1, // 1bpp
|
||||
{ 0 }, // bitplane offset
|
||||
{ 0*1, 1*1, 2*1, 3*1, 4*1, 5*1, 6*1, 7*1 }, // x offsets
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
|
||||
8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 }, // y offsets
|
||||
128 // stride
|
||||
};
|
||||
|
||||
gfx_layout const printfont =
|
||||
{
|
||||
8, 8, // 7x8
|
||||
RGN_FRAC(1, 1), // whole region
|
||||
1, // 1bpp
|
||||
{ 0 }, // bitplane offset
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, // x offsets
|
||||
{ 7*1, 6*1, 5*1, 4*1, 3*1, 2*1, 1*1, 0*1 }, // y offsets
|
||||
64 // stride
|
||||
};
|
||||
|
||||
GFXDECODE_START( anzterm )
|
||||
GFXDECODE_ENTRY("crtc", 0x0000, screenfont, 0, 1)
|
||||
GFXDECODE_ENTRY("prnt", 0x0000, printfont, 0, 1)
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
ADDRESS_MAP_START( anzterm, AS_PROGRAM, 8, driver_device )
|
||||
// There are two battery-backed 2kB SRAM chips with a 4kb SRAM chip for parity
|
||||
// There are two 64kB DRAM banks (with parity)
|
||||
// There's also a whole lot of ROM
|
||||
AM_RANGE(0x0000, 0xffff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
MACHINE_CONFIG_START( anzterm, anzterm_state )
|
||||
MCFG_CPU_ADD("maincpu", M6809, 15974400/4)
|
||||
MCFG_CPU_PROGRAM_MAP(anzterm)
|
||||
|
||||
MCFG_DEVICE_ADD("pic.ic39", I8214, 0)
|
||||
MCFG_DEVICE_ADD("adlc.ic16", MC6854, 0)
|
||||
MCFG_DEVICE_ADD("adlc.1c19", MC6854, 0)
|
||||
MCFG_DEVICE_ADD("acia.ic17", ACIA6850, 0)
|
||||
MCFG_DEVICE_ADD("acia.ic18", ACIA6850, 0)
|
||||
|
||||
MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(anzterm_state, screen_update)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_RAW_PARAMS(15974400/4, 1024, 0, 104*8, 260, 0, 24*10) // this is totally wrong, it just stops a validation error
|
||||
|
||||
MCFG_PALETTE_ADD_MONOCHROME("palette")
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", anzterm)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
INPUT_PORTS_START( anzterm )
|
||||
INPUT_PORTS_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
ROM_START( anzterm )
|
||||
// Main program on memory board - loading is definitely wrong
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "fj-a-25.ic18", 0x0000, 0x2000, CRC(8c31a9dd) SHA1(864babf6c77813f17ce9082013098e8a677b0af6) )
|
||||
ROM_LOAD( "fj-b-25.ic17", 0x2000, 0x2000, CRC(a893aeaf) SHA1(64e8a935fe37195533a0a19f00bdc4e6a2007728) )
|
||||
ROM_LOAD( "fj-c-25.ic16", 0x4000, 0x2000, CRC(ae678bde) SHA1(b41da540b99a0c3ef9489d9cd25e5fa32e2d13f9) )
|
||||
ROM_LOAD( "fj-e-25.ic14", 0x6000, 0x0800, CRC(786beceb) SHA1(d20b870528d12f8457e3c746b539fcfc3ded3b0b) )
|
||||
ROM_LOAD( "fj-f-25.ic13", 0x6800, 0x0800, CRC(2890d808) SHA1(6871f4c5fd1bc7e2d1db2e663ffb342988de94b7) )
|
||||
ROM_LOAD( "fj-j-25.ic8", 0x8000, 0x2000, CRC(23fa4b36) SHA1(b3676579b2ea4efb0bf867557b53a6ccba7cc60f) )
|
||||
ROM_LOAD( "fj-k-25.ic7", 0xa000, 0x2000, CRC(cbd17462) SHA1(7e7460f99e7dd5c9ae113f69b67e2b6079a57c6d) )
|
||||
ROM_LOAD( "fj-l-25.ic6", 0xc000, 0x2000, CRC(8989c2ed) SHA1(912d8152f8f67a964dcd360151d8c8438a652d58) )
|
||||
ROM_LOAD( "fj-m-25.ic5", 0xe000, 0x2000, CRC(82762fee) SHA1(234a438abab91936e7073bd7cc62414dfae10373) )
|
||||
|
||||
// BPROM on memory board - address decoding?
|
||||
ROM_REGION( 0x0800, "prom", 0 )
|
||||
ROM_LOAD( "08177-80002.ic23", 0x0000, 0x0800, CRC(3cec2386) SHA1(a1ae5e07756eac5abbb3e178e12b213770432b5f) )
|
||||
|
||||
// CRTC character ROM on I/O board
|
||||
ROM_REGION( 0x0800, "crtc", 0 )
|
||||
ROM_LOAD( "crt-5080-2.ic6", 0x0000, 0x0800, CRC(cdea8532) SHA1(683743e477518695c2a1d9510bee25b7ef3f909b) )
|
||||
|
||||
// Printer font ROM on I/O board
|
||||
ROM_REGION( 0x0800, "prnt", 0 )
|
||||
ROM_LOAD( "prt-04.ic37", 0x0000, 0x0800, CRC(68870564) SHA1(06819a633dc545f103e8b843a2f553ac46a16a05) )
|
||||
|
||||
// ROMs in PIN pad
|
||||
ROM_REGION( 0x1000, "pinpad", 0 )
|
||||
ROM_LOAD( "ck-a-pr01.ic4", 0x0000, 0x0800, CRC(d0981882) SHA1(b55fd313c9b3e00039501a53a53c820d98f2258a) )
|
||||
ROM_LOAD( "ck-b-pr01.ic3", 0x0000, 0x0800, CRC(96c9d90d) SHA1(400980c7a2c5306be28b74284c626ef2ed24c1a5) )
|
||||
|
||||
// Undumped microcontroller ROM in MICR reader
|
||||
ROM_REGION( 0x0fc0, "micrmcu", 0 )
|
||||
ROM_LOAD( "mk3870.u14", 0x0000, 0x0fc0, NO_DUMP )
|
||||
|
||||
// MICR reader data table ROMS, no idea how this stuff is used but dumps should be preserved
|
||||
ROM_REGION( 0x5000, "micrdata", 0 )
|
||||
ROM_LOAD( "cdn1-ebb.u20", 0x0000, 0x1000, CRC(0f9a9db3) SHA1(aedfe3ba7afb1d0a827fec5418369fca9348940f) )
|
||||
ROM_LOAD( "cdn2-ebb.u16", 0x1000, 0x1000, CRC(648fff69) SHA1(59653d34067d9a3061857507868fd2147dadf537) )
|
||||
ROM_LOAD( "6047204005.u15", 0x2000, 0x0800, CRC(70bfac37) SHA1(84081249ead5b957d98b3bd06665ef52d0a0243c) )
|
||||
ROM_LOAD( "6048225001.u29", 0x3000, 0x1000, CRC(59c73999) SHA1(7dd12b500e13b177d19a24d148310541f7e660b4) )
|
||||
ROM_LOAD( "ebb-fea-v96-9-23-83-f43a.u11", 0x4000, 0x1000, CRC(0e572470) SHA1(966e5eeb0114589a7cab3c29a1db48cdd8634be5) )
|
||||
ROM_END
|
||||
|
||||
COMP( 1986?, anzterm, 0, 0, anzterm, anzterm, driver_device, 0, "Burroughs", "EF315-I220 Teller Terminal (ANZ)", MACHINE_IS_SKELETON ) // year comes from sticker on bottom of case, it's more likely a 1983 revision
|
@ -260,7 +260,7 @@ Notes:
|
||||
CN5 - USB connector joining to JVS I/O board with standard USB cable
|
||||
CN8 - A/V input connector (from XBox board via short A/V cable)
|
||||
CN9 - VGA output connector
|
||||
CN10 - 14 pin connector (purpose unknown but appears to be unused)
|
||||
CN10 - 14 pin connector (purpose unknown, maybe another video connector)
|
||||
CN11 - 16-pin flat cable connector joining to LPC connector on XBox board
|
||||
CN12 - 40-pin IDE flat cable connector joining to IDE connector on XBox board
|
||||
CN14S - 7-pin power output connector joining to XBox board
|
||||
@ -869,9 +869,10 @@ int ohci_hlean2131qc_device::handle_nonstandard_request(int endpoint, USBSetupPa
|
||||
sense = 3;
|
||||
else
|
||||
sense = 0; // need to check
|
||||
// PINSA register, bits 4-1 special value, must be 10 xor 15, but bit 3 is ignored since its used as the CS pin of the chip
|
||||
// PINSA register, bits 0-2 connected do dip switches 1-3 on filter board, bit 4 to dip switch 4, bit 5 to dip switch 5, bits 6-7 to buttons 1-2 on filter board
|
||||
// bits 4-1 value must be 10 xor 15, and bit 3 is ignored since its used as the CS pin of the chip
|
||||
endpoints[endpoint].buffer[1] = 0x4b;
|
||||
// PINSB register, bit 4 connected to re/de pins of max485, bits 2-3 used as uart pins, bit 0-1 is the sense pin of the jvs connector
|
||||
// PINSB register, bits 5-7 connected to 3 leds not mounted on pcb, bit 4 connected to re/de pins of max485, bits 2-3 used as uart pins, bit 0-1 give the status of the sense pin of the jvs connector
|
||||
// if bits 0-1 are 11, the not all the connected jvs devices have been assigned an address yet
|
||||
endpoints[endpoint].buffer[2] = 0x52 | sense;
|
||||
// OUTB register
|
||||
|
@ -270,6 +270,8 @@ public:
|
||||
DECLARE_WRITE32_MEMBER(trivrus_input_w);
|
||||
UINT8 m_trivrus_input;
|
||||
|
||||
DECLARE_READ32_MEMBER(crzyddz2_4_r);
|
||||
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
UINT32 screen_update_crystal(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
@ -284,8 +286,6 @@ public:
|
||||
void PatchReset( );
|
||||
UINT16 GetVidReg( address_space &space, UINT16 reg );
|
||||
void SetVidReg( address_space &space, UINT16 reg, UINT16 val );
|
||||
|
||||
|
||||
};
|
||||
|
||||
void crystal_state::IntReq( int num )
|
||||
@ -664,6 +664,48 @@ static ADDRESS_MAP_START( trivrus_mem, AS_PROGRAM, 32, crystal_state )
|
||||
|
||||
ADDRESS_MAP_END
|
||||
|
||||
// Crazy Dou Di Zhu II
|
||||
// To do: HY04 (pic?) protection
|
||||
|
||||
READ32_MEMBER(crystal_state::crzyddz2_4_r)
|
||||
{
|
||||
return 0xffffff3f | (machine().rand() & 0xc0);
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( crzyddz2_mem, AS_PROGRAM, 32, crystal_state )
|
||||
AM_RANGE(0x00000000, 0x00ffffff) AM_ROM AM_WRITENOP
|
||||
|
||||
AM_RANGE(0x01280000, 0x01280003) AM_WRITE(Banksw_w)
|
||||
AM_RANGE(0x01400000, 0x0140ffff) AM_RAM AM_SHARE("nvram")
|
||||
AM_RANGE(0x01500000, 0x01500003) AM_READ_PORT("P1_P2")
|
||||
AM_RANGE(0x01500004, 0x01500007) AM_READ(crzyddz2_4_r)
|
||||
|
||||
AM_RANGE(0x01801400, 0x01801403) AM_READWRITE(Timer0_r, Timer0_w)
|
||||
AM_RANGE(0x01801408, 0x0180140b) AM_READWRITE(Timer1_r, Timer1_w)
|
||||
AM_RANGE(0x01801410, 0x01801413) AM_READWRITE(Timer2_r, Timer2_w)
|
||||
AM_RANGE(0x01801418, 0x0180141b) AM_READWRITE(Timer3_r, Timer3_w)
|
||||
AM_RANGE(0x01802004, 0x01802007) AM_READWRITE(PIO_r, PIO_w)
|
||||
|
||||
AM_RANGE(0x01800800, 0x01800803) AM_READWRITE(DMA0_r, DMA0_w)
|
||||
AM_RANGE(0x01800810, 0x01800813) AM_READWRITE(DMA1_r, DMA1_w)
|
||||
|
||||
AM_RANGE(0x01800c04, 0x01800c07) AM_WRITE(IntAck_w)
|
||||
AM_RANGE(0x01800000, 0x0180ffff) AM_RAM AM_SHARE("sysregs")
|
||||
AM_RANGE(0x02000000, 0x027fffff) AM_RAM AM_SHARE("workram")
|
||||
|
||||
AM_RANGE(0x030000a4, 0x030000a7) AM_READWRITE(FlipCount_r, FlipCount_w)
|
||||
|
||||
AM_RANGE(0x03000000, 0x0300ffff) AM_RAM AM_SHARE("vidregs")
|
||||
AM_RANGE(0x03800000, 0x03ffffff) AM_RAM AM_SHARE("textureram")
|
||||
AM_RANGE(0x04000000, 0x047fffff) AM_RAM AM_SHARE("frameram")
|
||||
AM_RANGE(0x04800000, 0x04800fff) AM_DEVREADWRITE("vrender", vrender0_device, vr0_snd_read, vr0_snd_write)
|
||||
|
||||
AM_RANGE(0x05000000, 0x05000003) AM_READWRITE(FlashCmd_r, FlashCmd_w)
|
||||
AM_RANGE(0x05000000, 0x05ffffff) AM_ROMBANK("bank1")
|
||||
|
||||
// AM_RANGE(0x44414F4C, 0x44414F7F) AM_RAM AM_SHARE("reset_patch")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
void crystal_state::PatchReset( )
|
||||
{
|
||||
@ -1174,6 +1216,12 @@ static MACHINE_CONFIG_DERIVED( trivrus, crystal )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( crzyddz2, crystal )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(crzyddz2_mem)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
ROM_START( crysbios )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 ) // bios
|
||||
ROM_LOAD("mx27l1000.u14", 0x000000, 0x020000, CRC(beff39a9) SHA1(b6f6dda58d9c82273f9422c1bd623411e58982cb) )
|
||||
@ -1287,6 +1335,68 @@ ROM_START( ddz )
|
||||
ROM_REGION( 0x1000000, "user2", ROMREGION_ERASEFF )
|
||||
ROM_END
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Crazy Dou Di Zhu II
|
||||
Sealy, 2006
|
||||
|
||||
PCB Layout
|
||||
----------
|
||||
|
||||
070405-fd-VER1.2
|
||||
|--------------------------------------|
|
||||
| PAL 27C322.U36 |
|
||||
| BATTERY|
|
||||
| M59PW1282 62256 14.31818MHz |
|
||||
| W9864G66 |
|
||||
| |
|
||||
|J VRENDERZERO+ |
|
||||
|A W9864G66 |
|
||||
|M W9864G66 |
|
||||
|M 8MHz |
|
||||
|A HY04 0260F8A |
|
||||
| 28.63636MHz |
|
||||
| |
|
||||
| VR1 TLDA1311 |
|
||||
| TDA1519|
|
||||
| 18WAY VOL 10WAY |
|
||||
|--------------------------------------|
|
||||
Notes:
|
||||
0260F8A - unknown TQFP44
|
||||
HY04 - rebadged DIP8 PIC - type unknown *
|
||||
W9864G66 - Winbond 64MBit DRAM
|
||||
M59PW1282 - ST Microelectronics 128MBit SOP44 FlashROM.
|
||||
This is two 64MB SOP44 ROMs in one package
|
||||
|
||||
* The pins are:
|
||||
1 ground
|
||||
2 nothing
|
||||
3 data (only active for 1/4 second when the playing cards or "PASS" shows in game next to each player)
|
||||
4 nothing
|
||||
5 nothing
|
||||
6 clock
|
||||
7 +5V (could be VPP for programming voltage)
|
||||
8 +5V
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
// if you bypass the hy04 error, if fails with "THERE IS NO IMAGE" as it tries to load files from the flash.
|
||||
// Indeed, apart from logo.bmp, the rest of the filenames it tries to load are not in the flash.
|
||||
|
||||
ROM_START( crzyddz2 )
|
||||
ROM_REGION32_LE( 0x3000000, "user1", ROMREGION_ERASEFF ) // Flash
|
||||
ROM_LOAD( "rom.u48", 0x000000, 0x1000000, CRC(e24257c4) SHA1(569d79a61ff6d35100ba5727069363146df9e0b7) )
|
||||
|
||||
ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASEFF )
|
||||
ROM_COPY( "user1", 0x000000, 0x000000, 0x1000000 ) // copy flash here
|
||||
ROM_LOAD( "27c322.u36", 0x000000, 0x0200000, CRC(b3177f39) SHA1(2a28bf8045bd2e053d88549b79fbc11f30ef9a32) ) // 1ST AND 2ND HALF IDENTICAL
|
||||
ROM_CONTINUE( 0x000000, 0x0200000 )
|
||||
|
||||
ROM_REGION( 0x4280, "pic", 0 ) // hy04
|
||||
ROM_LOAD("hy04", 0x000000, 0x4280, NO_DUMP )
|
||||
|
||||
ROM_REGION( 0x1000000, "user2", ROMREGION_ERASEFF ) // Unmapped flash
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
@ -1416,8 +1526,9 @@ GAME( 2001, crysbios, 0, crystal, crystal, driver_device, 0, ROT
|
||||
GAME( 2001, crysking, crysbios, crystal, crystal, crystal_state, crysking, ROT0, "BrezzaSoft", "The Crystal of Kings", 0 )
|
||||
GAME( 2001, evosocc, crysbios, crystal, crystal, crystal_state, evosocc, ROT0, "Evoga", "Evolution Soccer", 0 )
|
||||
GAME( 2003, topbladv, crysbios, crystal, crystal, crystal_state, topbladv, ROT0, "SonoKong / Expotato", "Top Blade V", 0 )
|
||||
GAME( 2001, officeye, 0, crystal, officeye,crystal_state, officeye, ROT0, "Danbi", "Office Yeo In Cheon Ha (version 1.2)", MACHINE_NOT_WORKING ) // still has some instability issues
|
||||
GAME( 2001, donghaer, 0, crystal, crystal, crystal_state, donghaer, ROT0, "Danbi", "Donggul Donggul Haerong", MACHINE_NOT_WORKING )
|
||||
GAME( 2001, officeye, 0, crystal, officeye,crystal_state, officeye, ROT0, "Danbi", "Office Yeo In Cheon Ha (version 1.2)", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION ) // still has some instability issues
|
||||
GAME( 2001, donghaer, 0, crystal, crystal, crystal_state, donghaer, ROT0, "Danbi", "Donggul Donggul Haerong", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION )
|
||||
GAME( 2006, crzyddz2, 0, crzyddz2, crystal, driver_device, 0, ROT0, "Sealy", "Crazy Dou Di Zhu II", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION )
|
||||
GAME( 2009, trivrus, 0, trivrus, trivrus, driver_device, 0, ROT0, "AGT", "Trivia R Us (v1.07)", 0 )
|
||||
// has a CF card instead of flash roms
|
||||
GAME( 2004, psattack, 0, crystal, crystal, crystal_state, psattack, ROT0, "Uniana", "P's Attack", MACHINE_IS_SKELETON )
|
||||
|
@ -1084,8 +1084,8 @@ static ADDRESS_MAP_START( mjelctrn_io_map, AS_IO, 8, dynax_state )
|
||||
AM_RANGE( 0x81, 0x81 ) AM_READ_PORT("COINS") // Coins
|
||||
AM_RANGE( 0x82, 0x82 ) AM_READ(mjelctrn_keyboard_1_r) // P2
|
||||
AM_RANGE( 0x83, 0x83 ) AM_READ(hanamai_keyboard_0_r) // P1
|
||||
AM_RANGE( 0x84, 0x84 ) AM_READ(mjelctrn_dsw_r) // DSW x 4
|
||||
AM_RANGE( 0x85, 0x85 ) AM_READ(ret_ff) // ?
|
||||
AM_RANGE( 0x84, 0x84 ) AM_READ(mjelctrn_dsw_r) // DSW8 x 4
|
||||
AM_RANGE( 0x85, 0x85 ) AM_READ_PORT("SW1") // DSW2
|
||||
AM_RANGE( 0xa1, 0xa7 ) AM_WRITE(dynax_blitter_rev2_w) // Blitter
|
||||
AM_RANGE( 0xc0, 0xc0 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
|
||||
AM_RANGE( 0xc1, 0xc1 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to
|
||||
@ -2627,15 +2627,14 @@ static INPUT_PORTS_START( mjdialq2 )
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x38, 0x20, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:4,5,6")
|
||||
PORT_DIPSETTING( 0x38, "1 (Easy)" )
|
||||
PORT_DIPSETTING( 0x30, "2" )
|
||||
PORT_DIPSETTING( 0x28, "3" )
|
||||
PORT_DIPSETTING( 0x20, "4" )
|
||||
PORT_DIPSETTING( 0x18, "5" )
|
||||
PORT_DIPSETTING( 0x10, "6" )
|
||||
PORT_DIPSETTING( 0x08, "7" )
|
||||
PORT_DIPSETTING( 0x00, "8 (Hard)" )
|
||||
|
||||
PORT_DIPSETTING( 0x38, "1 (Easy)" )
|
||||
PORT_DIPSETTING( 0x30, "2" )
|
||||
PORT_DIPSETTING( 0x28, "3" )
|
||||
PORT_DIPSETTING( 0x20, "4" )
|
||||
PORT_DIPSETTING( 0x18, "5" )
|
||||
PORT_DIPSETTING( 0x10, "6" )
|
||||
PORT_DIPSETTING( 0x08, "7" )
|
||||
PORT_DIPSETTING( 0x00, "8 (Hard)" )
|
||||
PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:7")
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
@ -3402,32 +3401,49 @@ static INPUT_PORTS_START( mjembase )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
// dip locations verified on mjelctrb pcb
|
||||
static INPUT_PORTS_START( mjelct3 )
|
||||
PORT_START("COINS")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // Pay
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) // 18B
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) // Test
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2 ) // Analyzer
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // Memory Reset
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) // Note
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // Coin
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) // Service
|
||||
|
||||
PORT_INCLUDE( MAHJONG_KEYS_BET )
|
||||
|
||||
PORT_START("SW1") // port 85
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW1:1")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW1:2")
|
||||
|
||||
PORT_START("DSW0") /* 7c21 (select = 00) */
|
||||
PORT_DIPNAME( 0x03, 0x03, "Difficulty?" )
|
||||
PORT_DIPNAME( 0x03, 0x03, "Difficulty?" ) PORT_DIPLOCATION("SW3:1,2")
|
||||
PORT_DIPSETTING( 0x03, "0" ) // 20
|
||||
PORT_DIPSETTING( 0x00, "1" ) // 32
|
||||
PORT_DIPSETTING( 0x01, "2" ) // 64
|
||||
PORT_DIPSETTING( 0x02, "3" ) // c8
|
||||
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) )
|
||||
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW3:3,4")
|
||||
PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) )
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) )
|
||||
PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" )
|
||||
PORT_DIPNAME( 0x30, 0x30, "Min Pay?" )
|
||||
PORT_DIPNAME( 0x30, 0x30, "Min Pay?" ) PORT_DIPLOCATION("SW3:5,6")
|
||||
PORT_DIPSETTING( 0x30, "1" )
|
||||
PORT_DIPSETTING( 0x20, "2" )
|
||||
PORT_DIPSETTING( 0x10, "3" )
|
||||
PORT_DIPSETTING( 0x00, "5" )
|
||||
PORT_DIPNAME( 0x40, 0x40, "Allow Coin Out" )
|
||||
PORT_DIPNAME( 0x40, 0x40, "Allow Coin Out" ) PORT_DIPLOCATION("SW3:7")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x80, 0x80, "Win A Prize?" )
|
||||
PORT_DIPNAME( 0x80, 0x80, "Win A Prize?" ) PORT_DIPLOCATION("SW3:8")
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
|
||||
PORT_START("DSW1") /* 7c20 (select = 40) */
|
||||
PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate" )
|
||||
PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate" ) PORT_DIPLOCATION("SW4:1,2,3,4")
|
||||
PORT_DIPSETTING( 0x00, "50" )
|
||||
PORT_DIPSETTING( 0x01, "53" )
|
||||
PORT_DIPSETTING( 0x02, "56" )
|
||||
@ -3444,32 +3460,20 @@ static INPUT_PORTS_START( mjelct3 )
|
||||
PORT_DIPSETTING( 0x0d, "90" )
|
||||
PORT_DIPSETTING( 0x0e, "93" )
|
||||
PORT_DIPSETTING( 0x0f, "96" )
|
||||
PORT_DIPNAME( 0x30, 0x30, "Max Bet" )
|
||||
PORT_DIPNAME( 0x30, 0x30, "Max Bet" ) PORT_DIPLOCATION("SW4:5,6")
|
||||
PORT_DIPSETTING( 0x30, "1" )
|
||||
PORT_DIPSETTING( 0x20, "5" )
|
||||
PORT_DIPSETTING( 0x10, "10" )
|
||||
PORT_DIPSETTING( 0x00, "20" )
|
||||
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Coin_B ) )
|
||||
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW4:7")
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( 1C_5C ) )
|
||||
PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" )
|
||||
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
|
||||
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW4:8")
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
|
||||
PORT_START("COINS")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // Pay
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) // 18B
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) // Test
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2 ) // Analyzer
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // Memory Reset
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) // Note
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // Coin
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) // Service
|
||||
|
||||
PORT_INCLUDE( MAHJONG_KEYS_BET )
|
||||
|
||||
PORT_START("DSW2") /* 7c22 (select = 80) */
|
||||
PORT_DIPNAME( 0x07, 0x07, "YAKUMAN Bonus" )
|
||||
PORT_DIPNAME( 0x07, 0x07, "YAKUMAN Bonus" ) PORT_DIPLOCATION("SW2:1,2,3")
|
||||
PORT_DIPSETTING( 0x07, "Cut" )
|
||||
PORT_DIPSETTING( 0x06, "1 T" )
|
||||
PORT_DIPSETTING( 0x05, "300" )
|
||||
@ -3478,45 +3482,45 @@ static INPUT_PORTS_START( mjelct3 )
|
||||
PORT_DIPSETTING( 0x02, "1000" )
|
||||
// PORT_DIPSETTING( 0x01, "1000" )
|
||||
// PORT_DIPSETTING( 0x00, "1000" )
|
||||
PORT_DIPNAME( 0x08, 0x08, "YAKU times" )
|
||||
PORT_DIPNAME( 0x08, 0x08, "YAKU times" ) PORT_DIPLOCATION("SW2:4")
|
||||
PORT_DIPSETTING( 0x08, "1" )
|
||||
PORT_DIPSETTING( 0x00, "2" )
|
||||
PORT_DIPNAME( 0x10, 0x10, "Win Rate?" )
|
||||
PORT_DIPNAME( 0x10, 0x10, "Win Rate?" ) PORT_DIPLOCATION("SW2:5")
|
||||
PORT_DIPSETTING( 0x10, DEF_STR( High ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Low ) )
|
||||
PORT_DIPNAME( 0x20, 0x20, "Draw New Tile (Part 3 Only)" )
|
||||
PORT_DIPNAME( 0x20, 0x20, "Draw New Tile (Part 3 Only)" ) PORT_DIPLOCATION("SW2:6")
|
||||
PORT_DIPSETTING( 0x00, "Automatic" )
|
||||
PORT_DIPSETTING( 0x20, "Manual" )
|
||||
PORT_DIPNAME( 0x40, 0x40, "DonDen Key" )
|
||||
PORT_DIPNAME( 0x40, 0x40, "DonDen Key" ) PORT_DIPLOCATION("SW2:7")
|
||||
PORT_DIPSETTING( 0x40, "A" )
|
||||
PORT_DIPSETTING( 0x00, "Flip Flop" )
|
||||
PORT_DIPNAME( 0x80, 0x00, "Subtitle" )
|
||||
PORT_DIPNAME( 0x80, 0x00, "Subtitle" ) PORT_DIPLOCATION("SW2:8")
|
||||
PORT_DIPSETTING( 0x80, "None (Part 2)" )
|
||||
PORT_DIPSETTING( 0x00, "Super Express (Part 3)" )
|
||||
|
||||
PORT_START("DSW3") /* 7c23 (select = c0) */
|
||||
PORT_DIPNAME( 0x01, 0x01, "Last Chance" )
|
||||
PORT_DIPNAME( 0x01, 0x01, "Last Chance" ) PORT_DIPLOCATION("SW5:1")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x02, 0x02, "Pay Rate?" )
|
||||
PORT_DIPNAME( 0x02, 0x02, "Pay Rate?" ) PORT_DIPLOCATION("SW5:2")
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( High ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Low ) )
|
||||
PORT_DIPNAME( 0x04, 0x04, "Choose Bonus" )
|
||||
PORT_DIPNAME( 0x04, 0x04, "Choose Bonus" ) PORT_DIPLOCATION("SW5:3")
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x08, 0x08, "In-Game Bet?" )
|
||||
PORT_DIPNAME( 0x08, 0x08, "In-Game Bet?" ) PORT_DIPLOCATION("SW5:4")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) )
|
||||
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW5:5")
|
||||
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x20, 0x00, "In-Game Music" )
|
||||
PORT_DIPNAME( 0x20, 0x00, "In-Game Music" ) PORT_DIPLOCATION("SW5:6")
|
||||
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x40, 0x40, "Select Girl" )
|
||||
PORT_DIPNAME( 0x40, 0x40, "Select Girl" ) PORT_DIPLOCATION("SW5:7")
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x80, 0x00, "Nudity" )
|
||||
PORT_DIPNAME( 0x80, 0x00, "Nudity" ) PORT_DIPLOCATION("SW5:8")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( No ) ) // Moles On Gal's Face
|
||||
|
||||
@ -3528,31 +3532,47 @@ INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( mjelctrn )
|
||||
PORT_START("COINS")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // Pay
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) // 18B
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) // Test
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2 ) // Analyzer
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // Memory Reset
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) // Note
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // Coin
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) // Service
|
||||
|
||||
PORT_INCLUDE( MAHJONG_KEYS_BET )
|
||||
|
||||
PORT_START("SW1") // port 85
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW1:1")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW1:2")
|
||||
|
||||
PORT_START("DSW0") /* 7c21 (select = 00) */
|
||||
PORT_DIPNAME( 0x03, 0x03, "Difficulty?" )
|
||||
PORT_DIPNAME( 0x03, 0x03, "Difficulty?" ) PORT_DIPLOCATION("SW3:1,2")
|
||||
PORT_DIPSETTING( 0x03, "0" ) // 20
|
||||
PORT_DIPSETTING( 0x00, "1" ) // 32
|
||||
PORT_DIPSETTING( 0x01, "2" ) // 64
|
||||
PORT_DIPSETTING( 0x02, "3" ) // c8
|
||||
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) )
|
||||
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW3:3,4")
|
||||
PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) )
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) )
|
||||
PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" )
|
||||
PORT_DIPNAME( 0x30, 0x30, "Min Pay?" )
|
||||
PORT_DIPNAME( 0x30, 0x30, "Min Pay?" ) PORT_DIPLOCATION("SW3:5,6")
|
||||
PORT_DIPSETTING( 0x30, "1" )
|
||||
PORT_DIPSETTING( 0x20, "2" )
|
||||
PORT_DIPSETTING( 0x10, "3" )
|
||||
PORT_DIPSETTING( 0x00, "5" )
|
||||
PORT_DIPNAME( 0x40, 0x40, "Allow Coin Out" )
|
||||
PORT_DIPNAME( 0x40, 0x40, "Allow Coin Out" ) PORT_DIPLOCATION("SW3:7")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x80, 0x80, "Win A Prize?" )
|
||||
PORT_DIPNAME( 0x80, 0x80, "Win A Prize?" ) PORT_DIPLOCATION("SW3:8")
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
|
||||
PORT_START("DSW1") /* 7c20 (select = 40) */
|
||||
PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate" )
|
||||
PORT_START("DSW1") /* 7c20 (select = 40) */
|
||||
PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate" ) PORT_DIPLOCATION("SW4:1,2,3,4")
|
||||
PORT_DIPSETTING( 0x00, "50" )
|
||||
PORT_DIPSETTING( 0x01, "53" )
|
||||
PORT_DIPSETTING( 0x02, "56" )
|
||||
@ -3569,32 +3589,20 @@ static INPUT_PORTS_START( mjelctrn )
|
||||
PORT_DIPSETTING( 0x0d, "90" )
|
||||
PORT_DIPSETTING( 0x0e, "93" )
|
||||
PORT_DIPSETTING( 0x0f, "96" )
|
||||
PORT_DIPNAME( 0x30, 0x30, "Max Bet" )
|
||||
PORT_DIPNAME( 0x30, 0x30, "Max Bet" ) PORT_DIPLOCATION("SW4:5,6")
|
||||
PORT_DIPSETTING( 0x30, "1" )
|
||||
PORT_DIPSETTING( 0x20, "5" )
|
||||
PORT_DIPSETTING( 0x10, "10" )
|
||||
PORT_DIPSETTING( 0x00, "20" )
|
||||
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Coin_B ) )
|
||||
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW4:7")
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( 1C_5C ) )
|
||||
PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" )
|
||||
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
|
||||
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW4:8")
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
|
||||
PORT_START("COINS")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // Pay
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) // 18B
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) // Test
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2 ) // Analyzer
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // Memory Reset
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) // Note
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // Coin
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) // Service
|
||||
|
||||
PORT_INCLUDE( MAHJONG_KEYS_BET )
|
||||
|
||||
PORT_START("DSW2") /* 7c22 (select = 80) */
|
||||
PORT_DIPNAME( 0x07, 0x07, "YAKUMAN Bonus" )
|
||||
PORT_START("DSW2") /* 7c22 (select = 80) */
|
||||
PORT_DIPNAME( 0x07, 0x07, "YAKUMAN Bonus" ) PORT_DIPLOCATION("SW2:1,2,3")
|
||||
PORT_DIPSETTING( 0x07, "Cut" )
|
||||
PORT_DIPSETTING( 0x06, "1 T" )
|
||||
PORT_DIPSETTING( 0x05, "300" )
|
||||
@ -3603,45 +3611,45 @@ static INPUT_PORTS_START( mjelctrn )
|
||||
PORT_DIPSETTING( 0x02, "1000" )
|
||||
// PORT_DIPSETTING( 0x01, "1000" )
|
||||
// PORT_DIPSETTING( 0x00, "1000" )
|
||||
PORT_DIPNAME( 0x08, 0x08, "YAKU times" )
|
||||
PORT_DIPNAME( 0x08, 0x08, "YAKU times" ) PORT_DIPLOCATION("SW2:4")
|
||||
PORT_DIPSETTING( 0x08, "1" )
|
||||
PORT_DIPSETTING( 0x00, "2" )
|
||||
PORT_DIPNAME( 0x10, 0x10, "Win Rate?" )
|
||||
PORT_DIPNAME( 0x10, 0x10, "Win Rate?" ) PORT_DIPLOCATION("SW2:5")
|
||||
PORT_DIPSETTING( 0x10, DEF_STR( High ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Low ) )
|
||||
PORT_DIPNAME( 0x20, 0x20, "Draw New Tile (Part 4 Only)" )
|
||||
PORT_DIPNAME( 0x20, 0x20, "Draw New Tile (Part 4 Only)" ) PORT_DIPLOCATION("SW2:6")
|
||||
PORT_DIPSETTING( 0x00, "Automatic" )
|
||||
PORT_DIPSETTING( 0x20, "Manual" )
|
||||
PORT_DIPNAME( 0x40, 0x40, "DonDen Key" )
|
||||
PORT_DIPNAME( 0x40, 0x40, "DonDen Key" ) PORT_DIPLOCATION("SW2:7")
|
||||
PORT_DIPSETTING( 0x40, "A" )
|
||||
PORT_DIPSETTING( 0x00, "Flip Flop" )
|
||||
PORT_DIPNAME( 0x80, 0x00, "Subtitle" )
|
||||
PORT_DIPNAME( 0x80, 0x00, "Subtitle" ) PORT_DIPLOCATION("SW2:8")
|
||||
PORT_DIPSETTING( 0x80, "None (Part 2)" )
|
||||
PORT_DIPSETTING( 0x00, "???? (Part 4)" )
|
||||
|
||||
PORT_START("DSW3") // 7c23 (select = c0)
|
||||
PORT_DIPNAME( 0x01, 0x01, "Last Chance" )
|
||||
PORT_START("DSW3") /* 7c23 (select = c0) */
|
||||
PORT_DIPNAME( 0x01, 0x01, "Last Chance" ) PORT_DIPLOCATION("SW5:1")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x02, 0x02, "Pay Rate?" )
|
||||
PORT_DIPNAME( 0x02, 0x02, "Pay Rate?" ) PORT_DIPLOCATION("SW5:2")
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( High ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Low ) )
|
||||
PORT_DIPNAME( 0x04, 0x04, "Choose Bonus" )
|
||||
PORT_DIPNAME( 0x04, 0x04, "Choose Bonus" ) PORT_DIPLOCATION("SW5:3")
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x08, 0x08, "In-Game Bet?" )
|
||||
PORT_DIPNAME( 0x08, 0x08, "In-Game Bet?" ) PORT_DIPLOCATION("SW5:4")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) )
|
||||
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW5:5")
|
||||
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x20, 0x00, "In-Game Music" )
|
||||
PORT_DIPNAME( 0x20, 0x00, "In-Game Music" ) PORT_DIPLOCATION("SW5:6")
|
||||
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x40, 0x40, "Select Girl" )
|
||||
PORT_DIPNAME( 0x40, 0x40, "Select Girl" ) PORT_DIPLOCATION("SW5:7")
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x80, 0x00, "Girls" )
|
||||
PORT_DIPNAME( 0x80, 0x00, "Girls" ) PORT_DIPLOCATION("SW5:8")
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
|
||||
@ -3774,6 +3782,9 @@ static INPUT_PORTS_START( majxtal7 )
|
||||
PORT_DIPNAME( 0xff, 0xff, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0xff, DEF_STR( On ) )
|
||||
|
||||
/* the following are needed to make happy the read handlers shared with mjelctrn */
|
||||
PORT_START("SW1")
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( neruton )
|
||||
@ -3841,6 +3852,7 @@ static INPUT_PORTS_START( neruton )
|
||||
PORT_INCLUDE( MAHJONG_KEYS )
|
||||
|
||||
/* 2008-06 FP: the following are needed to make happy the read handlers shared with mjelctrn */
|
||||
PORT_START("SW1")
|
||||
PORT_START("DSW2")
|
||||
PORT_START("DSW3")
|
||||
PORT_START("FAKE")
|
||||
@ -6236,9 +6248,6 @@ ROM_END
|
||||
/***************************************************************************
|
||||
Mahjong Electron Base (bootleg)
|
||||
|
||||
PCB works (see s/shot in archive), but I couldn't get it
|
||||
to do anything other than show a diagnostic screen??
|
||||
|
||||
PCB Layout
|
||||
----------
|
||||
|
||||
|
@ -21,8 +21,8 @@ Year + Game PCB CPU Sound Custom
|
||||
98 Mj Long Hu Zheng Ba 2 NO-0206 68000 M6295 IGS031 IGS025 IGS022* Battery
|
||||
98 Mj Shuang Long Qiang Zhu 2 NO-0207 68000 M6295 IGS031 IGS025 IGS022 Battery
|
||||
98 Mj Man Guan Cai Shen NO-0192-1 68000 M6295 IGS017 IGS025 IGS029 Battery
|
||||
99? Tarzan (V107)? NO-0248-1 Z180 M6295 IGS031 IGS025 Battery
|
||||
99? Tarzan (V109C)? NO-0228? Z180 M6295 IGS031 IGS025 IGS029 Battery
|
||||
99 Tarzan (V107) NO-0228? Z180 M6295 IGS031 IGS025 IGS029 Battery
|
||||
99 Tarzan (V109C) NO-0248-1 Z180 M6295 IGS031 IGS025 Battery
|
||||
00? Super Tarzan (V100I) NO-0230-1 Z180 M6295 IGS031 IGS025 Battery
|
||||
?? Super Poker / Formosa NO-0187 Z180 M6295 YM2413 IGS017 IGS025 Battery
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
@ -181,6 +181,9 @@ public:
|
||||
void mgcs_flip_sprites();
|
||||
void mgcs_patch_rom();
|
||||
void mgcs_igs029_run();
|
||||
void tarzan_decrypt_tiles();
|
||||
void tarzan_decrypt_program_rom();
|
||||
void tarzana_decrypt_program_rom();
|
||||
void starzan_decrypt(UINT8 *ROM, int size, bool isOpcode);
|
||||
void lhzb2_patch_rom();
|
||||
void lhzb2_decrypt_tiles();
|
||||
@ -488,8 +491,23 @@ DRIVER_INIT_MEMBER(igs017_state,mgcs)
|
||||
|
||||
// tarzan, tarzana
|
||||
|
||||
void igs017_state::tarzan_decrypt_tiles()
|
||||
{
|
||||
int length = memregion("tilemaps")->bytes();
|
||||
UINT8 *rom = memregion("tilemaps")->base();
|
||||
dynamic_buffer tmp(length);
|
||||
int i;
|
||||
|
||||
memcpy(&tmp[0],rom,length);
|
||||
for (i = 0;i < length;i++)
|
||||
{
|
||||
int addr = (i & ~0xffff) | BITSWAP16(i,15,14,13,12,11,7,8,6,10,9,5,4,3,2,1,0);
|
||||
rom[i] = BITSWAP8(tmp[addr],0,1,2,3,4,5,6,7);
|
||||
}
|
||||
}
|
||||
|
||||
// decryption is incomplete, the first part of code doesn't seem right.
|
||||
DRIVER_INIT_MEMBER(igs017_state,tarzan)
|
||||
void igs017_state::tarzan_decrypt_program_rom()
|
||||
{
|
||||
UINT16 *ROM = (UINT16 *)memregion("maincpu")->base();
|
||||
int i;
|
||||
@ -515,7 +533,7 @@ DRIVER_INIT_MEMBER(igs017_state,tarzan)
|
||||
}
|
||||
}
|
||||
// by iq_132
|
||||
DRIVER_INIT_MEMBER(igs017_state,tarzana)
|
||||
void igs017_state::tarzana_decrypt_program_rom()
|
||||
{
|
||||
UINT8 *ROM = memregion("maincpu")->base();
|
||||
int i;
|
||||
@ -533,6 +551,17 @@ DRIVER_INIT_MEMBER(igs017_state,tarzana)
|
||||
}
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(igs017_state,tarzan)
|
||||
{
|
||||
tarzan_decrypt_program_rom();
|
||||
tarzan_decrypt_tiles();
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(igs017_state,tarzana)
|
||||
{
|
||||
tarzana_decrypt_program_rom();
|
||||
// tarzana_decrypt_tiles(); // to do
|
||||
}
|
||||
|
||||
// starzan
|
||||
|
||||
@ -4089,17 +4118,75 @@ ROM_END
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Tarzan
|
||||
Taishan (Tarzan) Chuang Tian Guan
|
||||
IGS 1999
|
||||
|
||||
PCB Layout
|
||||
----------
|
||||
|
||||
IGS PCB NO-0248-1
|
||||
|------------------------------|
|
||||
| J A M M A |
|
||||
|1 22MHz T2105.U5 A2104.U15 |
|
||||
|8 DIP42 |
|
||||
|W |
|
||||
|A IGS031 U19 |
|
||||
|Y 24257 |
|
||||
| |
|
||||
| IGS025 PAL.U20|
|
||||
| DSW1 |
|
||||
| Z180 |
|
||||
| DSW2 16MHz |
|
||||
|1 PAL.U21|
|
||||
|0 DSW3 |
|
||||
|W BATT |
|
||||
|A VOL LM7805 RES_SW|
|
||||
|Y UPC1242 M6295 U14 |
|
||||
|------------------------------|
|
||||
Notes:
|
||||
IGS025 - custom IGS chip labelled 'TARZAN 1'
|
||||
IGS031 - custom IGS chip
|
||||
VSync - 60.0060Hz
|
||||
HSync - 15.3002kHz
|
||||
M6295 - Clock 1.000MHz [16/16], pin 7 high
|
||||
Z180 - Clock 16.000MHz
|
||||
DIP42 - Empty socket
|
||||
U19 - 28F2000 Flash ROM (DIP32)
|
||||
U14 - 23C4000 mask ROM (DIP32)
|
||||
U5 - 23C2048 mask ROM (DIP40)
|
||||
U15 - 23C3210 mask ROM (DIP42)
|
||||
24257 - 32kx8 SRAM
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
// IGS PCB NO-0248-1
|
||||
ROM_START( tarzanc )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 ) // V109C TARZAN C (same as tarzan set)
|
||||
ROM_LOAD( "u19", 0x00000, 0x40000, CRC(e6c552a5) SHA1(f156de9459833474c85a1f5b35917881b390d34c) )
|
||||
|
||||
ROM_REGION( 0x400000, "sprites", 0 )
|
||||
ROM_LOAD( "igs_a2104_cg_v110.u15", 0x00000, 0x400000, CRC(dcbff16f) SHA1(2bf77ef4448c26124c8d8d18bb7ffe4105cfa940) ) // FIXED BITS (xxxxxxx0xxxxxxxx)
|
||||
|
||||
ROM_REGION( 0x80000, "tilemaps", 0 )
|
||||
ROM_LOAD( "igs_t2105_cg_v110.u5", 0x00000, 0x80000, CRC(1d4be260) SHA1(6374c61735144b3ff54d5e490f26adac4a10b14d) ) // 27C4096 (27C2048 printed on the PCB)
|
||||
|
||||
ROM_REGION( 0x80000, "oki", 0 )
|
||||
ROM_LOAD( "igs_s2102_sp_v102.u14", 0x00000, 0x80000, CRC(90dda82d) SHA1(67fbc1e8d76b85e124136e2f1df09c8b6c5a8f97) )
|
||||
|
||||
ROM_REGION( 0x2dd * 2, "plds", 0 )
|
||||
ROM_LOAD( "eg.u20", 0x000, 0x2dd, NO_DUMP )
|
||||
ROM_LOAD( "eg.u21", 0x2dd, 0x2dd, NO_DUMP )
|
||||
ROM_END
|
||||
|
||||
// sets below are guesswork, assembled from partial dumps...
|
||||
|
||||
// IGS NO-0248-1? Mislabeled?
|
||||
ROM_START( tarzan )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 ) // V109C TARZAN C
|
||||
ROM_REGION( 0x40000, "maincpu", 0 ) // V109C TARZAN C (same as tarzanc set)
|
||||
ROM_LOAD( "0228-u16.bin", 0x00000, 0x40000, CRC(e6c552a5) SHA1(f156de9459833474c85a1f5b35917881b390d34c) )
|
||||
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD( "a2104_cg_v110.u15", 0x00000, 0x80000, NO_DUMP )
|
||||
ROM_LOAD( "sprites.u15", 0x00000, 0x80000, NO_DUMP )
|
||||
|
||||
ROM_REGION( 0x80000, "tilemaps", 0 )
|
||||
ROM_LOAD( "0228-u6.bin", 0x00000, 0x80000, CRC(55e94832) SHA1(b15409f4f1264b6d1218d5dc51c5bd1de2e40284) )
|
||||
@ -4108,20 +4195,20 @@ ROM_START( tarzan )
|
||||
ROM_LOAD( "sound.u14", 0x00000, 0x40000, NO_DUMP )
|
||||
|
||||
ROM_REGION( 0x2dd * 2, "plds", 0 )
|
||||
ROM_LOAD( "eg.u20", 0x000, 0x2dd, NO_DUMP )
|
||||
ROM_LOAD( "eg.u21", 0x2dd, 0x2dd, NO_DUMP )
|
||||
ROM_LOAD( "pal1", 0x000, 0x2dd, NO_DUMP )
|
||||
ROM_LOAD( "pal2", 0x2dd, 0x2dd, NO_DUMP )
|
||||
ROM_END
|
||||
|
||||
// IGS NO-0228?
|
||||
ROM_START( tarzana )
|
||||
ROM_REGION( 0x80000, "maincpu", 0 ) // V107 TAISAN
|
||||
ROM_LOAD( "0228-u21.bin", 0x00000, 0x80000, CRC(80aaece4) SHA1(07cad92492c5de36c3915867ed4c6544b1a30c07) )
|
||||
ROM_LOAD( "0228-u21.bin", 0x00000, 0x80000, CRC(80aaece4) SHA1(07cad92492c5de36c3915867ed4c6544b1a30c07) ) // 1ST AND 2ND HALF IDENTICAL
|
||||
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD( "sprites.u17", 0x00000, 0x80000, NO_DUMP )
|
||||
|
||||
ROM_REGION( 0x80000, "tilemaps", 0 )
|
||||
ROM_LOAD( "text.u6", 0x00000, 0x80000, NO_DUMP )
|
||||
ROM_LOAD( "0228-u6.bin", 0x00000, 0x80000, CRC(55e94832) SHA1(b15409f4f1264b6d1218d5dc51c5bd1de2e40284) )
|
||||
|
||||
ROM_REGION( 0x40000, "oki", ROMREGION_ERASE )
|
||||
ROM_LOAD( "sound.u16", 0x00000, 0x40000, NO_DUMP )
|
||||
@ -4232,19 +4319,20 @@ ROM_START( spkrform )
|
||||
ROM_END
|
||||
|
||||
|
||||
GAME( 1996, iqblocka, iqblock, iqblocka, iqblocka, igs017_state, iqblocka, ROT0, "IGS", "Shu Zi Le Yuan (V127M)", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION )
|
||||
GAME( 1996, iqblockf, iqblock, iqblocka, iqblocka, igs017_state, iqblockf, ROT0, "IGS", "Shu Zi Le Yuan (V113FR)", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION )
|
||||
GAME( 1997, mgdh, 0, mgdha, mgdh, igs017_state, mgdh, ROT0, "IGS", "Mahjong Man Guan Da Heng (Taiwan, V125T1)", 0 )
|
||||
GAME( 1997, mgdha, mgdh, mgdha, mgdh , igs017_state, mgdha, ROT0, "IGS", "Mahjong Man Guan Da Heng (Taiwan, V123T1)", 0 )
|
||||
GAME( 1997, sdmg2, 0, sdmg2, sdmg2, igs017_state, sdmg2, ROT0, "IGS", "Mahjong Super Da Man Guan II (China, V754C)", 0 )
|
||||
GAME( 1997, tjsb, 0, tjsb, tjsb, igs017_state, tjsb, ROT0, "IGS", "Mahjong Tian Jiang Shen Bing (V137C)", MACHINE_UNEMULATED_PROTECTION )
|
||||
GAME( 1998, mgcs, 0, mgcs, mgcs, igs017_state, mgcs, ROT0, "IGS", "Mahjong Man Guan Cai Shen (V103CS)", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1998, lhzb2, 0, lhzb2, lhzb2, igs017_state, lhzb2, ROT0, "IGS", "Mahjong Long Hu Zheng Ba 2 (set 1)", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION )
|
||||
GAME( 1998, lhzb2a, lhzb2, lhzb2a, lhzb2a, igs017_state, lhzb2a, ROT0, "IGS", "Mahjong Long Hu Zheng Ba 2 (VS221M)", 0 )
|
||||
GAME( 1998, slqz2, 0, slqz2, slqz2, igs017_state, slqz2, ROT0, "IGS", "Mahjong Shuang Long Qiang Zhu 2 (VS203J)", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION )
|
||||
GAME( 1999?, tarzan, 0, iqblocka, iqblocka, igs017_state, tarzan, ROT0, "IGS", "Tarzan (V109C)", MACHINE_NOT_WORKING )
|
||||
GAME( 1999?, tarzana, tarzan, iqblocka, iqblocka, igs017_state, tarzana, ROT0, "IGS", "Tarzan (V107)", MACHINE_NOT_WORKING )
|
||||
GAME( 2000?, starzan, 0, starzan, iqblocka, igs017_state, starzan, ROT0, "IGS / G.F. Gioca", "Super Tarzan (Italy, V100I)", MACHINE_NOT_WORKING )
|
||||
GAME( 1996, iqblocka, iqblock, iqblocka, iqblocka, igs017_state, iqblocka, ROT0, "IGS", "Shu Zi Le Yuan (V127M)", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION )
|
||||
GAME( 1996, iqblockf, iqblock, iqblocka, iqblocka, igs017_state, iqblockf, ROT0, "IGS", "Shu Zi Le Yuan (V113FR)", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION )
|
||||
GAME( 1997, mgdh, 0, mgdha, mgdh, igs017_state, mgdh, ROT0, "IGS", "Mahjong Man Guan Da Heng (Taiwan, V125T1)", 0 )
|
||||
GAME( 1997, mgdha, mgdh, mgdha, mgdh , igs017_state, mgdha, ROT0, "IGS", "Mahjong Man Guan Da Heng (Taiwan, V123T1)", 0 )
|
||||
GAME( 1997, sdmg2, 0, sdmg2, sdmg2, igs017_state, sdmg2, ROT0, "IGS", "Mahjong Super Da Man Guan II (China, V754C)", 0 )
|
||||
GAME( 1997, tjsb, 0, tjsb, tjsb, igs017_state, tjsb, ROT0, "IGS", "Mahjong Tian Jiang Shen Bing (V137C)", MACHINE_UNEMULATED_PROTECTION )
|
||||
GAME( 1998, mgcs, 0, mgcs, mgcs, igs017_state, mgcs, ROT0, "IGS", "Mahjong Man Guan Cai Shen (V103CS)", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1998, lhzb2, 0, lhzb2, lhzb2, igs017_state, lhzb2, ROT0, "IGS", "Mahjong Long Hu Zheng Ba 2 (set 1)", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION )
|
||||
GAME( 1998, lhzb2a, lhzb2, lhzb2a, lhzb2a, igs017_state, lhzb2a, ROT0, "IGS", "Mahjong Long Hu Zheng Ba 2 (VS221M)", 0 )
|
||||
GAME( 1998, slqz2, 0, slqz2, slqz2, igs017_state, slqz2, ROT0, "IGS", "Mahjong Shuang Long Qiang Zhu 2 (VS203J)", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION )
|
||||
GAME( 1999, tarzanc, 0, iqblocka, iqblocka, igs017_state, tarzan, ROT0, "IGS", "Tarzan Chuang Tian Guan (V109C, set 1)", MACHINE_NOT_WORKING )
|
||||
GAME( 1999, tarzan, tarzanc, iqblocka, iqblocka, igs017_state, tarzan, ROT0, "IGS", "Tarzan Chuang Tian Guan (V109C, set 2)", MACHINE_NOT_WORKING )
|
||||
GAME( 1999, tarzana, tarzanc, iqblocka, iqblocka, igs017_state, tarzana, ROT0, "IGS", "Tarzan (V107)", MACHINE_NOT_WORKING )
|
||||
GAME( 2000?, starzan, 0, starzan, iqblocka, igs017_state, starzan, ROT0, "IGS (G.F. Gioca license)", "Super Tarzan (Italy, V100I)", MACHINE_NOT_WORKING )
|
||||
|
||||
/* Parent spk306us in driver spoker.cpp. Move this set to that driver? */
|
||||
GAME( ????, spkrform, spk306us, spkrform, spkrform, igs017_state, spkrform, ROT0, "IGS", "Super Poker (v100xD03) / Formosa", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION )
|
||||
|
@ -385,6 +385,7 @@ Cosmic Smash 840-0044C 23428 8 (64Mb)
|
||||
Cosmic Smash (Rev A) 840-0044C 23428A 8 (64Mb) ? 315-6213 317-0289-COM joystick + 2 buttons
|
||||
Crazy Taxi 840-0002C 21684 13 (64Mb)* present 315-6213 317-0248-COM * ic8 and ic9 are not present
|
||||
Dead Or Alive 2 (Rev A) 841-0003C 22121A 21 (64Mb) present 315-6213 317-5048-COM joystick + 3 buttons
|
||||
Dead Or Alive 2 841-0003C-01 22207 21 (64Mb) present 315-6213 317-5048-COM have unlocked Tag and Survival game modes, possible USA or international release
|
||||
Dead Or Alive 2 Millennium 841-0003C DOA2 M 21 (64Mb) present 315-6213 317-5048-COM joystick + 3 buttons
|
||||
Death Crimson OX 841-0016C 23524 10 (64Mb) present 315-6213 317-5066-COM
|
||||
Dengen Tenshi Taisen Janshi Shangri-La 841-0004C 22060 12 (64Mb) ? 315-6213 317-5050-JPN
|
||||
@ -3441,7 +3442,7 @@ IC21 64M 002C 8ECA
|
||||
|
||||
*/
|
||||
|
||||
ROM_START( doa2 )
|
||||
ROM_START( doa2a )
|
||||
NAOMI_BIOS
|
||||
NAOMI_DEFAULT_EEPROM_NO_BD
|
||||
|
||||
@ -3478,6 +3479,46 @@ ROM_START( doa2 )
|
||||
ROM_PARAMETER( ":rom_board:segam2crypt:key", "0008ad01" )
|
||||
ROM_END
|
||||
|
||||
// later original version, have unlocked Tag and Survival game modes, but unlike Millennium have no option to disable them
|
||||
// like original rev have 1 life in story mode and no way to tweak it (Millennium have it 2 and test mode option to change it)
|
||||
// possible USA or international release
|
||||
ROM_START( doa2 )
|
||||
NAOMI_BIOS
|
||||
NAOMI_DEFAULT_EEPROM_NO_BD
|
||||
|
||||
ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
|
||||
ROM_LOAD("epr-22207.ic22", 0x0000000, 0x0400000, CRC(313d0e55) SHA1(e2c8b99ef4041ecfa90cb534b160f4ca741e0bf5) )
|
||||
|
||||
ROM_LOAD("mpr-22100.ic1", 0x0800000, 0x0800000, CRC(92a53e5e) SHA1(87fcdeee9c4e65a3eb6eb345eed85d4f2df26c3c) )
|
||||
ROM_LOAD("mpr-22101.ic2", 0x1000000, 0x0800000, CRC(14cd7dce) SHA1(5df14a5dad14bc922b4f88881dc2e9c8e74d6170) )
|
||||
ROM_LOAD("mpr-22102.ic3", 0x1800000, 0x0800000, CRC(34e778b1) SHA1(750ddf5cda9622dd2b0f7069d247ffd55911c38f) )
|
||||
ROM_LOAD("mpr-22103.ic4", 0x2000000, 0x0800000, CRC(6f3db8df) SHA1(e9bbcf7897594ae47a9e3c8641ccb2c09b0809fe) )
|
||||
ROM_LOAD("mpr-22104.ic5", 0x2800000, 0x0800000, CRC(fcc2787f) SHA1(c28eaf91fa64e49e2276702678a4f8f17e09c3b9) )
|
||||
ROM_LOAD("mpr-22105.ic6", 0x3000000, 0x0800000, CRC(3e2da942) SHA1(d8f28c40ab59fa96a1fb19ad3adbee687088a5ab) )
|
||||
ROM_LOAD("mpr-22106.ic7", 0x3800000, 0x0800000, CRC(03aceaaf) SHA1(977e5b660254e7c5fdbd9d52c1f00c8a174a5d7b) )
|
||||
ROM_LOAD("mpr-22107.ic8", 0x4000000, 0x0800000, CRC(6f1705e4) SHA1(b8215dd4ef7214e75c2ec79ad974a32422c17647) )
|
||||
ROM_LOAD("mpr-22108.ic9", 0x4800000, 0x0800000, CRC(d34d3d8a) SHA1(910f1e4d8a54a621d9212e1425152c3029c96234) )
|
||||
ROM_LOAD("mpr-22109.ic10", 0x5000000, 0x0800000, CRC(00ef44dd) SHA1(3fd100007daf59693de2329df1b4981dcdf435cd) )
|
||||
ROM_LOAD("mpr-22110.ic11", 0x5800000, 0x0800000, CRC(a193b577) SHA1(3513853f88c491905481dadc5ce00cc5819b2663) )
|
||||
ROM_LOAD("mpr-22111.ic12s",0x6000000, 0x0800000, CRC(55dddebf) SHA1(a7b8702cf578f5be4dcf8e2eaf11bf8b71d1b4ad) )
|
||||
ROM_LOAD("mpr-22112.ic13s",0x6800000, 0x0800000, CRC(c5ffe564) SHA1(efe4d0cb5a536b26489c6dd31b1e446a9be643c9) )
|
||||
ROM_LOAD("mpr-22113.ic14s",0x7000000, 0x0800000, CRC(12e7adf0) SHA1(2755c3efc6ca6d5680ead1489f42798c0187c5a4) )
|
||||
ROM_LOAD("mpr-22114.ic15s",0x7800000, 0x0800000, CRC(d181d0a0) SHA1(2a0e46dbb31f5c11b6ae2fc8c786192bf3701ec5) )
|
||||
ROM_LOAD("mpr-22115.ic16s",0x8000000, 0x0800000, CRC(ee2c842d) SHA1(8e33f241300481bb8875bda37e3917be71ed2594) )
|
||||
ROM_LOAD("mpr-22116.ic17s",0x8800000, 0x0800000, CRC(224ab770) SHA1(85d849ee077e36da1df759caa4a32525395f741c) )
|
||||
ROM_LOAD("mpr-22117.ic18s",0x9000000, 0x0800000, CRC(884a45a9) SHA1(d947cb3a045c5463523355fa631d55148e12c31e) )
|
||||
ROM_LOAD("mpr-22118.ic19s",0x9800000, 0x0800000, CRC(8d631cbf) SHA1(fe8a65d35b1cdaed650ddde931e59f0768ffff53) )
|
||||
ROM_LOAD("mpr-22119.ic20s",0xa000000, 0x0800000, CRC(d608fa86) SHA1(54c8107cccec8cbb536f13cda5b220b7972190b7) )
|
||||
ROM_LOAD("mpr-22120.ic21s",0xa800000, 0x0800000, CRC(a30facb4) SHA1(70415ca34095c795297486bce1f956f6a8d4817f) )
|
||||
|
||||
// on-cart X76F100 eeprom contents
|
||||
ROM_REGION( 0x84, "naomibd_eeprom", 0 )
|
||||
ROM_LOAD( "841-0003.sf", 0x000000, 0x000084, CRC(3a119a17) SHA1(d37a092cca7c9cfc5f2637b355af90a65d04013e) )
|
||||
|
||||
// 841-0003 1999 317-5048-COM Naomi
|
||||
ROM_PARAMETER( ":rom_board:segam2crypt:key", "0008ad01" )
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
|
||||
SYSTEMID: NAOMI
|
||||
@ -9678,7 +9719,8 @@ GAME( 2003, puyofevp, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", "
|
||||
/* 841-xxxxx ("Licensed by Sega" Naomi cart games)*/
|
||||
/* 0001 */ GAME( 1999, pstone, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Capcom", "Power Stone", GAME_FLAGS )
|
||||
/* 0002 */ GAME( 1999, suchie3, naomi, naomim2, suchie3, naomi_state,naomi_mp,ROT0, "Jaleco", "Idol Janshi Suchie-Pai 3 (JPN)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND )
|
||||
/* 0003 */ GAME( 1999, doa2, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Tecmo", "Dead or Alive 2 (Rev A)", GAME_FLAGS )
|
||||
/* 0003 */ GAME( 1999, doa2a, doa2, naomim2, naomi, naomi_state, naomi, ROT0, "Tecmo", "Dead or Alive 2 (Rev A)", GAME_FLAGS )
|
||||
/* 0003-01 */ GAME( 1999, doa2, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Tecmo", "Dead or Alive 2", GAME_FLAGS )
|
||||
/* 0003 */ GAME( 2000, doa2m, doa2, naomim2, naomi, naomi_state, naomi, ROT0, "Tecmo", "Dead or Alive 2 Millennium", GAME_FLAGS )
|
||||
/* 0004 */ GAME( 1999, shangril, naomi, naomim2, naomi_mp,naomi_state,naomi_mp,ROT0, "Marvelous Ent.", "Dengen Tenshi Taisen Janshi Shangri-la (Build 0728)", GAME_FLAGS ) // version taken from service mode
|
||||
/* 0005 */ GAME( 1999, spawn, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Todd Mc Farlane / Capcom","Spawn In the Demon's Hand (Rev B)", GAME_FLAGS )
|
||||
|
@ -124,6 +124,12 @@ Its BIOS performs POST and halts as there's no keyboard.
|
||||
#include "machine/octo_kbd.h"
|
||||
#include "machine/bankdev.h"
|
||||
#include "machine/ram.h"
|
||||
#include "bus/centronics/ctronics.h"
|
||||
#include "bus/centronics/comxpl80.h"
|
||||
#include "bus/centronics/epson_ex800.h"
|
||||
#include "bus/centronics/epson_lx800.h"
|
||||
#include "bus/centronics/epson_lx810l.h"
|
||||
#include "bus/centronics/printer.h"
|
||||
|
||||
class octopus_state : public driver_device
|
||||
{
|
||||
@ -148,6 +154,7 @@ public:
|
||||
m_ppi(*this, "ppi"),
|
||||
m_speaker(*this, "speaker"),
|
||||
m_serial(*this, "serial"),
|
||||
m_parallel(*this, "parallel"),
|
||||
m_z80_bankdev(*this, "z80_bank"),
|
||||
m_ram(*this, "ram"),
|
||||
m_current_dma(-1),
|
||||
@ -184,11 +191,15 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(rtc_w);
|
||||
DECLARE_READ8_MEMBER(z80_vector_r);
|
||||
DECLARE_WRITE8_MEMBER(z80_vector_w);
|
||||
DECLARE_READ8_MEMBER(parallel_r);
|
||||
DECLARE_WRITE8_MEMBER(parallel_w);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(spk_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(spk_freq_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(beep_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(serial_clock_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(parallel_busy_w) { m_printer_busy = state; }
|
||||
DECLARE_WRITE_LINE_MEMBER(parallel_slctout_w) { m_printer_slctout = state; }
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(dack0_w) { m_dma1->hack_w(state ? 0 : 1); } // for all unused DMA channel?
|
||||
DECLARE_WRITE_LINE_MEMBER(dack1_w) { if(!state) m_current_dma = 1; else if(m_current_dma == 1) m_current_dma = -1; } // HD
|
||||
@ -226,6 +237,7 @@ private:
|
||||
required_device<i8255_device> m_ppi;
|
||||
required_device<speaker_sound_device> m_speaker;
|
||||
required_device<z80sio2_device> m_serial;
|
||||
required_device<centronics_device> m_parallel;
|
||||
required_device<address_map_bank_device> m_z80_bankdev;
|
||||
required_device<ram_device> m_ram;
|
||||
|
||||
@ -246,6 +258,8 @@ private:
|
||||
UINT8 m_prev_cntl;
|
||||
UINT8 m_rs232_vector;
|
||||
UINT8 m_rs422_vector;
|
||||
bool m_printer_busy;
|
||||
bool m_printer_slctout;
|
||||
|
||||
emu_timer* m_timer_beep;
|
||||
};
|
||||
@ -288,7 +302,7 @@ static ADDRESS_MAP_START( octopus_io, AS_IO, 8, octopus_state )
|
||||
// 0xcf: mode control
|
||||
AM_RANGE(0xd0, 0xd3) AM_DEVREADWRITE("fdc", fd1793_t, read, write)
|
||||
AM_RANGE(0xe0, 0xe4) AM_READWRITE(z80_vector_r, z80_vector_w)
|
||||
// 0xf0-f1: Parallel interface data I/O (Centronics), and control/status
|
||||
AM_RANGE(0xf0, 0xf1) AM_READWRITE(parallel_r, parallel_w)
|
||||
AM_RANGE(0xf8, 0xff) AM_DEVREADWRITE("ppi", i8255_device, read, write)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -414,10 +428,14 @@ WRITE8_MEMBER(octopus_state::system_w)
|
||||
|
||||
READ8_MEMBER(octopus_state::system_r)
|
||||
{
|
||||
UINT8 val = 0x00;
|
||||
switch(offset)
|
||||
{
|
||||
case 0:
|
||||
return 0x1f; // do bits 0-4 mean anything? Language DIPs?
|
||||
val = 0x1f;
|
||||
if(m_printer_slctout)
|
||||
val |= 0x20;
|
||||
return val; // do bits 0-4 mean anything? Language DIPs?
|
||||
}
|
||||
|
||||
return 0xff;
|
||||
@ -613,6 +631,50 @@ WRITE_LINE_MEMBER(octopus_state::serial_clock_w)
|
||||
m_serial->txca_w(state);
|
||||
}
|
||||
|
||||
// Parallel Centronics port
|
||||
// 0xf0 : data
|
||||
// 0xf1 : control
|
||||
// bit 2 = INIT? On boot, bits 0 and 1 are set high, bit 2 is set low then high again, all other bits are set low
|
||||
// can generate interrupts - tech manual suggests that Strobe, Init, Ack, and Busy can trigger an interrupt (IRQ14)
|
||||
READ8_MEMBER(octopus_state::parallel_r)
|
||||
{
|
||||
switch(offset)
|
||||
{
|
||||
case 0:
|
||||
return 0;
|
||||
case 1:
|
||||
return m_printer_busy ? 0x01 : 0x00; // correct? Tech manual doesn't explain which bit is which
|
||||
}
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(octopus_state::parallel_w)
|
||||
{
|
||||
switch(offset)
|
||||
{
|
||||
case 0: // data
|
||||
if(!(m_gpo & 0x02)) // parallel data direction
|
||||
{
|
||||
m_parallel->write_data0(BIT(data,0));
|
||||
m_parallel->write_data1(BIT(data,1));
|
||||
m_parallel->write_data2(BIT(data,2));
|
||||
m_parallel->write_data3(BIT(data,3));
|
||||
m_parallel->write_data4(BIT(data,4));
|
||||
m_parallel->write_data5(BIT(data,5));
|
||||
m_parallel->write_data6(BIT(data,6));
|
||||
m_parallel->write_data7(BIT(data,7));
|
||||
}
|
||||
break;
|
||||
case 1: // control (bit order unknown?)
|
||||
if(!(m_gpo & 0x01)) // parallel control direction
|
||||
{
|
||||
m_parallel->write_init(BIT(data,2));
|
||||
m_pic2->ir6_w(!BIT(data,2));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER(octopus_state::dma_read)
|
||||
{
|
||||
UINT8 byte;
|
||||
@ -642,13 +704,14 @@ WRITE_LINE_MEMBER( octopus_state::dma_hrq_changed )
|
||||
// Any interrupt will also give bus control back to the 8088
|
||||
IRQ_CALLBACK_MEMBER(octopus_state::x86_irq_cb)
|
||||
{
|
||||
UINT8 vector;
|
||||
m_subcpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
|
||||
m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
|
||||
m_z80_active = false;
|
||||
if((strcmp(device.tag(),"pic_master") == 0) && irqline == 1)
|
||||
return m_serial->m1_r();
|
||||
else
|
||||
return m_pic1->inta_cb(device,irqline);
|
||||
vector = m_pic1->inta_cb(device,irqline);
|
||||
if(vector == 0x61) // if we have hit a serial comms IRQ, then also have the Z80SIO/2 acknowledge the interrupt
|
||||
vector = m_serial->m1_r();
|
||||
return vector;
|
||||
}
|
||||
|
||||
void octopus_state::machine_start()
|
||||
@ -707,6 +770,15 @@ static SLOT_INTERFACE_START(keyboard)
|
||||
SLOT_INTERFACE("octopus", OCTOPUS_KEYBOARD)
|
||||
SLOT_INTERFACE_END
|
||||
|
||||
SLOT_INTERFACE_START(octopus_centronics_devices)
|
||||
SLOT_INTERFACE("pl80", COMX_PL80)
|
||||
SLOT_INTERFACE("ex800", EPSON_EX800)
|
||||
SLOT_INTERFACE("lx800", EPSON_LX800)
|
||||
SLOT_INTERFACE("lx810l", EPSON_LX810L)
|
||||
SLOT_INTERFACE("ap2000", EPSON_AP2000)
|
||||
SLOT_INTERFACE("printer", CENTRONICS_PRINTER)
|
||||
SLOT_INTERFACE_END
|
||||
|
||||
static MACHINE_CONFIG_START( octopus, octopus_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu",I8088, XTAL_24MHz / 3) // 8MHz
|
||||
@ -763,7 +835,7 @@ static MACHINE_CONFIG_START( octopus, octopus_state )
|
||||
MCFG_I8255_OUT_PORTB_CB(WRITE8(octopus_state,cntl_w))
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(octopus_state,gpo_w))
|
||||
MCFG_MC146818_ADD("rtc", XTAL_32_768kHz)
|
||||
MCFG_MC146818_IRQ_HANDLER(DEVWRITELINE("pic_slave",pic8259_device, ir2_w))
|
||||
MCFG_MC146818_IRQ_HANDLER(DEVWRITELINE("pic_slave",pic8259_device, ir2_w)) MCFG_DEVCB_INVERT
|
||||
|
||||
// Keyboard UART
|
||||
MCFG_DEVICE_ADD("keyboard", I8251, 0)
|
||||
@ -804,9 +876,10 @@ static MACHINE_CONFIG_START( octopus, octopus_state )
|
||||
MCFG_RS232_CTS_HANDLER(DEVWRITELINE("serial",z80sio2_device, ctsb_w))
|
||||
MCFG_RS232_RI_HANDLER(DEVWRITELINE("serial",z80sio2_device, rib_w)) MCFG_DEVCB_INVERT
|
||||
|
||||
// TODO: add components
|
||||
// Centronics parallel interface
|
||||
// Winchester HD controller (Xebec/SASI compatible? uses TTL logic)
|
||||
MCFG_CENTRONICS_ADD("parallel", octopus_centronics_devices, "printer")
|
||||
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(octopus_state, parallel_busy_w))
|
||||
MCFG_CENTRONICS_SELECT_HANDLER(WRITELINE(octopus_state, parallel_slctout_w))
|
||||
// TODO: Winchester HD controller (Xebec/SASI compatible? uses TTL logic)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
|
@ -13,12 +13,7 @@ ToDo:
|
||||
- Everything
|
||||
|
||||
Issues:
|
||||
- Floppy disc isn't being detected.
|
||||
|
||||
(bios 1 issues)
|
||||
- Daisy chain:
|
||||
- Hitting a key causes CTC to interrupt, even though CTC and PIO are not connected.
|
||||
- After that, IRQ isn't released, causing the system to be stuck in a loop.
|
||||
- Floppy disc error.
|
||||
|
||||
|
||||
****************************************************************************************************************/
|
||||
@ -353,6 +348,7 @@ static MACHINE_CONFIG_START( rc702, rc702_state )
|
||||
MCFG_DEVICE_ADD("ctc1", Z80CTC, XTAL_8MHz / 2)
|
||||
MCFG_Z80CTC_ZC0_CB(WRITELINE(rc702_state, zc0_w))
|
||||
MCFG_Z80CTC_ZC1_CB(DEVWRITELINE("sio1", z80dart_device, rxtxcb_w))
|
||||
MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
|
||||
|
||||
MCFG_Z80DART_ADD("sio1", XTAL_8MHz / 2, 0, 0, 0, 0 )
|
||||
MCFG_Z80DART_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
|
||||
|
@ -523,7 +523,7 @@ ROM_START(wldcp_l1)
|
||||
ROM_LOAD("white2wc.716", 0x1800, 0x0800, CRC(618d15b5) SHA1(527387893eeb2cd4aa563a4cfb1948a15d2ed741))
|
||||
|
||||
ROM_REGION(0x0800, "audioroms", 0)
|
||||
ROM_LOAD("sound1.716", 0x0000, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
|
||||
ROM_LOAD("481_s0_world_cup.716", 0x0000, 0x0800, CRC(cf012812) SHA1(26074f6a44075a94e6f91de1dbf92f8ec3ff8ca4))
|
||||
ROM_END
|
||||
|
||||
/*-------------------------------------
|
||||
@ -536,7 +536,7 @@ ROM_START(cntct_l1)
|
||||
ROM_LOAD("white2.716", 0x1800, 0x0800, CRC(4d4010dd) SHA1(11221124fef3b7bf82d353d65ce851495f6946a7))
|
||||
|
||||
ROM_REGION(0x0800, "audioroms", 0)
|
||||
ROM_LOAD("sound1.716", 0x0000, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
|
||||
ROM_LOAD("482_s0_contact.716", 0x0000, 0x0800, CRC(d3c713da) SHA1(1fc4a8fadf472e9a04b3a86f60a9d625d07764e1))
|
||||
ROM_END
|
||||
|
||||
/*-------------------------------------
|
||||
@ -549,7 +549,7 @@ ROM_START(disco_l1)
|
||||
ROM_LOAD("white2.716", 0x1800, 0x0800, CRC(4d4010dd) SHA1(11221124fef3b7bf82d353d65ce851495f6946a7))
|
||||
|
||||
ROM_REGION(0x0800, "audioroms", 0)
|
||||
ROM_LOAD("sound1.716", 0x0000, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
|
||||
ROM_LOAD("483_s0_disco_fever.716", 0x0000, 0x0800, CRC(d1cb5047) SHA1(7f36296975df19feecc6456ffb91f4a23bcad037))
|
||||
ROM_END
|
||||
|
||||
/*--------------------------------
|
||||
@ -562,7 +562,7 @@ ROM_START(phnix_l1)
|
||||
ROM_LOAD("white2.716", 0x1800, 0x0800, CRC(4d4010dd) SHA1(11221124fef3b7bf82d353d65ce851495f6946a7))
|
||||
|
||||
ROM_REGION(0x0800, "audioroms", 0)
|
||||
ROM_LOAD("sound1.716", 0x0000, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
|
||||
ROM_LOAD("485_s0_phoenix.716", 0x0000, 0x0800, CRC(1c3dea6e) SHA1(04bfe952be2eab66f023b204c21a1bd461ea572f))
|
||||
ROM_END
|
||||
|
||||
/*--------------------------------
|
||||
|
184
src/mame/drivers/tranz330.cpp
Normal file
184
src/mame/drivers/tranz330.cpp
Normal file
@ -0,0 +1,184 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Ryan Holtz
|
||||
/**************************************************************************
|
||||
|
||||
VeriFone Tranz 330
|
||||
|
||||
All information gleaned from:
|
||||
http://www.bigmessowires.com/2011/05/10/mapping-the-tranz-330/
|
||||
|
||||
Currently sits in a loop doing very little, based on the disassembly
|
||||
it presumably needs some kind of interrupt in order to kick it into
|
||||
running.
|
||||
|
||||
Interrupt Vectors are located at 0200-02FF.
|
||||
Display ram at 9000-90FF says GRAMING ERR 0 (part of PROGRAMING ERR message)
|
||||
|
||||
TODO:
|
||||
- get working, driver needs a Z80 peripheral expert to look at it.
|
||||
- hook up magstripe reader
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
#include "includes/tranz330.h"
|
||||
#include "tranz330.lh"
|
||||
|
||||
static ADDRESS_MAP_START( tranz330_mem, AS_PROGRAM, 8, tranz330_state )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0xffff) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( tranz330_io, AS_IO, 8, tranz330_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x03) AM_DEVREADWRITE(PIO_TAG, z80pio_device, read_alt, write_alt)
|
||||
AM_RANGE(0x10, 0x13) AM_DEVREADWRITE(CTC_TAG, z80ctc_device, read, write)
|
||||
AM_RANGE(0x20, 0x23) AM_DEVREADWRITE(DART_TAG, z80dart_device, ba_cd_r, ba_cd_w)
|
||||
AM_RANGE(0x30, 0x3f) AM_DEVREADWRITE(RTC_TAG, msm6242_device, read, write)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( tranz330 )
|
||||
PORT_START("COL.0")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_1) PORT_NAME("1 QZ.")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(KEYCODE_4) PORT_NAME("4 GHI")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CODE(KEYCODE_7) PORT_NAME("7 PRS")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME("* ,'\"")
|
||||
|
||||
PORT_START("COL.1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_CODE(KEYCODE_2) PORT_NAME("2 ABC")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_CODE(KEYCODE_5) PORT_NAME("5 JKL")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_CODE(KEYCODE_8) PORT_NAME("8 TUV")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_CODE(KEYCODE_0) PORT_NAME("0 -SP")
|
||||
|
||||
PORT_START("COL.2")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_CODE(KEYCODE_3) PORT_NAME("3 DEF")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_CODE(KEYCODE_6) PORT_NAME("6 MNO")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON11 ) PORT_CODE(KEYCODE_9) PORT_NAME("9 WXY")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON13 ) PORT_CODE(KEYCODE_H) PORT_NAME("#") // KEYCODE_H for 'hash mark'
|
||||
|
||||
PORT_START("COL.3")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON14 ) PORT_CODE(KEYCODE_C) PORT_NAME("CLEAR") // KEYCODE_C so as to not collide with potentially-used UI keys
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON15 ) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("BACK SPACE")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON16 ) PORT_CODE(KEYCODE_A) PORT_NAME("ALPHA")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_CODE(KEYCODE_ENTER) PORT_NAME("FUNC | ENTER")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
void tranz330_state::machine_start()
|
||||
{
|
||||
}
|
||||
|
||||
void tranz330_state::machine_reset()
|
||||
{
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( tranz330_state::syncb_w )
|
||||
{
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( tranz330_state::sound_w )
|
||||
{
|
||||
m_speaker->level_w(state);
|
||||
m_ctc->trg3(state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( tranz330_state::clock_w )
|
||||
{
|
||||
// Ch 0 and 1 might be DART Ch A & B baud clocks
|
||||
//m_ctc->trg0(state);
|
||||
//m_ctc->trg1(state);
|
||||
// Ch 2 speaker clock
|
||||
m_ctc->trg2(state);
|
||||
}
|
||||
|
||||
READ8_MEMBER( tranz330_state::card_r )
|
||||
{
|
||||
// return 0xff for a magstripe 0, return 0x00 for a magstripe 1.
|
||||
// an interrupt should be triggered on the Z80 when magstripe reading begins.
|
||||
// external contributors are encouraged to hook this up.
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( tranz330_state::pio_a_w )
|
||||
{
|
||||
m_keypad_col_mask = data & 0xf;
|
||||
m_vfd->por ((data >> 4) & 1);
|
||||
m_vfd->data((data >> 5) & 1);
|
||||
m_vfd->sclk((data >> 6) & 1);
|
||||
}
|
||||
|
||||
READ8_MEMBER( tranz330_state::pio_b_r )
|
||||
{
|
||||
UINT8 input_mask = 0xf;
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
if (!BIT(m_keypad_col_mask, i))
|
||||
{
|
||||
input_mask &= m_keypad[i]->read();
|
||||
}
|
||||
}
|
||||
return input_mask;
|
||||
}
|
||||
|
||||
static const z80_daisy_config tranz330_daisy_chain[] =
|
||||
{
|
||||
{ DART_TAG },
|
||||
{ CTC_TAG },
|
||||
{ PIO_TAG },
|
||||
{ nullptr }
|
||||
};
|
||||
|
||||
// * - check clocks
|
||||
// ? - check purported RS232 hookup, inconsistent information found at the relevant webpage vs. user-submitted errata
|
||||
static MACHINE_CONFIG_START( tranz330, tranz330_state )
|
||||
MCFG_CPU_ADD(CPU_TAG, Z80, XTAL_7_15909MHz/2) //*
|
||||
MCFG_CPU_PROGRAM_MAP(tranz330_mem)
|
||||
MCFG_CPU_IO_MAP(tranz330_io)
|
||||
MCFG_Z80_DAISY_CHAIN(tranz330_daisy_chain)
|
||||
|
||||
MCFG_DEVICE_ADD("ctc_clock", CLOCK, XTAL_7_15909MHz/4) // ?
|
||||
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(tranz330_state, clock_w))
|
||||
|
||||
MCFG_DEVICE_ADD(RTC_TAG, MSM6242, XTAL_32_768kHz)
|
||||
|
||||
MCFG_DEVICE_ADD(PIO_TAG, Z80PIO, XTAL_7_15909MHz/2) //*
|
||||
MCFG_Z80PIO_OUT_INT_CB(INPUTLINE(CPU_TAG, INPUT_LINE_IRQ0)) //*
|
||||
MCFG_Z80PIO_OUT_PA_CB(WRITE8(tranz330_state, pio_a_w))
|
||||
MCFG_Z80PIO_IN_PA_CB(READ8(tranz330_state, card_r))
|
||||
MCFG_Z80PIO_IN_PB_CB(READ8(tranz330_state, pio_b_r))
|
||||
|
||||
MCFG_Z80DART_ADD(DART_TAG, XTAL_7_15909MHz/2, 0, 0, 0, 0 ) //*
|
||||
MCFG_Z80DART_OUT_SYNCB_CB(WRITELINE(tranz330_state, syncb_w))
|
||||
MCFG_Z80DART_OUT_TXDB_CB(DEVWRITELINE(RS232_TAG, rs232_port_device, write_txd)) //?
|
||||
MCFG_Z80DART_OUT_DTRB_CB(DEVWRITELINE(RS232_TAG, rs232_port_device, write_dtr)) //?
|
||||
MCFG_Z80DART_OUT_RTSB_CB(DEVWRITELINE(RS232_TAG, rs232_port_device, write_rts)) //?
|
||||
MCFG_Z80DART_OUT_INT_CB(INPUTLINE(CPU_TAG, INPUT_LINE_IRQ0))
|
||||
|
||||
MCFG_DEVICE_ADD(CTC_TAG, Z80CTC, XTAL_7_15909MHz/2) //*
|
||||
MCFG_Z80CTC_ZC2_CB(WRITELINE(tranz330_state, sound_w))
|
||||
MCFG_Z80CTC_INTR_CB(INPUTLINE(CPU_TAG, INPUT_LINE_IRQ0))
|
||||
|
||||
MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, nullptr)
|
||||
MCFG_RS232_RXD_HANDLER(DEVWRITELINE(DART_TAG, z80dart_device, rxb_w))
|
||||
MCFG_RS232_DCD_HANDLER(DEVWRITELINE(DART_TAG, z80dart_device, dcdb_w))
|
||||
MCFG_RS232_CTS_HANDLER(DEVWRITELINE(DART_TAG, z80dart_device, ctsb_w))
|
||||
|
||||
// video
|
||||
MCFG_MIC10937_ADD(VFD_TAG, 0)
|
||||
MCFG_DEFAULT_LAYOUT( layout_tranz330 )
|
||||
|
||||
// sound
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
ROM_START( tranz330 )
|
||||
ROM_REGION( 0x8000, CPU_TAG, 0 )
|
||||
ROM_LOAD( "tranz330-original.bin", 0x0000, 0x8000, CRC(af2bf474) SHA1(7896ed23b22b8e1730b689df83eb7bbf7b8dd130))
|
||||
ROM_END
|
||||
|
||||
|
||||
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
|
||||
COMP( 1985, tranz330, 0, 0, tranz330, tranz330, driver_device, 0, "VeriFone", "Tranz 330", MACHINE_CLICKABLE_ARTWORK )
|
73
src/mame/includes/tranz330.h
Normal file
73
src/mame/includes/tranz330.h
Normal file
@ -0,0 +1,73 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Ryan Holtz
|
||||
#pragma once
|
||||
|
||||
#ifndef VERIFONE_TRANZ330_H
|
||||
#define VERIFONE_TRANZ330_H
|
||||
|
||||
// single-driver build must have emu.h here
|
||||
#include "emu.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "cpu/z80/z80daisy.h"
|
||||
#include "machine/z80ctc.h"
|
||||
#include "machine/z80dart.h"
|
||||
#include "machine/z80pio.h"
|
||||
#include "machine/msm6242.h"
|
||||
#include "machine/roc10937.h"
|
||||
#include "bus/rs232/rs232.h"
|
||||
#include "sound/speaker.h"
|
||||
#include "machine/clock.h"
|
||||
|
||||
#define CPU_TAG "cpu"
|
||||
#define DART_TAG "dart"
|
||||
#define CTC_TAG "ctc"
|
||||
#define PIO_TAG "pio"
|
||||
#define RTC_TAG "rtc"
|
||||
#define VFD_TAG "vfd"
|
||||
#define RS232_TAG "rs232"
|
||||
#define SPEAKER_TAG "speaker"
|
||||
|
||||
class tranz330_state : public driver_device
|
||||
{
|
||||
public:
|
||||
tranz330_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_cpu(*this, CPU_TAG)
|
||||
, m_ctc(*this, CTC_TAG)
|
||||
, m_dart(*this, DART_TAG)
|
||||
, m_pio(*this, PIO_TAG)
|
||||
, m_rtc(*this, RTC_TAG)
|
||||
, m_vfd(*this, VFD_TAG)
|
||||
, m_rs232(*this, RS232_TAG)
|
||||
, m_speaker(*this, SPEAKER_TAG)
|
||||
, m_keypad(*this, "COL.%u", 0)
|
||||
{ }
|
||||
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( syncb_w );
|
||||
DECLARE_WRITE_LINE_MEMBER(clock_w);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( sound_w );
|
||||
|
||||
DECLARE_WRITE8_MEMBER( pio_a_w );
|
||||
DECLARE_READ8_MEMBER( pio_b_r );
|
||||
DECLARE_READ8_MEMBER( card_r );
|
||||
|
||||
private:
|
||||
required_device<cpu_device> m_cpu;
|
||||
required_device<z80ctc_device> m_ctc;
|
||||
required_device<z80dart_device> m_dart;
|
||||
required_device<z80pio_device> m_pio;
|
||||
required_device<msm6242_device> m_rtc;
|
||||
required_device<mic10937_t> m_vfd;
|
||||
required_device<rs232_port_device> m_rs232;
|
||||
required_device<speaker_sound_device> m_speaker;
|
||||
required_ioport_array<4> m_keypad;
|
||||
|
||||
UINT8 m_keypad_col_mask;
|
||||
};
|
||||
|
||||
#endif // VERIFONE_TRANZ330_H
|
227
src/mame/layout/tranz330.lay
Normal file
227
src/mame/layout/tranz330.lay
Normal file
@ -0,0 +1,227 @@
|
||||
<?xml version="1.0"?>
|
||||
<mamelayout version="2">
|
||||
<element name="vfd0"><led16segsc><color red="0" green="0.6" blue="1.0" /></led16segsc></element>
|
||||
|
||||
<element name="front"><rect><color red="0.15" green="0.15" blue="0.15" /></rect></element>
|
||||
<element name="vfd_back"><rect><color red="0.03" green="0.03" blue="0.03" /></rect></element>
|
||||
<element name="button_digit_back"><rect><color red="0.75" green="0.75" blue="0.75" /></rect></element>
|
||||
<element name="button_aux_back"><rect><color red="0.57" green="0.57" blue="0.57" /></rect></element>
|
||||
<element name="button_enter_back"><rect><color red="0.25" green="0.625" blue="0.875" /></rect></element>
|
||||
|
||||
<element name="hl" defstate="0">
|
||||
<text string=" ">
|
||||
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
</text>
|
||||
<rect state="1">
|
||||
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
</rect>
|
||||
</element>
|
||||
|
||||
<element name="button_1_text">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="QZ."><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_1_num">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="1"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_2_text">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="ABC"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_2_num">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="2"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_3_text">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="DEF"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_3_num">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="3"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_4_text">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="GHI"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_4_num">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="4"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_5_text">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="JKL"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_5_num">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="5"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_6_text">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="MNO"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_6_num">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="6"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_7_text">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="PRS"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_7_num">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="7"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_8_text">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="TUV"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_8_num">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="8"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_9_text">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="WXY"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_9_num">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="9"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_0_text">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="-SP"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_0_num">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="0"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_star_text">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string=",'""><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_star_num">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="*"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_hash_num">
|
||||
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
|
||||
<text string="#"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_clear_text">
|
||||
<rect><color red="0.57" green="0.57" blue="0.57" /></rect>
|
||||
<text string="CLEAR"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_back_text">
|
||||
<rect><color red="0.57" green="0.57" blue="0.57" /></rect>
|
||||
<text string="BACK"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_space_text">
|
||||
<rect><color red="0.57" green="0.57" blue="0.57" /></rect>
|
||||
<text string="SPACE"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_alpha_text">
|
||||
<rect><color red="0.57" green="0.57" blue="0.57" /></rect>
|
||||
<text string="ALPHA"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_func_text">
|
||||
<rect><color red="0.25" green="0.625" blue="0.875" /></rect>
|
||||
<text string="FUNC"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
<element name="button_enter_text">
|
||||
<rect><color red="0.25" green="0.625" blue="0.875" /></rect>
|
||||
<text string="ENTER"><color red="0.0" green="0.0" blue="0.0" /></text>
|
||||
</element>
|
||||
|
||||
<element name="button_enter_line"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
|
||||
|
||||
<view name="Internal Layout">
|
||||
<backdrop name="case_bg" element="front"> <bounds x=" 0" y=" 0" width="162" height="190"/></backdrop>
|
||||
<backdrop name="button_1" element="button_digit_back"><bounds x=" 18" y=" 50" width="25" height="25"/></backdrop>
|
||||
<backdrop name="button_2" element="button_digit_back"><bounds x=" 52" y=" 50" width="25" height="25"/></backdrop>
|
||||
<backdrop name="button_3" element="button_digit_back"><bounds x=" 86" y=" 50" width="25" height="25"/></backdrop>
|
||||
<backdrop name="button_4" element="button_digit_back"><bounds x=" 18" y=" 84" width="25" height="25"/></backdrop>
|
||||
<backdrop name="button_5" element="button_digit_back"><bounds x=" 52" y=" 84" width="25" height="25"/></backdrop>
|
||||
<backdrop name="button_6" element="button_digit_back"><bounds x=" 86" y=" 84" width="25" height="25"/></backdrop>
|
||||
<backdrop name="button_7" element="button_digit_back"><bounds x=" 18" y="118" width="25" height="25"/></backdrop>
|
||||
<backdrop name="button_8" element="button_digit_back"><bounds x=" 52" y="118" width="25" height="25"/></backdrop>
|
||||
<backdrop name="button_9" element="button_digit_back"><bounds x=" 86" y="118" width="25" height="25"/></backdrop>
|
||||
<backdrop name="button_0" element="button_digit_back"><bounds x=" 52" y="152" width="25" height="25"/></backdrop>
|
||||
<backdrop name="button_star" element="button_digit_back"><bounds x=" 18" y="152" width="25" height="25"/></backdrop>
|
||||
<backdrop name="button_hash" element="button_digit_back"><bounds x=" 86" y="152" width="25" height="25"/></backdrop>
|
||||
<backdrop name="button_clear" element="button_aux_back"> <bounds x="120" y=" 50" width="25" height="25"/></backdrop>
|
||||
<backdrop name="button_back" element="button_aux_back"> <bounds x="120" y=" 84" width="25" height="25"/></backdrop>
|
||||
<backdrop name="button_alpha" element="button_aux_back"> <bounds x="120" y="118" width="25" height="25"/></backdrop>
|
||||
<backdrop name="button_enter" element="button_enter_back"><bounds x="120" y="152" width="25" height="25"/></backdrop>
|
||||
|
||||
<backdrop name="vfd_backdrop" element="vfd_back"> <bounds x=" 0" y=" 0" width="162" height="32"/></backdrop>
|
||||
|
||||
<bezel name="vfd0" element="vfd0" state="0"><bounds x=" 9" y="9" width="9" height="14"/></bezel>
|
||||
<bezel name="vfd1" element="vfd0" state="0"><bounds x=" 18" y="9" width="9" height="14"/></bezel>
|
||||
<bezel name="vfd2" element="vfd0" state="0"><bounds x=" 27" y="9" width="9" height="14"/></bezel>
|
||||
<bezel name="vfd3" element="vfd0" state="0"><bounds x=" 36" y="9" width="9" height="14"/></bezel>
|
||||
<bezel name="vfd4" element="vfd0" state="0"><bounds x=" 45" y="9" width="9" height="14"/></bezel>
|
||||
<bezel name="vfd5" element="vfd0" state="0"><bounds x=" 54" y="9" width="9" height="14"/></bezel>
|
||||
<bezel name="vfd6" element="vfd0" state="0"><bounds x=" 63" y="9" width="9" height="14"/></bezel>
|
||||
<bezel name="vfd7" element="vfd0" state="0"><bounds x=" 72" y="9" width="9" height="14"/></bezel>
|
||||
<bezel name="vfd8" element="vfd0" state="0"><bounds x=" 81" y="9" width="9" height="14"/></bezel>
|
||||
<bezel name="vfd9" element="vfd0" state="0"><bounds x=" 90" y="9" width="9" height="14"/></bezel>
|
||||
<bezel name="vfd10" element="vfd0" state="0"><bounds x=" 99" y="9" width="9" height="14"/></bezel>
|
||||
<bezel name="vfd11" element="vfd0" state="0"><bounds x="108" y="9" width="9" height="14"/></bezel>
|
||||
<bezel name="vfd12" element="vfd0" state="0"><bounds x="117" y="9" width="9" height="14"/></bezel>
|
||||
<bezel name="vfd13" element="vfd0" state="0"><bounds x="126" y="9" width="9" height="14"/></bezel>
|
||||
<bezel name="vfd14" element="vfd0" state="0"><bounds x="135" y="9" width="9" height="14"/></bezel>
|
||||
<bezel name="vfd15" element="vfd0" state="0"><bounds x="144" y="9" width="9" height="14"/></bezel>
|
||||
|
||||
<bezel name="button_1_text1" element="button_1_text"> <bounds x=" 18" y=" 54" width="25" height="8"/></bezel>
|
||||
<bezel name="button_1_text2" element="button_1_num"> <bounds x=" 18" y=" 64" width="25" height="8"/></bezel>
|
||||
<bezel name="button_2_text1" element="button_2_text"> <bounds x=" 52" y=" 54" width="25" height="8"/></bezel>
|
||||
<bezel name="button_2_text2" element="button_2_num"> <bounds x=" 52" y=" 64" width="25" height="8"/></bezel>
|
||||
<bezel name="button_3_text1" element="button_3_text"> <bounds x=" 86" y=" 54" width="25" height="8"/></bezel>
|
||||
<bezel name="button_3_text2" element="button_3_num"> <bounds x=" 86" y=" 64" width="25" height="8"/></bezel>
|
||||
<bezel name="button_4_text1" element="button_4_text"> <bounds x=" 18" y=" 88" width="25" height="8"/></bezel>
|
||||
<bezel name="button_4_text2" element="button_4_num"> <bounds x=" 18" y=" 98" width="25" height="8"/></bezel>
|
||||
<bezel name="button_5_text1" element="button_5_text"> <bounds x=" 52" y=" 88" width="25" height="8"/></bezel>
|
||||
<bezel name="button_5_text2" element="button_5_num"> <bounds x=" 52" y=" 98" width="25" height="8"/></bezel>
|
||||
<bezel name="button_6_text1" element="button_6_text"> <bounds x=" 86" y=" 88" width="25" height="8"/></bezel>
|
||||
<bezel name="button_6_text2" element="button_6_num"> <bounds x=" 86" y=" 98" width="25" height="8"/></bezel>
|
||||
<bezel name="button_7_text1" element="button_7_text"> <bounds x=" 18" y="122" width="25" height="8"/></bezel>
|
||||
<bezel name="button_7_text2" element="button_7_num"> <bounds x=" 18" y="132" width="25" height="8"/></bezel>
|
||||
<bezel name="button_8_text1" element="button_8_text"> <bounds x=" 52" y="122" width="25" height="8"/></bezel>
|
||||
<bezel name="button_8_text2" element="button_8_num"> <bounds x=" 52" y="132" width="25" height="8"/></bezel>
|
||||
<bezel name="button_9_text1" element="button_9_text"> <bounds x=" 86" y="122" width="25" height="8"/></bezel>
|
||||
<bezel name="button_9_text2" element="button_9_num"> <bounds x=" 86" y="132" width="25" height="8"/></bezel>
|
||||
<bezel name="button_star_text1" element="button_star_text"> <bounds x=" 18" y="156" width="25" height="8"/></bezel>
|
||||
<bezel name="button_star_text2" element="button_star_num"> <bounds x=" 18" y="166" width="25" height="8"/></bezel>
|
||||
<bezel name="button_0_text1" element="button_0_text"> <bounds x=" 52" y="156" width="25" height="8"/></bezel>
|
||||
<bezel name="button_0_text2" element="button_0_num"> <bounds x=" 52" y="166" width="25" height="8"/></bezel>
|
||||
<bezel name="button_hash_text" element="button_hash_num"> <bounds x=" 86" y="161" width="25" height="8"/></bezel>
|
||||
<bezel name="button_clear_text1" element="button_clear_text"><bounds x="120" y=" 59" width="25" height="7"/></bezel>
|
||||
<bezel name="button_back_text1" element="button_back_text"> <bounds x="120" y=" 88" width="25" height="7"/></bezel>
|
||||
<bezel name="button_space_text1" element="button_space_text"><bounds x="120" y=" 98" width="25" height="7"/></bezel>
|
||||
<bezel name="button_alpha_text1" element="button_alpha_text"><bounds x="120" y="127" width="25" height="7"/></bezel>
|
||||
<bezel name="button_func_text1" element="button_func_text"> <bounds x="120" y="156" width="25" height="7"/></bezel>
|
||||
<bezel name="button_enter_text1" element="button_enter_text"><bounds x="120" y="166" width="25" height="7"/></bezel>
|
||||
<bezel name="enter_line_strike" element="button_enter_line"><bounds x="122.5" y="164" width="20" height="1"/></bezel>
|
||||
|
||||
<bezel element="hl" inputtag="COL.0" inputmask="0x01"><bounds x=" 20" y=" 52" width="21" height="21" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="COL.0" inputmask="0x02"><bounds x=" 20" y=" 86" width="21" height="21" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="COL.0" inputmask="0x04"><bounds x=" 20" y="120" width="21" height="21" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="COL.0" inputmask="0x08"><bounds x=" 20" y="154" width="21" height="21" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="COL.1" inputmask="0x01"><bounds x=" 54" y=" 52" width="21" height="21" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="COL.1" inputmask="0x02"><bounds x=" 54" y=" 86" width="21" height="21" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="COL.1" inputmask="0x04"><bounds x=" 54" y="120" width="21" height="21" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="COL.1" inputmask="0x08"><bounds x=" 54" y="154" width="21" height="21" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="COL.2" inputmask="0x01"><bounds x=" 88" y=" 52" width="21" height="21" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="COL.2" inputmask="0x02"><bounds x=" 88" y=" 86" width="21" height="21" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="COL.2" inputmask="0x04"><bounds x=" 88" y="120" width="21" height="21" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="COL.2" inputmask="0x08"><bounds x=" 88" y="154" width="21" height="21" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="COL.3" inputmask="0x01"><bounds x="122" y=" 52" width="21" height="21" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="COL.3" inputmask="0x02"><bounds x="122" y=" 86" width="21" height="21" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="COL.3" inputmask="0x04"><bounds x="122" y="120" width="21" height="21" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="COL.3" inputmask="0x08"><bounds x="122" y="154" width="21" height="21" /><color alpha="0.2" /></bezel>
|
||||
</view>
|
||||
</mamelayout>
|
@ -466,14 +466,14 @@ WRITE8_MEMBER(sms_state::smsj_audio_control_w)
|
||||
1,1 : Both PSG and FM enabled
|
||||
*/
|
||||
if (m_smsj_audio_control == 0x00 || m_smsj_audio_control == 0x03)
|
||||
m_psg_sms->set_output_gain(0, 1.0);
|
||||
m_psg_sms->set_output_gain(ALL_OUTPUTS, 1.0);
|
||||
else
|
||||
m_psg_sms->set_output_gain(0, 0.0);
|
||||
m_psg_sms->set_output_gain(ALL_OUTPUTS, 0.0);
|
||||
|
||||
if (m_smsj_audio_control == 0x01 || m_smsj_audio_control == 0x03)
|
||||
m_ym->set_output_gain(0, 1.0);
|
||||
m_ym->set_output_gain(ALL_OUTPUTS, 1.0);
|
||||
else
|
||||
m_ym->set_output_gain(0, 0.0);
|
||||
m_ym->set_output_gain(ALL_OUTPUTS, 0.0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
mame.lst
|
||||
|
||||
This is not automatically generated file, and should be manually updated when
|
||||
new driver is added. From time to time we will auto update comments
|
||||
according to meta-data from source files.
|
||||
This is not an automatically generated file, and it should be manually
|
||||
updated when new driver is added. From time to time, we will auto-update
|
||||
comments according to metadata from source files.
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
@ -1166,6 +1166,9 @@ amust //
|
||||
angelkds // 833-6599 (c) 1988 Sega / Nasco?
|
||||
spcpostn // (c) 1986 Sega / Nasco"
|
||||
|
||||
@source:anzterm.cpp
|
||||
anzterm // Burroughs EF315-I220
|
||||
|
||||
@source:apc.cpp
|
||||
apc //
|
||||
|
||||
@ -10317,7 +10320,8 @@ wizzard //
|
||||
@source:crystal.cpp
|
||||
crysbios //
|
||||
crysking // 2001 Brezzasoft. Crystal of the kings
|
||||
ddz // (c) 200?
|
||||
crzyddz2 // 2006 Sealy
|
||||
ddz // 200?
|
||||
donghaer //
|
||||
evosocc // 2001 Evoga. Evolution Soccer
|
||||
officeye //
|
||||
@ -14593,8 +14597,9 @@ sdmg2 // (c) 1997
|
||||
slqz2 // (c) 1998
|
||||
spkrform // (c) ????
|
||||
starzan // (c) 2000?
|
||||
tarzan // (c) 1999?
|
||||
tarzana // (c) 1999?
|
||||
tarzan // (c) 1999
|
||||
tarzana // (c) 1999
|
||||
tarzanc // (c) 1999
|
||||
tjsb // (c) 1997
|
||||
|
||||
@source:igspc.cpp
|
||||
@ -28157,7 +28162,8 @@ derbyoc // 1999.10 Derby Owners Club (Japan) (Rev B)
|
||||
derbyoc2 // 2001.10 Derby Owners Club II Ver.2.1 (Japan) (Rev B)
|
||||
derbyocw // 2005.?? Derby Owners Club World Edition EX (Rev D)
|
||||
dirtypig // 2004.09 Dirty Pig Skin Football
|
||||
doa2 // 1999.11 Dead or Alive 2
|
||||
doa2 // 1999.12? Dead or Alive 2
|
||||
doa2a // 1999.11 Dead or Alive 2 (Rev A)
|
||||
doa2m // 2000.01 Dead or Alive 2 Millennium
|
||||
dolphin // 2003.08 Dolphin Blue
|
||||
dragntr2 // 2004.?? Dragon Treasure 2 (Rev A)
|
||||
@ -35796,6 +35802,9 @@ wizzquiz // (c) 1985 Konami
|
||||
wizzquiza // (c) 1985 Zilec-Zenitone
|
||||
yieartf // GX361 (c) 1985
|
||||
|
||||
@source:tranz330.cpp
|
||||
tranz330 // (c) 1985 VeriFone
|
||||
|
||||
@source:travrusa.cpp
|
||||
motorace // (c) 1983 Williams license
|
||||
mototour // (c) 1983 Tecfri
|
||||
|
@ -34,6 +34,7 @@ ampro.cpp
|
||||
amstr_pc.cpp
|
||||
amstrad.cpp
|
||||
amust.cpp
|
||||
anzterm.cpp
|
||||
apc.cpp
|
||||
apexc.cpp
|
||||
apf.cpp
|
||||
@ -616,6 +617,7 @@ tmc1800.cpp
|
||||
tmc2000e.cpp
|
||||
tmc600.cpp
|
||||
tr606.cpp
|
||||
tranz330.cpp
|
||||
tricep.cpp
|
||||
trs80.cpp
|
||||
trs80m2.cpp
|
||||
|
@ -70,10 +70,10 @@ struct basictokens
|
||||
|
||||
static imgtoolerr_t basic_readfile(const basictokens *tokens,
|
||||
imgtool::partition *partition, const char *filename,
|
||||
const char *fork, imgtool_stream *destf)
|
||||
const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
imgtool_stream *mem_stream;
|
||||
imgtool::stream *mem_stream;
|
||||
UINT8 line_header[4];
|
||||
UINT16 line_number; //, address;
|
||||
UINT8 b, shift;
|
||||
@ -83,7 +83,7 @@ static imgtoolerr_t basic_readfile(const basictokens *tokens,
|
||||
const char *token;
|
||||
|
||||
/* open a memory stream */
|
||||
mem_stream = stream_open_mem(nullptr, 0);
|
||||
mem_stream = imgtool::stream::open_mem(nullptr, 0);
|
||||
if (mem_stream == nullptr)
|
||||
{
|
||||
err = IMGTOOLERR_OUTOFMEMORY;
|
||||
@ -91,15 +91,15 @@ static imgtoolerr_t basic_readfile(const basictokens *tokens,
|
||||
}
|
||||
|
||||
/* read actual file */
|
||||
err = partition->read_file(filename, fork, mem_stream, nullptr);
|
||||
err = partition->read_file(filename, fork, *mem_stream, nullptr);
|
||||
if (err)
|
||||
goto done;
|
||||
|
||||
/* skip first few bytes */
|
||||
stream_seek(mem_stream, tokens->skip_bytes, SEEK_SET);
|
||||
mem_stream->seek(tokens->skip_bytes, SEEK_SET);
|
||||
|
||||
/* keep reading line headers */
|
||||
while(stream_read(mem_stream, line_header, sizeof(line_header)) == sizeof(line_header))
|
||||
while(mem_stream->read(line_header, sizeof(line_header)) == sizeof(line_header))
|
||||
{
|
||||
/* pluck the address and line number out */
|
||||
if (tokens->be)
|
||||
@ -116,10 +116,10 @@ static imgtoolerr_t basic_readfile(const basictokens *tokens,
|
||||
}
|
||||
|
||||
/* write the line number */
|
||||
stream_printf(destf, "%u ", (unsigned) line_number);
|
||||
destf.printf("%u ", (unsigned) line_number);
|
||||
shift = 0x00;
|
||||
|
||||
while((stream_read(mem_stream, &b, 1) > 0) && (b != 0x00))
|
||||
while((mem_stream->read(&b, 1) > 0) && (b != 0x00))
|
||||
{
|
||||
if (b == 0x22)
|
||||
in_string = in_string ? FALSE : TRUE;
|
||||
@ -149,20 +149,20 @@ static imgtoolerr_t basic_readfile(const basictokens *tokens,
|
||||
}
|
||||
|
||||
if (shift == 0x00)
|
||||
stream_puts(destf, token ? token : "!");
|
||||
destf.puts(token ? token : "!");
|
||||
}
|
||||
else
|
||||
{
|
||||
stream_putc(destf, (char) b);
|
||||
destf.putc((char) b);
|
||||
}
|
||||
}
|
||||
|
||||
stream_puts(destf, EOLN);
|
||||
destf.puts(EOLN);
|
||||
}
|
||||
|
||||
done:
|
||||
if (mem_stream != nullptr)
|
||||
stream_close(mem_stream);
|
||||
delete mem_stream;
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -175,10 +175,10 @@ done:
|
||||
|
||||
static imgtoolerr_t basic_writefile(const basictokens *tokens,
|
||||
imgtool::partition *partition, const char *filename,
|
||||
const char *fork, imgtool_stream *sourcef, util::option_resolution *opts)
|
||||
const char *fork, imgtool::stream &sourcef, util::option_resolution *opts)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
imgtool_stream *mem_stream;
|
||||
imgtool::stream *mem_stream;
|
||||
char buf[1024];
|
||||
int eof = FALSE;
|
||||
UINT32 len;
|
||||
@ -193,7 +193,7 @@ static imgtoolerr_t basic_writefile(const basictokens *tokens,
|
||||
UINT16 address;
|
||||
|
||||
/* open a memory stream */
|
||||
mem_stream = stream_open_mem(nullptr, 0);
|
||||
mem_stream = imgtool::stream::open_mem(nullptr, 0);
|
||||
if (mem_stream == nullptr)
|
||||
{
|
||||
err = IMGTOOLERR_OUTOFMEMORY;
|
||||
@ -201,14 +201,14 @@ static imgtoolerr_t basic_writefile(const basictokens *tokens,
|
||||
}
|
||||
|
||||
/* skip first few bytes */
|
||||
stream_fill(mem_stream, 0x00, tokens->skip_bytes);
|
||||
mem_stream->fill(0x00, tokens->skip_bytes);
|
||||
|
||||
/* loop until the file is complete */
|
||||
while(!eof)
|
||||
{
|
||||
/* read a line */
|
||||
pos = 0;
|
||||
while((len = stream_read(sourcef, &c, 1)) > 0)
|
||||
while((len = sourcef.read(&c, 1)) > 0)
|
||||
{
|
||||
/* break if at end of line */
|
||||
if ((c == '\r') || (c == '\n'))
|
||||
@ -239,7 +239,7 @@ static imgtoolerr_t basic_writefile(const basictokens *tokens,
|
||||
/* determine address */
|
||||
if (tokens->baseaddress != 0)
|
||||
{
|
||||
address = tokens->baseaddress + (UINT16)stream_size(mem_stream) + 4;
|
||||
address = tokens->baseaddress + (UINT16)mem_stream->size() + 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -260,7 +260,7 @@ static imgtoolerr_t basic_writefile(const basictokens *tokens,
|
||||
}
|
||||
|
||||
/* emit line header */
|
||||
stream_write(mem_stream, line_header, sizeof(line_header));
|
||||
mem_stream->write(line_header, sizeof(line_header));
|
||||
|
||||
/* skip spaces */
|
||||
while(isspace(buf[pos]))
|
||||
@ -304,26 +304,26 @@ static imgtoolerr_t basic_writefile(const basictokens *tokens,
|
||||
{
|
||||
/* emit the token */
|
||||
if (token_shift != 0)
|
||||
stream_write(mem_stream, &token_shift, 1);
|
||||
stream_write(mem_stream, &token_value, 1);
|
||||
mem_stream->write(&token_shift, 1);
|
||||
mem_stream->write(&token_value, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* no token; emit the byte */
|
||||
stream_write(mem_stream, &buf[pos++], 1);
|
||||
mem_stream->write(&buf[pos++], 1);
|
||||
}
|
||||
}
|
||||
|
||||
/* emit line terminator */
|
||||
stream_fill(mem_stream, 0x00, 1);
|
||||
mem_stream->fill(0x00, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/* emit program terminator */
|
||||
stream_fill(mem_stream, 0x00, 2);
|
||||
mem_stream->fill(0x00, 2);
|
||||
|
||||
/* reset stream */
|
||||
stream_seek(mem_stream, 0, SEEK_SET);
|
||||
mem_stream->seek(0, SEEK_SET);
|
||||
|
||||
/* this is somewhat gross */
|
||||
if (tokens->skip_bytes >= 3)
|
||||
@ -331,25 +331,25 @@ static imgtoolerr_t basic_writefile(const basictokens *tokens,
|
||||
if (tokens->be)
|
||||
{
|
||||
place_integer_be(file_header, 0, 1, 0xFF);
|
||||
place_integer_be(file_header, 1, 2, stream_size(mem_stream));
|
||||
place_integer_be(file_header, 1, 2, mem_stream->size());
|
||||
}
|
||||
else
|
||||
{
|
||||
place_integer_le(file_header, 0, 1, 0xFF);
|
||||
place_integer_le(file_header, 1, 2, stream_size(mem_stream));
|
||||
place_integer_le(file_header, 1, 2, mem_stream->size());
|
||||
}
|
||||
stream_write(mem_stream, file_header, 3);
|
||||
stream_seek(mem_stream, 0, SEEK_SET);
|
||||
mem_stream->write(file_header, 3);
|
||||
mem_stream->seek(0, SEEK_SET);
|
||||
}
|
||||
|
||||
/* write actual file */
|
||||
err = partition->write_file(filename, fork, mem_stream, opts, nullptr);
|
||||
err = partition->write_file(filename, fork, *mem_stream, opts, nullptr);
|
||||
if (err)
|
||||
goto done;
|
||||
|
||||
done:
|
||||
if (mem_stream != nullptr)
|
||||
stream_close(mem_stream);
|
||||
delete mem_stream;
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -2959,13 +2959,13 @@ static const basictokens cocobas_tokens =
|
||||
};
|
||||
|
||||
static imgtoolerr_t cocobas_readfile(imgtool::partition *partition, const char *filename,
|
||||
const char *fork, imgtool_stream *destf)
|
||||
const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
return basic_readfile(&cocobas_tokens, partition, filename, fork, destf);
|
||||
}
|
||||
|
||||
static imgtoolerr_t cocobas_writefile(imgtool::partition *partition, const char *filename,
|
||||
const char *fork, imgtool_stream *sourcef, util::option_resolution *opts)
|
||||
const char *fork, imgtool::stream &sourcef, util::option_resolution *opts)
|
||||
{
|
||||
return basic_writefile(&cocobas_tokens, partition, filename, fork, sourcef, opts);
|
||||
}
|
||||
@ -3003,13 +3003,13 @@ static const basictokens dragonbas_tokens =
|
||||
};
|
||||
|
||||
static imgtoolerr_t dragonbas_readfile(imgtool::partition *partition, const char *filename,
|
||||
const char *fork, imgtool_stream *destf)
|
||||
const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
return basic_readfile(&dragonbas_tokens, partition, filename, fork, destf);
|
||||
}
|
||||
|
||||
static imgtoolerr_t dragonbas_writefile(imgtool::partition *partition, const char *filename,
|
||||
const char *fork, imgtool_stream *sourcef, util::option_resolution *opts)
|
||||
const char *fork, imgtool::stream &sourcef, util::option_resolution *opts)
|
||||
{
|
||||
return basic_writefile(&dragonbas_tokens, partition, filename, fork, sourcef, opts);
|
||||
}
|
||||
@ -3048,13 +3048,13 @@ static const basictokens vzbas_tokens =
|
||||
};
|
||||
|
||||
static imgtoolerr_t vzbas_readfile(imgtool::partition *partition, const char *filename,
|
||||
const char *fork, imgtool_stream *destf)
|
||||
const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
return basic_readfile(&vzbas_tokens, partition, filename, fork, destf);
|
||||
}
|
||||
|
||||
static imgtoolerr_t vzbas_writefile(imgtool::partition *partition, const char *filename,
|
||||
const char *fork, imgtool_stream *sourcef, util::option_resolution *opts)
|
||||
const char *fork, imgtool::stream &sourcef, util::option_resolution *opts)
|
||||
{
|
||||
return basic_writefile(&vzbas_tokens, partition, filename, fork, sourcef, opts);
|
||||
}
|
||||
@ -3092,13 +3092,13 @@ static const basictokens bml3bas_tokens =
|
||||
};
|
||||
|
||||
static imgtoolerr_t bml3bas_readfile(imgtool::partition *partition, const char *filename,
|
||||
const char *fork, imgtool_stream *destf)
|
||||
const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
return basic_readfile(&bml3bas_tokens, partition, filename, fork, destf);
|
||||
}
|
||||
|
||||
static imgtoolerr_t bml3bas_writefile(imgtool::partition *partition, const char *filename,
|
||||
const char *fork, imgtool_stream *sourcef, util::option_resolution *opts)
|
||||
const char *fork, imgtool::stream &sourcef, util::option_resolution *opts)
|
||||
{
|
||||
return basic_writefile(&bml3bas_tokens, partition, filename, fork, sourcef, opts);
|
||||
}
|
||||
|
@ -16,13 +16,13 @@
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t convert_stream_eolns(imgtool_stream *source, imgtool_stream *dest, const char *eoln)
|
||||
static imgtoolerr_t convert_stream_eolns(imgtool::stream &source, imgtool::stream &dest, const char *eoln)
|
||||
{
|
||||
size_t len, i, pos;
|
||||
char buffer[2000];
|
||||
int hit_cr = FALSE;
|
||||
|
||||
while((len = stream_read(source, buffer, sizeof(buffer))) > 0)
|
||||
while((len = source.read(buffer, sizeof(buffer))) > 0)
|
||||
{
|
||||
pos = 0;
|
||||
|
||||
@ -35,8 +35,8 @@ static imgtoolerr_t convert_stream_eolns(imgtool_stream *source, imgtool_stream
|
||||
if (!hit_cr || (buffer[i] != '\n'))
|
||||
{
|
||||
if (i > pos)
|
||||
stream_write(dest, buffer + pos, i - pos);
|
||||
stream_write(dest, eoln, strlen(eoln));
|
||||
dest.write(buffer + pos, i - pos);
|
||||
dest.write(eoln, strlen(eoln));
|
||||
}
|
||||
pos = i + 1;
|
||||
break;
|
||||
@ -45,7 +45,7 @@ static imgtoolerr_t convert_stream_eolns(imgtool_stream *source, imgtool_stream
|
||||
}
|
||||
|
||||
if (i > pos)
|
||||
stream_write(dest, buffer + pos, i - pos);
|
||||
dest.write(buffer + pos, i - pos);
|
||||
}
|
||||
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
@ -53,43 +53,43 @@ static imgtoolerr_t convert_stream_eolns(imgtool_stream *source, imgtool_stream
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t ascii_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf)
|
||||
static imgtoolerr_t ascii_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
imgtool_stream *mem_stream;
|
||||
imgtool::stream *mem_stream;
|
||||
|
||||
mem_stream = stream_open_mem(nullptr, 0);
|
||||
mem_stream = imgtool::stream::open_mem(nullptr, 0);
|
||||
if (!mem_stream)
|
||||
{
|
||||
err = IMGTOOLERR_OUTOFMEMORY;
|
||||
goto done;
|
||||
}
|
||||
|
||||
err = partition->read_file(filename, fork, mem_stream, nullptr);
|
||||
err = partition->read_file(filename, fork, *mem_stream, nullptr);
|
||||
if (err)
|
||||
goto done;
|
||||
|
||||
stream_seek(mem_stream, SEEK_SET, 0);
|
||||
err = convert_stream_eolns(mem_stream, destf, EOLN);
|
||||
mem_stream->seek(SEEK_SET, 0);
|
||||
err = convert_stream_eolns(*mem_stream, destf, EOLN);
|
||||
if (err)
|
||||
goto done;
|
||||
|
||||
done:
|
||||
if (mem_stream)
|
||||
stream_close(mem_stream);
|
||||
delete mem_stream;
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t ascii_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *opts)
|
||||
static imgtoolerr_t ascii_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
imgtool_stream *mem_stream = nullptr;
|
||||
imgtool::stream *mem_stream = nullptr;
|
||||
const char *eoln;
|
||||
|
||||
/* create a stream */
|
||||
mem_stream = stream_open_mem(nullptr, 0);
|
||||
mem_stream = imgtool::stream::open_mem(nullptr, 0);
|
||||
if (!mem_stream)
|
||||
{
|
||||
err = IMGTOOLERR_OUTOFMEMORY;
|
||||
@ -98,18 +98,18 @@ static imgtoolerr_t ascii_writefile(imgtool::partition *partition, const char *f
|
||||
|
||||
eoln = partition->get_info_string(IMGTOOLINFO_STR_EOLN);
|
||||
|
||||
err = convert_stream_eolns(sourcef, mem_stream, eoln);
|
||||
err = convert_stream_eolns(sourcef, *mem_stream, eoln);
|
||||
if (err)
|
||||
goto done;
|
||||
stream_seek(mem_stream, SEEK_SET, 0);
|
||||
mem_stream->seek(SEEK_SET, 0);
|
||||
|
||||
err = partition->write_file(filename, fork, mem_stream, opts, nullptr);
|
||||
err = partition->write_file(filename, fork, *mem_stream, opts, nullptr);
|
||||
if (err)
|
||||
goto done;
|
||||
|
||||
done:
|
||||
if (mem_stream)
|
||||
stream_close(mem_stream);
|
||||
delete mem_stream;
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -45,29 +45,29 @@ imgtoolerr_t imgtool_floppy_error(floperr_t err)
|
||||
|
||||
static void imgtool_floppy_closeproc(void *file)
|
||||
{
|
||||
stream_close((imgtool_stream *) file);
|
||||
delete reinterpret_cast<imgtool::stream *>(file);
|
||||
}
|
||||
|
||||
static int imgtool_floppy_seekproc(void *file, INT64 offset, int whence)
|
||||
{
|
||||
stream_seek((imgtool_stream *) file, offset, whence);
|
||||
reinterpret_cast<imgtool::stream *>(file)->seek(offset, whence);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static size_t imgtool_floppy_readproc(void *file, void *buffer, size_t length)
|
||||
{
|
||||
return stream_read((imgtool_stream *) file, buffer, length);
|
||||
return reinterpret_cast<imgtool::stream *>(file)->read(buffer, length);
|
||||
}
|
||||
|
||||
static size_t imgtool_floppy_writeproc(void *file, const void *buffer, size_t length)
|
||||
{
|
||||
stream_write((imgtool_stream *) file, buffer, length);
|
||||
reinterpret_cast<imgtool::stream *>(file)->write(buffer, length);
|
||||
return length;
|
||||
}
|
||||
|
||||
static UINT64 imgtool_floppy_filesizeproc(void *file)
|
||||
{
|
||||
return stream_size((imgtool_stream *) file);
|
||||
return reinterpret_cast<imgtool::stream *>(file)->size();
|
||||
}
|
||||
|
||||
static const struct io_procs imgtool_ioprocs =
|
||||
@ -102,22 +102,22 @@ struct imgtool_floppy_image
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t imgtool_floppy_open_internal(imgtool::image *image, imgtool_stream *f, int noclose)
|
||||
static imgtoolerr_t imgtool_floppy_open_internal(imgtool::image *image, imgtool::stream &f, int noclose)
|
||||
{
|
||||
floperr_t ferr;
|
||||
imgtoolerr_t err;
|
||||
struct imgtool_floppy_image *fimg;
|
||||
const imgtool_class *imgclass;
|
||||
const struct FloppyFormat *format;
|
||||
imgtoolerr_t (*open)(imgtool::image *image, imgtool_stream *f);
|
||||
imgtoolerr_t (*open)(imgtool::image *image, imgtool::stream *f);
|
||||
|
||||
fimg = (struct imgtool_floppy_image *) image->extra_bytes();
|
||||
imgclass = &image->module().imgclass;
|
||||
format = (const struct FloppyFormat *) imgclass->derived_param;
|
||||
open = (imgtoolerr_t (*)(imgtool::image *, imgtool_stream *)) imgtool_get_info_ptr(imgclass, IMGTOOLINFO_PTR_FLOPPY_OPEN);
|
||||
open = (imgtoolerr_t (*)(imgtool::image *, imgtool::stream *)) imgtool_get_info_ptr(imgclass, IMGTOOLINFO_PTR_FLOPPY_OPEN);
|
||||
|
||||
/* open up the floppy */
|
||||
ferr = floppy_open(f, noclose ? &imgtool_noclose_ioprocs : &imgtool_ioprocs,
|
||||
ferr = floppy_open(&f, noclose ? &imgtool_noclose_ioprocs : &imgtool_ioprocs,
|
||||
"", format, FLOPPY_FLAGS_READWRITE, &fimg->floppy);
|
||||
if (ferr)
|
||||
{
|
||||
@ -137,31 +137,31 @@ static imgtoolerr_t imgtool_floppy_open_internal(imgtool::image *image, imgtool_
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t imgtool_floppy_open(imgtool::image *image, imgtool_stream *f)
|
||||
static imgtoolerr_t imgtool_floppy_open(imgtool::image *image, imgtool::stream &f)
|
||||
{
|
||||
return imgtool_floppy_open_internal(image, f, FALSE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t imgtool_floppy_create(imgtool::image *image, imgtool_stream *f, util::option_resolution *opts)
|
||||
static imgtoolerr_t imgtool_floppy_create(imgtool::image *image, imgtool::stream &f, util::option_resolution *opts)
|
||||
{
|
||||
floperr_t ferr;
|
||||
imgtoolerr_t err = IMGTOOLERR_SUCCESS;
|
||||
struct imgtool_floppy_image *fimg;
|
||||
const imgtool_class *imgclass;
|
||||
const struct FloppyFormat *format;
|
||||
imgtoolerr_t (*create)(imgtool::image *, imgtool_stream *, util::option_resolution *);
|
||||
imgtoolerr_t (*open)(imgtool::image *image, imgtool_stream *f);
|
||||
imgtoolerr_t (*create)(imgtool::image *, imgtool::stream *, util::option_resolution *);
|
||||
imgtoolerr_t (*open)(imgtool::image *image, imgtool::stream *f);
|
||||
|
||||
fimg = (struct imgtool_floppy_image *) image->extra_bytes();
|
||||
imgclass = &image->module().imgclass;
|
||||
format = (const struct FloppyFormat *) imgclass->derived_param;
|
||||
create = (imgtoolerr_t (*)(imgtool::image *, imgtool_stream *, util::option_resolution *)) imgtool_get_info_ptr(imgclass, IMGTOOLINFO_PTR_FLOPPY_CREATE);
|
||||
open = (imgtoolerr_t (*)(imgtool::image *, imgtool_stream *)) imgtool_get_info_ptr(imgclass, IMGTOOLINFO_PTR_FLOPPY_OPEN);
|
||||
create = (imgtoolerr_t (*)(imgtool::image *, imgtool::stream *, util::option_resolution *)) imgtool_get_info_ptr(imgclass, IMGTOOLINFO_PTR_FLOPPY_CREATE);
|
||||
open = (imgtoolerr_t (*)(imgtool::image *, imgtool::stream *)) imgtool_get_info_ptr(imgclass, IMGTOOLINFO_PTR_FLOPPY_OPEN);
|
||||
|
||||
/* open up the floppy */
|
||||
ferr = floppy_create(f, &imgtool_ioprocs, format, opts, &fimg->floppy);
|
||||
ferr = floppy_create(&f, &imgtool_ioprocs, format, opts, &fimg->floppy);
|
||||
if (ferr)
|
||||
{
|
||||
err = imgtool_floppy_error(ferr);
|
||||
@ -305,7 +305,7 @@ floppy_image_legacy *imgtool_floppy(imgtool::image *img)
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t imgtool_floppy_transfer_sector_tofrom_stream(imgtool::image *img, int head, int track, int sector, int offset, size_t length, imgtool_stream *f, int direction)
|
||||
static imgtoolerr_t imgtool_floppy_transfer_sector_tofrom_stream(imgtool::image *img, int head, int track, int sector, int offset, size_t length, imgtool::stream &f, int direction)
|
||||
{
|
||||
floperr_t err;
|
||||
floppy_image_legacy *floppy;
|
||||
@ -320,11 +320,11 @@ static imgtoolerr_t imgtool_floppy_transfer_sector_tofrom_stream(imgtool::image
|
||||
err = floppy_read_sector(floppy, head, track, sector, offset, &buffer[0], length);
|
||||
if (err)
|
||||
goto done;
|
||||
stream_write(f, &buffer[0], length);
|
||||
f.write(&buffer[0], length);
|
||||
}
|
||||
else
|
||||
{
|
||||
stream_read(f, &buffer[0], length);
|
||||
f.read(&buffer[0], length);
|
||||
err = floppy_write_sector(floppy, head, track, sector, offset, &buffer[0], length, 0); /* TODO: pass ddam argument from imgtool */
|
||||
if (err)
|
||||
goto done;
|
||||
@ -338,14 +338,14 @@ done:
|
||||
|
||||
|
||||
|
||||
imgtoolerr_t imgtool_floppy_read_sector_to_stream(imgtool::image *img, int head, int track, int sector, int offset, size_t length, imgtool_stream *f)
|
||||
imgtoolerr_t imgtool_floppy_read_sector_to_stream(imgtool::image *img, int head, int track, int sector, int offset, size_t length, imgtool::stream &f)
|
||||
{
|
||||
return imgtool_floppy_transfer_sector_tofrom_stream(img, head, track, sector, offset, length, f, 1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
imgtoolerr_t imgtool_floppy_write_sector_from_stream(imgtool::image *img, int head, int track, int sector, int offset, size_t length, imgtool_stream *f)
|
||||
imgtoolerr_t imgtool_floppy_write_sector_from_stream(imgtool::image *img, int head, int track, int sector, int offset, size_t length, imgtool::stream &f)
|
||||
{
|
||||
return imgtool_floppy_transfer_sector_tofrom_stream(img, head, track, sector, offset, length, f, 0);
|
||||
}
|
||||
|
@ -32,8 +32,8 @@ int imgtool_floppy_make_class(int index, imgtool_class *imgclass);
|
||||
floppy_image_legacy *imgtool_floppy(imgtool::image *img);
|
||||
imgtoolerr_t imgtool_floppy_error(floperr_t err);
|
||||
|
||||
imgtoolerr_t imgtool_floppy_read_sector_to_stream(imgtool::image *img, int head, int track, int sector, int offset, size_t length, imgtool_stream *f);
|
||||
imgtoolerr_t imgtool_floppy_write_sector_from_stream(imgtool::image *img, int head, int track, int sector, int offset, size_t length, imgtool_stream *f);
|
||||
imgtoolerr_t imgtool_floppy_read_sector_to_stream(imgtool::image *img, int head, int track, int sector, int offset, size_t length, imgtool::stream &f);
|
||||
imgtoolerr_t imgtool_floppy_write_sector_from_stream(imgtool::image *img, int head, int track, int sector, int offset, size_t length, imgtool::stream &f);
|
||||
|
||||
|
||||
void *imgtool_floppy_extrabytes(imgtool::image *img);
|
||||
|
@ -46,7 +46,7 @@ static imgtoolerr_t map_chd_error(chd_error chderr)
|
||||
|
||||
Create a MAME HD image
|
||||
*/
|
||||
imgtoolerr_t imghd_create(imgtool_stream *stream, UINT32 hunksize, UINT32 cylinders, UINT32 heads, UINT32 sectors, UINT32 seclen)
|
||||
imgtoolerr_t imghd_create(imgtool::stream &stream, UINT32 hunksize, UINT32 cylinders, UINT32 heads, UINT32 sectors, UINT32 seclen)
|
||||
{
|
||||
imgtoolerr_t err = IMGTOOLERR_SUCCESS;
|
||||
chd_file chd;
|
||||
@ -63,7 +63,7 @@ imgtoolerr_t imghd_create(imgtool_stream *stream, UINT32 hunksize, UINT32 cylind
|
||||
hunksize = 1024; /* default value */
|
||||
|
||||
/* bail if we are read only */
|
||||
if (stream_isreadonly(stream))
|
||||
if (stream.is_read_only())
|
||||
{
|
||||
err = IMGTOOLERR_READONLY;
|
||||
return err;
|
||||
@ -73,7 +73,7 @@ imgtoolerr_t imghd_create(imgtool_stream *stream, UINT32 hunksize, UINT32 cylind
|
||||
const UINT64 logicalbytes = (UINT64)cylinders * heads * sectors * seclen;
|
||||
|
||||
/* create the new hard drive */
|
||||
rc = chd.create(*stream_core_file(stream), logicalbytes, hunksize, seclen, compression);
|
||||
rc = chd.create(*stream.core_file(), logicalbytes, hunksize, seclen, compression);
|
||||
if (rc != CHDERR_NONE)
|
||||
{
|
||||
err = map_chd_error(rc);
|
||||
@ -81,7 +81,7 @@ imgtoolerr_t imghd_create(imgtool_stream *stream, UINT32 hunksize, UINT32 cylind
|
||||
}
|
||||
|
||||
/* open the new hard drive */
|
||||
rc = chd.open(*stream_core_file(stream));
|
||||
rc = chd.open(*stream.core_file());
|
||||
|
||||
if (rc != CHDERR_NONE)
|
||||
{
|
||||
@ -125,7 +125,7 @@ imgtoolerr_t imghd_create(imgtool_stream *stream, UINT32 hunksize, UINT32 cylind
|
||||
|
||||
Open stream as a MAME HD image
|
||||
*/
|
||||
imgtoolerr_t imghd_open(imgtool_stream *stream, struct mess_hard_disk_file *hard_disk)
|
||||
imgtoolerr_t imghd_open(imgtool::stream &stream, struct mess_hard_disk_file *hard_disk)
|
||||
{
|
||||
chd_error chderr;
|
||||
imgtoolerr_t err = IMGTOOLERR_SUCCESS;
|
||||
@ -133,7 +133,7 @@ imgtoolerr_t imghd_open(imgtool_stream *stream, struct mess_hard_disk_file *hard
|
||||
hard_disk->hard_disk = nullptr;
|
||||
hard_disk->chd = nullptr;
|
||||
|
||||
chderr = hard_disk->chd->open(*stream_core_file(stream), stream_isreadonly(stream));
|
||||
chderr = hard_disk->chd->open(*stream.core_file(), stream.is_read_only());
|
||||
if (chderr)
|
||||
{
|
||||
err = map_chd_error(chderr);
|
||||
@ -146,7 +146,7 @@ imgtoolerr_t imghd_open(imgtool_stream *stream, struct mess_hard_disk_file *hard
|
||||
err = IMGTOOLERR_UNEXPECTED;
|
||||
goto done;
|
||||
}
|
||||
hard_disk->stream = stream;
|
||||
hard_disk->stream = &stream;
|
||||
|
||||
done:
|
||||
if (err)
|
||||
@ -169,7 +169,10 @@ void imghd_close(struct mess_hard_disk_file *disk)
|
||||
disk->hard_disk = nullptr;
|
||||
}
|
||||
if (disk->stream)
|
||||
stream_close(disk->stream);
|
||||
{
|
||||
delete disk->stream;
|
||||
disk->stream = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -215,7 +218,7 @@ const hard_disk_info *imghd_get_header(struct mess_hard_disk_file *disk)
|
||||
}
|
||||
|
||||
|
||||
static imgtoolerr_t mess_hd_image_create(imgtool::image *image, imgtool_stream *f, util::option_resolution *createoptions);
|
||||
static imgtoolerr_t mess_hd_image_create(imgtool::image *image, imgtool::stream &f, util::option_resolution *createoptions);
|
||||
|
||||
enum
|
||||
{
|
||||
@ -254,7 +257,7 @@ void hd_get_info(const imgtool_class *imgclass, UINT32 state, union imgtoolinfo
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t mess_hd_image_create(imgtool::image *image, imgtool_stream *f, util::option_resolution *createoptions)
|
||||
static imgtoolerr_t mess_hd_image_create(imgtool::image *image, imgtool::stream &f, util::option_resolution *createoptions)
|
||||
{
|
||||
UINT32 blocksize, cylinders, heads, sectors, seclen;
|
||||
|
||||
|
@ -15,17 +15,17 @@
|
||||
|
||||
struct mess_hard_disk_file
|
||||
{
|
||||
imgtool_stream *stream;
|
||||
imgtool::stream *stream;
|
||||
hard_disk_file *hard_disk;
|
||||
chd_file *chd;
|
||||
};
|
||||
|
||||
|
||||
/* create a new hard disk */
|
||||
imgtoolerr_t imghd_create(imgtool_stream *stream, UINT32 blocksize, UINT32 cylinders, UINT32 heads, UINT32 sectors, UINT32 seclen);
|
||||
imgtoolerr_t imghd_create(imgtool::stream &stream, UINT32 blocksize, UINT32 cylinders, UINT32 heads, UINT32 sectors, UINT32 seclen);
|
||||
|
||||
/* opens a hard disk given an Imgtool stream */
|
||||
imgtoolerr_t imghd_open(imgtool_stream *stream, struct mess_hard_disk_file *hard_disk);
|
||||
imgtoolerr_t imghd_open(imgtool::stream &stream, struct mess_hard_disk_file *hard_disk);
|
||||
|
||||
/* close a hard disk */
|
||||
void imghd_close(struct mess_hard_disk_file *disk);
|
||||
|
@ -573,8 +573,8 @@ imgtool::partition::partition(imgtool::image &image, imgtool_class &imgclass, in
|
||||
m_next_enum = (imgtoolerr_t(*)(imgtool::directory *, imgtool_dirent *)) imgtool_get_info_fct(&imgclass, IMGTOOLINFO_PTR_NEXT_ENUM);
|
||||
m_close_enum = (void(*)(imgtool::directory *)) imgtool_get_info_fct(&imgclass, IMGTOOLINFO_PTR_CLOSE_ENUM);
|
||||
m_free_space = (imgtoolerr_t(*)(imgtool::partition *, UINT64 *)) imgtool_get_info_fct(&imgclass, IMGTOOLINFO_PTR_FREE_SPACE);
|
||||
m_read_file = (imgtoolerr_t(*)(imgtool::partition *, const char *, const char *, imgtool_stream *)) imgtool_get_info_fct(&imgclass, IMGTOOLINFO_PTR_READ_FILE);
|
||||
m_write_file = (imgtoolerr_t(*)(imgtool::partition *, const char *, const char *, imgtool_stream *, util::option_resolution *)) imgtool_get_info_fct(&imgclass, IMGTOOLINFO_PTR_WRITE_FILE);
|
||||
m_read_file = (imgtoolerr_t(*)(imgtool::partition *, const char *, const char *, imgtool::stream &)) imgtool_get_info_fct(&imgclass, IMGTOOLINFO_PTR_READ_FILE);
|
||||
m_write_file = (imgtoolerr_t(*)(imgtool::partition *, const char *, const char *, imgtool::stream &, util::option_resolution *)) imgtool_get_info_fct(&imgclass, IMGTOOLINFO_PTR_WRITE_FILE);
|
||||
m_delete_file = (imgtoolerr_t(*)(imgtool::partition *, const char *)) imgtool_get_info_fct(&imgclass, IMGTOOLINFO_PTR_DELETE_FILE);
|
||||
m_list_forks = (imgtoolerr_t(*)(imgtool::partition *, const char *, imgtool_forkent *, size_t)) imgtool_get_info_fct(&imgclass, IMGTOOLINFO_PTR_LIST_FORKS);
|
||||
m_create_dir = (imgtoolerr_t(*)(imgtool::partition *, const char *)) imgtool_get_info_fct(&imgclass, IMGTOOLINFO_PTR_CREATE_DIR);
|
||||
@ -896,7 +896,7 @@ imgtoolerr_t imgtool::image::internal_open(const imgtool_module *module, const c
|
||||
int read_or_write, util::option_resolution *createopts, imgtool::image::ptr &outimg)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
imgtool_stream *f = nullptr;
|
||||
imgtool::stream *f = nullptr;
|
||||
imgtool::image::ptr image;
|
||||
object_pool *pool = nullptr;
|
||||
void *extra_bytes = nullptr;
|
||||
@ -919,7 +919,7 @@ imgtoolerr_t imgtool::image::internal_open(const imgtool_module *module, const c
|
||||
}
|
||||
|
||||
// open the stream
|
||||
f = stream_open(fname, read_or_write);
|
||||
f = imgtool::stream::open(fname, read_or_write);
|
||||
if (!f)
|
||||
{
|
||||
err = (imgtoolerr_t)(IMGTOOLERR_FILENOTFOUND | IMGTOOLERR_SRC_IMAGEFILE);
|
||||
@ -966,7 +966,7 @@ imgtoolerr_t imgtool::image::internal_open(const imgtool_module *module, const c
|
||||
|
||||
done:
|
||||
if (err && f)
|
||||
stream_close(f);
|
||||
delete f;
|
||||
|
||||
if (pool)
|
||||
pool_free_lib(pool);
|
||||
@ -1502,12 +1502,12 @@ done:
|
||||
//-------------------------------------------------
|
||||
|
||||
imgtoolerr_t imgtool::partition::suggest_file_filters(const char *path,
|
||||
imgtool_stream *stream, imgtool_transfer_suggestion *suggestions, size_t suggestions_length)
|
||||
imgtool::stream *stream, imgtool_transfer_suggestion *suggestions, size_t suggestions_length)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
int i, j;
|
||||
char *alloc_path = nullptr;
|
||||
imgtoolerr_t (*check_stream)(imgtool_stream *stream, imgtool_suggestion_viability_t *viability);
|
||||
imgtoolerr_t (*check_stream)(imgtool::stream &stream, imgtool_suggestion_viability_t *viability);
|
||||
size_t position;
|
||||
|
||||
// clear out buffer
|
||||
@ -1537,12 +1537,12 @@ imgtoolerr_t imgtool::partition::suggest_file_filters(const char *path,
|
||||
{
|
||||
if (stream && suggestions[i].filter)
|
||||
{
|
||||
check_stream = (imgtoolerr_t (*)(imgtool_stream *, imgtool_suggestion_viability_t *)) filter_get_info_fct(suggestions[i].filter, FILTINFO_PTR_CHECKSTREAM);
|
||||
check_stream = (imgtoolerr_t (*)(imgtool::stream &, imgtool_suggestion_viability_t *)) filter_get_info_fct(suggestions[i].filter, FILTINFO_PTR_CHECKSTREAM);
|
||||
if (check_stream)
|
||||
{
|
||||
position = stream_tell(stream);
|
||||
err = check_stream(stream, &suggestions[i].viability);
|
||||
stream_seek(stream, position, SEEK_SET);
|
||||
position = stream->tell();
|
||||
err = check_stream(*stream, &suggestions[i].viability);
|
||||
stream->seek(position, SEEK_SET);
|
||||
if (err)
|
||||
goto done;
|
||||
}
|
||||
@ -1697,7 +1697,7 @@ imgtoolerr_t imgtool::partition::get_free_space(UINT64 &sz)
|
||||
// from a file on a partition with a stream
|
||||
//-------------------------------------------------
|
||||
|
||||
imgtoolerr_t imgtool::partition::read_file(const char *filename, const char *fork, imgtool_stream *destf, filter_getinfoproc filter)
|
||||
imgtoolerr_t imgtool::partition::read_file(const char *filename, const char *fork, imgtool::stream &destf, filter_getinfoproc filter)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
char *alloc_path = nullptr;
|
||||
@ -1758,7 +1758,7 @@ done:
|
||||
// to a new file on an image with a stream
|
||||
//-------------------------------------------------
|
||||
|
||||
imgtoolerr_t imgtool::partition::write_file(const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *opts, filter_getinfoproc filter)
|
||||
imgtoolerr_t imgtool::partition::write_file(const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts, filter_getinfoproc filter)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
char *buf = nullptr;
|
||||
@ -1842,7 +1842,7 @@ imgtoolerr_t imgtool::partition::write_file(const char *filename, const char *fo
|
||||
goto done;
|
||||
}
|
||||
|
||||
file_size = stream_size(sourcef);
|
||||
file_size = sourcef.size();
|
||||
|
||||
if (file_size > free_space)
|
||||
{
|
||||
@ -1878,7 +1878,7 @@ imgtoolerr_t imgtool::partition::get_file(const char *filename, const char *fork
|
||||
const char *dest, filter_getinfoproc filter)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
imgtool_stream *f;
|
||||
imgtool::stream *f;
|
||||
char *new_fname = nullptr;
|
||||
char *alloc_dest = nullptr;
|
||||
const char *filter_extension = nullptr;
|
||||
@ -1907,7 +1907,7 @@ imgtoolerr_t imgtool::partition::get_file(const char *filename, const char *fork
|
||||
}
|
||||
}
|
||||
|
||||
f = stream_open(dest, OSD_FOPEN_WRITE);
|
||||
f = imgtool::stream::open(dest, OSD_FOPEN_WRITE);
|
||||
if (!f)
|
||||
{
|
||||
err = (imgtoolerr_t)(IMGTOOLERR_FILENOTFOUND | IMGTOOLERR_SRC_NATIVEFILE);
|
||||
@ -1921,13 +1921,13 @@ imgtoolerr_t imgtool::partition::get_file(const char *filename, const char *fork
|
||||
goto done;
|
||||
}
|
||||
|
||||
err = read_file(new_fname, fork, f, filter);
|
||||
err = read_file(new_fname, fork, *f, filter);
|
||||
if (err)
|
||||
goto done;
|
||||
|
||||
done:
|
||||
if (f != nullptr)
|
||||
stream_close(f);
|
||||
delete f;
|
||||
if (alloc_dest != nullptr)
|
||||
free(alloc_dest);
|
||||
if (new_fname != nullptr)
|
||||
@ -1945,7 +1945,7 @@ imgtoolerr_t imgtool::partition::put_file(const char *newfname, const char *fork
|
||||
const char *source, util::option_resolution *opts, filter_getinfoproc filter)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
imgtool_stream *f = nullptr;
|
||||
imgtool::stream *f = nullptr;
|
||||
imgtool_charset charset;
|
||||
char *alloc_newfname = nullptr;
|
||||
std::string basename;
|
||||
@ -1970,16 +1970,16 @@ imgtoolerr_t imgtool::partition::put_file(const char *newfname, const char *fork
|
||||
newfname = alloc_newfname;
|
||||
}
|
||||
|
||||
f = stream_open(source, OSD_FOPEN_READ);
|
||||
f = imgtool::stream::open(source, OSD_FOPEN_READ);
|
||||
if (f)
|
||||
err = write_file(newfname, fork, f, opts, filter);
|
||||
err = write_file(newfname, fork, *f, opts, filter);
|
||||
else
|
||||
err = (imgtoolerr_t)(IMGTOOLERR_FILENOTFOUND | IMGTOOLERR_SRC_NATIVEFILE);
|
||||
|
||||
done:
|
||||
/* clean up */
|
||||
if (f != nullptr)
|
||||
stream_close(f);
|
||||
delete f;
|
||||
if (alloc_newfname != nullptr)
|
||||
osd_free(alloc_newfname);
|
||||
return err;
|
||||
|
@ -153,8 +153,8 @@ namespace imgtool
|
||||
imgtoolerr_t get_directory_entry(const char *path, int index, imgtool_dirent &ent);
|
||||
imgtoolerr_t get_file_size(const char *filename, UINT64 &filesize);
|
||||
imgtoolerr_t get_free_space(UINT64 &sz);
|
||||
imgtoolerr_t read_file(const char *filename, const char *fork, imgtool_stream *destf, filter_getinfoproc filter);
|
||||
imgtoolerr_t write_file(const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *resolution, filter_getinfoproc filter);
|
||||
imgtoolerr_t read_file(const char *filename, const char *fork, imgtool::stream &destf, filter_getinfoproc filter);
|
||||
imgtoolerr_t write_file(const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *resolution, filter_getinfoproc filter);
|
||||
imgtoolerr_t get_file(const char *filename, const char *fork, const char *dest, filter_getinfoproc filter);
|
||||
imgtoolerr_t put_file(const char *newfname, const char *fork, const char *source, util::option_resolution *opts, filter_getinfoproc filter);
|
||||
imgtoolerr_t delete_file(const char *fname);
|
||||
@ -168,7 +168,7 @@ namespace imgtool
|
||||
imgtoolerr_t put_file_attribute(const char *path, UINT32 attr, const imgtool_attribute &value);
|
||||
void get_attribute_name(UINT32 attribute, const imgtool_attribute *attr_value, char *buffer, size_t buffer_len);
|
||||
imgtoolerr_t get_icon_info(const char *path, imgtool_iconinfo *iconinfo);
|
||||
imgtoolerr_t suggest_file_filters(const char *path, imgtool_stream *stream, imgtool_transfer_suggestion *suggestions, size_t suggestions_length);
|
||||
imgtoolerr_t suggest_file_filters(const char *path, imgtool::stream *stream, imgtool_transfer_suggestion *suggestions, size_t suggestions_length);
|
||||
imgtoolerr_t get_block_size(UINT32 &length);
|
||||
imgtoolerr_t read_block(UINT64 block, void *buffer);
|
||||
imgtoolerr_t write_block(UINT64 block, const void *buffer);
|
||||
@ -206,8 +206,8 @@ namespace imgtool
|
||||
imgtoolerr_t(*m_next_enum) (imgtool::directory *enumeration, imgtool_dirent *ent);
|
||||
void(*m_close_enum) (imgtool::directory *enumeration);
|
||||
imgtoolerr_t(*m_free_space) (imgtool::partition *partition, UINT64 *size);
|
||||
imgtoolerr_t(*m_read_file) (imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf);
|
||||
imgtoolerr_t(*m_write_file) (imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *opts);
|
||||
imgtoolerr_t(*m_read_file) (imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf);
|
||||
imgtoolerr_t(*m_write_file) (imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts);
|
||||
imgtoolerr_t(*m_delete_file) (imgtool::partition *partition, const char *filename);
|
||||
imgtoolerr_t(*m_list_forks) (imgtool::partition *partition, const char *path, imgtool_forkent *ents, size_t len);
|
||||
imgtoolerr_t(*m_create_dir) (imgtool::partition *partition, const char *path);
|
||||
|
@ -69,8 +69,8 @@ void library::add_class(const imgtool_class *imgclass)
|
||||
module->tracks_are_called_cylinders = imgtool_get_info_int(imgclass, IMGTOOLINFO_INT_TRACKS_ARE_CALLED_CYLINDERS) ? 1 : 0;
|
||||
module->writing_untested = imgtool_get_info_int(imgclass, IMGTOOLINFO_INT_WRITING_UNTESTED) ? 1 : 0;
|
||||
module->creation_untested = imgtool_get_info_int(imgclass, IMGTOOLINFO_INT_CREATION_UNTESTED) ? 1 : 0;
|
||||
module->open = (imgtoolerr_t (*)(imgtool::image *, imgtool_stream *)) imgtool_get_info_fct(imgclass, IMGTOOLINFO_PTR_OPEN);
|
||||
module->create = (imgtoolerr_t (*)(imgtool::image *, imgtool_stream *, util::option_resolution *)) imgtool_get_info_fct(imgclass, IMGTOOLINFO_PTR_CREATE);
|
||||
module->open = (imgtoolerr_t (*)(imgtool::image *, imgtool::stream *)) imgtool_get_info_fct(imgclass, IMGTOOLINFO_PTR_OPEN);
|
||||
module->create = (imgtoolerr_t (*)(imgtool::image *, imgtool::stream *, util::option_resolution *)) imgtool_get_info_fct(imgclass, IMGTOOLINFO_PTR_CREATE);
|
||||
module->close = (void (*)(imgtool::image *)) imgtool_get_info_fct(imgclass, IMGTOOLINFO_PTR_CLOSE);
|
||||
module->info = (void (*)(imgtool::image *, char *, size_t)) imgtool_get_info_fct(imgclass, IMGTOOLINFO_PTR_INFO);
|
||||
module->read_sector = (imgtoolerr_t (*)(imgtool::image *, UINT32, UINT32, UINT32, std::vector<UINT8> &)) imgtool_get_info_fct(imgclass, IMGTOOLINFO_PTR_READ_SECTOR);
|
||||
|
@ -48,9 +48,9 @@ union filterinfo
|
||||
void * f; /* generic function pointers */
|
||||
const char *s; /* generic strings */
|
||||
|
||||
imgtoolerr_t (*read_file)(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf);
|
||||
imgtoolerr_t (*write_file)(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *opts);
|
||||
imgtoolerr_t (*check_stream)(imgtool_stream *stream, imgtool_suggestion_viability_t *viability);
|
||||
imgtoolerr_t (*read_file)(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf);
|
||||
imgtoolerr_t (*write_file)(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts);
|
||||
imgtoolerr_t (*check_stream)(imgtool::stream &stream, imgtool_suggestion_viability_t *viability);
|
||||
};
|
||||
|
||||
typedef void (*filter_getinfoproc)(UINT32 state, union filterinfo *info);
|
||||
@ -254,9 +254,9 @@ union imgtoolinfo
|
||||
void * f; /* generic function pointers */
|
||||
char * s; /* generic strings */
|
||||
|
||||
imgtoolerr_t (*open) (imgtool::image *image, imgtool_stream *stream);
|
||||
imgtoolerr_t (*open) (imgtool::image *image, imgtool::stream &stream);
|
||||
void (*close) (imgtool::image *image);
|
||||
imgtoolerr_t (*create) (imgtool::image *image, imgtool_stream *stream, util::option_resolution *opts);
|
||||
imgtoolerr_t (*create) (imgtool::image *image, imgtool::stream &stream, util::option_resolution *opts);
|
||||
imgtoolerr_t (*create_partition) (imgtool::image *image, UINT64 first_block, UINT64 block_count);
|
||||
void (*info) (imgtool::image *image, char *string, size_t len);
|
||||
imgtoolerr_t (*begin_enum) (imgtool::directory *enumeration, const char *path);
|
||||
@ -264,8 +264,8 @@ union imgtoolinfo
|
||||
void (*close_enum) (imgtool::directory *enumeration);
|
||||
imgtoolerr_t (*open_partition) (imgtool::partition *partition, UINT64 first_block, UINT64 block_count);
|
||||
imgtoolerr_t (*free_space) (imgtool::partition *partition, UINT64 *size);
|
||||
imgtoolerr_t (*read_file) (imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf);
|
||||
imgtoolerr_t (*write_file) (imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *opts);
|
||||
imgtoolerr_t (*read_file) (imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf);
|
||||
imgtoolerr_t (*write_file) (imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts);
|
||||
imgtoolerr_t (*delete_file) (imgtool::partition *partition, const char *filename);
|
||||
imgtoolerr_t (*list_forks) (imgtool::partition *partition, const char *path, imgtool_forkent *ents, size_t len);
|
||||
imgtoolerr_t (*create_dir) (imgtool::partition *partition, const char *path);
|
||||
@ -347,10 +347,10 @@ struct imgtool_module
|
||||
unsigned int writing_untested : 1; /* used when we support writing, but not in main build */
|
||||
unsigned int creation_untested : 1; /* used when we support creation, but not in main build */
|
||||
|
||||
imgtoolerr_t (*open) (imgtool::image *image, imgtool_stream *f);
|
||||
imgtoolerr_t (*open) (imgtool::image *image, imgtool::stream *f);
|
||||
void (*close) (imgtool::image *image);
|
||||
void (*info) (imgtool::image *image, char *string, size_t len);
|
||||
imgtoolerr_t (*create) (imgtool::image *image, imgtool_stream *f, util::option_resolution *opts);
|
||||
imgtoolerr_t (*create) (imgtool::image *image, imgtool::stream *f, util::option_resolution *opts);
|
||||
imgtoolerr_t (*get_geometry) (imgtool::image *image, UINT32 *track, UINT32 *heads, UINT32 *sectors);
|
||||
imgtoolerr_t (*read_sector) (imgtool::image *image, UINT32 track, UINT32 head, UINT32 sector, std::vector<UINT8> &buffer);
|
||||
imgtoolerr_t (*write_sector) (imgtool::image *image, UINT32 track, UINT32 head, UINT32 sector, const void *buffer, size_t len);
|
||||
|
@ -587,7 +587,7 @@ static int cmd_readsector(const struct command *c, int argc, char *argv[])
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
std::unique_ptr<imgtool::image> img;
|
||||
imgtool_stream *stream = nullptr;
|
||||
imgtool::stream *stream = nullptr;
|
||||
std::vector<UINT8> buffer;
|
||||
UINT32 track, head, sector;
|
||||
|
||||
@ -604,18 +604,18 @@ static int cmd_readsector(const struct command *c, int argc, char *argv[])
|
||||
if (err)
|
||||
goto done;
|
||||
|
||||
stream = stream_open(argv[5], OSD_FOPEN_WRITE);
|
||||
stream = imgtool::stream::open(argv[5], OSD_FOPEN_WRITE);
|
||||
if (!stream)
|
||||
{
|
||||
err = (imgtoolerr_t)(IMGTOOLERR_FILENOTFOUND | IMGTOOLERR_SRC_NATIVEFILE);
|
||||
goto done;
|
||||
}
|
||||
|
||||
stream_write(stream, &buffer[0], buffer.size());
|
||||
stream->write(&buffer[0], buffer.size());
|
||||
|
||||
done:
|
||||
if (stream)
|
||||
stream_close(stream);
|
||||
delete stream;
|
||||
if (err)
|
||||
reporterror(err, c, argv[0], argv[1], nullptr, nullptr, nullptr);
|
||||
return err ? -1 : 0;
|
||||
@ -627,7 +627,7 @@ static int cmd_writesector(const struct command *c, int argc, char *argv[])
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
std::unique_ptr<imgtool::image> img;
|
||||
imgtool_stream *stream = nullptr;
|
||||
imgtool::stream *stream = nullptr;
|
||||
dynamic_buffer buffer;
|
||||
UINT32 size, track, head, sector;
|
||||
|
||||
@ -640,18 +640,18 @@ static int cmd_writesector(const struct command *c, int argc, char *argv[])
|
||||
head = atoi(argv[3]);
|
||||
sector = atoi(argv[4]);
|
||||
|
||||
stream = stream_open(argv[5], OSD_FOPEN_READ);
|
||||
stream = imgtool::stream::open(argv[5], OSD_FOPEN_READ);
|
||||
if (!stream)
|
||||
{
|
||||
err = (imgtoolerr_t)(IMGTOOLERR_FILENOTFOUND | IMGTOOLERR_SRC_NATIVEFILE);
|
||||
goto done;
|
||||
}
|
||||
|
||||
size = (UINT32) stream_size(stream);
|
||||
size = (UINT32) stream->size();
|
||||
|
||||
buffer.resize(size);
|
||||
|
||||
stream_read(stream, &buffer[0], size);
|
||||
stream->read(&buffer[0], size);
|
||||
|
||||
err = img->write_sector(track, head, sector, &buffer[0], size);
|
||||
if (err)
|
||||
@ -659,7 +659,7 @@ static int cmd_writesector(const struct command *c, int argc, char *argv[])
|
||||
|
||||
done:
|
||||
if (stream)
|
||||
stream_close(stream);
|
||||
delete stream;
|
||||
if (err)
|
||||
reporterror(err, c, argv[0], argv[1], nullptr, nullptr, nullptr);
|
||||
return err ? -1 : 0;
|
||||
|
@ -209,7 +209,7 @@ struct softlink_block
|
||||
/* Basic Amiga floppy disk image info */
|
||||
struct amiga_floppy
|
||||
{
|
||||
imgtool_stream *stream;
|
||||
imgtool::stream *stream;
|
||||
UINT8 sectors;
|
||||
};
|
||||
|
||||
@ -1567,7 +1567,7 @@ static imgtoolerr_t checkdir(imgtool::image *img, const char *path, int parent)
|
||||
|
||||
|
||||
/* Writes the file data from the specified block into the stream */
|
||||
static imgtoolerr_t write_file_block_data(imgtool::image *img, int block, int size, imgtool_stream *destf)
|
||||
static imgtoolerr_t write_file_block_data(imgtool::image *img, int block, int size, imgtool::stream &destf)
|
||||
{
|
||||
imgtoolerr_t ret;
|
||||
UINT8 buffer[BSIZE];
|
||||
@ -1606,7 +1606,7 @@ static imgtoolerr_t write_file_block_data(imgtool::image *img, int block, int si
|
||||
}
|
||||
|
||||
/* Write data to stream */
|
||||
if (stream_write (destf, buffer, size) != size)
|
||||
if (destf.write(buffer, size) != size)
|
||||
{
|
||||
return IMGTOOLERR_WRITEERROR;
|
||||
}
|
||||
@ -1615,7 +1615,7 @@ static imgtoolerr_t write_file_block_data(imgtool::image *img, int block, int si
|
||||
}
|
||||
|
||||
|
||||
static imgtoolerr_t walk_data_block_ptr(imgtool::image *img, UINT32 *ptr, int *filesize, imgtool_stream *destf, int write)
|
||||
static imgtoolerr_t walk_data_block_ptr(imgtool::image *img, UINT32 *ptr, int *filesize, imgtool::stream *destf, bool write)
|
||||
{
|
||||
int i, blocksize = is_ffs(img) ? BSIZE : BSIZE-24;
|
||||
imgtoolerr_t ret;
|
||||
@ -1627,7 +1627,7 @@ static imgtoolerr_t walk_data_block_ptr(imgtool::image *img, UINT32 *ptr, int *f
|
||||
|
||||
if (write)
|
||||
{
|
||||
ret = write_file_block_data(img, ptr[i], bytes_left, destf);
|
||||
ret = write_file_block_data(img, ptr[i], bytes_left, *destf);
|
||||
if (ret) return ret;
|
||||
}
|
||||
else
|
||||
@ -1646,20 +1646,20 @@ static imgtoolerr_t walk_data_block_ptr(imgtool::image *img, UINT32 *ptr, int *f
|
||||
}
|
||||
|
||||
|
||||
static imgtoolerr_t write_data_block_ptr(imgtool::image *img, UINT32 *ptr, int *filesize, imgtool_stream *destf)
|
||||
static imgtoolerr_t write_data_block_ptr(imgtool::image *img, UINT32 *ptr, int *filesize, imgtool::stream &destf)
|
||||
{
|
||||
return walk_data_block_ptr(img, ptr, filesize, destf, TRUE);
|
||||
return walk_data_block_ptr(img, ptr, filesize, &destf, true);
|
||||
}
|
||||
|
||||
|
||||
/* Marks all blocks pointed to by the data block pointers as free */
|
||||
static imgtoolerr_t clear_data_block_ptr(imgtool::image *img, UINT32 *ptr, int *filesize)
|
||||
{
|
||||
return walk_data_block_ptr(img, ptr, filesize, NULL, FALSE);
|
||||
return walk_data_block_ptr(img, ptr, filesize, nullptr, false);
|
||||
}
|
||||
|
||||
|
||||
static imgtoolerr_t walk_file_ext_data(imgtool::image *img, int block, int *filesize, imgtool_stream *destf, int write)
|
||||
static imgtoolerr_t walk_file_ext_data(imgtool::image *img, int block, int *filesize, imgtool::stream *destf, int write)
|
||||
{
|
||||
file_ext_block file_ext;
|
||||
imgtoolerr_t ret;
|
||||
@ -1698,7 +1698,7 @@ static imgtoolerr_t walk_file_ext_data(imgtool::image *img, int block, int *file
|
||||
}
|
||||
|
||||
|
||||
static imgtoolerr_t write_file_ext_data(imgtool::image *img, int block, int *filesize, imgtool_stream *destf)
|
||||
static imgtoolerr_t write_file_ext_data(imgtool::image *img, int block, int *filesize, imgtool::stream *destf)
|
||||
{
|
||||
return walk_file_ext_data(img, block, filesize, destf, TRUE);
|
||||
}
|
||||
@ -1742,12 +1742,12 @@ static imgtoolerr_t update_disk_alteration_date(imgtool::image *img)
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
static imgtoolerr_t amiga_image_open(imgtool::image *img, imgtool_stream *stream)
|
||||
static imgtoolerr_t amiga_image_open(imgtool::image *img, imgtool::stream &stream)
|
||||
{
|
||||
amiga_floppy *f = (amiga_floppy *) img->extra_bytes();
|
||||
UINT64 size = stream_size(stream);
|
||||
UINT64 size = stream.size();
|
||||
|
||||
f->stream = stream;
|
||||
f->stream = &stream;
|
||||
f->sectors = size/BSIZE/80/2;
|
||||
|
||||
if (f->sectors != 11 && f->sectors != 22)
|
||||
@ -1801,15 +1801,15 @@ static imgtoolerr_t amiga_image_read_sector(imgtool::image* img, UINT32 track, U
|
||||
amiga_floppy *f = (amiga_floppy *) img->extra_bytes();
|
||||
|
||||
/* skip ahead to the area we want to read */
|
||||
stream_seek(f->stream, track * (head+1) * f->sectors * BSIZE + sector * BSIZE, SEEK_CUR);
|
||||
f->stream->seek(track * (head+1) * f->sectors * BSIZE + sector * BSIZE, SEEK_CUR);
|
||||
|
||||
if (stream_read(f->stream, buf, len) != len)
|
||||
if (f->stream->read(buf, len) != len)
|
||||
{
|
||||
return IMGTOOLERR_READERROR;
|
||||
}
|
||||
|
||||
/* reset stream */
|
||||
stream_seek(f->stream, 0, 0);
|
||||
f->stream->seek(0, 0);
|
||||
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
@ -1830,16 +1830,16 @@ static imgtoolerr_t amiga_image_write_sector(imgtool::image* img, UINT32 track,
|
||||
amiga_floppy *f = (amiga_floppy *) img->extra_bytes();
|
||||
|
||||
/* skip ahead to the area we want to write */
|
||||
stream_seek(f->stream, track * (head+1) * f->sectors * BSIZE + sector * BSIZE, SEEK_CUR);
|
||||
f->stream->seek(track * (head+1) * f->sectors * BSIZE + sector * BSIZE, SEEK_CUR);
|
||||
|
||||
/* write data */
|
||||
if (stream_write(f->stream, buf, len) != len)
|
||||
if (f->stream->write(buf, len) != len)
|
||||
{
|
||||
return IMGTOOLERR_WRITEERROR;
|
||||
}
|
||||
|
||||
/* reset stream */
|
||||
stream_seek(f->stream, 0, 0);
|
||||
f->stream->seek(0, 0);
|
||||
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
@ -2079,7 +2079,7 @@ static imgtoolerr_t amiga_image_freespace(imgtool::partition *partition, UINT64
|
||||
}
|
||||
|
||||
|
||||
static imgtoolerr_t amiga_image_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf)
|
||||
static imgtoolerr_t amiga_image_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
imgtool::image *img = &partition->image();
|
||||
imgtoolerr_t ret;
|
||||
@ -2105,7 +2105,7 @@ static imgtoolerr_t amiga_image_readfile(imgtool::partition *partition, const ch
|
||||
if (filesize == 0) return IMGTOOLERR_SUCCESS;
|
||||
|
||||
/* Phase 2: Follow file extension blocks */
|
||||
ret = write_file_ext_data(img, file.extension, &filesize, destf);
|
||||
ret = write_file_ext_data(img, file.extension, &filesize, &destf);
|
||||
if (ret) return ret;
|
||||
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
@ -2189,13 +2189,13 @@ static imgtoolerr_t amiga_image_deletefile(imgtool::partition *partition, const
|
||||
}
|
||||
|
||||
|
||||
static imgtoolerr_t amiga_image_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *opts)
|
||||
static imgtoolerr_t amiga_image_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts)
|
||||
{
|
||||
return IMGTOOLERR_UNIMPLEMENTED;
|
||||
}
|
||||
|
||||
|
||||
static imgtoolerr_t amiga_image_create(imgtool::image *img, imgtool_stream *stream, util::option_resolution *opts)
|
||||
static imgtoolerr_t amiga_image_create(imgtool::image *img, imgtool::stream &stream, util::option_resolution *opts)
|
||||
{
|
||||
amiga_floppy *f = (amiga_floppy *) img->extra_bytes();
|
||||
const std::string &dskname = opts->lookup_string('N');
|
||||
@ -2206,7 +2206,7 @@ static imgtoolerr_t amiga_image_create(imgtool::image *img, imgtool_stream *stre
|
||||
time_t now;
|
||||
int blocks;
|
||||
|
||||
f->stream = stream;
|
||||
f->stream = &stream;
|
||||
|
||||
switch (opts->lookup_int('S'))
|
||||
{
|
||||
|
@ -283,7 +283,7 @@ static void granule_location(imgtool::image *image, UINT8 granule, UINT8 *head,
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t transfer_granule(imgtool::image *img, UINT8 granule, int length, imgtool_stream *f, imgtoolerr_t (*proc)(imgtool::image *, int, int, int, int, size_t, imgtool_stream *))
|
||||
static imgtoolerr_t transfer_granule(imgtool::image *img, UINT8 granule, int length, imgtool::stream &f, imgtoolerr_t (*proc)(imgtool::image *, int, int, int, int, size_t, imgtool::stream &))
|
||||
{
|
||||
imgtoolerr_t err = IMGTOOLERR_SUCCESS;
|
||||
UINT8 head, track, sector;
|
||||
@ -294,14 +294,14 @@ static imgtoolerr_t transfer_granule(imgtool::image *img, UINT8 granule, int len
|
||||
}
|
||||
|
||||
|
||||
static imgtoolerr_t transfer_from_granule(imgtool::image *img, UINT8 granule, int length, imgtool_stream *destf)
|
||||
static imgtoolerr_t transfer_from_granule(imgtool::image *img, UINT8 granule, int length, imgtool::stream &destf)
|
||||
{
|
||||
return transfer_granule(img, granule, length, destf, imgtool_floppy_read_sector_to_stream);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t transfer_to_granule(imgtool::image *img, UINT8 granule, int length, imgtool_stream *sourcef)
|
||||
static imgtoolerr_t transfer_to_granule(imgtool::image *img, UINT8 granule, int length, imgtool::stream &sourcef)
|
||||
{
|
||||
return transfer_granule(img, granule, length, sourcef, imgtool_floppy_write_sector_from_stream);
|
||||
}
|
||||
@ -422,7 +422,7 @@ static imgtoolerr_t get_file_size(struct bml3_dirent *ent, imgtool::image *img,
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t process_bml3_file(struct bml3_dirent *ent, imgtool::image *img, imgtool_stream *destf, size_t *size)
|
||||
static imgtoolerr_t process_bml3_file(struct bml3_dirent *ent, imgtool::image *img, imgtool::stream *destf, size_t *size)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
size_t remaining_size, granule_size;
|
||||
@ -444,7 +444,7 @@ static imgtoolerr_t process_bml3_file(struct bml3_dirent *ent, imgtool::image *i
|
||||
for (int c = 0; c < granule_list.granule_count; c++) {
|
||||
if (granule_size >= remaining_size)
|
||||
granule_size = remaining_size;
|
||||
transfer_from_granule(img, granule_list.granules[c], granule_size, destf);
|
||||
transfer_from_granule(img, granule_list.granules[c], granule_size, *destf);
|
||||
remaining_size -= granule_size;
|
||||
}
|
||||
}
|
||||
@ -498,7 +498,7 @@ static imgtoolerr_t prepare_dirent(UINT8 variant, struct bml3_dirent *ent, const
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t bml3_diskimage_open(imgtool::image *image, imgtool_stream *stream)
|
||||
static imgtoolerr_t bml3_diskimage_open(imgtool::image *image, imgtool::stream &stream)
|
||||
{
|
||||
// imgtoolerr_t err;
|
||||
floperr_t ferr;
|
||||
@ -586,7 +586,7 @@ eof:
|
||||
else
|
||||
{
|
||||
/* Not the end of file */
|
||||
err = process_bml3_file(&rsent, image, NULL, &filesize);
|
||||
err = process_bml3_file(&rsent, image, nullptr, &filesize);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@ -673,18 +673,18 @@ static imgtoolerr_t delete_entry(imgtool::image *img, struct bml3_dirent *ent, i
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t bml3_diskimage_readfile(imgtool::partition *partition, const char *fname, const char *fork, imgtool_stream *destf)
|
||||
static imgtoolerr_t bml3_diskimage_readfile(imgtool::partition *partition, const char *fname, const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
struct bml3_dirent ent;
|
||||
size_t size;
|
||||
imgtool::image *img = &partition->image();
|
||||
|
||||
err = lookup_bml3_file(img, fname, &ent, NULL);
|
||||
err = lookup_bml3_file(img, fname, &ent, nullptr);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = process_bml3_file(&ent, img, destf, &size);
|
||||
err = process_bml3_file(&ent, img, &destf, &size);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@ -696,7 +696,7 @@ static imgtoolerr_t bml3_diskimage_readfile(imgtool::partition *partition, const
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t bml3_diskimage_writefile(imgtool::partition *partition, const char *fname, const char *fork, imgtool_stream *sourcef, util::option_resolution *writeoptions)
|
||||
static imgtoolerr_t bml3_diskimage_writefile(imgtool::partition *partition, const char *fname, const char *fork, imgtool::stream &sourcef, util::option_resolution *writeoptions)
|
||||
{
|
||||
floperr_t ferr;
|
||||
imgtoolerr_t err;
|
||||
@ -724,7 +724,7 @@ static imgtoolerr_t bml3_diskimage_writefile(imgtool::partition *partition, cons
|
||||
return err;
|
||||
|
||||
/* is there enough space? */
|
||||
sz = read_sz = stream_size(sourcef);
|
||||
sz = read_sz = sourcef.size();
|
||||
if (info->variant == 0) {
|
||||
// also need to write EOF
|
||||
sz++;
|
||||
|
@ -112,7 +112,7 @@ struct concept_dev_dir
|
||||
*/
|
||||
struct concept_image
|
||||
{
|
||||
imgtool_stream *file_handle; /* imgtool file handle */
|
||||
imgtool::stream *file_handle; /* imgtool file handle */
|
||||
concept_dev_dir dev_dir; /* cached copy of device directory */
|
||||
};
|
||||
|
||||
@ -126,18 +126,18 @@ struct concept_iterator
|
||||
};
|
||||
|
||||
|
||||
static imgtoolerr_t concept_image_init(imgtool::image *img, imgtool_stream *f);
|
||||
static imgtoolerr_t concept_image_init(imgtool::image *img, imgtool::stream &f);
|
||||
static void concept_image_exit(imgtool::image *img);
|
||||
static void concept_image_info(imgtool::image *img, char *string, size_t len);
|
||||
static imgtoolerr_t concept_image_beginenum(imgtool::directory *enumeration, const char *path);
|
||||
static imgtoolerr_t concept_image_nextenum(imgtool::directory *enumeration, imgtool_dirent *ent);
|
||||
static void concept_image_closeenum(imgtool::directory *enumeration);
|
||||
static imgtoolerr_t concept_image_freespace(imgtool::partition *partition, UINT64 *size);
|
||||
static imgtoolerr_t concept_image_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf);
|
||||
static imgtoolerr_t concept_image_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf);
|
||||
#if 0
|
||||
static imgtoolerr_t concept_image_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *writeoptions);
|
||||
static imgtoolerr_t concept_image_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream *sourcef, util::option_resolution *writeoptions);
|
||||
static imgtoolerr_t concept_image_deletefile(imgtool::partition *partition, const char *filename);
|
||||
static imgtoolerr_t concept_image_create(const imgtool_module *mod, imgtool_stream *f, util::option_resolution *createoptions);
|
||||
static imgtoolerr_t concept_image_create(const imgtool_module *mod, imgtool::stream *f, util::option_resolution *createoptions);
|
||||
#endif
|
||||
|
||||
void concept_get_info(const imgtool_class *imgclass, UINT32 state, union imgtoolinfo *info)
|
||||
@ -180,16 +180,16 @@ void concept_get_info(const imgtool_class *imgclass, UINT32 state, union imgtool
|
||||
|
||||
Return non-zero on error
|
||||
*/
|
||||
static int read_physical_record(imgtool_stream *file_handle, int secnum, void *dest)
|
||||
static int read_physical_record(imgtool::stream &file_handle, int secnum, void *dest)
|
||||
{
|
||||
int reply;
|
||||
|
||||
/* seek to sector */
|
||||
reply = stream_seek(file_handle, secnum*512, SEEK_SET);
|
||||
reply = file_handle.seek(secnum*512, SEEK_SET);
|
||||
if (reply)
|
||||
return 1;
|
||||
/* read it */
|
||||
reply = stream_read(file_handle, dest, 512);
|
||||
reply = file_handle.read(dest, 512);
|
||||
if (reply != 512)
|
||||
return 1;
|
||||
|
||||
@ -208,16 +208,16 @@ static int read_physical_record(imgtool_stream *file_handle, int secnum, void *d
|
||||
|
||||
Return non-zero on error
|
||||
*/
|
||||
static int write_physical_record(imgtool_stream *file_handle, int secnum, const void *src)
|
||||
static int write_physical_record(imgtool::stream *file_handle, int secnum, const void *src)
|
||||
{
|
||||
int reply;
|
||||
|
||||
/* seek to sector */
|
||||
reply = stream_seek(file_handle, secnum*512, SEEK_SET);
|
||||
reply = file_handle->seek(secnum*512, SEEK_SET);
|
||||
if (reply)
|
||||
return 1;
|
||||
/* read it */
|
||||
reply = stream_write(file_handle, src, 512);
|
||||
reply = file_handle->write(src, 512);
|
||||
if (reply != 512)
|
||||
return 1;
|
||||
|
||||
@ -260,14 +260,14 @@ static int get_catalog_entry(concept_image *image, const unsigned char *filename
|
||||
/*
|
||||
Open a file as a concept_image.
|
||||
*/
|
||||
static imgtoolerr_t concept_image_init(imgtool::image *img, imgtool_stream *f)
|
||||
static imgtoolerr_t concept_image_init(imgtool::image *img, imgtool::stream &f)
|
||||
{
|
||||
concept_image *image = (concept_image *) img->extra_bytes();
|
||||
int reply;
|
||||
int i;
|
||||
unsigned totphysrecs;
|
||||
|
||||
image->file_handle = f;
|
||||
image->file_handle = &f;
|
||||
|
||||
/* read device directory */
|
||||
for (i=0; i<4; i++)
|
||||
@ -283,7 +283,7 @@ static imgtoolerr_t concept_image_init(imgtool::image *img, imgtool_stream *f)
|
||||
|
||||
if ((get_UINT16xE(image->dev_dir.vol_hdr.disk_flipped, image->dev_dir.vol_hdr.first_block) != 0)
|
||||
|| (get_UINT16xE(image->dev_dir.vol_hdr.disk_flipped, image->dev_dir.vol_hdr.next_block) != 6)
|
||||
|| (totphysrecs < 6) /*|| (stream_size(f) != totphysrecs*512)*/
|
||||
|| (totphysrecs < 6) /*|| (f->size() != totphysrecs*512)*/
|
||||
|| (image->dev_dir.vol_hdr.volname[0] > 7))
|
||||
{
|
||||
return IMGTOOLERR_CORRUPTIMAGE;
|
||||
@ -426,7 +426,7 @@ static imgtoolerr_t concept_image_freespace(imgtool::partition *partition, UINT6
|
||||
/*
|
||||
Extract a file from a concept_image.
|
||||
*/
|
||||
static imgtoolerr_t concept_image_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf)
|
||||
static imgtoolerr_t concept_image_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
imgtool::image *img = &partition->image();
|
||||
concept_image *image = (concept_image *) img->extra_bytes();
|
||||
@ -449,10 +449,10 @@ static imgtoolerr_t concept_image_readfile(imgtool::partition *partition, const
|
||||
i < get_UINT16xE(image->dev_dir.vol_hdr.disk_flipped, image->dev_dir.file_dir[catalog_index].next_block);
|
||||
i++)
|
||||
{
|
||||
if (read_physical_record(image->file_handle, i, buf))
|
||||
if (read_physical_record(*image->file_handle, i, buf))
|
||||
return IMGTOOLERR_READERROR;
|
||||
|
||||
if (stream_write(destf, buf, 512) != 512)
|
||||
if (destf.write(buf, 512) != 512)
|
||||
return IMGTOOLERR_WRITEERROR;
|
||||
}
|
||||
|
||||
@ -463,7 +463,7 @@ static imgtoolerr_t concept_image_readfile(imgtool::partition *partition, const
|
||||
/*
|
||||
Add a file to a concept_image.
|
||||
*/
|
||||
static imgtoolerr_t concept_image_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *writeoptions)
|
||||
static imgtoolerr_t concept_image_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream *sourcef, util::option_resolution *writeoptions)
|
||||
{
|
||||
/* ... */
|
||||
|
||||
@ -483,7 +483,7 @@ static imgtoolerr_t concept_image_deletefile(imgtool::partition *partition, cons
|
||||
/*
|
||||
Create a blank concept_image.
|
||||
*/
|
||||
static imgtoolerr_t concept_image_create(const imgtool_module *mod, imgtool_stream *f, util::option_resolution *createoptions)
|
||||
static imgtoolerr_t concept_image_create(const imgtool_module *mod, imgtool::stream *f, util::option_resolution *createoptions)
|
||||
{
|
||||
/* ... */
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
struct cybiko_file_system
|
||||
{
|
||||
imgtool_stream *stream;
|
||||
imgtool::stream *stream;
|
||||
UINT32 page_count, page_size, block_count_boot, block_count_file;
|
||||
UINT16 write_count;
|
||||
};
|
||||
@ -161,16 +161,16 @@ static int cfs_page_to_block( cybiko_file_system *cfs, UINT32 page, int *block_t
|
||||
static int cfs_page_read( cybiko_file_system *cfs, UINT8 *buffer, UINT32 page)
|
||||
{
|
||||
if (page >= cfs->page_count) return FALSE;
|
||||
stream_seek( cfs->stream, page * cfs->page_size, SEEK_SET);
|
||||
stream_read( cfs->stream, buffer, cfs->page_size);
|
||||
cfs->stream->seek(page * cfs->page_size, SEEK_SET);
|
||||
cfs->stream->read(buffer, cfs->page_size);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int cfs_page_write( cybiko_file_system *cfs, UINT8 *buffer, UINT32 page)
|
||||
{
|
||||
if (page >= cfs->page_count) return FALSE;
|
||||
stream_seek( cfs->stream, page * cfs->page_size, SEEK_SET);
|
||||
stream_write( cfs->stream, buffer, cfs->page_size);
|
||||
cfs->stream->seek(page * cfs->page_size, SEEK_SET);
|
||||
cfs->stream->write(buffer, cfs->page_size);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -252,32 +252,32 @@ static int cfs_file_find( cybiko_file_system *cfs, const char *filename, UINT16
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static int cfs_verify( cybiko_file_system *cfs)
|
||||
static int cfs_verify(cybiko_file_system &cfs)
|
||||
{
|
||||
UINT8 buffer[MAX_PAGE_SIZE];
|
||||
int i, block_type;
|
||||
for (i=0;i<cfs->page_count;i++)
|
||||
for (i = 0; i < cfs.page_count; i++)
|
||||
{
|
||||
if (!cfs_page_read( cfs, buffer, i)) return FALSE;
|
||||
if (!cfs_page_to_block( cfs, i, &block_type, NULL)) return FALSE;
|
||||
if (!page_buffer_verify( buffer, cfs->page_size, block_type)) return FALSE;
|
||||
if (!cfs_page_read(&cfs, buffer, i)) return FALSE;
|
||||
if (!cfs_page_to_block(&cfs, i, &block_type, NULL)) return FALSE;
|
||||
if (!page_buffer_verify(buffer, cfs.page_size, block_type)) return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int cfs_init( cybiko_file_system *cfs, imgtool_stream *stream, int flash_type)
|
||||
static int cfs_init(cybiko_file_system &cfs, imgtool::stream &stream, int flash_type)
|
||||
{
|
||||
cfs->stream = stream;
|
||||
cfs.stream = &stream;
|
||||
switch (flash_type)
|
||||
{
|
||||
case FLASH_TYPE_AT45DB041 : cfs->page_count = 2048; cfs->page_size = 264; break;
|
||||
case FLASH_TYPE_AT45DB081 : cfs->page_count = 4096; cfs->page_size = 264; break;
|
||||
case FLASH_TYPE_AT45DB161 : cfs->page_count = 4096; cfs->page_size = 528; break;
|
||||
case FLASH_TYPE_AT45DB041 : cfs.page_count = 2048; cfs.page_size = 264; break;
|
||||
case FLASH_TYPE_AT45DB081 : cfs.page_count = 4096; cfs.page_size = 264; break;
|
||||
case FLASH_TYPE_AT45DB161 : cfs.page_count = 4096; cfs.page_size = 528; break;
|
||||
default : return FALSE;
|
||||
}
|
||||
cfs->block_count_boot = 5;
|
||||
cfs->block_count_file = cfs->page_count - cfs->block_count_boot;
|
||||
cfs->write_count = 0;
|
||||
cfs.block_count_boot = 5;
|
||||
cfs.block_count_file = cfs.page_count - cfs.block_count_boot;
|
||||
cfs.write_count = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -345,15 +345,15 @@ static int flash_option_to_flash_type( int option)
|
||||
}
|
||||
}
|
||||
|
||||
static imgtoolerr_t cybiko_image_open( imgtool::image *image, imgtool_stream *stream)
|
||||
static imgtoolerr_t cybiko_image_open(imgtool::image *image, imgtool::stream &stream)
|
||||
{
|
||||
cybiko_file_system *cfs = (cybiko_file_system*)image->extra_bytes();
|
||||
int flash_type;
|
||||
// init
|
||||
flash_type = flash_size_to_flash_type( stream_size( stream));
|
||||
if (!cfs_init( cfs, stream, flash_type)) return IMGTOOLERR_CORRUPTIMAGE;
|
||||
flash_type = flash_size_to_flash_type(stream.size());
|
||||
if (!cfs_init(*cfs, stream, flash_type)) return IMGTOOLERR_CORRUPTIMAGE;
|
||||
// verify
|
||||
if (!cfs_verify( cfs)) return IMGTOOLERR_CORRUPTIMAGE;
|
||||
if (!cfs_verify(*cfs)) return IMGTOOLERR_CORRUPTIMAGE;
|
||||
// ok
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
@ -361,18 +361,18 @@ static imgtoolerr_t cybiko_image_open( imgtool::image *image, imgtool_stream *st
|
||||
static void cybiko_image_close( imgtool::image *image)
|
||||
{
|
||||
cybiko_file_system *cfs = (cybiko_file_system*)image->extra_bytes();
|
||||
stream_close( cfs->stream);
|
||||
delete cfs->stream;
|
||||
}
|
||||
|
||||
static imgtoolerr_t cybiko_image_create( imgtool::image *image, imgtool_stream *stream, util::option_resolution *opts)
|
||||
static imgtoolerr_t cybiko_image_create( imgtool::image *image, imgtool::stream &stream, util::option_resolution *opts)
|
||||
{
|
||||
cybiko_file_system *cfs = (cybiko_file_system*)image->extra_bytes();
|
||||
int flash_type;
|
||||
// init
|
||||
flash_type = flash_option_to_flash_type(opts->lookup_int('F'));
|
||||
if (!cfs_init( cfs, stream, flash_type)) return IMGTOOLERR_CORRUPTIMAGE;
|
||||
if (!cfs_init(*cfs, stream, flash_type)) return IMGTOOLERR_CORRUPTIMAGE;
|
||||
// format
|
||||
if (!cfs_format( cfs)) return IMGTOOLERR_CORRUPTIMAGE;
|
||||
if (!cfs_format(cfs)) return IMGTOOLERR_CORRUPTIMAGE;
|
||||
// ok
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
@ -423,7 +423,7 @@ static void cybiko_image_close_enum( imgtool::directory *enumeration)
|
||||
// nothing
|
||||
}
|
||||
|
||||
static imgtoolerr_t cybiko_image_free_space( imgtool::partition *partition, UINT64 *size)
|
||||
static imgtoolerr_t cybiko_image_free_space(imgtool::partition *partition, UINT64 *size)
|
||||
{
|
||||
imgtool::image *image = &partition->image();
|
||||
cybiko_file_system *cfs = (cybiko_file_system*)image->extra_bytes();
|
||||
@ -431,7 +431,7 @@ static imgtoolerr_t cybiko_image_free_space( imgtool::partition *partition, UINT
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
|
||||
static imgtoolerr_t cybiko_image_read_file( imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf)
|
||||
static imgtoolerr_t cybiko_image_read_file(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
imgtool::image *image = &partition->image();
|
||||
cybiko_file_system *cfs = (cybiko_file_system*)image->extra_bytes();
|
||||
@ -449,7 +449,7 @@ static imgtoolerr_t cybiko_image_read_file( imgtool::partition *partition, const
|
||||
if (!cfs_block_read( cfs, buffer, BLOCK_TYPE_FILE, i)) return IMGTOOLERR_READERROR;
|
||||
if (BLOCK_USED(buffer) && (BLOCK_FILE_ID(buffer) == file_id) && (BLOCK_PART_ID(buffer) == part_id))
|
||||
{
|
||||
stream_write( destf, buffer + 6 + ((part_id == 0) ? FILE_HEADER_SIZE : 0), buffer[1]);
|
||||
destf.write(buffer + 6 + ((part_id == 0) ? FILE_HEADER_SIZE : 0), buffer[1]);
|
||||
part_id++;
|
||||
}
|
||||
}
|
||||
@ -458,7 +458,7 @@ static imgtoolerr_t cybiko_image_read_file( imgtool::partition *partition, const
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
|
||||
static imgtoolerr_t cybiko_image_write_file( imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *opts)
|
||||
static imgtoolerr_t cybiko_image_write_file(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts)
|
||||
{
|
||||
imgtool::image *image = &partition->image();
|
||||
cybiko_file_system *cfs = (cybiko_file_system*)image->extra_bytes();
|
||||
@ -468,22 +468,22 @@ static imgtoolerr_t cybiko_image_write_file( imgtool::partition *partition, cons
|
||||
cfs_file file;
|
||||
int i;
|
||||
// find file
|
||||
if (!cfs_file_find( cfs, filename, &file_id)) file_id = INVALID_FILE_ID;
|
||||
if (!cfs_file_find(cfs, filename, &file_id)) file_id = INVALID_FILE_ID;
|
||||
// check free space
|
||||
free_blocks = cfs_calc_free_blocks( cfs);
|
||||
if (file_id != INVALID_FILE_ID)
|
||||
{
|
||||
if (!cfs_file_info( cfs, file_id, &file)) return IMGTOOLERR_UNEXPECTED;
|
||||
if (!cfs_file_info(cfs, file_id, &file)) return IMGTOOLERR_UNEXPECTED;
|
||||
free_blocks += file.blocks;
|
||||
}
|
||||
if (cfs_calc_free_space( cfs, free_blocks) < stream_size( sourcef)) return IMGTOOLERR_NOSPACE;
|
||||
if (cfs_calc_free_space(cfs, free_blocks) < sourcef.size()) return IMGTOOLERR_NOSPACE;
|
||||
// delete file
|
||||
if (file_id != INVALID_FILE_ID)
|
||||
{
|
||||
if (!cfs_file_delete( cfs, file_id)) return IMGTOOLERR_UNEXPECTED;
|
||||
}
|
||||
// create/write destination file
|
||||
bytes_left = stream_size( sourcef);
|
||||
bytes_left = sourcef.size();
|
||||
i = 0;
|
||||
while ((bytes_left > 0) && (i < cfs->block_count_file))
|
||||
{
|
||||
@ -500,13 +500,13 @@ static imgtoolerr_t cybiko_image_write_file( imgtool::partition *partition, cons
|
||||
if (part_id == 0)
|
||||
{
|
||||
buffer[6] = 0;
|
||||
strcpy( BLOCK_FILENAME(buffer), filename);
|
||||
strcpy(BLOCK_FILENAME(buffer), filename);
|
||||
buffer_write_32_be( buffer + 6 + FILE_HEADER_SIZE - 4, time_setup( time( NULL)));
|
||||
stream_read( sourcef, buffer + 6 + FILE_HEADER_SIZE, buffer[1]);
|
||||
sourcef.read(buffer + 6 + FILE_HEADER_SIZE, buffer[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
stream_read( sourcef, buffer + 6, buffer[1]);
|
||||
sourcef.read(buffer + 6, buffer[1]);
|
||||
}
|
||||
if (!cfs_block_write( cfs, buffer, BLOCK_TYPE_FILE, i)) return IMGTOOLERR_WRITEERROR;
|
||||
bytes_left -= buffer[1];
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
struct cybiko_file_system
|
||||
{
|
||||
imgtool_stream *stream;
|
||||
imgtool::stream *stream;
|
||||
UINT32 page_count, page_size, block_count_boot, block_count_file;
|
||||
UINT16 write_count;
|
||||
};
|
||||
@ -150,16 +150,16 @@ static int cfs_page_to_block( cybiko_file_system *cfs, UINT32 page, int *block_t
|
||||
static int cfs_page_read( cybiko_file_system *cfs, UINT8 *buffer, UINT32 page)
|
||||
{
|
||||
if (page >= cfs->page_count) return FALSE;
|
||||
stream_seek( cfs->stream, page * cfs->page_size, SEEK_SET);
|
||||
stream_read( cfs->stream, buffer, cfs->page_size);
|
||||
cfs->stream->seek(page * cfs->page_size, SEEK_SET);
|
||||
cfs->stream->read(buffer, cfs->page_size);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int cfs_page_write( cybiko_file_system *cfs, UINT8 *buffer, UINT32 page)
|
||||
{
|
||||
if (page >= cfs->page_count) return FALSE;
|
||||
stream_seek( cfs->stream, page * cfs->page_size, SEEK_SET);
|
||||
stream_write( cfs->stream, buffer, cfs->page_size);
|
||||
cfs->stream->seek(page * cfs->page_size, SEEK_SET);
|
||||
cfs->stream->write(buffer, cfs->page_size);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -247,31 +247,31 @@ static int cfs_file_find( cybiko_file_system *cfs, const char *filename, UINT16
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static int cfs_verify( cybiko_file_system *cfs)
|
||||
static bool cfs_verify(cybiko_file_system &cfs)
|
||||
{
|
||||
UINT8 buffer[MAX_PAGE_SIZE];
|
||||
int i, block_type;
|
||||
for (i=0;i<cfs->page_count;i++)
|
||||
for (i = 0; i < cfs.page_count; i++)
|
||||
{
|
||||
if (!cfs_page_read( cfs, buffer, i)) return FALSE;
|
||||
if (!cfs_page_to_block( cfs, i, &block_type, NULL)) return FALSE;
|
||||
if (!page_buffer_verify( buffer, cfs->page_size, block_type)) return FALSE;
|
||||
if (!cfs_page_read(&cfs, buffer, i)) return false;
|
||||
if (!cfs_page_to_block(&cfs, i, &block_type, NULL)) return false;
|
||||
if (!page_buffer_verify(buffer, cfs.page_size, block_type)) return false;
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
static int cfs_init( cybiko_file_system *cfs, imgtool_stream *stream)
|
||||
static bool cfs_init(cybiko_file_system &cfs, imgtool::stream &stream)
|
||||
{
|
||||
cfs->stream = stream;
|
||||
cfs->page_count = 2005;
|
||||
cfs->page_size = 258;
|
||||
cfs->block_count_boot = 5;
|
||||
cfs->block_count_file = cfs->page_count - cfs->block_count_boot;
|
||||
cfs->write_count = 0;
|
||||
return TRUE;
|
||||
cfs.stream = &stream;
|
||||
cfs.page_count = 2005;
|
||||
cfs.page_size = 258;
|
||||
cfs.block_count_boot = 5;
|
||||
cfs.block_count_file = cfs.page_count - cfs.block_count_boot;
|
||||
cfs.write_count = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
static int cfs_format( cybiko_file_system *cfs)
|
||||
static int cfs_format(cybiko_file_system *cfs)
|
||||
{
|
||||
UINT8 buffer[MAX_PAGE_SIZE];
|
||||
int i;
|
||||
@ -292,7 +292,7 @@ static int cfs_format( cybiko_file_system *cfs)
|
||||
buffer[0] = 0xFF;
|
||||
for (i=0;i<0x1B56;i++)
|
||||
{
|
||||
stream_write( cfs->stream, buffer, 1);
|
||||
cfs->stream->write(buffer, 1);
|
||||
}
|
||||
// ok
|
||||
return TRUE;
|
||||
@ -319,30 +319,30 @@ static UINT32 cfs_calc_free_space( cybiko_file_system *cfs, UINT16 blocks)
|
||||
return free_space;
|
||||
}
|
||||
|
||||
static imgtoolerr_t cybiko_image_open( imgtool::image *image, imgtool_stream *stream)
|
||||
static imgtoolerr_t cybiko_image_open(imgtool::image *image, imgtool::stream &stream)
|
||||
{
|
||||
cybiko_file_system *cfs = (cybiko_file_system*)image->extra_bytes();
|
||||
// init
|
||||
if (!cfs_init( cfs, stream)) return IMGTOOLERR_CORRUPTIMAGE;
|
||||
if (!cfs_init(*cfs, stream)) return IMGTOOLERR_CORRUPTIMAGE;
|
||||
// verify
|
||||
if (!cfs_verify( cfs)) return IMGTOOLERR_CORRUPTIMAGE;
|
||||
if (!cfs_verify(*cfs)) return IMGTOOLERR_CORRUPTIMAGE;
|
||||
// ok
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
|
||||
static void cybiko_image_close( imgtool::image *image)
|
||||
static void cybiko_image_close(imgtool::image *image)
|
||||
{
|
||||
cybiko_file_system *cfs = (cybiko_file_system*)image->extra_bytes();
|
||||
stream_close( cfs->stream);
|
||||
delete cfs->stream;
|
||||
}
|
||||
|
||||
static imgtoolerr_t cybiko_image_create( imgtool::image *image, imgtool_stream *stream, util::option_resolution *opts)
|
||||
static imgtoolerr_t cybiko_image_create(imgtool::image *image, imgtool::stream &stream, util::option_resolution *opts)
|
||||
{
|
||||
cybiko_file_system *cfs = (cybiko_file_system*)image->extra_bytes();
|
||||
// init
|
||||
if (!cfs_init( cfs, stream)) return IMGTOOLERR_CORRUPTIMAGE;
|
||||
if (!cfs_init(*cfs, stream)) return IMGTOOLERR_CORRUPTIMAGE;
|
||||
// format
|
||||
if (!cfs_format( cfs)) return IMGTOOLERR_CORRUPTIMAGE;
|
||||
if (!cfs_format(cfs)) return IMGTOOLERR_CORRUPTIMAGE;
|
||||
// ok
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
@ -401,7 +401,7 @@ static imgtoolerr_t cybiko_image_free_space( imgtool::partition *partition, UINT
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
|
||||
static imgtoolerr_t cybiko_image_read_file( imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf)
|
||||
static imgtoolerr_t cybiko_image_read_file(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
imgtool::image *image = &partition->image();
|
||||
cybiko_file_system *cfs = (cybiko_file_system*)image->extra_bytes();
|
||||
@ -421,7 +421,7 @@ static imgtoolerr_t cybiko_image_read_file( imgtool::partition *partition, const
|
||||
if (!cfs_block_read( cfs, buffer, BLOCK_TYPE_FILE, i)) return IMGTOOLERR_READERROR;
|
||||
if (BLOCK_USED(buffer) && (BLOCK_FILE_ID(buffer) == file_id) && (BLOCK_PART_ID(buffer) == part_id))
|
||||
{
|
||||
stream_write( destf, buffer + 6 + ((part_id == 0) ? FILE_HEADER_SIZE : 0), buffer[1]);
|
||||
destf.write(buffer + 6 + ((part_id == 0) ? FILE_HEADER_SIZE : 0), buffer[1]);
|
||||
part_id++;
|
||||
}
|
||||
}
|
||||
@ -430,7 +430,7 @@ static imgtoolerr_t cybiko_image_read_file( imgtool::partition *partition, const
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
|
||||
static imgtoolerr_t cybiko_image_write_file( imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *opts)
|
||||
static imgtoolerr_t cybiko_image_write_file(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts)
|
||||
{
|
||||
imgtool::image *image = &partition->image();
|
||||
cybiko_file_system *cfs = (cybiko_file_system*)image->extra_bytes();
|
||||
@ -444,20 +444,20 @@ static imgtoolerr_t cybiko_image_write_file( imgtool::partition *partition, cons
|
||||
// find file
|
||||
if (!cfs_file_find( cfs, filename, &file_id)) file_id = INVALID_FILE_ID;
|
||||
// check free space
|
||||
free_blocks = cfs_calc_free_blocks( cfs);
|
||||
free_blocks = cfs_calc_free_blocks(cfs);
|
||||
if (file_id != INVALID_FILE_ID)
|
||||
{
|
||||
if (!cfs_file_info( cfs, file_id, &file)) return IMGTOOLERR_UNEXPECTED;
|
||||
if (!cfs_file_info(cfs, file_id, &file)) return IMGTOOLERR_UNEXPECTED;
|
||||
free_blocks += file.blocks;
|
||||
}
|
||||
if (cfs_calc_free_space( cfs, free_blocks) < stream_size( sourcef)) return IMGTOOLERR_NOSPACE;
|
||||
if (cfs_calc_free_space(cfs, free_blocks) < sourcef.size()) return IMGTOOLERR_NOSPACE;
|
||||
// delete file
|
||||
if (file_id != INVALID_FILE_ID)
|
||||
{
|
||||
if (!cfs_file_delete( cfs, file_id)) return IMGTOOLERR_UNEXPECTED;
|
||||
if (!cfs_file_delete(cfs, file_id)) return IMGTOOLERR_UNEXPECTED;
|
||||
}
|
||||
// create/write destination file
|
||||
bytes_left = stream_size( sourcef);
|
||||
bytes_left = sourcef.size();
|
||||
i = 0;
|
||||
while (i < cfs->block_count_file)
|
||||
{
|
||||
@ -474,13 +474,13 @@ static imgtoolerr_t cybiko_image_write_file( imgtool::partition *partition, cons
|
||||
if (part_id == 0)
|
||||
{
|
||||
buffer[6] = 0x20;
|
||||
strcpy( BLOCK_FILENAME(buffer), filename);
|
||||
strcpy(BLOCK_FILENAME(buffer), filename);
|
||||
buffer_write_32_be( buffer + 6 + FILE_HEADER_SIZE - 4, time_setup( time( NULL)));
|
||||
stream_read( sourcef, buffer + 6 + FILE_HEADER_SIZE, buffer[1]);
|
||||
sourcef.read(buffer + 6 + FILE_HEADER_SIZE, buffer[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
stream_read( sourcef, buffer + 6, buffer[1]);
|
||||
sourcef.read(buffer + 6, buffer[1]);
|
||||
}
|
||||
if (!cfs_block_write( cfs, buffer, BLOCK_TYPE_FILE, i)) return IMGTOOLERR_WRITEERROR;
|
||||
bytes_left -= buffer[1];
|
||||
@ -499,11 +499,11 @@ static imgtoolerr_t cybiko_image_delete_file( imgtool::partition *partition, con
|
||||
cybiko_file_system *cfs = (cybiko_file_system*)image->extra_bytes();
|
||||
UINT16 file_id;
|
||||
// check filename
|
||||
if (strlen( filename) > 58) return IMGTOOLERR_BADFILENAME;
|
||||
if (strlen(filename) > 58) return IMGTOOLERR_BADFILENAME;
|
||||
// find file
|
||||
if (!cfs_file_find( cfs, filename, &file_id)) return IMGTOOLERR_FILENOTFOUND;
|
||||
if (!cfs_file_find(cfs, filename, &file_id)) return IMGTOOLERR_FILENOTFOUND;
|
||||
// delete file
|
||||
if (!cfs_file_delete( cfs, file_id)) return IMGTOOLERR_UNEXPECTED;
|
||||
if (!cfs_file_delete(cfs, file_id)) return IMGTOOLERR_UNEXPECTED;
|
||||
// ok
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
|
@ -1850,7 +1850,7 @@ static imgtoolerr_t fat_partition_nextenum(imgtool::directory *enumeration, imgt
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t fat_read_bootblock(imgtool::partition *partition, imgtool_stream *stream)
|
||||
static imgtoolerr_t fat_read_bootblock(imgtool::partition *partition, imgtool::stream &stream)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
UINT8 block[FAT_SECLEN];
|
||||
@ -1859,21 +1859,21 @@ static imgtoolerr_t fat_read_bootblock(imgtool::partition *partition, imgtool_st
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
stream_write(stream, block, sizeof(block));
|
||||
stream.write(block, sizeof(block));
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t fat_write_bootblock(imgtool::partition *partition, imgtool_stream *stream)
|
||||
static imgtoolerr_t fat_write_bootblock(imgtool::partition *partition, imgtool::stream &stream)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
UINT8 block[FAT_SECLEN];
|
||||
UINT8 new_block[FAT_SECLEN];
|
||||
|
||||
if (stream_size(stream) != sizeof(new_block))
|
||||
if (stream.size() != sizeof(new_block))
|
||||
return IMGTOOLERR_UNEXPECTED;
|
||||
stream_read(stream, new_block, sizeof(new_block));
|
||||
stream.read(new_block, sizeof(new_block));
|
||||
|
||||
if (new_block[510] != 0x55)
|
||||
return IMGTOOLERR_UNEXPECTED;
|
||||
@ -1899,7 +1899,7 @@ static imgtoolerr_t fat_write_bootblock(imgtool::partition *partition, imgtool_s
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t fat_partition_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf)
|
||||
static imgtoolerr_t fat_partition_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
fat_file file;
|
||||
@ -1923,7 +1923,7 @@ static imgtoolerr_t fat_partition_readfile(imgtool::partition *partition, const
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
stream_write(destf, buffer, bytes_read);
|
||||
destf.write(buffer, bytes_read);
|
||||
}
|
||||
while(bytes_read > 0);
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
@ -1931,7 +1931,7 @@ static imgtoolerr_t fat_partition_readfile(imgtool::partition *partition, const
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t fat_partition_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *opts)
|
||||
static imgtoolerr_t fat_partition_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
fat_file file;
|
||||
@ -1949,7 +1949,7 @@ static imgtoolerr_t fat_partition_writefile(imgtool::partition *partition, const
|
||||
if (file.directory)
|
||||
return IMGTOOLERR_FILENOTFOUND;
|
||||
|
||||
bytes_left = (UINT32) stream_size(sourcef);
|
||||
bytes_left = (UINT32) sourcef.size();
|
||||
|
||||
err = fat_set_file_size(partition, &file, bytes_left);
|
||||
if (err)
|
||||
@ -1958,7 +1958,7 @@ static imgtoolerr_t fat_partition_writefile(imgtool::partition *partition, const
|
||||
while(bytes_left > 0)
|
||||
{
|
||||
len = (std::min<size_t>)(bytes_left, sizeof(buffer));
|
||||
stream_read(sourcef, buffer, len);
|
||||
sourcef.read(buffer, len);
|
||||
|
||||
err = fat_write_file(partition, &file, buffer, len, NULL);
|
||||
if (err)
|
||||
|
@ -95,7 +95,7 @@
|
||||
|
||||
struct hp48_card
|
||||
{
|
||||
imgtool_stream *stream;
|
||||
imgtool::stream *stream;
|
||||
int modified;
|
||||
|
||||
/* size, in bytes of card data: from 32 KB to 4 MB */
|
||||
@ -327,36 +327,36 @@ static UINT16 crc(UINT8* data, int len)
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
static imgtoolerr_t hp48_open(imgtool::image *img, imgtool_stream *stream)
|
||||
static imgtoolerr_t hp48_open(imgtool::image *img, imgtool::stream &stream)
|
||||
{
|
||||
hp48_card* c = (hp48_card*) img->extra_bytes();
|
||||
int size = stream_size( stream );
|
||||
int size = stream.size();
|
||||
|
||||
/* check that size is a power of 2 between 32 KB and 4 MG */
|
||||
if ( (size < 32 * 1024) ||
|
||||
(size > 4 * 1024 * 1024) ||
|
||||
(size & (size-1)) )
|
||||
{
|
||||
return IMGTOOLERR_CORRUPTIMAGE;
|
||||
}
|
||||
/* check that size is a power of 2 between 32 KB and 4 MG */
|
||||
if ( (size < 32 * 1024) ||
|
||||
(size > 4 * 1024 * 1024) ||
|
||||
(size & (size-1)) )
|
||||
{
|
||||
return IMGTOOLERR_CORRUPTIMAGE;
|
||||
}
|
||||
|
||||
/* store info */
|
||||
c->stream = stream;
|
||||
/* store info */
|
||||
c->stream = &stream;
|
||||
c->modified = 0;
|
||||
c->size = size;
|
||||
c->data = (UINT8*) malloc( 2 * size );
|
||||
if ( !c->data )
|
||||
{
|
||||
return IMGTOOLERR_READERROR;
|
||||
}
|
||||
c->size = size;
|
||||
c->data = (UINT8*) malloc( 2 * size );
|
||||
if ( !c->data )
|
||||
{
|
||||
return IMGTOOLERR_READERROR;
|
||||
}
|
||||
|
||||
/* fully load image */
|
||||
stream_seek( stream, 0, SEEK_SET );
|
||||
if ( stream_read( stream, c->data, size ) < size )
|
||||
{
|
||||
return IMGTOOLERR_READERROR;
|
||||
}
|
||||
unpack( c->data, c->data, 2 * size );
|
||||
/* fully load image */
|
||||
stream.seek(0, SEEK_SET);
|
||||
if (stream.read(c->data, size) < size)
|
||||
{
|
||||
return IMGTOOLERR_READERROR;
|
||||
}
|
||||
unpack( c->data, c->data, 2 * size );
|
||||
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
@ -364,25 +364,25 @@ static imgtoolerr_t hp48_open(imgtool::image *img, imgtool_stream *stream)
|
||||
|
||||
|
||||
static imgtoolerr_t hp48_create(imgtool::image* img,
|
||||
imgtool_stream *stream,
|
||||
imgtool::stream &stream,
|
||||
util::option_resolution *opts)
|
||||
{
|
||||
hp48_card* c = (hp48_card*) img->extra_bytes();
|
||||
int size;
|
||||
|
||||
size = opts->lookup_int('S');
|
||||
size = opts->lookup_int('S');
|
||||
|
||||
c->stream = stream;
|
||||
c->modified = 1;
|
||||
c->size = size * 1024;
|
||||
c->data = (UINT8*) malloc( 2 * c->size );
|
||||
if ( !c->data )
|
||||
{
|
||||
return IMGTOOLERR_READERROR;
|
||||
}
|
||||
c->stream = &stream;
|
||||
c->modified = 1;
|
||||
c->size = size * 1024;
|
||||
c->data = (UINT8*) malloc( 2 * c->size );
|
||||
if ( !c->data )
|
||||
{
|
||||
return IMGTOOLERR_READERROR;
|
||||
}
|
||||
|
||||
/* zeroing the image seems fine */
|
||||
memset( c->data, 0, 2 * c->size );
|
||||
/* zeroing the image seems fine */
|
||||
memset( c->data, 0, 2 * c->size );
|
||||
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
@ -397,13 +397,13 @@ static void hp48_close(imgtool::image *img)
|
||||
{
|
||||
/* save image */
|
||||
pack( c->data, c->data, 2 * c->size );
|
||||
stream_seek( c->stream, 0, SEEK_SET );
|
||||
stream_write( c->stream, c->data, c->size );
|
||||
c->stream->seek(0, SEEK_SET);
|
||||
c->stream->write(c->data, c->size);
|
||||
}
|
||||
|
||||
/* clean up */
|
||||
free( c->data );
|
||||
stream_close( c->stream );
|
||||
delete c->stream;
|
||||
}
|
||||
|
||||
|
||||
@ -542,7 +542,7 @@ static imgtoolerr_t hp48_freespace(imgtool::partition *part, UINT64 *size)
|
||||
static imgtoolerr_t hp48_readfile(imgtool::partition *part,
|
||||
const char *filename,
|
||||
const char *fork,
|
||||
imgtool_stream *destf)
|
||||
imgtool::stream &destf)
|
||||
{
|
||||
//imgtool::image* img = &part->image();
|
||||
//hp48_card* c = (hp48_card*) img->extra_bytes();
|
||||
@ -566,7 +566,7 @@ static imgtoolerr_t hp48_readfile(imgtool::partition *part,
|
||||
size -= 10;
|
||||
|
||||
/* save header */
|
||||
stream_write( destf, hp48_prefix, 8);
|
||||
destf.write(hp48_prefix, 8);
|
||||
|
||||
/* save contents to host file */
|
||||
int bytesize = (size + 1) / 2;
|
||||
@ -576,7 +576,7 @@ static imgtoolerr_t hp48_readfile(imgtool::partition *part,
|
||||
return IMGTOOLERR_FILENOTFOUND;
|
||||
}
|
||||
pack( buf, p->data + start, size );
|
||||
stream_write( destf, buf, bytesize );
|
||||
destf.write(buf, bytesize);
|
||||
free( buf );
|
||||
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
@ -613,7 +613,7 @@ static imgtoolerr_t hp48_deletefile(imgtool::partition *part,
|
||||
static imgtoolerr_t hp48_writefile(imgtool::partition *part,
|
||||
const char *filename,
|
||||
const char *fork,
|
||||
imgtool_stream *sourcef,
|
||||
imgtool::stream &sourcef,
|
||||
util::option_resolution *opts)
|
||||
{
|
||||
imgtool::image* img = &part->image();
|
||||
@ -622,7 +622,7 @@ static imgtoolerr_t hp48_writefile(imgtool::partition *part,
|
||||
|
||||
/* check header */
|
||||
char head[8];
|
||||
stream_read( sourcef, head, 8 );
|
||||
sourcef.read(head, 8);
|
||||
if ( memcmp( head, hp48_prefix, 7) )
|
||||
{
|
||||
return IMGTOOLERR_READERROR;
|
||||
@ -640,7 +640,7 @@ static imgtoolerr_t hp48_writefile(imgtool::partition *part,
|
||||
if ( len > 255 ) len = 255;
|
||||
|
||||
/* check size */
|
||||
int filesize = stream_size( sourcef ) - 8;
|
||||
int filesize = sourcef.size() - 8;
|
||||
if ( pos + 2*filesize + 24 + 2*len > 2 * p->size )
|
||||
{
|
||||
return IMGTOOLERR_NOSPACE;
|
||||
@ -649,7 +649,7 @@ static imgtoolerr_t hp48_writefile(imgtool::partition *part,
|
||||
/* load file */
|
||||
UINT8* buf = (UINT8*) malloc( filesize );
|
||||
if ( !buf ) return IMGTOOLERR_NOSPACE;
|
||||
stream_read( sourcef, buf, filesize );
|
||||
sourcef.read(buf, filesize);
|
||||
|
||||
/* store backup object */
|
||||
int org = pos;
|
||||
|
@ -216,8 +216,8 @@ public:
|
||||
|
||||
void format_img(void);
|
||||
|
||||
imgtoolerr_t load_from_file(imgtool_stream *stream);
|
||||
imgtoolerr_t save_to_file(imgtool_stream *stream);
|
||||
imgtoolerr_t load_from_file(imgtool::stream *stream);
|
||||
imgtoolerr_t save_to_file(imgtool::stream *stream);
|
||||
|
||||
unsigned free_sectors(void) const;
|
||||
|
||||
@ -259,8 +259,8 @@ private:
|
||||
bool decode_dir(void);
|
||||
static tape_pos_t word_length(tape_word_t w);
|
||||
static tape_pos_t block_end_pos(tape_pos_t pos , const tape_word_t *block , unsigned block_len);
|
||||
static bool save_word(imgtool_stream *stream , tape_pos_t& pos , tape_word_t w);
|
||||
static bool save_words(imgtool_stream *stream , tape_pos_t& pos , const tape_word_t *block , unsigned block_len);
|
||||
static bool save_word(imgtool::stream *stream , tape_pos_t& pos , tape_word_t w);
|
||||
static bool save_words(imgtool::stream *stream , tape_pos_t& pos , const tape_word_t *block , unsigned block_len);
|
||||
static tape_word_t checksum(const tape_word_t *block , unsigned block_len);
|
||||
};
|
||||
|
||||
@ -268,7 +268,7 @@ private:
|
||||
* Image state
|
||||
********************************************************************************/
|
||||
typedef struct {
|
||||
imgtool_stream *stream;
|
||||
imgtool::stream *stream;
|
||||
tape_image_t *img;
|
||||
} tape_state_t;
|
||||
|
||||
@ -298,13 +298,13 @@ void tape_image_t::format_img(void)
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
imgtoolerr_t tape_image_t::load_from_file(imgtool_stream *stream)
|
||||
imgtoolerr_t tape_image_t::load_from_file(imgtool::stream *stream)
|
||||
{
|
||||
stream_seek(stream , 0 , SEEK_SET);
|
||||
stream->seek(0 , SEEK_SET);
|
||||
|
||||
UINT8 tmp[ 4 ];
|
||||
|
||||
if (stream_read(stream , tmp , 4) != 4) {
|
||||
if (stream->read(tmp , 4) != 4) {
|
||||
return IMGTOOLERR_READERROR;
|
||||
}
|
||||
|
||||
@ -323,7 +323,7 @@ imgtoolerr_t tape_image_t::load_from_file(imgtool_stream *stream)
|
||||
state = 0;
|
||||
|
||||
while (1) {
|
||||
if (stream_read(stream , tmp , 4) != 4) {
|
||||
if (stream->read(tmp , 4) != 4) {
|
||||
return IMGTOOLERR_READERROR;
|
||||
}
|
||||
UINT32 words_no = pick_integer_le(tmp , 0 , 4);
|
||||
@ -331,13 +331,13 @@ imgtoolerr_t tape_image_t::load_from_file(imgtool_stream *stream)
|
||||
// Track ended
|
||||
break;
|
||||
}
|
||||
if (stream_read(stream , tmp , 4) != 4) {
|
||||
if (stream->read(tmp , 4) != 4) {
|
||||
return IMGTOOLERR_READERROR;
|
||||
}
|
||||
tape_pos_t pos = pick_integer_le(tmp , 0 , 4);
|
||||
tape_word_t buffer[ WORDS_PER_SECTOR_W_MARGIN ];
|
||||
for (unsigned i = 0; i < words_no; i++) {
|
||||
if (stream_read(stream , tmp , 2) != 2) {
|
||||
if (stream->read(tmp , 2) != 2) {
|
||||
return IMGTOOLERR_READERROR;
|
||||
}
|
||||
if (i < WORDS_PER_SECTOR_W_MARGIN) {
|
||||
@ -432,12 +432,12 @@ tape_pos_t tape_image_t::block_end_pos(tape_pos_t pos , const tape_word_t *block
|
||||
return pos;
|
||||
}
|
||||
|
||||
bool tape_image_t::save_word(imgtool_stream *stream , tape_pos_t& pos , tape_word_t w)
|
||||
bool tape_image_t::save_word(imgtool::stream *stream , tape_pos_t& pos , tape_word_t w)
|
||||
{
|
||||
UINT8 tmp[ 2 ];
|
||||
|
||||
place_integer_le(tmp , 0 , 2 , w);
|
||||
if (stream_write(stream , tmp , 2) != 2) {
|
||||
if (stream->write(tmp , 2) != 2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -446,18 +446,18 @@ bool tape_image_t::save_word(imgtool_stream *stream , tape_pos_t& pos , tape_wor
|
||||
return true;
|
||||
}
|
||||
|
||||
bool tape_image_t::save_words(imgtool_stream *stream , tape_pos_t& pos , const tape_word_t *block , unsigned block_len)
|
||||
bool tape_image_t::save_words(imgtool::stream *stream , tape_pos_t& pos , const tape_word_t *block , unsigned block_len)
|
||||
{
|
||||
UINT8 tmp[ 4 ];
|
||||
|
||||
// Number of words (including preamble)
|
||||
place_integer_le(tmp , 0 , 4 , block_len + 1);
|
||||
if (stream_write(stream , tmp , 4) != 4) {
|
||||
if (stream->write(tmp , 4) != 4) {
|
||||
return false;
|
||||
}
|
||||
// Start position
|
||||
place_integer_le(tmp , 0 , 4 , pos);
|
||||
if (stream_write(stream , tmp , 4) != 4) {
|
||||
if (stream->write(tmp , 4) != 4) {
|
||||
return false;
|
||||
}
|
||||
// Preamble
|
||||
@ -483,18 +483,18 @@ tape_word_t tape_image_t::checksum(const tape_word_t *block , unsigned block_len
|
||||
return csum & 0xffff;
|
||||
}
|
||||
|
||||
imgtoolerr_t tape_image_t::save_to_file(imgtool_stream *stream)
|
||||
imgtoolerr_t tape_image_t::save_to_file(imgtool::stream *stream)
|
||||
{
|
||||
// Encode copies of directory into sectors
|
||||
encode_dir();
|
||||
|
||||
// Store sectors
|
||||
stream_seek(stream , 0 , SEEK_SET);
|
||||
stream->seek(0 , SEEK_SET);
|
||||
|
||||
UINT8 tmp[ 4 ];
|
||||
|
||||
place_integer_be(tmp , 0 , 4 , MAGIC);
|
||||
if (stream_write(stream , tmp , 4) != 4) {
|
||||
if (stream->write(tmp , 4) != 4) {
|
||||
return IMGTOOLERR_WRITEERROR;
|
||||
}
|
||||
|
||||
@ -504,7 +504,7 @@ imgtoolerr_t tape_image_t::save_to_file(imgtool_stream *stream)
|
||||
if (i == TOT_SECTORS / 2) {
|
||||
// Track 0 -> 1
|
||||
place_integer_le(tmp , 0 , 4 , (UINT32)-1);
|
||||
if (stream_write(stream , tmp , 4) != 4) {
|
||||
if (stream->write(tmp , 4) != 4) {
|
||||
return IMGTOOLERR_WRITEERROR;
|
||||
}
|
||||
}
|
||||
@ -574,7 +574,7 @@ imgtoolerr_t tape_image_t::save_to_file(imgtool_stream *stream)
|
||||
}
|
||||
|
||||
place_integer_le(tmp , 0 , 4 , (UINT32)-1);
|
||||
if (stream_write(stream , tmp , 4) != 4) {
|
||||
if (stream->write(tmp , 4) != 4) {
|
||||
return IMGTOOLERR_WRITEERROR;
|
||||
}
|
||||
|
||||
@ -1042,22 +1042,22 @@ static tape_image_t& get_tape_image(tape_state_t& ts)
|
||||
/********************************************************************************
|
||||
* Imgtool functions
|
||||
********************************************************************************/
|
||||
static imgtoolerr_t hp9845_tape_open(imgtool::image *image, imgtool_stream *stream)
|
||||
static imgtoolerr_t hp9845_tape_open(imgtool::image *image, imgtool::stream &stream)
|
||||
{
|
||||
tape_state_t& state = get_tape_state(image);
|
||||
|
||||
state.stream = stream;
|
||||
state.stream = &stream;
|
||||
|
||||
tape_image_t& tape_image = get_tape_image(state);
|
||||
|
||||
return tape_image.load_from_file(stream);
|
||||
return tape_image.load_from_file(&stream);
|
||||
}
|
||||
|
||||
static imgtoolerr_t hp9845_tape_create(imgtool::image *image, imgtool_stream *stream, util::option_resolution *opts)
|
||||
static imgtoolerr_t hp9845_tape_create(imgtool::image *image, imgtool::stream &stream, util::option_resolution *opts)
|
||||
{
|
||||
tape_state_t& state = get_tape_state(image);
|
||||
|
||||
state.stream = stream;
|
||||
state.stream = &stream;
|
||||
|
||||
tape_image_t& tape_image = get_tape_image(state);
|
||||
|
||||
@ -1075,7 +1075,7 @@ static void hp9845_tape_close(imgtool::image *image)
|
||||
(void)tape_image.save_to_file(state.stream);
|
||||
}
|
||||
|
||||
stream_close(state.stream);
|
||||
delete state.stream;
|
||||
|
||||
// Free tape_image
|
||||
global_free(&tape_image);
|
||||
@ -1125,7 +1125,7 @@ static imgtoolerr_t hp9845_tape_free_space(imgtool::partition *partition, UINT64
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
|
||||
static imgtoolerr_t hp9845_tape_read_file(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf)
|
||||
static imgtoolerr_t hp9845_tape_read_file(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
tape_state_t& state = get_tape_state(&partition->image());
|
||||
tape_image_t& tape_image = get_tape_image(state);
|
||||
@ -1153,13 +1153,13 @@ static imgtoolerr_t hp9845_tape_read_file(imgtool::partition *partition, const c
|
||||
tape_image_t::tape_word_to_bytes(buff_w[ i ], buff_b[ i * 2 ], buff_b[ i * 2 + 1 ]);
|
||||
}
|
||||
|
||||
stream_write(destf , buff_b , SECTOR_LEN);
|
||||
destf.write(buff_b , SECTOR_LEN);
|
||||
}
|
||||
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
|
||||
static imgtoolerr_t hp9845_tape_write_file(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *opts)
|
||||
static imgtoolerr_t hp9845_tape_write_file(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts)
|
||||
{
|
||||
tape_state_t& state = get_tape_state(&partition->image());
|
||||
tape_image_t& tape_image = get_tape_image(state);
|
||||
@ -1171,7 +1171,7 @@ static imgtoolerr_t hp9845_tape_write_file(imgtool::partition *partition, const
|
||||
tape_image.delete_dir_entry(idx);
|
||||
}
|
||||
|
||||
unsigned blocks = (unsigned)((stream_size(sourcef) + SECTOR_LEN - 1) / SECTOR_LEN);
|
||||
unsigned blocks = (unsigned)((sourcef.size() + SECTOR_LEN - 1) / SECTOR_LEN);
|
||||
|
||||
if (!blocks) {
|
||||
fprintf(stderr , "Null file, not writing..\n");
|
||||
@ -1199,7 +1199,7 @@ static imgtoolerr_t hp9845_tape_write_file(imgtool::partition *partition, const
|
||||
|
||||
memset(&buff_b[ 0 ] , 0 , sizeof(buff_b));
|
||||
|
||||
if (stream_read(sourcef , buff_b , SECTOR_LEN) != SECTOR_LEN && i != (blocks - 1)) {
|
||||
if (sourcef.read(buff_b , SECTOR_LEN) != SECTOR_LEN && i != (blocks - 1)) {
|
||||
return IMGTOOLERR_READERROR;
|
||||
}
|
||||
for (unsigned j = 0; j < WORDS_PER_SECTOR; j++) {
|
||||
@ -1354,22 +1354,22 @@ void hp9845_tape_get_info(const imgtool_class *imgclass, UINT32 state, union img
|
||||
/********************************************************************************
|
||||
* Filter functions
|
||||
********************************************************************************/
|
||||
static unsigned len_to_eor(imgtool_stream *inp)
|
||||
static unsigned len_to_eor(imgtool::stream &inp)
|
||||
{
|
||||
return SECTOR_LEN - (unsigned)(stream_tell(inp) % SECTOR_LEN);
|
||||
return SECTOR_LEN - (unsigned)(inp.tell() % SECTOR_LEN);
|
||||
}
|
||||
|
||||
static bool get_record_part(imgtool_stream *inp , void *buf , unsigned len)
|
||||
static bool get_record_part(imgtool::stream &inp , void *buf , unsigned len)
|
||||
{
|
||||
// Reading must never cross sector boundary
|
||||
if (len > len_to_eor(inp)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return stream_read(inp , buf , len) == len;
|
||||
return inp.read(buf, len) == len;
|
||||
}
|
||||
|
||||
static bool dump_string(imgtool_stream *inp, imgtool_stream *out , unsigned len , bool add_eoln)
|
||||
static bool dump_string(imgtool::stream &inp, imgtool::stream &out , unsigned len , bool add_eoln)
|
||||
{
|
||||
UINT8 tmp[ SECTOR_LEN ];
|
||||
|
||||
@ -1384,32 +1384,32 @@ static bool dump_string(imgtool_stream *inp, imgtool_stream *out , unsigned len
|
||||
}
|
||||
}
|
||||
|
||||
stream_write(out , tmp , len);
|
||||
out.write(tmp , len);
|
||||
if (add_eoln) {
|
||||
stream_puts(out , EOLN);
|
||||
out.puts(EOLN);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static imgtoolerr_t hp9845data_read_file(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf)
|
||||
static imgtoolerr_t hp9845data_read_file(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
imgtool_stream *inp_data;
|
||||
imgtool::stream *inp_data;
|
||||
imgtoolerr_t res;
|
||||
UINT8 tmp[ 2 ];
|
||||
|
||||
inp_data = stream_open_mem(NULL , 0);
|
||||
inp_data = imgtool::stream::open_mem(NULL , 0);
|
||||
if (inp_data == nullptr) {
|
||||
return IMGTOOLERR_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
res = hp9845_tape_read_file(partition , filename , fork , inp_data);
|
||||
res = hp9845_tape_read_file(partition , filename , fork , *inp_data);
|
||||
if (res != IMGTOOLERR_SUCCESS) {
|
||||
stream_close(inp_data);
|
||||
delete inp_data;
|
||||
return res;
|
||||
}
|
||||
|
||||
stream_seek(inp_data , 0 , SEEK_SET);
|
||||
inp_data->seek(0, SEEK_SET);
|
||||
|
||||
UINT16 rec_type;
|
||||
unsigned rec_len;
|
||||
@ -1418,7 +1418,7 @@ static imgtoolerr_t hp9845data_read_file(imgtool::partition *partition, const ch
|
||||
|
||||
do {
|
||||
// Get record type
|
||||
if (!get_record_part(inp_data , tmp , 2)) {
|
||||
if (!get_record_part(*inp_data , tmp , 2)) {
|
||||
return IMGTOOLERR_READERROR;
|
||||
}
|
||||
rec_type = (UINT16)pick_integer_be(tmp , 0 , 2);
|
||||
@ -1441,7 +1441,7 @@ static imgtoolerr_t hp9845data_read_file(imgtool::partition *partition, const ch
|
||||
return IMGTOOLERR_CORRUPTFILE;
|
||||
}
|
||||
|
||||
if (!get_record_part(inp_data , tmp , 2)) {
|
||||
if (!get_record_part(*inp_data , tmp , 2)) {
|
||||
return IMGTOOLERR_READERROR;
|
||||
}
|
||||
tmp_len = (unsigned)pick_integer_be(tmp , 0 , 2);
|
||||
@ -1456,14 +1456,14 @@ static imgtoolerr_t hp9845data_read_file(imgtool::partition *partition, const ch
|
||||
if (rec_type == REC_TYPE_FULLSTR || rec_type == REC_TYPE_ENDSTR) {
|
||||
rec_len = accum_len;
|
||||
} else {
|
||||
rec_len = std::min(accum_len , len_to_eor(inp_data));
|
||||
rec_len = std::min(accum_len , len_to_eor(*inp_data));
|
||||
}
|
||||
if (!dump_string(inp_data , destf , rec_len , rec_type == REC_TYPE_FULLSTR || rec_type == REC_TYPE_ENDSTR)) {
|
||||
if (!dump_string(*inp_data , destf , rec_len , rec_type == REC_TYPE_FULLSTR || rec_type == REC_TYPE_ENDSTR)) {
|
||||
return IMGTOOLERR_READERROR;
|
||||
}
|
||||
if (rec_len & 1) {
|
||||
// Keep length of string pieces even
|
||||
get_record_part(inp_data , tmp , 1);
|
||||
get_record_part(*inp_data , tmp , 1);
|
||||
}
|
||||
accum_len -= rec_len;
|
||||
break;
|
||||
@ -1481,7 +1481,7 @@ static imgtoolerr_t hp9845data_read_file(imgtool::partition *partition, const ch
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
|
||||
static bool split_string_n_dump(const char *s , imgtool_stream *dest)
|
||||
static bool split_string_n_dump(const char *s , imgtool::stream &dest)
|
||||
{
|
||||
unsigned s_len = strlen(s);
|
||||
UINT16 rec_type = REC_TYPE_1STSTR;
|
||||
@ -1494,7 +1494,7 @@ static bool split_string_n_dump(const char *s , imgtool_stream *dest)
|
||||
// Not enough free space at end of current record: fill with EORs
|
||||
place_integer_be(tmp , 0 , 2 , REC_TYPE_EOR);
|
||||
while (free_len) {
|
||||
if (stream_write(dest , tmp , 2) != 2) {
|
||||
if (dest.write(tmp , 2) != 2) {
|
||||
return false;
|
||||
}
|
||||
free_len -= 2;
|
||||
@ -1507,8 +1507,8 @@ static bool split_string_n_dump(const char *s , imgtool_stream *dest)
|
||||
}
|
||||
place_integer_be(tmp , 0 , 2 , rec_type);
|
||||
place_integer_be(tmp , 2 , 2 , s_len);
|
||||
if (stream_write(dest , tmp , 4) != 4 ||
|
||||
stream_write(dest , s , s_part_len) != s_part_len) {
|
||||
if (dest.write(tmp , 4) != 4 ||
|
||||
dest.write(s, s_part_len) != s_part_len) {
|
||||
return false;
|
||||
}
|
||||
rec_type = REC_TYPE_MIDSTR;
|
||||
@ -1520,24 +1520,24 @@ static bool split_string_n_dump(const char *s , imgtool_stream *dest)
|
||||
|
||||
place_integer_be(tmp , 0 , 2 , at_least_one ? REC_TYPE_ENDSTR : REC_TYPE_FULLSTR);
|
||||
place_integer_be(tmp , 2 , 2 , s_len);
|
||||
if (stream_write(dest , tmp , 4) != 4 ||
|
||||
stream_write(dest , s , s_len) != s_len) {
|
||||
if (dest.write(tmp , 4) != 4 ||
|
||||
dest.write(s , s_len) != s_len) {
|
||||
return false;
|
||||
}
|
||||
if (s_len & 1) {
|
||||
tmp[ 0 ] = 0;
|
||||
if (stream_write(dest , tmp , 1) != 1) {
|
||||
if (dest.write(tmp , 1) != 1) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static imgtoolerr_t hp9845data_write_file(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *opts)
|
||||
static imgtoolerr_t hp9845data_write_file(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts)
|
||||
{
|
||||
imgtool_stream *out_data;
|
||||
imgtool::stream *out_data;
|
||||
|
||||
out_data = stream_open_mem(NULL , 0);
|
||||
out_data = imgtool::stream::open_mem(NULL , 0);
|
||||
if (out_data == nullptr) {
|
||||
return IMGTOOLERR_OUTOFMEMORY;
|
||||
}
|
||||
@ -1546,7 +1546,7 @@ static imgtoolerr_t hp9845data_write_file(imgtool::partition *partition, const c
|
||||
char line[ 256 ];
|
||||
|
||||
// Read input file one line at time
|
||||
if (stream_core_file(sourcef)->gets(line , sizeof(line)) == nullptr) {
|
||||
if (sourcef.core_file()->gets(line , sizeof(line)) == nullptr) {
|
||||
// EOF
|
||||
break;
|
||||
}
|
||||
@ -1568,28 +1568,28 @@ static imgtoolerr_t hp9845data_write_file(imgtool::partition *partition, const c
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!split_string_n_dump(line , out_data)) {
|
||||
if (!split_string_n_dump(line, *out_data)) {
|
||||
return IMGTOOLERR_WRITEERROR;
|
||||
}
|
||||
}
|
||||
|
||||
// Fill free space of last record with EOFs
|
||||
unsigned free_len = len_to_eor(out_data);
|
||||
unsigned free_len = len_to_eor(*out_data);
|
||||
UINT8 tmp[ 2 ];
|
||||
place_integer_be(tmp , 0 , 2 , REC_TYPE_EOF);
|
||||
|
||||
while (free_len) {
|
||||
if (stream_write(out_data , tmp , 2 ) != 2) {
|
||||
if (out_data->write(tmp , 2 ) != 2) {
|
||||
return IMGTOOLERR_WRITEERROR;
|
||||
}
|
||||
free_len -= 2;
|
||||
}
|
||||
|
||||
stream_seek(out_data , 0 , SEEK_SET);
|
||||
out_data->seek(0 , SEEK_SET);
|
||||
|
||||
imgtoolerr_t res = hp9845_tape_write_file(partition , filename , fork , out_data , opts);
|
||||
imgtoolerr_t res = hp9845_tape_write_file(partition, filename, fork, *out_data, opts);
|
||||
|
||||
stream_close(out_data);
|
||||
delete out_data;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
@ -1542,7 +1542,7 @@ struct mfs_dirref
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t mfs_image_create(imgtool::image *image, imgtool_stream *stream, util::option_resolution *opts)
|
||||
static imgtoolerr_t mfs_image_create(imgtool::image *image, imgtool::stream &stream, util::option_resolution *opts)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
UINT8 buffer[512];
|
||||
@ -1606,7 +1606,7 @@ static imgtoolerr_t mfs_image_create(imgtool::image *image, imgtool_stream *stre
|
||||
|
||||
Return imgtool error code
|
||||
*/
|
||||
static imgtoolerr_t mfs_image_open(imgtool::image *image, imgtool_stream *stream)
|
||||
static imgtoolerr_t mfs_image_open(imgtool::image *image, imgtool::stream &stream)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
struct mac_l2_imgref *l2_img;
|
||||
@ -3033,7 +3033,7 @@ static int hfs_catKey_compare(const void *p1, const void *p2)
|
||||
|
||||
Return imgtool error code
|
||||
*/
|
||||
static imgtoolerr_t hfs_image_open(imgtool::image *image, imgtool_stream *stream)
|
||||
static imgtoolerr_t hfs_image_open(imgtool::image *image, imgtool::stream &stream)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
struct mac_l2_imgref *l2_img;
|
||||
@ -5277,8 +5277,8 @@ static void mac_image_info(imgtool::image *img, char *string, size_t len);
|
||||
static imgtoolerr_t mac_image_beginenum(imgtool::directory *enumeration, const char *path);
|
||||
static imgtoolerr_t mac_image_nextenum(imgtool::directory *enumeration, imgtool_dirent *ent);
|
||||
static imgtoolerr_t mac_image_freespace(imgtool::partition *partition, UINT64 *size);
|
||||
static imgtoolerr_t mac_image_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf);
|
||||
static imgtoolerr_t mac_image_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *writeoptions);
|
||||
static imgtoolerr_t mac_image_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf);
|
||||
static imgtoolerr_t mac_image_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *writeoptions);
|
||||
|
||||
#ifdef UNUSED_FUNCTION
|
||||
/*
|
||||
@ -5610,7 +5610,7 @@ static imgtoolerr_t mac_get_comment(struct mac_l2_imgref *image, mac_str255 file
|
||||
/*
|
||||
Extract a file from a disk image.
|
||||
*/
|
||||
static imgtoolerr_t mac_image_readfile(imgtool::partition *partition, const char *fpath, const char *fork, imgtool_stream *destf)
|
||||
static imgtoolerr_t mac_image_readfile(imgtool::partition *partition, const char *fpath, const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
imgtool::image *img = &partition->image();
|
||||
@ -5650,7 +5650,7 @@ static imgtoolerr_t mac_image_readfile(imgtool::partition *partition, const char
|
||||
err = mac_file_read(&fileref, run_len, buf);
|
||||
if (err)
|
||||
return err;
|
||||
if (stream_write(destf, buf, run_len) != run_len)
|
||||
if (destf.write(buf, run_len) != run_len)
|
||||
return IMGTOOLERR_WRITEERROR;
|
||||
i += run_len;
|
||||
}
|
||||
@ -5661,7 +5661,7 @@ static imgtoolerr_t mac_image_readfile(imgtool::partition *partition, const char
|
||||
/*
|
||||
Add a file to a disk image.
|
||||
*/
|
||||
static imgtoolerr_t mac_image_writefile(imgtool::partition *partition, const char *fpath, const char *fork, imgtool_stream *sourcef, util::option_resolution *writeoptions)
|
||||
static imgtoolerr_t mac_image_writefile(imgtool::partition *partition, const char *fpath, const char *fork, imgtool::stream &sourcef, util::option_resolution *writeoptions)
|
||||
{
|
||||
imgtool::image *img = &partition->image();
|
||||
struct mac_l2_imgref *image = get_imgref(img);
|
||||
@ -5694,7 +5694,7 @@ static imgtoolerr_t mac_image_writefile(imgtool::partition *partition, const cha
|
||||
memset(&cat_info, 0, sizeof(cat_info));
|
||||
set_UINT32BE(&cat_info.flFinderInfo.type, 0x3F3F3F3F);
|
||||
set_UINT32BE(&cat_info.flFinderInfo.creator, 0x3F3F3F3F);
|
||||
fork_len = stream_size(sourcef);
|
||||
fork_len = sourcef.size();
|
||||
/*comment[0] = get_UINT16BE(header.comment_len);*/ /* comment length */
|
||||
/* Next two fields are set to 0 with MFS volumes. IIRC, 0 normally
|
||||
means system script: I don't think MFS stores the file name script code
|
||||
@ -5726,7 +5726,7 @@ static imgtoolerr_t mac_image_writefile(imgtool::partition *partition, const cha
|
||||
run_len = fork_len - i;
|
||||
if (run_len > 512)
|
||||
run_len = 512;
|
||||
if (stream_read(sourcef, buf, run_len) != run_len)
|
||||
if (sourcef.read(buf, run_len) != run_len)
|
||||
return IMGTOOLERR_READERROR;
|
||||
err = mac_file_write(&fileref, run_len, buf);
|
||||
if (err)
|
||||
@ -6179,7 +6179,7 @@ static imgtoolerr_t mac_image_geticoninfo(imgtool::partition *partition, const c
|
||||
imgtoolerr_t err;
|
||||
imgtool_attribute attr_values[3];
|
||||
UINT32 type_code, creator_code, finder_flags;
|
||||
imgtool_stream *stream = NULL;
|
||||
imgtool::stream *stream = NULL;
|
||||
const void *resource_fork;
|
||||
UINT64 resource_fork_length;
|
||||
const void *bundle;
|
||||
@ -6205,7 +6205,7 @@ static imgtoolerr_t mac_image_geticoninfo(imgtool::partition *partition, const c
|
||||
if (!(finder_flags & 0x2000) && (type_code != /* APPL */ 0x4150504C))
|
||||
path = "Desktop\0";
|
||||
|
||||
stream = stream_open_mem(NULL, 0);
|
||||
stream = imgtool::stream::open_mem(NULL, 0);
|
||||
if (!stream)
|
||||
{
|
||||
err = IMGTOOLERR_SUCCESS;
|
||||
@ -6213,11 +6213,11 @@ static imgtoolerr_t mac_image_geticoninfo(imgtool::partition *partition, const c
|
||||
}
|
||||
|
||||
/* read in the resource fork */
|
||||
err = mac_image_readfile(partition, path, "RESOURCE_FORK", stream);
|
||||
err = mac_image_readfile(partition, path, "RESOURCE_FORK", *stream);
|
||||
if (err)
|
||||
goto done;
|
||||
resource_fork = stream_getptr(stream);
|
||||
resource_fork_length = stream_size(stream);
|
||||
resource_fork = stream->getptr();
|
||||
resource_fork_length = stream->size();
|
||||
|
||||
/* attempt to look up the bundle */
|
||||
bundle = mac_walk_resources(resource_fork, resource_fork_length, /* BNDL */ 0x424E444C,
|
||||
@ -6305,7 +6305,7 @@ static imgtoolerr_t mac_image_geticoninfo(imgtool::partition *partition, const c
|
||||
|
||||
done:
|
||||
if (stream)
|
||||
stream_close(stream);
|
||||
delete stream;
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -63,7 +63,7 @@ static UINT32 pad128(UINT32 length)
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t macbinary_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf)
|
||||
static imgtoolerr_t macbinary_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
static const UINT32 attrs[] =
|
||||
{
|
||||
@ -156,7 +156,7 @@ static imgtoolerr_t macbinary_readfile(imgtool::partition *partition, const char
|
||||
place_integer_be(header, 123, 1, 0x81);
|
||||
place_integer_be(header, 124, 2, ccitt_crc16(0, header, 124));
|
||||
|
||||
stream_write(destf, header, sizeof(header));
|
||||
destf.write(header, sizeof(header));
|
||||
|
||||
if (data_fork)
|
||||
{
|
||||
@ -164,7 +164,7 @@ static imgtoolerr_t macbinary_readfile(imgtool::partition *partition, const char
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
stream_fill(destf, 0, pad128(data_fork->size));
|
||||
destf.fill(0, pad128(data_fork->size));
|
||||
}
|
||||
|
||||
if (resource_fork)
|
||||
@ -173,7 +173,7 @@ static imgtoolerr_t macbinary_readfile(imgtool::partition *partition, const char
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
stream_fill(destf, 0, pad128(resource_fork->size));
|
||||
destf.fill(0, pad128(resource_fork->size));
|
||||
}
|
||||
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
@ -182,41 +182,41 @@ static imgtoolerr_t macbinary_readfile(imgtool::partition *partition, const char
|
||||
|
||||
|
||||
static imgtoolerr_t write_fork(imgtool::partition *partition, const char *filename, const char *fork,
|
||||
imgtool_stream *sourcef, UINT64 pos, UINT64 fork_len, util::option_resolution *opts)
|
||||
imgtool::stream &sourcef, UINT64 pos, UINT64 fork_len, util::option_resolution *opts)
|
||||
{
|
||||
imgtoolerr_t err = IMGTOOLERR_SUCCESS;
|
||||
imgtool_stream *mem_stream = NULL;
|
||||
imgtool::stream *mem_stream = NULL;
|
||||
size_t len;
|
||||
|
||||
if (fork_len > 0)
|
||||
{
|
||||
mem_stream = stream_open_mem(NULL, 0);
|
||||
mem_stream = imgtool::stream::open_mem(NULL, 0);
|
||||
if (!mem_stream)
|
||||
{
|
||||
err = IMGTOOLERR_OUTOFMEMORY;
|
||||
goto done;
|
||||
}
|
||||
|
||||
stream_seek(sourcef, pos, SEEK_SET);
|
||||
len = stream_transfer(mem_stream, sourcef, fork_len);
|
||||
sourcef.seek(pos, SEEK_SET);
|
||||
len = imgtool::stream::transfer(*mem_stream, sourcef, fork_len);
|
||||
if (len < fork_len)
|
||||
stream_fill(mem_stream, 0, fork_len);
|
||||
mem_stream->fill(0, fork_len);
|
||||
|
||||
stream_seek(mem_stream, 0, SEEK_SET);
|
||||
err = partition->write_file(filename, fork, mem_stream, opts, NULL);
|
||||
mem_stream->seek(0, SEEK_SET);
|
||||
err = partition->write_file(filename, fork, *mem_stream, opts, NULL);
|
||||
if (err)
|
||||
goto done;
|
||||
}
|
||||
|
||||
done:
|
||||
if (mem_stream)
|
||||
stream_close(mem_stream);
|
||||
delete mem_stream;
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t macbinary_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *opts)
|
||||
static imgtoolerr_t macbinary_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts)
|
||||
{
|
||||
static const UINT32 attrs[] =
|
||||
{
|
||||
@ -254,7 +254,7 @@ static imgtoolerr_t macbinary_writefile(imgtool::partition *partition, const cha
|
||||
|
||||
/* read in the header */
|
||||
memset(header, 0, sizeof(header));
|
||||
stream_read(sourcef, header, sizeof(header));
|
||||
sourcef.read(header, sizeof(header));
|
||||
|
||||
/* check magic and zero fill bytes */
|
||||
if (header[0] != 0x00)
|
||||
@ -266,7 +266,7 @@ static imgtoolerr_t macbinary_writefile(imgtool::partition *partition, const cha
|
||||
|
||||
datafork_size = pick_integer_be(header, 83, 4);
|
||||
resourcefork_size = pick_integer_be(header, 87, 4);
|
||||
total_size = stream_size(sourcef);
|
||||
total_size = sourcef.size();
|
||||
|
||||
/* size of a MacBinary header is always 128 bytes */
|
||||
if (total_size - pad128(datafork_size) - pad128(resourcefork_size) != 128)
|
||||
@ -342,7 +342,7 @@ static imgtoolerr_t macbinary_writefile(imgtool::partition *partition, const cha
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t macbinary_checkstream(imgtool_stream *stream, imgtool_suggestion_viability_t *viability)
|
||||
static imgtoolerr_t macbinary_checkstream(imgtool::stream &stream, imgtool_suggestion_viability_t *viability)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
|
||||
|
@ -622,7 +622,7 @@ done:
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t os9_diskimage_open(imgtool::image *image, imgtool_stream *stream)
|
||||
static imgtoolerr_t os9_diskimage_open(imgtool::image *image, imgtool::stream &stream)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
floperr_t ferr;
|
||||
@ -710,7 +710,7 @@ static imgtoolerr_t os9_diskimage_open(imgtool::image *image, imgtool_stream *st
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t os9_diskimage_create(imgtool::image *img, imgtool_stream *stream, util::option_resolution *opts)
|
||||
static imgtoolerr_t os9_diskimage_create(imgtool::image *img, imgtool::stream &stream, util::option_resolution *opts)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
dynamic_buffer header;
|
||||
@ -988,7 +988,7 @@ static imgtoolerr_t os9_diskimage_freespace(imgtool::partition *partition, UINT6
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t os9_diskimage_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf)
|
||||
static imgtoolerr_t os9_diskimage_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
imgtool::image *img = &partition->image();
|
||||
@ -1017,7 +1017,7 @@ static imgtoolerr_t os9_diskimage_readfile(imgtool::partition *partition, const
|
||||
buffer, used_size);
|
||||
if (err)
|
||||
return err;
|
||||
stream_write(destf, buffer, used_size);
|
||||
destf.write(buffer, used_size);
|
||||
file_size -= used_size;
|
||||
}
|
||||
}
|
||||
@ -1026,7 +1026,7 @@ static imgtoolerr_t os9_diskimage_readfile(imgtool::partition *partition, const
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t os9_diskimage_writefile(imgtool::partition *partition, const char *path, const char *fork, imgtool_stream *sourcef, util::option_resolution *opts)
|
||||
static imgtoolerr_t os9_diskimage_writefile(imgtool::partition *partition, const char *path, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
imgtool::image *image = &partition->image();
|
||||
@ -1047,7 +1047,7 @@ static imgtoolerr_t os9_diskimage_writefile(imgtool::partition *partition, const
|
||||
if (err)
|
||||
goto done;
|
||||
|
||||
sz = (UINT32) stream_size(sourcef);
|
||||
sz = (UINT32) sourcef.size();
|
||||
|
||||
err = os9_set_file_size(image, &file_info, sz);
|
||||
if (err)
|
||||
@ -1057,7 +1057,7 @@ static imgtoolerr_t os9_diskimage_writefile(imgtool::partition *partition, const
|
||||
{
|
||||
write_size = (std::min<UINT64>)(sz, disk_info->sector_size);
|
||||
|
||||
stream_read(sourcef, &buf[0], write_size);
|
||||
sourcef.read(&buf[0], write_size);
|
||||
|
||||
while(count == 0)
|
||||
{
|
||||
|
@ -17,7 +17,7 @@
|
||||
#define FAT_SECLEN 512
|
||||
|
||||
|
||||
static imgtoolerr_t fat_image_create(imgtool::image *image, imgtool_stream *stream, util::option_resolution *opts)
|
||||
static imgtoolerr_t fat_image_create(imgtool::image *image, imgtool::stream &stream, util::option_resolution *opts)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
UINT32 tracks, heads, sectors;
|
||||
|
@ -94,14 +94,14 @@ struct pc_chd_image_info
|
||||
|
||||
|
||||
|
||||
static pc_chd_image_info *pc_chd_get_image_info(imgtool::image *image)
|
||||
static pc_chd_image_info *pc_chd_get_image_info(imgtool::image &image)
|
||||
{
|
||||
return (pc_chd_image_info *) image->extra_bytes();
|
||||
return (pc_chd_image_info *) image.extra_bytes();
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void pc_chd_locate_block(imgtool::image *image, UINT64 block, UINT32 *cylinder, UINT32 *head, UINT32 *sector)
|
||||
static void pc_chd_locate_block(imgtool::image &image, UINT64 block, UINT32 *cylinder, UINT32 *head, UINT32 *sector)
|
||||
{
|
||||
pc_chd_image_info *info;
|
||||
const hard_disk_info *hd_info;
|
||||
@ -116,7 +116,7 @@ static void pc_chd_locate_block(imgtool::image *image, UINT64 block, UINT32 *cyl
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t pc_chd_partition_create(imgtool::image *image, int partition_index, UINT64 first_block, UINT64 block_count)
|
||||
static imgtoolerr_t pc_chd_partition_create(imgtool::image &image, int partition_index, UINT64 first_block, UINT64 block_count)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
UINT8 header_block[FAT_SECLEN];
|
||||
@ -141,12 +141,12 @@ static imgtoolerr_t pc_chd_partition_create(imgtool::image *image, int partition
|
||||
imgtool_get_info_fct(&imgclass, IMGTOOLINFO_PTR_CREATE_PARTITION);
|
||||
|
||||
/* first create the actual partition */
|
||||
err = fat_partition_create(image, first_block, block_count);
|
||||
err = fat_partition_create(&image, first_block, block_count);
|
||||
if (err)
|
||||
goto done;
|
||||
|
||||
/* read the first block of the partition, to determine the type of FAT */
|
||||
err = image->read_block(first_block, partition_block);
|
||||
err = image.read_block(first_block, partition_block);
|
||||
if (err)
|
||||
goto done;
|
||||
fat_type = &partition_block[54];
|
||||
@ -162,7 +162,7 @@ static imgtoolerr_t pc_chd_partition_create(imgtool::image *image, int partition
|
||||
partition_type = 0x0B;
|
||||
|
||||
/* read the partition header */
|
||||
err = image->read_block(0, header_block);
|
||||
err = image.read_block(0, header_block);
|
||||
if (err)
|
||||
goto done;
|
||||
|
||||
@ -180,7 +180,7 @@ static imgtoolerr_t pc_chd_partition_create(imgtool::image *image, int partition
|
||||
place_integer_le(partition_entry, 12, 4, block_count);
|
||||
|
||||
/* write the partition header */
|
||||
err = image->write_block(0, header_block);
|
||||
err = image.write_block(0, header_block);
|
||||
if (err)
|
||||
goto done;
|
||||
|
||||
@ -190,7 +190,7 @@ done:
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t pc_chd_read_partition_header(imgtool::image *image)
|
||||
static imgtoolerr_t pc_chd_read_partition_header(imgtool::image &image)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
int i;
|
||||
@ -201,7 +201,7 @@ static imgtoolerr_t pc_chd_read_partition_header(imgtool::image *image)
|
||||
info = pc_chd_get_image_info(image);
|
||||
|
||||
/* read the initial block */
|
||||
err = image->read_block(0, buffer);
|
||||
err = image.read_block(0, buffer);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@ -232,7 +232,7 @@ static imgtoolerr_t pc_chd_read_partition_header(imgtool::image *image)
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t pc_chd_image_create(imgtool::image *image, imgtool_stream *f, util::option_resolution *opts)
|
||||
static imgtoolerr_t pc_chd_image_create(imgtool::image *image, imgtool::stream &f, util::option_resolution *opts)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
UINT32 cylinders, heads, sectors;
|
||||
@ -243,7 +243,7 @@ static imgtoolerr_t pc_chd_image_create(imgtool::image *image, imgtool_stream *f
|
||||
heads = opts->lookup_int('H');
|
||||
sectors = opts->lookup_int('S');
|
||||
|
||||
info = pc_chd_get_image_info(image);
|
||||
info = pc_chd_get_image_info(*image);
|
||||
|
||||
/* create the hard disk image */
|
||||
err = imghd_create(f, 0, cylinders, heads, sectors, FAT_SECLEN);
|
||||
@ -262,11 +262,11 @@ static imgtoolerr_t pc_chd_image_create(imgtool::image *image, imgtool_stream *f
|
||||
if (err)
|
||||
goto done;
|
||||
|
||||
err = pc_chd_partition_create(image, 0, 1, cylinders * heads * sectors - 1);
|
||||
err = pc_chd_partition_create(*image, 0, 1, cylinders * heads * sectors - 1);
|
||||
if (err)
|
||||
goto done;
|
||||
|
||||
err = pc_chd_read_partition_header(image);
|
||||
err = pc_chd_read_partition_header(*image);
|
||||
if (err)
|
||||
goto done;
|
||||
|
||||
@ -278,19 +278,19 @@ done:
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t pc_chd_image_open(imgtool::image *image, imgtool_stream *stream)
|
||||
static imgtoolerr_t pc_chd_image_open(imgtool::image *image, imgtool::stream &stream)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
pc_chd_image_info *info;
|
||||
|
||||
info = pc_chd_get_image_info(image);
|
||||
info = pc_chd_get_image_info(*image);
|
||||
|
||||
/* open the hard drive */
|
||||
err = imghd_open(stream, &info->hard_disk);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = pc_chd_read_partition_header(image);
|
||||
err = pc_chd_read_partition_header(*image);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@ -302,7 +302,7 @@ static imgtoolerr_t pc_chd_image_open(imgtool::image *image, imgtool_stream *str
|
||||
static void pc_chd_image_close(imgtool::image *image)
|
||||
{
|
||||
pc_chd_image_info *info;
|
||||
info = pc_chd_get_image_info(image);
|
||||
info = pc_chd_get_image_info(*image);
|
||||
imghd_close(&info->hard_disk);
|
||||
}
|
||||
|
||||
@ -313,7 +313,7 @@ static imgtoolerr_t pc_chd_image_get_geometry(imgtool::image *image, UINT32 *tra
|
||||
pc_chd_image_info *info;
|
||||
const hard_disk_info *hd_info;
|
||||
|
||||
info = pc_chd_get_image_info(image);
|
||||
info = pc_chd_get_image_info(*image);
|
||||
hd_info = imghd_get_header(&info->hard_disk);
|
||||
|
||||
*tracks = hd_info->cylinders;
|
||||
@ -324,12 +324,12 @@ static imgtoolerr_t pc_chd_image_get_geometry(imgtool::image *image, UINT32 *tra
|
||||
|
||||
|
||||
|
||||
static UINT32 pc_chd_calc_lbasector(pc_chd_image_info *info, UINT32 track, UINT32 head, UINT32 sector)
|
||||
static UINT32 pc_chd_calc_lbasector(pc_chd_image_info &info, UINT32 track, UINT32 head, UINT32 sector)
|
||||
{
|
||||
UINT32 lbasector;
|
||||
const hard_disk_info *hd_info;
|
||||
|
||||
hd_info = imghd_get_header(&info->hard_disk);
|
||||
hd_info = imghd_get_header(&info.hard_disk);
|
||||
lbasector = track;
|
||||
lbasector *= hd_info->heads;
|
||||
lbasector += head;
|
||||
@ -342,7 +342,7 @@ static UINT32 pc_chd_calc_lbasector(pc_chd_image_info *info, UINT32 track, UINT3
|
||||
|
||||
static imgtoolerr_t pc_chd_image_readsector(imgtool::image *image, UINT32 track, UINT32 head, UINT32 sector, std::vector<UINT8> &buffer)
|
||||
{
|
||||
pc_chd_image_info *info = pc_chd_get_image_info(image);
|
||||
pc_chd_image_info *info = pc_chd_get_image_info(*image);
|
||||
|
||||
// get the sector size and resize the buffer
|
||||
UINT32 sector_size = imghd_get_header(&info->hard_disk)->sectorbytes;
|
||||
@ -351,7 +351,7 @@ static imgtoolerr_t pc_chd_image_readsector(imgtool::image *image, UINT32 track,
|
||||
|
||||
// read the data
|
||||
return imghd_read(&info->hard_disk,
|
||||
pc_chd_calc_lbasector(info, track, head, sector),
|
||||
pc_chd_calc_lbasector(*info, track, head, sector),
|
||||
&buffer[0]);
|
||||
}
|
||||
|
||||
@ -360,9 +360,9 @@ static imgtoolerr_t pc_chd_image_readsector(imgtool::image *image, UINT32 track,
|
||||
static imgtoolerr_t pc_chd_image_writesector(imgtool::image *image, UINT32 track, UINT32 head, UINT32 sector, const void *buffer, size_t len, int ddam)
|
||||
{
|
||||
pc_chd_image_info *info;
|
||||
info = pc_chd_get_image_info(image);
|
||||
info = pc_chd_get_image_info(*image);
|
||||
return imghd_write(&info->hard_disk,
|
||||
pc_chd_calc_lbasector(info, track, head, sector),
|
||||
pc_chd_calc_lbasector(*info, track, head, sector),
|
||||
buffer);
|
||||
}
|
||||
|
||||
@ -371,7 +371,7 @@ static imgtoolerr_t pc_chd_image_writesector(imgtool::image *image, UINT32 track
|
||||
static imgtoolerr_t pc_chd_image_readblock(imgtool::image *image, void *buffer, UINT64 block)
|
||||
{
|
||||
pc_chd_image_info *info;
|
||||
info = pc_chd_get_image_info(image);
|
||||
info = pc_chd_get_image_info(*image);
|
||||
return imghd_read(&info->hard_disk, block, buffer);
|
||||
}
|
||||
|
||||
@ -380,7 +380,7 @@ static imgtoolerr_t pc_chd_image_readblock(imgtool::image *image, void *buffer,
|
||||
static imgtoolerr_t pc_chd_image_writeblock(imgtool::image *image, const void *buffer, UINT64 block)
|
||||
{
|
||||
pc_chd_image_info *info;
|
||||
info = pc_chd_get_image_info(image);
|
||||
info = pc_chd_get_image_info(*image);
|
||||
return imghd_write(&info->hard_disk, block, buffer);
|
||||
}
|
||||
|
||||
@ -391,7 +391,7 @@ static imgtoolerr_t pc_chd_list_partitions(imgtool::image *image, imgtool_partit
|
||||
pc_chd_image_info *info;
|
||||
size_t i;
|
||||
|
||||
info = pc_chd_get_image_info(image);
|
||||
info = pc_chd_get_image_info(*image);
|
||||
|
||||
for (i = 0; i < std::min(size_t(4), len); i++)
|
||||
{
|
||||
|
@ -502,7 +502,7 @@ static imgtoolerr_t prodos_diskimage_open(imgtool::image *image)
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t prodos_diskimage_open_525(imgtool::image *image, imgtool_stream *stream)
|
||||
static imgtoolerr_t prodos_diskimage_open_525(imgtool::image *image, imgtool::stream &stream)
|
||||
{
|
||||
prodos_setprocs_525(image);
|
||||
return prodos_diskimage_open(image);
|
||||
@ -510,7 +510,7 @@ static imgtoolerr_t prodos_diskimage_open_525(imgtool::image *image, imgtool_str
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t prodos_diskimage_open_35(imgtool::image *image, imgtool_stream *stream)
|
||||
static imgtoolerr_t prodos_diskimage_open_35(imgtool::image *image, imgtool::stream &stream)
|
||||
{
|
||||
prodos_setprocs_35(image);
|
||||
return prodos_diskimage_open(image);
|
||||
@ -702,7 +702,7 @@ static imgtoolerr_t prodos_diskimage_create(imgtool::image *image, util::option_
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t prodos_diskimage_create_525(imgtool::image *image, imgtool_stream *stream, util::option_resolution *opts)
|
||||
static imgtoolerr_t prodos_diskimage_create_525(imgtool::image *image, imgtool::stream &stream, util::option_resolution *opts)
|
||||
{
|
||||
prodos_setprocs_525(image);
|
||||
return prodos_diskimage_create(image, opts);
|
||||
@ -710,7 +710,7 @@ static imgtoolerr_t prodos_diskimage_create_525(imgtool::image *image, imgtool_s
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t prodos_diskimage_create_35(imgtool::image *image, imgtool_stream *stream, util::option_resolution *opts)
|
||||
static imgtoolerr_t prodos_diskimage_create_35(imgtool::image *image, imgtool::stream &stream, util::option_resolution *opts)
|
||||
{
|
||||
prodos_setprocs_35(image);
|
||||
return prodos_diskimage_create(image, opts);
|
||||
@ -1571,7 +1571,7 @@ static imgtoolerr_t prodos_diskimage_nextenum(imgtool::directory *enumeration, i
|
||||
|
||||
|
||||
static imgtoolerr_t prodos_read_file_tree(imgtool::image *image, UINT32 *filesize,
|
||||
UINT32 block, int nest_level, imgtool_stream *destf)
|
||||
UINT32 block, int nest_level, imgtool::stream &destf)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
prodos_diskinfo *di;
|
||||
@ -1612,7 +1612,7 @@ static imgtoolerr_t prodos_read_file_tree(imgtool::image *image, UINT32 *filesiz
|
||||
{
|
||||
/* this is a leaf block */
|
||||
bytes_to_write = std::min(size_t(*filesize), sizeof(buffer));
|
||||
stream_write(destf, buffer, bytes_to_write);
|
||||
destf.write(buffer, bytes_to_write);
|
||||
*filesize -= bytes_to_write;
|
||||
}
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
@ -1621,7 +1621,7 @@ static imgtoolerr_t prodos_read_file_tree(imgtool::image *image, UINT32 *filesiz
|
||||
|
||||
|
||||
static imgtoolerr_t prodos_write_file_tree(imgtool::image *image, UINT32 *filesize,
|
||||
UINT32 block, int nest_level, imgtool_stream *sourcef)
|
||||
UINT32 block, int nest_level, imgtool::stream &sourcef)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
prodos_diskinfo *di;
|
||||
@ -1663,7 +1663,7 @@ static imgtoolerr_t prodos_write_file_tree(imgtool::image *image, UINT32 *filesi
|
||||
{
|
||||
/* this is a leaf block */
|
||||
bytes_to_read = std::min(size_t(*filesize), sizeof(buffer));
|
||||
stream_read(sourcef, buffer, bytes_to_read);
|
||||
sourcef.read(buffer, bytes_to_read);
|
||||
*filesize -= bytes_to_read;
|
||||
|
||||
err = prodos_save_block(image, block, buffer);
|
||||
@ -1704,7 +1704,7 @@ done:
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t prodos_diskimage_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf)
|
||||
static imgtoolerr_t prodos_diskimage_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
imgtool::image *image = &partition->image();
|
||||
@ -1737,14 +1737,14 @@ static imgtoolerr_t prodos_diskimage_readfile(imgtool::partition *partition, con
|
||||
|
||||
/* have we not actually received the correct amount of bytes? if not, fill in the rest */
|
||||
if (ent.filesize[fork_num] > 0)
|
||||
stream_fill(destf, 0, ent.filesize[fork_num]);
|
||||
destf.fill(0, ent.filesize[fork_num]);
|
||||
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t prodos_diskimage_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *opts)
|
||||
static imgtoolerr_t prodos_diskimage_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
imgtool::image *image = &partition->image();
|
||||
@ -1753,7 +1753,7 @@ static imgtoolerr_t prodos_diskimage_writefile(imgtool::partition *partition, co
|
||||
UINT64 file_size;
|
||||
mac_fork_t fork_num;
|
||||
|
||||
file_size = stream_size(sourcef);
|
||||
file_size = sourcef.size();
|
||||
|
||||
err = prodos_lookup_path(image, filename, CREATE_FILE, &direnum, &ent);
|
||||
if (err)
|
||||
|
@ -38,7 +38,7 @@ struct psion_file
|
||||
|
||||
struct psion_pack
|
||||
{
|
||||
imgtool_stream *stream;
|
||||
imgtool::stream *stream;
|
||||
|
||||
UINT16 eop;
|
||||
struct psion_file pack_index[MAXFILES];
|
||||
@ -59,12 +59,12 @@ UINT16 head_checksum(UINT8* data)
|
||||
return checksum;
|
||||
}
|
||||
|
||||
UINT16 get_long_rec_size(imgtool_stream *stream)
|
||||
UINT16 get_long_rec_size(imgtool::stream &stream)
|
||||
{
|
||||
UINT8 size_h, size_l;
|
||||
|
||||
stream_read(stream, &size_h, 1);
|
||||
stream_read(stream, &size_l, 1);
|
||||
stream.read(&size_h, 1);
|
||||
stream.read(&size_l, 1);
|
||||
|
||||
return (size_h<<8) | size_l;
|
||||
}
|
||||
@ -78,88 +78,88 @@ UINT32 update_pack_index(psion_pack *pack)
|
||||
memset(pack->pack_index, 0, sizeof(psion_file) * MAXFILES);
|
||||
|
||||
// start at the first record
|
||||
stream_seek(pack->stream, 0x10, SEEK_SET);
|
||||
pack->stream->seek(0x10, SEEK_SET);
|
||||
|
||||
do
|
||||
{
|
||||
stream_read(pack->stream, &data, 1);
|
||||
pack->stream->read(&data, 1);
|
||||
|
||||
if(data == 0xff)
|
||||
{
|
||||
pack->eop = stream_tell(pack->stream) - 1;
|
||||
pack->eop = pack->stream->tell() - 1;
|
||||
return TRUE;
|
||||
}
|
||||
else if (data == 0x02)
|
||||
{
|
||||
// long record without name are ignored
|
||||
stream_read(pack->stream, &data, 1);
|
||||
size = get_long_rec_size(pack->stream);
|
||||
stream_seek(pack->stream, size, SEEK_CUR);
|
||||
pack->stream->read(&data, 1);
|
||||
size = get_long_rec_size(*pack->stream);
|
||||
pack->stream->seek(size, SEEK_CUR);
|
||||
}
|
||||
else
|
||||
{
|
||||
stream_read(pack->stream, &type, 1);
|
||||
pack->stream->read(&type, 1);
|
||||
|
||||
// deleted record are not listed
|
||||
if (type < 0x90 && (type & 0x80))
|
||||
{
|
||||
pack->pack_index[index].type = type;
|
||||
stream_read(pack->stream, &pack->pack_index[index].filename, 8);
|
||||
stream_read(pack->stream, &pack->pack_index[index].id, 1);
|
||||
pack->pack_index[index].name_rec = stream_tell(pack->stream) - 11;
|
||||
pack->stream->read(&pack->pack_index[index].filename, 8);
|
||||
pack->stream->read(&pack->pack_index[index].id, 1);
|
||||
pack->pack_index[index].name_rec = pack->stream->tell() - 11;
|
||||
|
||||
//check for data record
|
||||
stream_read(pack->stream, &data, 1);
|
||||
pack->stream->read(&data, 1);
|
||||
if (data == 0x02)
|
||||
pack->pack_index[index].data_rec = stream_tell(pack->stream) - 1;
|
||||
pack->pack_index[index].data_rec = pack->stream->tell() - 1;
|
||||
|
||||
stream_seek(pack->stream, -1, SEEK_CUR);
|
||||
pack->stream->seek(-1, SEEK_CUR);
|
||||
|
||||
index++;
|
||||
}
|
||||
else
|
||||
stream_seek(pack->stream, data, SEEK_CUR);
|
||||
pack->stream->seek(data, SEEK_CUR);
|
||||
}
|
||||
|
||||
} while (stream_size(pack->stream) > stream_tell(pack->stream));
|
||||
} while (pack->stream->size() > pack->stream->tell());
|
||||
|
||||
// corrupted image
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int seek_next_record(imgtool_stream *stream, UINT8 id)
|
||||
int seek_next_record(imgtool::stream &stream, UINT8 id)
|
||||
{
|
||||
UINT8 data, rec_id;
|
||||
UINT16 size;
|
||||
|
||||
do
|
||||
{
|
||||
stream_read(stream, &data, 1);
|
||||
stream.read(&data, 1);
|
||||
|
||||
if(data == 0xff)
|
||||
break;
|
||||
|
||||
if (data == 2)
|
||||
{
|
||||
stream_read(stream, &rec_id, 1);
|
||||
stream.read(&rec_id, 1);
|
||||
size = get_long_rec_size(stream);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
stream_read(stream, &rec_id, 1);
|
||||
stream.read(&rec_id, 1);
|
||||
if (id == rec_id)
|
||||
{
|
||||
stream_seek(stream, -2, SEEK_CUR);
|
||||
stream.seek(-2, SEEK_CUR);
|
||||
return TRUE;
|
||||
}
|
||||
size = data;
|
||||
}
|
||||
|
||||
// next record
|
||||
stream_seek(stream, size, SEEK_CUR);
|
||||
stream.seek(size, SEEK_CUR);
|
||||
|
||||
} while (stream_size(stream) > stream_tell(stream));
|
||||
} while (stream.size() > stream.tell());
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@ -194,7 +194,7 @@ UINT8 get_free_file_id(psion_pack *pack)
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
void put_name_record(imgtool_stream *stream, const char* filename, UINT8 record_type, UINT8 record_id)
|
||||
static void put_name_record(imgtool::stream &stream, const char* filename, UINT8 record_type, UINT8 record_id)
|
||||
{
|
||||
char data[0x10];
|
||||
int i = 0;
|
||||
@ -211,35 +211,35 @@ void put_name_record(imgtool_stream *stream, const char* filename, UINT8 record_
|
||||
|
||||
data[i++] = record_id;
|
||||
|
||||
stream_write(stream, data, i);
|
||||
stream.write(data, i);
|
||||
}
|
||||
|
||||
void update_opk_head(imgtool_stream *stream)
|
||||
static void update_opk_head(imgtool::stream &stream)
|
||||
{
|
||||
UINT16 size = stream_size(stream) - 6;
|
||||
UINT16 size = stream.size() - 6;
|
||||
|
||||
stream_seek(stream, 4, SEEK_SET);
|
||||
stream_putc(stream, (size>>8) & 0xff);
|
||||
stream_putc(stream, size & 0xff);
|
||||
stream.seek(4, SEEK_SET);
|
||||
stream.putc((size>>8) & 0xff);
|
||||
stream.putc(size & 0xff);
|
||||
}
|
||||
|
||||
char *stream_getline(imgtool_stream *source, UINT16 max_len)
|
||||
char *stream_getline(imgtool::stream &source, UINT16 max_len)
|
||||
{
|
||||
UINT16 pos = 0;
|
||||
char data;
|
||||
char *line = (char*)malloc(max_len);
|
||||
memset(line, 0, max_len);
|
||||
|
||||
while (pos < max_len && stream_size(source) > stream_tell(source))
|
||||
while (pos < max_len && source.size() > source.tell())
|
||||
{
|
||||
stream_read(source, &data, 1);
|
||||
source.read(&data, 1);
|
||||
|
||||
switch(data)
|
||||
{
|
||||
case '\r':
|
||||
stream_read(source, &data, 1);
|
||||
source.read(&data, 1);
|
||||
if (data != '\n')
|
||||
stream_seek(source, -1, SEEK_CUR);
|
||||
source.seek(-1, SEEK_CUR);
|
||||
case '\n':
|
||||
return line;
|
||||
default:
|
||||
@ -255,21 +255,21 @@ char *stream_getline(imgtool_stream *source, UINT16 max_len)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
UINT16 put_odb(imgtool_stream *instream, imgtool_stream *outstream, UINT8 file_id)
|
||||
UINT16 put_odb(imgtool::stream &instream, imgtool::stream &outstream, UINT8 file_id)
|
||||
{
|
||||
char *line;
|
||||
UINT16 out_size = 0;
|
||||
|
||||
// reset stream
|
||||
stream_seek(instream, 0, SEEK_SET);
|
||||
instream.seek(0, SEEK_SET);
|
||||
|
||||
while ((line = stream_getline(instream, 256)))
|
||||
{
|
||||
UINT16 len = strlen(line);
|
||||
|
||||
stream_putc(outstream, (UINT8)len);
|
||||
stream_putc(outstream, file_id);
|
||||
stream_write(outstream, line, len);
|
||||
outstream.putc((UINT8)len);
|
||||
outstream.putc(file_id);
|
||||
outstream.write(line, len);
|
||||
|
||||
out_size += (len + 1);
|
||||
|
||||
@ -277,37 +277,37 @@ UINT16 put_odb(imgtool_stream *instream, imgtool_stream *outstream, UINT8 file_i
|
||||
}
|
||||
|
||||
// end of pack
|
||||
stream_fill(outstream, 0xff, 2);
|
||||
outstream.fill(0xff, 2);
|
||||
|
||||
return out_size + 4;
|
||||
}
|
||||
|
||||
UINT16 put_ob3(imgtool_stream *instream, imgtool_stream *outstream)
|
||||
UINT16 put_ob3(imgtool::stream &instream, imgtool::stream &outstream)
|
||||
{
|
||||
UINT16 size = stream_size(instream) - 6;
|
||||
UINT16 size = instream.size() - 6;
|
||||
dynamic_buffer buffer(size);
|
||||
|
||||
stream_seek(instream, 6, SEEK_SET);
|
||||
stream_read(instream, &buffer[0], size);
|
||||
instream.seek(6, SEEK_SET);
|
||||
instream.read(&buffer[0], size);
|
||||
|
||||
stream_write(outstream, &buffer[0], size);
|
||||
outstream.write(&buffer[0], size);
|
||||
|
||||
// end of pack
|
||||
stream_fill(outstream, 0xff, 2);
|
||||
outstream.fill(0xff, 2);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
UINT16 put_opl(imgtool_stream *instream, imgtool_stream *outstream)
|
||||
UINT16 put_opl(imgtool::stream &instream, imgtool::stream &outstream)
|
||||
{
|
||||
UINT16 out_size = 0;
|
||||
UINT32 rec_start = stream_tell(outstream);
|
||||
UINT32 rec_start = outstream.tell();
|
||||
char *line;
|
||||
|
||||
// reset stream
|
||||
stream_seek(instream, 0, SEEK_SET);
|
||||
instream.seek(0, SEEK_SET);
|
||||
|
||||
stream_fill(outstream, 0x00, 4);
|
||||
outstream.fill(0x00, 4);
|
||||
|
||||
// replace all eol with 0x00
|
||||
while ((line = stream_getline(instream, 256)))
|
||||
@ -316,24 +316,24 @@ UINT16 put_opl(imgtool_stream *instream, imgtool_stream *outstream)
|
||||
for (int i=0; i<strlen(line); i++)
|
||||
if (line[i] == '\t') line[i] = ' ';
|
||||
|
||||
stream_write(outstream, line, strlen(line));
|
||||
stream_putc(outstream, 0x00);
|
||||
outstream.write(line, strlen(line));
|
||||
outstream.putc(0x00);
|
||||
out_size += strlen(line) + 1;
|
||||
free(line);
|
||||
}
|
||||
|
||||
// end of pack
|
||||
stream_fill(outstream, 0xff, 2);
|
||||
outstream.fill(0xff, 2);
|
||||
|
||||
// update the size in the head
|
||||
stream_seek(outstream, rec_start + 2, SEEK_SET);
|
||||
stream_putc(outstream, (out_size>>8) & 0xff);
|
||||
stream_putc(outstream, out_size & 0xff);
|
||||
outstream.seek(rec_start + 2, SEEK_SET);
|
||||
outstream.putc((out_size>>8) & 0xff);
|
||||
outstream.putc(out_size & 0xff);
|
||||
|
||||
return out_size + 4;
|
||||
}
|
||||
|
||||
UINT16 get_odb(imgtool_stream *instream, imgtool_stream *outstream, UINT8 type, UINT8 file_id)
|
||||
UINT16 get_odb(imgtool::stream &instream, imgtool::stream &outstream, UINT8 type, UINT8 file_id)
|
||||
{
|
||||
UINT8 data, *buffer;
|
||||
UINT16 out_size = 0;
|
||||
@ -341,13 +341,13 @@ UINT16 get_odb(imgtool_stream *instream, imgtool_stream *outstream, UINT8 type,
|
||||
if (file_id >= 0x90)
|
||||
while (seek_next_record(instream, file_id))
|
||||
{
|
||||
stream_read(instream, &data, 1);
|
||||
stream_seek(instream, 1, SEEK_CUR);
|
||||
instream.read(&data, 1);
|
||||
instream.seek(1, SEEK_CUR);
|
||||
buffer = (UINT8*)malloc(data);
|
||||
stream_read(instream, buffer, data);
|
||||
stream_write(outstream, buffer, data);
|
||||
stream_putc(outstream, '\r');
|
||||
stream_putc(outstream, '\n');
|
||||
instream.read(buffer, data);
|
||||
outstream.write(buffer, data);
|
||||
outstream.putc('\r');
|
||||
outstream.putc('\n');
|
||||
free (buffer);
|
||||
out_size += data;
|
||||
}
|
||||
@ -355,47 +355,47 @@ UINT16 get_odb(imgtool_stream *instream, imgtool_stream *outstream, UINT8 type,
|
||||
return out_size;
|
||||
}
|
||||
|
||||
UINT16 get_ob3(imgtool_stream *instream, imgtool_stream *outstream, UINT8 type, UINT8 file_id)
|
||||
UINT16 get_ob3(imgtool::stream &instream, imgtool::stream &outstream, UINT8 type, UINT8 file_id)
|
||||
{
|
||||
UINT8 data, *buffer = NULL;
|
||||
UINT16 size = 0;
|
||||
static const char ob3_magic[3] = {'O', 'R', 'G'};
|
||||
|
||||
stream_read(instream, &data, 1);
|
||||
instream.read(&data, 1);
|
||||
|
||||
if (data == 0x02)
|
||||
{
|
||||
stream_seek(instream, 1, SEEK_CUR);
|
||||
instream.seek(1, SEEK_CUR);
|
||||
size = get_long_rec_size(instream);
|
||||
buffer = (UINT8*)malloc(size);
|
||||
stream_read(instream, buffer, size);
|
||||
instream.read(buffer, size);
|
||||
}
|
||||
|
||||
stream_write(outstream, ob3_magic, 3);
|
||||
stream_putc(outstream, (size>>8) & 0xff);
|
||||
stream_putc(outstream, size & 0xff);
|
||||
stream_putc(outstream, type | 0x80);
|
||||
outstream.write(ob3_magic, 3);
|
||||
outstream.putc((size>>8) & 0xff);
|
||||
outstream.putc(size & 0xff);
|
||||
outstream.putc(type | 0x80);
|
||||
|
||||
if (buffer)
|
||||
{
|
||||
stream_write(outstream, buffer, size);
|
||||
outstream.write(buffer, size);
|
||||
free (buffer);
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
static imgtoolerr_t datapack_open( imgtool::image *image, imgtool_stream *stream)
|
||||
static imgtoolerr_t datapack_open(imgtool::image *image, imgtool::stream &stream)
|
||||
{
|
||||
psion_pack *pack = (psion_pack*)image->extra_bytes();
|
||||
char opk_magic[4];
|
||||
|
||||
stream_read(stream, opk_magic, 4);
|
||||
stream.read(opk_magic, 4);
|
||||
|
||||
if(strcmp(opk_magic, "OPK\0"))
|
||||
return IMGTOOLERR_UNEXPECTED;
|
||||
|
||||
pack->stream = stream;
|
||||
pack->stream = &stream;
|
||||
|
||||
if (update_pack_index(pack))
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
@ -403,7 +403,7 @@ static imgtoolerr_t datapack_open( imgtool::image *image, imgtool_stream *stream
|
||||
return IMGTOOLERR_CORRUPTIMAGE;
|
||||
}
|
||||
|
||||
static imgtoolerr_t datapack_create( imgtool::image *image, imgtool_stream *stream, util::option_resolution *opts)
|
||||
static imgtoolerr_t datapack_create(imgtool::image *image, imgtool::stream &stream, util::option_resolution *opts)
|
||||
{
|
||||
psion_pack *pack = (psion_pack*)image->extra_bytes();
|
||||
static const UINT8 opk_magic[4] = {'O', 'P', 'K', 0x00};
|
||||
@ -419,20 +419,20 @@ static imgtoolerr_t datapack_create( imgtool::image *image, imgtool_stream *stre
|
||||
|
||||
checksum = head_checksum(pack_head);
|
||||
|
||||
stream_write(stream, opk_magic, 4);
|
||||
stream_fill(stream, 0x00, 2);
|
||||
stream_write(stream, pack_head, 8);
|
||||
stream.write(opk_magic, 4);
|
||||
stream.fill(0x00, 2);
|
||||
stream.write(pack_head, 8);
|
||||
|
||||
stream_putc(stream, (checksum>>8) & 0xff);
|
||||
stream_putc(stream, checksum & 0xff);
|
||||
stream.putc((checksum>>8) & 0xff);
|
||||
stream.putc(checksum & 0xff);
|
||||
|
||||
put_name_record(stream, "MAIN", 0x81, 0x90);
|
||||
|
||||
stream_fill(stream, 0xff, 2);
|
||||
stream.fill(0xff, 2);
|
||||
|
||||
update_opk_head(stream);
|
||||
|
||||
pack->stream = stream;
|
||||
pack->stream = &stream;
|
||||
|
||||
if (update_pack_index(pack))
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
@ -444,7 +444,7 @@ static void datapack_close( imgtool::image *image)
|
||||
{
|
||||
psion_pack *pack = (psion_pack*)image->extra_bytes();
|
||||
|
||||
stream_close( pack->stream );
|
||||
delete pack->stream;
|
||||
}
|
||||
|
||||
static imgtoolerr_t datapack_begin_enum(imgtool::directory *enumeration, const char *path)
|
||||
@ -472,18 +472,18 @@ static imgtoolerr_t datapack_next_enum(imgtool::directory *enumeration, imgtool_
|
||||
|
||||
if (pack->pack_index[iter->index].data_rec)
|
||||
{
|
||||
stream_seek(pack->stream, pack->pack_index[iter->index].data_rec + 2, SEEK_SET);
|
||||
ent->filesize = get_long_rec_size(pack->stream);
|
||||
pack->stream->seek(pack->pack_index[iter->index].data_rec + 2, SEEK_SET);
|
||||
ent->filesize = get_long_rec_size(*pack->stream);
|
||||
}
|
||||
|
||||
// seek all file's records
|
||||
if (pack->pack_index[iter->index].id >= 0x90)
|
||||
{
|
||||
stream_seek(pack->stream, 0x10, SEEK_SET);
|
||||
while (seek_next_record(pack->stream, pack->pack_index[iter->index].id))
|
||||
pack->stream->seek(0x10, SEEK_SET);
|
||||
while (seek_next_record(*pack->stream, pack->pack_index[iter->index].id))
|
||||
{
|
||||
stream_read(pack->stream, &data, 1);
|
||||
stream_seek(pack->stream, data + 1, SEEK_CUR);
|
||||
pack->stream->read(&data, 1);
|
||||
pack->stream->seek(data + 1, SEEK_CUR);
|
||||
ent->filesize +=data;
|
||||
}
|
||||
}
|
||||
@ -502,8 +502,8 @@ static imgtoolerr_t datapack_free_space( imgtool::partition *partition, UINT64 *
|
||||
psion_pack *pack = (psion_pack*)image->extra_bytes();
|
||||
UINT32 pack_size = 0;
|
||||
|
||||
stream_seek(pack->stream, 0x07, SEEK_SET);
|
||||
stream_read(pack->stream, &pack_size, 1);
|
||||
pack->stream->seek(0x07, SEEK_SET);
|
||||
pack->stream->read(&pack_size, 1);
|
||||
|
||||
if (size)
|
||||
*size = (pack_size * 0x2000) - pack->eop;
|
||||
@ -511,7 +511,7 @@ static imgtoolerr_t datapack_free_space( imgtool::partition *partition, UINT64 *
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
|
||||
static imgtoolerr_t datapack_read_file(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf)
|
||||
static imgtoolerr_t datapack_read_file(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
imgtool::image *image = &partition->image();
|
||||
psion_pack *pack = (psion_pack*)image->extra_bytes();
|
||||
@ -522,14 +522,14 @@ static imgtoolerr_t datapack_read_file(imgtool::partition *partition, const char
|
||||
if ((pack->pack_index[index].type & 0x7f) == 0x01)
|
||||
{
|
||||
// ODB files
|
||||
stream_seek(pack->stream, 0x10, SEEK_SET);
|
||||
get_odb(pack->stream, destf, pack->pack_index[index].type, pack->pack_index[index].id);
|
||||
pack->stream->seek(0x10, SEEK_SET);
|
||||
get_odb(*pack->stream, destf, pack->pack_index[index].type, pack->pack_index[index].id);
|
||||
}
|
||||
else if ((pack->pack_index[index].type & 0x7f) == 0x03)
|
||||
{
|
||||
// OB3/OPL files
|
||||
stream_seek(pack->stream, pack->pack_index[index].data_rec, SEEK_SET);
|
||||
get_ob3(pack->stream, destf, pack->pack_index[index].type, pack->pack_index[index].id);
|
||||
pack->stream->seek(pack->pack_index[index].data_rec, SEEK_SET);
|
||||
get_ob3(*pack->stream, destf, pack->pack_index[index].type, pack->pack_index[index].id);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -543,7 +543,7 @@ static imgtoolerr_t datapack_read_file(imgtool::partition *partition, const char
|
||||
return IMGTOOLERR_FILENOTFOUND;
|
||||
}
|
||||
|
||||
static imgtoolerr_t datapack_write_file( imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *opts)
|
||||
static imgtoolerr_t datapack_write_file( imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts)
|
||||
{
|
||||
imgtool::image *image = &partition->image();
|
||||
psion_pack *pack = (psion_pack*)image->extra_bytes();
|
||||
@ -565,8 +565,8 @@ static imgtoolerr_t datapack_write_file( imgtool::partition *partition, const ch
|
||||
return IMGTOOLERR_NOSPACE;
|
||||
}
|
||||
|
||||
stream_read(sourcef, head, 3);
|
||||
stream_seek(pack->stream, pack->eop, SEEK_SET);
|
||||
sourcef.read(head, 3);
|
||||
pack->stream->seek(pack->eop, SEEK_SET);
|
||||
|
||||
if (type == 0)
|
||||
type = (!strncmp((char*)head, "ORG", 3)) ? 1 : 2;
|
||||
@ -574,30 +574,30 @@ static imgtoolerr_t datapack_write_file( imgtool::partition *partition, const ch
|
||||
switch (type)
|
||||
{
|
||||
case 1: //OB3 file
|
||||
put_name_record(pack->stream, filename, 0x83, file_id);
|
||||
stream_write(pack->stream, data_head, 4);
|
||||
size = put_ob3(sourcef, pack->stream);
|
||||
put_name_record(*pack->stream, filename, 0x83, file_id);
|
||||
pack->stream->write(data_head, 4);
|
||||
size = put_ob3(sourcef, *pack->stream);
|
||||
break;
|
||||
case 2: //OPL file
|
||||
put_name_record(pack->stream, filename, 0x83, file_id);
|
||||
stream_write(pack->stream, data_head, 4);
|
||||
size = put_opl(sourcef, pack->stream);
|
||||
put_name_record(*pack->stream, filename, 0x83, file_id);
|
||||
pack->stream->write(data_head, 4);
|
||||
size = put_opl(sourcef, *pack->stream);
|
||||
break;
|
||||
case 3: //ODB file
|
||||
put_name_record(pack->stream, filename, 0x81, file_id);
|
||||
size = put_odb(sourcef, pack->stream, file_id);
|
||||
put_name_record(*pack->stream, filename, 0x81, file_id);
|
||||
size = put_odb(sourcef, *pack->stream, file_id);
|
||||
break;
|
||||
}
|
||||
|
||||
if (type != 3)
|
||||
{
|
||||
// update the OB3/OPL long record size
|
||||
stream_seek(pack->stream, pack->eop + 13, SEEK_SET);
|
||||
stream_putc(pack->stream, (size>>8) & 0xff);
|
||||
stream_putc(pack->stream, size & 0xff);
|
||||
pack->stream->seek(pack->eop + 13, SEEK_SET);
|
||||
pack->stream->putc((size>>8) & 0xff);
|
||||
pack->stream->putc(size & 0xff);
|
||||
}
|
||||
|
||||
update_opk_head(pack->stream);
|
||||
update_opk_head(*pack->stream);
|
||||
|
||||
if (update_pack_index(pack))
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
@ -614,8 +614,8 @@ static imgtoolerr_t datapack_delete_file( imgtool::partition *partition, const c
|
||||
if (index >= 0)
|
||||
{
|
||||
// clear the bit 7 of the file type to mark the file as deleted
|
||||
stream_seek(pack->stream, pack->pack_index[index].name_rec + 1, SEEK_SET);
|
||||
stream_putc(pack->stream, pack->pack_index[index].type & 0x7f);
|
||||
pack->stream->seek(pack->pack_index[index].name_rec + 1, SEEK_SET);
|
||||
pack->stream->putc(pack->pack_index[index].type & 0x7f);
|
||||
|
||||
if (update_pack_index(pack))
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
|
@ -149,7 +149,7 @@ static floperr_t put_granule_map(imgtool::image *img, const UINT8 *granule_map,
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t transfer_granule(imgtool::image *img, UINT8 granule, int length, imgtool_stream *f, imgtoolerr_t (*proc)(imgtool::image *, int, int, int, int, size_t, imgtool_stream *))
|
||||
static imgtoolerr_t transfer_granule(imgtool::image *img, UINT8 granule, int length, imgtool::stream &f, imgtoolerr_t (*proc)(imgtool::image *, int, int, int, int, size_t, imgtool::stream &))
|
||||
{
|
||||
imgtoolerr_t err = IMGTOOLERR_SUCCESS;
|
||||
UINT8 track, sector;
|
||||
@ -167,21 +167,21 @@ static imgtoolerr_t transfer_granule(imgtool::image *img, UINT8 granule, int len
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t transfer_from_granule(imgtool::image *img, UINT8 granule, int length, imgtool_stream *destf)
|
||||
static imgtoolerr_t transfer_from_granule(imgtool::image *img, UINT8 granule, int length, imgtool::stream &destf)
|
||||
{
|
||||
return transfer_granule(img, granule, length, destf, imgtool_floppy_read_sector_to_stream);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t transfer_to_granule(imgtool::image *img, UINT8 granule, int length, imgtool_stream *sourcef)
|
||||
static imgtoolerr_t transfer_to_granule(imgtool::image *img, UINT8 granule, int length, imgtool::stream &sourcef)
|
||||
{
|
||||
return transfer_granule(img, granule, length, sourcef, imgtool_floppy_write_sector_from_stream);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t process_rsdos_file(struct rsdos_dirent *ent, imgtool::image *img, imgtool_stream *destf, size_t *size)
|
||||
static imgtoolerr_t process_rsdos_file(struct rsdos_dirent *ent, imgtool::image *img, imgtool::stream *destf, size_t *size)
|
||||
{
|
||||
floperr_t ferr;
|
||||
size_t s, lastgransize;
|
||||
@ -204,7 +204,7 @@ static imgtoolerr_t process_rsdos_file(struct rsdos_dirent *ent, imgtool::image
|
||||
{
|
||||
usedmap[granule] = 1;
|
||||
if (destf)
|
||||
transfer_from_granule(img, granule, 9*256, destf);
|
||||
transfer_from_granule(img, granule, 9*256, *destf);
|
||||
|
||||
/* i is the next granule */
|
||||
s += (256 * 9);
|
||||
@ -219,7 +219,7 @@ static imgtoolerr_t process_rsdos_file(struct rsdos_dirent *ent, imgtool::image
|
||||
lastgransize += (256 * (i - 0xc0));
|
||||
|
||||
if (destf)
|
||||
transfer_from_granule(img, granule, lastgransize, destf);
|
||||
transfer_from_granule(img, granule, lastgransize, *destf);
|
||||
|
||||
if (size)
|
||||
*size = s + lastgransize;
|
||||
@ -300,7 +300,7 @@ eof:
|
||||
else
|
||||
{
|
||||
/* Not the end of file */
|
||||
err = process_rsdos_file(&rsent, image, NULL, &filesize);
|
||||
err = process_rsdos_file(&rsent, image, nullptr, &filesize);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@ -386,7 +386,7 @@ static imgtoolerr_t delete_entry(imgtool::image *img, struct rsdos_dirent *ent,
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t rsdos_diskimage_readfile(imgtool::partition *partition, const char *fname, const char *fork, imgtool_stream *destf)
|
||||
static imgtoolerr_t rsdos_diskimage_readfile(imgtool::partition *partition, const char *fname, const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
struct rsdos_dirent ent;
|
||||
@ -397,7 +397,7 @@ static imgtoolerr_t rsdos_diskimage_readfile(imgtool::partition *partition, cons
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = process_rsdos_file(&ent, img, destf, &size);
|
||||
err = process_rsdos_file(&ent, img, &destf, &size);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@ -409,7 +409,7 @@ static imgtoolerr_t rsdos_diskimage_readfile(imgtool::partition *partition, cons
|
||||
|
||||
|
||||
|
||||
static imgtoolerr_t rsdos_diskimage_writefile(imgtool::partition *partition, const char *fname, const char *fork, imgtool_stream *sourcef, util::option_resolution *writeoptions)
|
||||
static imgtoolerr_t rsdos_diskimage_writefile(imgtool::partition *partition, const char *fname, const char *fork, imgtool::stream &sourcef, util::option_resolution *writeoptions)
|
||||
{
|
||||
floperr_t ferr;
|
||||
imgtoolerr_t err;
|
||||
@ -432,7 +432,7 @@ static imgtoolerr_t rsdos_diskimage_writefile(imgtool::partition *partition, con
|
||||
return err;
|
||||
|
||||
/* is there enough space? */
|
||||
sz = stream_size(sourcef);
|
||||
sz = sourcef.size();
|
||||
if (sz > freespace)
|
||||
return IMGTOOLERR_NOSPACE;
|
||||
|
||||
|
@ -120,7 +120,7 @@
|
||||
#define MAXSIZE 80*16*256*2 /* room for two faces, double-density, 80 tracks */
|
||||
|
||||
struct thom_floppy {
|
||||
imgtool_stream *stream;
|
||||
imgtool::stream *stream;
|
||||
|
||||
UINT16 sector_size; /* 128 or 256 */
|
||||
UINT16 sectuse_size; /* bytes used in sector: 128 or 255 */
|
||||
@ -177,12 +177,12 @@ static UINT8* thom_get_sector(thom_floppy* f, unsigned head,
|
||||
(.fd have 40 or 80 tracks, .qd have 25 tracks) and the file size.
|
||||
*/
|
||||
|
||||
static imgtoolerr_t thom_open_fd_qd(imgtool::image *img, imgtool_stream *stream)
|
||||
static imgtoolerr_t thom_open_fd_qd(imgtool::image *img, imgtool::stream &stream)
|
||||
{
|
||||
thom_floppy* f = (thom_floppy*) img->extra_bytes();
|
||||
int size = stream_size( stream );
|
||||
int size = stream.size();
|
||||
|
||||
f->stream = stream;
|
||||
f->stream = &stream;
|
||||
f->modified = 0;
|
||||
|
||||
/* guess format */
|
||||
@ -238,8 +238,8 @@ static imgtoolerr_t thom_open_fd_qd(imgtool::image *img, imgtool_stream *stream)
|
||||
|
||||
assert( size == f->heads * f->tracks * 16 * f->sector_size );
|
||||
|
||||
stream_seek( stream, 0, SEEK_SET );
|
||||
if ( stream_read( stream, f->data, size ) < size )
|
||||
stream.seek(0, SEEK_SET);
|
||||
if ( stream.read(f->data, size ) < size )
|
||||
return IMGTOOLERR_READERROR;
|
||||
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
@ -252,14 +252,14 @@ static void thom_close_fd_qd(imgtool::image *img)
|
||||
/* save image */
|
||||
if ( f->modified ) {
|
||||
int size = f->heads * f->tracks * 16 * f->sector_size;
|
||||
stream_seek( f->stream, 0, SEEK_SET );
|
||||
if ( stream_write( f->stream, f->data, size ) < size )
|
||||
f->stream->seek(0, SEEK_SET);
|
||||
if (f->stream->write(f->data, size) < size)
|
||||
{
|
||||
/* logerror( "thom_diskimage_close_fd_qd: write error\n" ); */
|
||||
}
|
||||
}
|
||||
|
||||
stream_close( f->stream );
|
||||
delete f->stream;
|
||||
}
|
||||
|
||||
|
||||
@ -308,21 +308,21 @@ static UINT16 thom_sap_crc( UINT8* data, int size )
|
||||
return crc;
|
||||
}
|
||||
|
||||
static imgtoolerr_t thom_open_sap(imgtool::image *img, imgtool_stream *stream)
|
||||
static imgtoolerr_t thom_open_sap(imgtool::image *img, imgtool::stream &stream)
|
||||
{
|
||||
thom_floppy* f = (thom_floppy*) img->extra_bytes();
|
||||
UINT8 buf[262];
|
||||
|
||||
f->stream = stream;
|
||||
f->stream = &stream;
|
||||
f->modified = 0;
|
||||
|
||||
/* check image header */
|
||||
stream_seek( stream, 0, SEEK_SET );
|
||||
stream_read( stream, buf, 66 );
|
||||
stream.seek(0, SEEK_SET);
|
||||
stream.read(buf, 66 );
|
||||
if ( memcmp( buf+1, sap_header+1, 65 ) ) return IMGTOOLERR_CORRUPTIMAGE;
|
||||
|
||||
/* guess format */
|
||||
stream_read( stream, buf, 1 );
|
||||
stream.read(buf, 1 );
|
||||
switch ( buf[0] ) {
|
||||
case 1:
|
||||
case 3:
|
||||
@ -342,13 +342,13 @@ static imgtoolerr_t thom_open_sap(imgtool::image *img, imgtool_stream *stream)
|
||||
default: return IMGTOOLERR_CORRUPTIMAGE;
|
||||
}
|
||||
|
||||
stream_seek( stream, 66, SEEK_SET );
|
||||
stream.seek(66, SEEK_SET);
|
||||
while ( 1) {
|
||||
int i, sector, track;
|
||||
UINT16 crc;
|
||||
|
||||
/* load sector */
|
||||
if ( stream_read( stream, buf, 6 + f->sector_size ) < 6 + f->sector_size )
|
||||
if ( stream.read(buf, 6 + f->sector_size ) < 6 + f->sector_size )
|
||||
break;
|
||||
|
||||
/* parse sector header */
|
||||
@ -381,10 +381,10 @@ static void thom_close_sap(imgtool::image *img)
|
||||
UINT16 crc;
|
||||
|
||||
/* rewind */
|
||||
stream_seek( f->stream, 0, SEEK_SET );
|
||||
f->stream->seek(0, SEEK_SET);
|
||||
|
||||
/* image header */
|
||||
if ( stream_write( f->stream, sap_header, 66 ) < 66 ) {
|
||||
if ( f->stream->write(sap_header, 66) < 66) {
|
||||
/* logerror( "thom_diskimage_close_sap: write error\n" ); */
|
||||
return;
|
||||
}
|
||||
@ -408,15 +408,15 @@ static void thom_close_sap(imgtool::image *img)
|
||||
for ( i = 0; i < f->sector_size; i++ ) buf[ i + 4 ] ^= sap_magic_num;
|
||||
|
||||
/* save */
|
||||
if ( stream_write( f->stream, buf, f->sector_size + 6 ) <
|
||||
f->sector_size + 6 ) {
|
||||
if (f->stream->write(buf, f->sector_size + 6) <
|
||||
f->sector_size + 6) {
|
||||
/* logerror( "thom_diskimage_close_sap: write error\n" ); */
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stream_close( f->stream );
|
||||
delete f->stream;
|
||||
}
|
||||
|
||||
|
||||
@ -678,44 +678,50 @@ static int thom_get_free_blocks(thom_floppy* f, unsigned head)
|
||||
|
||||
/* dump file contents into dst */
|
||||
static void thom_get_file(thom_floppy* f, unsigned head,
|
||||
thom_dirent* d, imgtool_stream *dst)
|
||||
thom_dirent* d, imgtool::stream &dst)
|
||||
{
|
||||
UINT8* fat = thom_get_sector( f, head, 20, 2 );
|
||||
int nbblocks = thom_nb_blocks(f);
|
||||
int block = d->firstblock;
|
||||
if ( block >= nbblocks ) return;
|
||||
while ( 1 ) {
|
||||
int nextblock = fat[ block + 1 ];
|
||||
int track = block / 2;
|
||||
int firstsect = (block % 2) ? 9 : 1;
|
||||
if ( nextblock < nbblocks ) {
|
||||
/* full block */
|
||||
int i;
|
||||
for ( i = 0; i < 8; i++ ) {
|
||||
UINT8* data = thom_get_sector( f, head, track, firstsect + i );
|
||||
stream_write( dst, data, f->sectuse_size );
|
||||
while ( 1 )
|
||||
{
|
||||
int nextblock = fat[ block + 1 ];
|
||||
int track = block / 2;
|
||||
int firstsect = (block % 2) ? 9 : 1;
|
||||
if ( nextblock < nbblocks )
|
||||
{
|
||||
/* full block */
|
||||
int i;
|
||||
for ( i = 0; i < 8; i++ )
|
||||
{
|
||||
UINT8* data = thom_get_sector( f, head, track, firstsect + i );
|
||||
dst.write(data, f->sectuse_size);
|
||||
}
|
||||
block = fat[ block + 1 ];
|
||||
}
|
||||
block = fat[ block + 1 ];
|
||||
}
|
||||
else if ( nextblock >= 0xc1 && nextblock <= 0xc8 ) {
|
||||
/* last block in file */
|
||||
int i;
|
||||
UINT8* data;
|
||||
for ( i = 0; i < nextblock - 0xc1; i++ ) {
|
||||
data = thom_get_sector( f, head, track, firstsect + i );
|
||||
stream_write( dst, data, f->sectuse_size );
|
||||
else if ( nextblock >= 0xc1 && nextblock <= 0xc8 )
|
||||
{
|
||||
/* last block in file */
|
||||
int i;
|
||||
UINT8* data;
|
||||
for ( i = 0; i < nextblock - 0xc1; i++ )
|
||||
{
|
||||
data = thom_get_sector( f, head, track, firstsect + i );
|
||||
dst.write(data, f->sectuse_size);
|
||||
}
|
||||
data = thom_get_sector( f, head, track, firstsect + i );
|
||||
dst.write(data, d->lastsectsize);
|
||||
return;
|
||||
}
|
||||
data = thom_get_sector( f, head, track, firstsect + i );
|
||||
stream_write( dst, data, d->lastsectsize );
|
||||
return;
|
||||
}
|
||||
else {
|
||||
/* invalid, assume last block */
|
||||
UINT8* data = thom_get_sector( f, head, track, firstsect );
|
||||
stream_write( dst, data, d->lastsectsize );
|
||||
return;
|
||||
}
|
||||
block = nextblock;
|
||||
else
|
||||
{
|
||||
/* invalid, assume last block */
|
||||
UINT8* data = thom_get_sector( f, head, track, firstsect );
|
||||
dst.write(data, d->lastsectsize);
|
||||
return;
|
||||
}
|
||||
block = nextblock;
|
||||
}
|
||||
}
|
||||
|
||||
@ -739,9 +745,9 @@ static void thom_del_file(thom_floppy* f, unsigned head, thom_dirent* d)
|
||||
|
||||
/* create a new file or overwrite an old one, with the contents of src */
|
||||
static void thom_put_file(thom_floppy* f, unsigned head,
|
||||
thom_dirent* d, imgtool_stream *src)
|
||||
thom_dirent* d, imgtool::stream &src)
|
||||
{
|
||||
int size = stream_size( src );
|
||||
int size = src.size();
|
||||
UINT8* fat = thom_get_sector( f, head, 20, 2 );
|
||||
int nbblocks = thom_nb_blocks(f);
|
||||
int block;
|
||||
@ -760,14 +766,14 @@ static void thom_put_file(thom_floppy* f, unsigned head,
|
||||
/* store data, full sectors */
|
||||
for ( i = 0; i < 8 && size > f->sectuse_size; i++ ) {
|
||||
UINT8* dst = thom_get_sector( f, head, track, firstsect + i );
|
||||
stream_read( src, dst, f->sectuse_size );
|
||||
src.read(dst, f->sectuse_size);
|
||||
size -= f->sectuse_size;
|
||||
}
|
||||
|
||||
/* store data, last sector */
|
||||
if ( i < 8 ) {
|
||||
UINT8* dst = thom_get_sector( f, head, track, firstsect + i );
|
||||
stream_read( src, dst, size );
|
||||
src.read(dst, size);
|
||||
fat[ block + 1 ] = 0xc1 + i;
|
||||
d->lastsectsize = size;
|
||||
break;
|
||||
@ -823,7 +829,7 @@ static imgtoolerr_t thom_write_sector(imgtool::image *img, UINT32 track,
|
||||
const void *buf, size_t len, int ddam)
|
||||
{
|
||||
thom_floppy* f = (thom_floppy*) img->extra_bytes();
|
||||
if ( stream_isreadonly( f->stream ) ) return IMGTOOLERR_WRITEERROR;
|
||||
if ( f->stream->is_read_only() ) return IMGTOOLERR_WRITEERROR;
|
||||
if ( head >= f->heads || sector < 1 || sector > 16 || track >= f->tracks )
|
||||
return IMGTOOLERR_SEEKERROR;
|
||||
if ( len > f->sector_size) return IMGTOOLERR_WRITEERROR;
|
||||
@ -937,7 +943,7 @@ static imgtoolerr_t thom_free_space(imgtool::partition *part, UINT64 *size)
|
||||
static imgtoolerr_t thom_read_file(imgtool::partition *part,
|
||||
const char *filename,
|
||||
const char *fork,
|
||||
imgtool_stream *destf)
|
||||
imgtool::stream &destf)
|
||||
{
|
||||
int head = *( (int*) part->extra_bytes() );
|
||||
imgtool::image* img = &part->image();
|
||||
@ -974,7 +980,7 @@ static imgtoolerr_t thom_delete_file(imgtool::partition *part,
|
||||
if ( ! thom_find_dirent( f, head, fname, &d ) )
|
||||
return IMGTOOLERR_FILENOTFOUND;
|
||||
/*if ( thom_get_file_size( f, head, &d ) < 0 ) return IMGTOOLERR_CORRUPTFILE;*/
|
||||
if ( stream_isreadonly( f->stream ) ) return IMGTOOLERR_WRITEERROR;
|
||||
if ( f->stream->is_read_only() ) return IMGTOOLERR_WRITEERROR;
|
||||
thom_del_file( f, head, &d );
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
@ -982,19 +988,19 @@ static imgtoolerr_t thom_delete_file(imgtool::partition *part,
|
||||
static imgtoolerr_t thom_write_file(imgtool::partition *part,
|
||||
const char *filename,
|
||||
const char *fork,
|
||||
imgtool_stream *sourcef,
|
||||
imgtool::stream &sourcef,
|
||||
util::option_resolution *opts)
|
||||
{
|
||||
int head = *( (int*) part->extra_bytes() );
|
||||
imgtool::image* img = &part->image();
|
||||
thom_floppy* f = (thom_floppy*) img->extra_bytes();
|
||||
thom_dirent d;
|
||||
int size = stream_size( sourcef );
|
||||
int size = sourcef.size();
|
||||
int blocks = thom_get_free_blocks( f, head );
|
||||
char name[9], ext[4], fname[14];
|
||||
int is_new = 1;
|
||||
|
||||
if ( stream_isreadonly( f->stream ) ) return IMGTOOLERR_WRITEERROR;
|
||||
if ( f->stream->is_read_only() ) return IMGTOOLERR_WRITEERROR;
|
||||
|
||||
/* convert filename */
|
||||
thom_conv_filename( filename, name, ext );
|
||||
@ -1107,7 +1113,7 @@ static imgtoolerr_t thom_suggest_transfer(imgtool::partition *part,
|
||||
}
|
||||
|
||||
static imgtoolerr_t thom_create(imgtool::image* img,
|
||||
imgtool_stream *stream,
|
||||
imgtool::stream &stream,
|
||||
util::option_resolution *opts)
|
||||
{
|
||||
thom_floppy* f = (thom_floppy*) img->extra_bytes();
|
||||
@ -1115,7 +1121,7 @@ static imgtoolerr_t thom_create(imgtool::image* img,
|
||||
UINT8* buf;
|
||||
const char* name;
|
||||
|
||||
f->stream = stream;
|
||||
f->stream = &stream;
|
||||
f->modified = 0;
|
||||
|
||||
/* get parameters */
|
||||
@ -1274,92 +1280,98 @@ static const UINT8 crypt2[13] = {
|
||||
};
|
||||
|
||||
/* decrypt BASIC protected files */
|
||||
static void thom_decrypt(imgtool_stream* out, imgtool_stream* in)
|
||||
static void thom_decrypt(imgtool::stream &out, imgtool::stream &in)
|
||||
{
|
||||
int i1 = 11, i2 = 13;
|
||||
while ( 1 ) {
|
||||
UINT8 b;
|
||||
if ( stream_read( in, &b, 1) < 1 ) break;
|
||||
b = ( (UINT8)(b - i2) ^ crypt2[i2-1] ^ crypt1[i1-1] ) + i1;
|
||||
stream_putc( out, b );
|
||||
i1--; i2--;
|
||||
if ( !i1 ) i1 = 11;
|
||||
if ( !i2 ) i2 = 13;
|
||||
while ( 1 )
|
||||
{
|
||||
UINT8 b;
|
||||
if ( in.read(&b, 1) < 1 ) break;
|
||||
b = ( (UINT8)(b - i2) ^ crypt2[i2-1] ^ crypt1[i1-1] ) + i1;
|
||||
out.putc(b );
|
||||
i1--; i2--;
|
||||
if ( !i1 ) i1 = 11;
|
||||
if ( !i2 ) i2 = 13;
|
||||
}
|
||||
}
|
||||
|
||||
/* encrypt BASIC protected files */
|
||||
static void thom_encrypt(imgtool_stream* out, imgtool_stream* in)
|
||||
static void thom_encrypt(imgtool::stream &out, imgtool::stream &in)
|
||||
{
|
||||
int i1 = 11, i2 = 13;
|
||||
while ( 1 ) {
|
||||
UINT8 b;
|
||||
if ( stream_read( in, &b, 1) < 1 ) break;
|
||||
b = ( (UINT8)(b - i1) ^ crypt2[i2-1] ^ crypt1[i1-1] ) + i2;
|
||||
stream_putc( out, b );
|
||||
i1--; i2--;
|
||||
if ( !i1 ) i1 = 11;
|
||||
if ( !i2 ) i2 = 13;
|
||||
while ( 1 )
|
||||
{
|
||||
UINT8 b;
|
||||
if ( in.read(&b, 1) < 1 ) break;
|
||||
b = ( (UINT8)(b - i1) ^ crypt2[i2-1] ^ crypt1[i1-1] ) + i2;
|
||||
out.putc(b );
|
||||
i1--; i2--;
|
||||
if ( !i1 ) i1 = 11;
|
||||
if ( !i2 ) i2 = 13;
|
||||
}
|
||||
}
|
||||
|
||||
static imgtoolerr_t thomcrypt_read_file(imgtool::partition *part,
|
||||
const char *name,
|
||||
const char *fork, imgtool_stream *dst)
|
||||
const char *fork, imgtool::stream &dst)
|
||||
{
|
||||
UINT8 buf[3];
|
||||
imgtool_stream *org = stream_open_mem( NULL, 0 );
|
||||
imgtool::stream *org = imgtool::stream::open_mem( NULL, 0 );
|
||||
imgtoolerr_t err;
|
||||
if ( !org ) return IMGTOOLERR_OUTOFMEMORY;
|
||||
|
||||
/* read file */
|
||||
err = thom_read_file( part, name, fork, org );
|
||||
err = thom_read_file( part, name, fork, *org );
|
||||
if ( err ) {
|
||||
stream_close( org );
|
||||
delete org;
|
||||
return err;
|
||||
}
|
||||
|
||||
stream_seek( org, 0, SEEK_SET );
|
||||
if ( stream_read( org, buf, 3 ) < 3 || buf[0] != 0xfe ) {
|
||||
/* regular file */
|
||||
stream_seek( org, 0, SEEK_SET );
|
||||
stream_transfer_all( dst, org );
|
||||
org->seek(0, SEEK_SET);
|
||||
if ( org->read(buf, 3 ) < 3 || buf[0] != 0xfe )
|
||||
{
|
||||
/* regular file */
|
||||
org->seek(0, SEEK_SET);
|
||||
imgtool::stream::transfer_all( dst, *org );
|
||||
}
|
||||
else {
|
||||
/* encrypted file */
|
||||
stream_putc( dst, '\xff' );
|
||||
stream_write( dst, buf+1, 2 );
|
||||
thom_decrypt( dst, org );
|
||||
else
|
||||
{
|
||||
/* encrypted file */
|
||||
dst.putc( '\xff' );
|
||||
dst.write(buf+1, 2);
|
||||
thom_decrypt( dst, *org );
|
||||
}
|
||||
|
||||
stream_close( org );
|
||||
delete org;
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
|
||||
static imgtoolerr_t thomcrypt_write_file(imgtool::partition *part,
|
||||
const char *name,
|
||||
const char *fork, imgtool_stream *src,
|
||||
const char *fork, imgtool::stream &src,
|
||||
util::option_resolution *opts)
|
||||
{
|
||||
UINT8 buf[3];
|
||||
|
||||
if ( stream_read( src, buf, 3 ) < 3 || buf[0] == 0xfe ) {
|
||||
/* too short or already encrypted file */
|
||||
stream_seek( src, 0, SEEK_SET );
|
||||
return thom_write_file( part, name, fork, src, opts );
|
||||
if ( src.read(buf, 3 ) < 3 || buf[0] == 0xfe )
|
||||
{
|
||||
/* too short or already encrypted file */
|
||||
src.seek(0, SEEK_SET);
|
||||
return thom_write_file( part, name, fork, src, opts );
|
||||
}
|
||||
else {
|
||||
/* regular file */
|
||||
imgtool_stream *dst = stream_open_mem( NULL, 0 );
|
||||
imgtoolerr_t err;
|
||||
if ( !dst ) return IMGTOOLERR_OUTOFMEMORY;
|
||||
stream_putc( dst, '\xfe' );
|
||||
stream_write( dst, buf+1, 2 );
|
||||
thom_encrypt( dst, src );
|
||||
stream_seek( dst, 0, SEEK_SET );
|
||||
err = thom_write_file( part, name, fork, dst, opts );
|
||||
stream_close( dst);
|
||||
return err;
|
||||
else
|
||||
{
|
||||
/* regular file */
|
||||
imgtool::stream *dst = imgtool::stream::open_mem( NULL, 0 );
|
||||
imgtoolerr_t err;
|
||||
if ( !dst ) return IMGTOOLERR_OUTOFMEMORY;
|
||||
dst->putc( '\xfe' );
|
||||
dst->write(buf+1, 2);
|
||||
thom_encrypt( *dst, src );
|
||||
dst->seek(0, SEEK_SET);
|
||||
err = thom_write_file( part, name, fork, *dst, opts );
|
||||
delete dst;
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1385,77 +1397,84 @@ void filter_thomcrypt_getinfo(UINT32 state, union filterinfo *info)
|
||||
static imgtoolerr_t thom_basic_read_file(imgtool::partition *part,
|
||||
const char *name,
|
||||
const char *fork,
|
||||
imgtool_stream *dst,
|
||||
imgtool::stream &dst,
|
||||
const char *const table[2][128])
|
||||
{
|
||||
imgtool_stream *org = stream_open_mem( NULL, 0 );
|
||||
imgtool::stream *org = imgtool::stream::open_mem( NULL, 0 );
|
||||
imgtoolerr_t err;
|
||||
UINT8 buf[4];
|
||||
int i;
|
||||
|
||||
if ( !org ) return IMGTOOLERR_OUTOFMEMORY;
|
||||
|
||||
err = thomcrypt_read_file( part, name, fork, org );
|
||||
if ( err ) {
|
||||
stream_close( org );
|
||||
return err;
|
||||
err = thomcrypt_read_file( part, name, fork, *org );
|
||||
if (err)
|
||||
{
|
||||
delete org;
|
||||
return err;
|
||||
}
|
||||
stream_seek( org, 3, SEEK_SET ); /* skip header */
|
||||
org->seek(3, SEEK_SET); /* skip header */
|
||||
|
||||
while ( 1 ) {
|
||||
int in_str = 0, in_fun = 0;
|
||||
int linelength, linenum;
|
||||
while ( 1 )
|
||||
{
|
||||
int in_str = 0, in_fun = 0;
|
||||
int linelength, linenum;
|
||||
|
||||
/* line header: line length and line number */
|
||||
/* I am not sure this is 100% correct but it works in many cases */
|
||||
if ( stream_read( org, buf, 2 ) < 2 ) goto end;
|
||||
linelength = ((int)buf[0] << 8) + (int)buf[1] - 4;
|
||||
if ( linelength <= 0 ) goto end;
|
||||
if ( stream_read( org, buf, 2 ) < 2 ) goto end;
|
||||
linenum = ((int)buf[0] << 8) + buf[1];
|
||||
stream_printf( dst, "%u ", linenum );
|
||||
/* line header: line length and line number */
|
||||
/* I am not sure this is 100% correct but it works in many cases */
|
||||
if ( org->read(buf, 2 ) < 2 ) goto end;
|
||||
linelength = ((int)buf[0] << 8) + (int)buf[1] - 4;
|
||||
if ( linelength <= 0 ) goto end;
|
||||
if ( org->read(buf, 2 ) < 2 ) goto end;
|
||||
linenum = ((int)buf[0] << 8) + buf[1];
|
||||
dst.printf( "%u ", linenum );
|
||||
|
||||
/* process line */
|
||||
for ( i = 0; i < linelength; i++ ) {
|
||||
UINT8 c;
|
||||
if ( stream_read( org, &c, 1 ) < 1 ) break;
|
||||
if ( c == 0 ) {
|
||||
/* Sometimes, linelength seems wrong and we must rely on the fact that
|
||||
BASIC lines are 0-terminated.
|
||||
At other times, there are 0 embedded within lines or extra stuff
|
||||
between the 0 and the following line, and so, we must rely
|
||||
on linelength to cut the line (!)
|
||||
*/
|
||||
if ( linelength > 256 ) break;
|
||||
/* process line */
|
||||
for ( i = 0; i < linelength; i++ )
|
||||
{
|
||||
UINT8 c;
|
||||
if ( org->read(&c, 1 ) < 1 ) break;
|
||||
if ( c == 0 )
|
||||
{
|
||||
/* Sometimes, linelength seems wrong and we must rely on the fact that
|
||||
BASIC lines are 0-terminated.
|
||||
At other times, there are 0 embedded within lines or extra stuff
|
||||
between the 0 and the following line, and so, we must rely
|
||||
on linelength to cut the line (!)
|
||||
*/
|
||||
if ( linelength > 256 ) break;
|
||||
}
|
||||
else if ( c == 0xff && ! in_str ) in_fun = 1; /* function prefix */
|
||||
else
|
||||
{
|
||||
if ( c >= 0x80 && ! in_str )
|
||||
{
|
||||
/* token */
|
||||
const char* token = table[ in_fun ][ c - 0x80 ];
|
||||
if ( token ) dst.puts(token );
|
||||
else dst.puts("???" );
|
||||
}
|
||||
else
|
||||
{
|
||||
/* regular character */
|
||||
if ( c == '"' ) in_str = 1 - in_str;
|
||||
dst.putc( c ); /* normal letter */
|
||||
}
|
||||
in_fun = 0;
|
||||
}
|
||||
}
|
||||
else if ( c == 0xff && ! in_str ) in_fun = 1; /* function prefix */
|
||||
else {
|
||||
if ( c >= 0x80 && ! in_str ) {
|
||||
/* token */
|
||||
const char* token = table[ in_fun ][ c - 0x80 ];
|
||||
if ( token ) stream_puts( dst, token );
|
||||
else stream_puts( dst, "???" );
|
||||
}
|
||||
else {
|
||||
/* regular character */
|
||||
if ( c == '"' ) in_str = 1 - in_str;
|
||||
stream_putc( dst, c ); /* normal letter */
|
||||
}
|
||||
in_fun = 0;
|
||||
}
|
||||
}
|
||||
stream_putc( dst, '\n' );
|
||||
dst.putc( '\n' );
|
||||
}
|
||||
end:
|
||||
|
||||
stream_close( org );
|
||||
delete org;
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
|
||||
static imgtoolerr_t thom_basic_write_file(imgtool::partition *part,
|
||||
const char *name,
|
||||
const char *fork,
|
||||
imgtool_stream *src,
|
||||
imgtool::stream &src,
|
||||
util::option_resolution *opts,
|
||||
const char *const table[2][128])
|
||||
{
|
||||
@ -1467,14 +1486,14 @@ static imgtoolerr_t thom_basic_write_file(imgtool::partition *part,
|
||||
static imgtoolerr_t short##_read_file(imgtool::partition *part, \
|
||||
const char *name, \
|
||||
const char *fork, \
|
||||
imgtool_stream *dst) \
|
||||
imgtool::stream &dst) \
|
||||
{ \
|
||||
return thom_basic_read_file( part, name, fork, dst, short ); \
|
||||
} \
|
||||
static imgtoolerr_t short##_write_file(imgtool::partition *part, \
|
||||
const char *name, \
|
||||
const char *fork, \
|
||||
imgtool_stream *src, \
|
||||
imgtool::stream &src, \
|
||||
util::option_resolution *opts) \
|
||||
{ \
|
||||
return thom_basic_write_file( part, name, fork, src, opts, short ); \
|
||||
|
@ -545,7 +545,7 @@ enum ti99_img_format
|
||||
struct ti99_lvl1_imgref
|
||||
{
|
||||
ti99_img_format img_format; /* tells the image format */
|
||||
imgtool_stream *file_handle; /* imgtool file handle */
|
||||
imgtool::stream *file_handle; /* imgtool file handle */
|
||||
struct mess_hard_disk_file harddisk_handle; /* MAME harddisk handle (harddisk format) */
|
||||
ti99_geometry geometry; /* geometry */
|
||||
unsigned pc99_track_len; /* unformatted track length (pc99 format) */
|
||||
@ -597,7 +597,7 @@ static void calc_crc(UINT16 *crc, UINT8 value)
|
||||
*/
|
||||
#define MAX_TRACK_LEN 6872
|
||||
#define DATA_OFFSET_NONE 0xffffffff
|
||||
static int parse_pc99_image(imgtool_stream *file_handle, int fm_format, int pass, dsk_vib *vib, const ti99_geometry *geometry, UINT32 *data_offset_array, unsigned *out_track_len)
|
||||
static int parse_pc99_image(imgtool::stream &file_handle, int fm_format, int pass, dsk_vib *vib, const ti99_geometry *geometry, UINT32 *data_offset_array, unsigned *out_track_len)
|
||||
{
|
||||
int track_len, num_tracks; /* length of a track in bytes, and number of tracks */
|
||||
int phys_track;
|
||||
@ -620,10 +620,10 @@ static int parse_pc99_image(imgtool_stream *file_handle, int fm_format, int pass
|
||||
if (out_track_len)
|
||||
*out_track_len = track_len;
|
||||
|
||||
if (stream_size(file_handle) % track_len)
|
||||
if (file_handle.size() % track_len)
|
||||
return IMGTOOLERR_CORRUPTIMAGE;
|
||||
|
||||
num_tracks = stream_size(file_handle) / track_len;
|
||||
num_tracks = file_handle.size() / track_len;
|
||||
if (num_tracks <= 0)
|
||||
return IMGTOOLERR_CORRUPTIMAGE;
|
||||
|
||||
@ -640,12 +640,12 @@ static int parse_pc99_image(imgtool_stream *file_handle, int fm_format, int pass
|
||||
data_offset_array[(head*geometry->cylinders + cylinder)*geometry->secspertrack + sector] = DATA_OFFSET_NONE;
|
||||
}
|
||||
/* rewind to start of file */
|
||||
stream_seek(file_handle, 0, SEEK_SET);
|
||||
file_handle.seek(0, SEEK_SET);
|
||||
|
||||
/* pass 0 only looks for vib in track 0; pass 1 scans every track */
|
||||
for (phys_track=0; phys_track < ((pass == 1) ? num_tracks : 1); phys_track++)
|
||||
{
|
||||
if (stream_read(file_handle, track_buf, track_len) != track_len)
|
||||
if (file_handle.read(track_buf, track_len) != track_len)
|
||||
return IMGTOOLERR_READERROR;
|
||||
|
||||
/* we only support 40-track-per-side images */
|
||||
@ -926,7 +926,7 @@ static int parse_pc99_image(imgtool_stream *file_handle, int fm_format, int pass
|
||||
|
||||
Return imgtool error code
|
||||
*/
|
||||
static int read_image_vib_no_geometry(imgtool_stream *file_handle, ti99_img_format img_format, dsk_vib *dest)
|
||||
static int read_image_vib_no_geometry(imgtool::stream &file_handle, ti99_img_format img_format, dsk_vib *dest)
|
||||
{
|
||||
int reply;
|
||||
|
||||
@ -935,11 +935,11 @@ static int read_image_vib_no_geometry(imgtool_stream *file_handle, ti99_img_form
|
||||
case if_mess:
|
||||
case if_v9t9:
|
||||
/* seek to sector */
|
||||
reply = stream_seek(file_handle, 0, SEEK_SET);
|
||||
reply = file_handle.seek(0, SEEK_SET);
|
||||
if (reply)
|
||||
return IMGTOOLERR_READERROR;
|
||||
/* read it */
|
||||
reply = stream_read(file_handle, dest, 256);
|
||||
reply = file_handle.read(dest, 256);
|
||||
if (reply != 256)
|
||||
return IMGTOOLERR_READERROR;
|
||||
return 0;
|
||||
@ -966,7 +966,7 @@ static int read_image_vib_no_geometry(imgtool_stream *file_handle, ti99_img_form
|
||||
|
||||
Return imgtool error code
|
||||
*/
|
||||
static imgtoolerr_t open_image_lvl1(imgtool_stream *file_handle, ti99_img_format img_format, ti99_lvl1_imgref *l1_img, dsk_vib *vib)
|
||||
static imgtoolerr_t open_image_lvl1(imgtool::stream &file_handle, ti99_img_format img_format, ti99_lvl1_imgref *l1_img, dsk_vib *vib)
|
||||
{
|
||||
imgtoolerr_t err;
|
||||
int reply;
|
||||
@ -974,7 +974,7 @@ static imgtoolerr_t open_image_lvl1(imgtool_stream *file_handle, ti99_img_format
|
||||
|
||||
|
||||
l1_img->img_format = img_format;
|
||||
l1_img->file_handle = file_handle;
|
||||
l1_img->file_handle = &file_handle;
|
||||
|
||||
if (img_format == if_harddisk)
|
||||
{
|
||||
@ -1032,7 +1032,7 @@ static imgtoolerr_t open_image_lvl1(imgtool_stream *file_handle, ti99_img_format
|
||||
|| (totphysrecs < 2)
|
||||
|| memcmp(vib->id, "DSK", 3) || (! strchr(" P", vib->protection))
|
||||
|| (((img_format == if_mess) || (img_format == if_v9t9))
|
||||
&& (stream_size(file_handle) != totphysrecs*256U)))
|
||||
&& (file_handle.size() != totphysrecs*256U)))
|
||||
return (imgtoolerr_t)IMGTOOLERR_CORRUPTIMAGE;
|
||||
|
||||
if ((img_format == if_pc99_fm) || (img_format == if_pc99_mfm))
|
||||
@ -1066,7 +1066,7 @@ static void close_image_lvl1(ti99_lvl1_imgref *l1_img)
|
||||
imghd_close(&l1_img->harddisk_handle);
|
||||
}
|
||||
|
||||
stream_close(l1_img->file_handle);
|
||||
delete l1_img->file_handle;
|
||||
|
||||
if ((l1_img->img_format == if_pc99_fm) || (l1_img->img_format == if_pc99_mfm))
|
||||
free(l1_img->pc99_data_offset_array);
|
||||
@ -1134,11 +1134,11 @@ static int read_sector(ti99_lvl1_imgref *l1_img, const ti99_sector_address *addr
|
||||
case if_v9t9:
|
||||
/* V9T9 format */
|
||||
/* seek to sector */
|
||||
reply = stream_seek(l1_img->file_handle, sector_address_to_image_offset(l1_img, address), SEEK_SET);
|
||||
reply = l1_img->file_handle->seek(sector_address_to_image_offset(l1_img, address), SEEK_SET);
|
||||
if (reply)
|
||||
return 1;
|
||||
/* read it */
|
||||
reply = stream_read(l1_img->file_handle, dest, 256);
|
||||
reply = l1_img->file_handle->read(dest, 256);
|
||||
if (reply != 256)
|
||||
return 1;
|
||||
break;
|
||||
@ -1153,31 +1153,31 @@ static int read_sector(ti99_lvl1_imgref *l1_img, const ti99_sector_address *addr
|
||||
if ((sector_offset + 256) <= track_len)
|
||||
{
|
||||
/* seek to sector */
|
||||
reply = stream_seek(l1_img->file_handle, track_offset+sector_offset, SEEK_SET);
|
||||
reply = l1_img->file_handle->seek(track_offset+sector_offset, SEEK_SET);
|
||||
if (reply)
|
||||
return 1;
|
||||
/* read it */
|
||||
reply = stream_read(l1_img->file_handle, dest, 256);
|
||||
reply = l1_img->file_handle->read(dest, 256);
|
||||
if (reply != 256)
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* seek to sector */
|
||||
reply = stream_seek(l1_img->file_handle, track_offset+sector_offset, SEEK_SET);
|
||||
reply = l1_img->file_handle->seek(track_offset+sector_offset, SEEK_SET);
|
||||
if (reply)
|
||||
return 1;
|
||||
/* read first chunk (until end of track) */
|
||||
reply = stream_read(l1_img->file_handle, (UINT8 *)dest, track_len-sector_offset);
|
||||
reply = l1_img->file_handle->read((UINT8 *)dest, track_len-sector_offset);
|
||||
if (reply != track_len-sector_offset)
|
||||
return 1;
|
||||
|
||||
/* wrap to start of track */
|
||||
reply = stream_seek(l1_img->file_handle, track_offset, SEEK_SET);
|
||||
reply = l1_img->file_handle->seek(track_offset, SEEK_SET);
|
||||
if (reply)
|
||||
return 1;
|
||||
/* read remnant of sector */
|
||||
reply = stream_read(l1_img->file_handle, (UINT8 *)dest + (track_len-sector_offset), 256-(track_len-sector_offset));
|
||||
reply = l1_img->file_handle->read((UINT8 *)dest + (track_len-sector_offset), 256-(track_len-sector_offset));
|
||||
if (reply != 256-(track_len-sector_offset))
|
||||
return 1;
|
||||
}
|
||||
@ -1214,11 +1214,11 @@ static int write_sector(ti99_lvl1_imgref *l1_img, const ti99_sector_address *add
|
||||
case if_v9t9:
|
||||
/* V9T9 format */
|
||||
/* seek to sector */
|
||||
reply = stream_seek(l1_img->file_handle, sector_address_to_image_offset(l1_img, address), SEEK_SET);
|
||||
reply = l1_img->file_handle->seek(sector_address_to_image_offset(l1_img, address), SEEK_SET);
|
||||
if (reply)
|
||||
return 1;
|
||||
/* write it */
|
||||
reply = stream_write(l1_img->file_handle, src, 256);
|
||||
reply = l1_img->file_handle->write(src, 256);
|
||||
if (reply != 256)
|
||||
return 1;
|
||||
break;
|
||||
@ -1233,31 +1233,31 @@ static int write_sector(ti99_lvl1_imgref *l1_img, const ti99_sector_address *add
|
||||
if ((sector_offset + 256) <= track_len)
|
||||
{
|
||||
/* seek to sector */
|
||||
reply = stream_seek(l1_img->file_handle, track_offset+sector_offset, SEEK_SET);
|
||||
reply = l1_img->file_handle->seek(track_offset+sector_offset, SEEK_SET);
|
||||
if (reply)
|
||||
return 1;
|
||||
/* write it */
|
||||
reply = stream_write(l1_img->file_handle, src, 256);
|
||||
reply = l1_img->file_handle->write(src, 256);
|
||||
if (reply != 256)
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* seek to sector */
|
||||
reply = stream_seek(l1_img->file_handle, track_offset+sector_offset, SEEK_SET);
|
||||
reply = l1_img->file_handle->seek(track_offset+sector_offset, SEEK_SET);
|
||||
if (reply)
|
||||
return 1;
|
||||
/* write first chunk (until end of track) */
|
||||
reply = stream_write(l1_img->file_handle, (UINT8 *)src, track_len-sector_offset);
|
||||
reply = l1_img->file_handle->write((UINT8 *)src, track_len-sector_offset);
|
||||
if (reply != track_len-sector_offset)
|
||||
return 1;
|
||||
|
||||
/* wrap to start of track */
|
||||
reply = stream_seek(l1_img->file_handle, track_offset, SEEK_SET);
|
||||
reply = l1_img->file_handle->seek(track_offset, SEEK_SET);
|
||||
if (reply)
|
||||
return 1;
|
||||
/* write remnant of sector */
|
||||
reply = stream_write(l1_img->file_handle, (UINT8 *)src + (track_len-sector_offset), 256-(track_len-sector_offset));
|
||||
reply = l1_img->file_handle->write((UINT8 *)src + (track_len-sector_offset), 256-(track_len-sector_offset));
|
||||
if (reply != 256-(track_len-sector_offset))
|
||||
return 1;
|
||||
}
|
||||
@ -1723,7 +1723,7 @@ struct ti99_lvl2_fileref_win
|
||||
|
||||
struct ti99_lvl2_fileref_tifiles
|
||||
{
|
||||
imgtool_stream *file_handle;
|
||||
imgtool::stream *file_handle;
|
||||
tifile_header hdr;
|
||||
};
|
||||
|
||||
@ -2909,11 +2909,11 @@ static int new_file_lvl2_win(struct ti99_lvl2_imgref *l2_img, ti99_catalog *pare
|
||||
/*
|
||||
Allocate a new (empty) file
|
||||
*/
|
||||
static int new_file_lvl2_tifiles(imgtool_stream *file_handle, struct ti99_lvl2_fileref *l2_file)
|
||||
static int new_file_lvl2_tifiles(imgtool::stream &file_handle, struct ti99_lvl2_fileref *l2_file)
|
||||
{
|
||||
/* set up file handle */
|
||||
l2_file->type = L2F_TIFILES;
|
||||
l2_file->tifiles.file_handle = file_handle;
|
||||
l2_file->tifiles.file_handle = &file_handle;
|
||||
memset(&l2_file->tifiles.hdr, 0, sizeof(l2_file->tifiles.hdr));
|
||||
l2_file->tifiles.hdr.tifiles[0] = '\7';
|
||||
l2_file->tifiles.hdr.tifiles[1] = 'T';
|
||||
@ -3087,17 +3087,17 @@ static int open_file_lvl2_win(struct ti99_lvl2_imgref *l2_img, const char *fpath
|
||||
/*
|
||||
Open an existing file in TIFILES format
|
||||
*/
|
||||
static int open_file_lvl2_tifiles(imgtool_stream *file_handle, struct ti99_lvl2_fileref *l2_file)
|
||||
static int open_file_lvl2_tifiles(imgtool::stream &file_handle, struct ti99_lvl2_fileref *l2_file)
|
||||
{
|
||||
/* set up file handle */
|
||||
l2_file->type = L2F_TIFILES;
|
||||
l2_file->tifiles.file_handle = file_handle;
|
||||
l2_file->tifiles.file_handle = &file_handle;
|
||||
|
||||
/* seek to header */
|
||||
if (stream_seek(l2_file->tifiles.file_handle, 0, SEEK_SET))
|
||||
if (l2_file->tifiles.file_handle->seek(0, SEEK_SET))
|
||||
return IMGTOOLERR_READERROR;
|
||||
/* read it */
|
||||
if (stream_read(l2_file->tifiles.file_handle, &l2_file->tifiles.hdr, sizeof(l2_file->tifiles.hdr)) != sizeof(l2_file->tifiles.hdr))
|
||||
if (l2_file->tifiles.file_handle->read(&l2_file->tifiles.hdr, sizeof(l2_file->tifiles.hdr)) != sizeof(l2_file->tifiles.hdr))
|
||||
return IMGTOOLERR_READERROR;
|
||||
|
||||
return 0;
|
||||
@ -3242,10 +3242,10 @@ static int read_file_physrec(struct ti99_lvl2_fileref *l2_file, unsigned fphysre
|
||||
|
||||
case L2F_TIFILES:
|
||||
/* seek to physrec */
|
||||
if (stream_seek(l2_file->tifiles.file_handle, 128+256*fphysrec, SEEK_SET))
|
||||
if (l2_file->tifiles.file_handle->seek(128+256*fphysrec, SEEK_SET))
|
||||
return IMGTOOLERR_READERROR;
|
||||
/* read it */
|
||||
if (stream_read(l2_file->tifiles.file_handle, dest, 256) != 256)
|
||||
if (l2_file->tifiles.file_handle->read(dest, 256) != 256)
|
||||
return IMGTOOLERR_READERROR;
|
||||
break;
|
||||
}
|
||||
@ -3285,10 +3285,10 @@ static int write_file_physrec(struct ti99_lvl2_fileref *l2_file, unsigned fphysr
|
||||
|
||||
case L2F_TIFILES:
|
||||
/* seek to physrec */
|
||||
if (stream_seek(l2_file->tifiles.file_handle, 128+256*fphysrec, SEEK_SET))
|
||||
if (l2_file->tifiles.file_handle->seek(128+256*fphysrec, SEEK_SET))
|
||||
return IMGTOOLERR_WRITEERROR;
|
||||
/* write it */
|
||||
if (stream_write(l2_file->tifiles.file_handle, src, 256) != 256)
|
||||
if (l2_file->tifiles.file_handle->write(src, 256) != 256)
|
||||
return IMGTOOLERR_WRITEERROR;
|
||||
break;
|
||||
}
|
||||
@ -3848,11 +3848,11 @@ struct win_iterator
|
||||
};
|
||||
|
||||
|
||||
static imgtoolerr_t dsk_image_init_mess(imgtool::image *image, imgtool_stream *f);
|
||||
static imgtoolerr_t dsk_image_init_v9t9(imgtool::image *image, imgtool_stream *f);
|
||||
static imgtoolerr_t dsk_image_init_pc99_fm(imgtool::image *image, imgtool_stream *f);
|
||||
static imgtoolerr_t dsk_image_init_pc99_mfm(imgtool::image *image, imgtool_stream *f);
|
||||
static imgtoolerr_t win_image_init(imgtool::image *image, imgtool_stream *f);
|
||||
static imgtoolerr_t dsk_image_init_mess(imgtool::image *image, imgtool::stream &f);
|
||||
static imgtoolerr_t dsk_image_init_v9t9(imgtool::image *image, imgtool::stream &f);
|
||||
static imgtoolerr_t dsk_image_init_pc99_fm(imgtool::image *image, imgtool::stream &f);
|
||||
static imgtoolerr_t dsk_image_init_pc99_mfm(imgtool::image *image, imgtool::stream &f);
|
||||
static imgtoolerr_t win_image_init(imgtool::image *image, imgtool::stream &f);
|
||||
static void ti99_image_exit(imgtool::image *img);
|
||||
static void ti99_image_info(imgtool::image *img, char *string, size_t len);
|
||||
static imgtoolerr_t dsk_image_beginenum(imgtool::directory *enumeration, const char *path);
|
||||
@ -3860,12 +3860,12 @@ static imgtoolerr_t dsk_image_nextenum(imgtool::directory *enumeration, imgtool_
|
||||
static imgtoolerr_t win_image_beginenum(imgtool::directory *enumeration, const char *path);
|
||||
static imgtoolerr_t win_image_nextenum(imgtool::directory *enumeration, imgtool_dirent *ent);
|
||||
static imgtoolerr_t ti99_image_freespace(imgtool::partition *partition, UINT64 *size);
|
||||
static imgtoolerr_t ti99_image_readfile(imgtool::partition *partition, const char *fpath, const char *fork, imgtool_stream *destf);
|
||||
static imgtoolerr_t ti99_image_writefile(imgtool::partition *partition, const char *fpath, const char *fork, imgtool_stream *sourcef, util::option_resolution *writeoptions);
|
||||
static imgtoolerr_t ti99_image_readfile(imgtool::partition *partition, const char *fpath, const char *fork, imgtool::stream &destf);
|
||||
static imgtoolerr_t ti99_image_writefile(imgtool::partition *partition, const char *fpath, const char *fork, imgtool::stream &sourcef, util::option_resolution *writeoptions);
|
||||
static imgtoolerr_t dsk_image_deletefile(imgtool::partition *partition, const char *fpath);
|
||||
static imgtoolerr_t win_image_deletefile(imgtool::partition *partition, const char *fpath);
|
||||
static imgtoolerr_t dsk_image_create_mess(imgtool::image *image, imgtool_stream *f, util::option_resolution *createoptions);
|
||||
static imgtoolerr_t dsk_image_create_v9t9(imgtool::image *image, imgtool_stream *f, util::option_resolution *createoptions);
|
||||
static imgtoolerr_t dsk_image_create_mess(imgtool::image *image, imgtool::stream &f, util::option_resolution *createoptions);
|
||||
static imgtoolerr_t dsk_image_create_v9t9(imgtool::image *image, imgtool::stream &f, util::option_resolution *createoptions);
|
||||
|
||||
enum
|
||||
{
|
||||
@ -3995,7 +3995,7 @@ void ti99_ti99hd_get_info(const imgtool_class *imgclass, UINT32 state, union img
|
||||
/*
|
||||
Open a file as a ti99_image (common code).
|
||||
*/
|
||||
static int dsk_image_init(imgtool::image *img, imgtool_stream *f, ti99_img_format img_format)
|
||||
static int dsk_image_init(imgtool::image *img, imgtool::stream &f, ti99_img_format img_format)
|
||||
{
|
||||
struct ti99_lvl2_imgref *image = (struct ti99_lvl2_imgref *) img->extra_bytes();
|
||||
dsk_vib vib;
|
||||
@ -4096,7 +4096,7 @@ static int dsk_image_init(imgtool::image *img, imgtool_stream *f, ti99_img_forma
|
||||
/*
|
||||
Open a file as a ti99_image (MESS format).
|
||||
*/
|
||||
static imgtoolerr_t dsk_image_init_mess(imgtool::image *image, imgtool_stream *f)
|
||||
static imgtoolerr_t dsk_image_init_mess(imgtool::image *image, imgtool::stream &f)
|
||||
{
|
||||
return (imgtoolerr_t)dsk_image_init(image, f, if_mess);
|
||||
}
|
||||
@ -4104,7 +4104,7 @@ static imgtoolerr_t dsk_image_init_mess(imgtool::image *image, imgtool_stream *f
|
||||
/*
|
||||
Open a file as a ti99_image (V9T9 format).
|
||||
*/
|
||||
static imgtoolerr_t dsk_image_init_v9t9(imgtool::image *image, imgtool_stream *f)
|
||||
static imgtoolerr_t dsk_image_init_v9t9(imgtool::image *image, imgtool::stream &f)
|
||||
{
|
||||
return (imgtoolerr_t)dsk_image_init(image, f, if_v9t9);
|
||||
}
|
||||
@ -4112,7 +4112,7 @@ static imgtoolerr_t dsk_image_init_v9t9(imgtool::image *image, imgtool_stream *f
|
||||
/*
|
||||
Open a file as a ti99_image (PC99 FM format).
|
||||
*/
|
||||
static imgtoolerr_t dsk_image_init_pc99_fm(imgtool::image *image, imgtool_stream *f)
|
||||
static imgtoolerr_t dsk_image_init_pc99_fm(imgtool::image *image, imgtool::stream &f)
|
||||
{
|
||||
return (imgtoolerr_t)dsk_image_init(image, f, if_pc99_fm);
|
||||
}
|
||||
@ -4120,7 +4120,7 @@ static imgtoolerr_t dsk_image_init_pc99_fm(imgtool::image *image, imgtool_stream
|
||||
/*
|
||||
Open a file as a ti99_image (PC99 MFM format).
|
||||
*/
|
||||
static imgtoolerr_t dsk_image_init_pc99_mfm(imgtool::image *image, imgtool_stream *f)
|
||||
static imgtoolerr_t dsk_image_init_pc99_mfm(imgtool::image *image, imgtool::stream &f)
|
||||
{
|
||||
return (imgtoolerr_t)dsk_image_init(image, f, if_pc99_mfm);
|
||||
}
|
||||
@ -4128,7 +4128,7 @@ static imgtoolerr_t dsk_image_init_pc99_mfm(imgtool::image *image, imgtool_strea
|
||||
/*
|
||||
Open a file as a ti99_image (harddisk format).
|
||||
*/
|
||||
static imgtoolerr_t win_image_init(imgtool::image *img, imgtool_stream *f)
|
||||
static imgtoolerr_t win_image_init(imgtool::image *img, imgtool::stream &f)
|
||||
{
|
||||
struct ti99_lvl2_imgref *image = (struct ti99_lvl2_imgref *) img->extra_bytes();
|
||||
win_vib_ddr vib;
|
||||
@ -4502,7 +4502,7 @@ static imgtoolerr_t ti99_image_freespace(imgtool::partition *partition, UINT64 *
|
||||
/*
|
||||
Extract a file from a ti99_image. The file is saved in tifile format.
|
||||
*/
|
||||
static imgtoolerr_t ti99_image_readfile(imgtool::partition *partition, const char *fpath, const char *fork, imgtool_stream *destf)
|
||||
static imgtoolerr_t ti99_image_readfile(imgtool::partition *partition, const char *fpath, const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
imgtool::image *img = &partition->image();
|
||||
#if 1
|
||||
@ -4574,7 +4574,7 @@ static imgtoolerr_t ti99_image_readfile(imgtool::partition *partition, const cha
|
||||
#endif
|
||||
set_file_update_date(&dst_file, date_time);
|
||||
|
||||
if (stream_write(destf, & dst_file.tifiles.hdr, 128) != 128)
|
||||
if (destf.write(& dst_file.tifiles.hdr, 128) != 128)
|
||||
return (imgtoolerr_t)IMGTOOLERR_WRITEERROR;
|
||||
|
||||
/* copy data to TIFILE */
|
||||
@ -4630,9 +4630,9 @@ static imgtoolerr_t ti99_image_readfile(imgtool::partition *partition, const cha
|
||||
errorcode = read_next_record(& src_file, buf, & reclen);
|
||||
if (errorcode)
|
||||
return errorcode;
|
||||
if (stream_write(destf, buf, reclen) != reclen)
|
||||
if (destf.write(buf, reclen) != reclen)
|
||||
return IMGTOOLERR_WRITEERROR;
|
||||
if (stream_write(destf, &lineend, 1) != 1)
|
||||
if (destf.write(&lineend, 1) != 1)
|
||||
return IMGTOOLERR_WRITEERROR;
|
||||
}
|
||||
|
||||
@ -4644,7 +4644,7 @@ static imgtoolerr_t ti99_image_readfile(imgtool::partition *partition, const cha
|
||||
/*
|
||||
Add a file to a ti99_image. The file must be in tifile format.
|
||||
*/
|
||||
static imgtoolerr_t ti99_image_writefile(imgtool::partition *partition, const char *fpath, const char *fork, imgtool_stream *sourcef, util::option_resolution *writeoptions)
|
||||
static imgtoolerr_t ti99_image_writefile(imgtool::partition *partition, const char *fpath, const char *fork, imgtool::stream &sourcef, util::option_resolution *writeoptions)
|
||||
{
|
||||
imgtool::image *img = &partition->image();
|
||||
struct ti99_lvl2_imgref *image = (struct ti99_lvl2_imgref *) img->extra_bytes();
|
||||
@ -4766,7 +4766,7 @@ static imgtoolerr_t ti99_image_writefile(imgtool::partition *partition, const ch
|
||||
/* copy data */
|
||||
for (i=0; i<fphysrecs; i++)
|
||||
{
|
||||
if (stream_read(sourcef, buf, 256) != 256)
|
||||
if (sourcef.read(buf, 256) != 256)
|
||||
return (imgtoolerr_t)IMGTOOLERR_READERROR;
|
||||
|
||||
errorcode = (imgtoolerr_t)write_file_physrec(& dst_file, i, buf);
|
||||
@ -5226,7 +5226,7 @@ static imgtoolerr_t win_image_deletefile(imgtool::partition *partition, const ch
|
||||
|
||||
Supports MESS and V9T9 formats only
|
||||
*/
|
||||
static imgtoolerr_t dsk_image_create(imgtool::image *image, imgtool_stream *f, util::option_resolution *createoptions, ti99_img_format img_format)
|
||||
static imgtoolerr_t dsk_image_create(imgtool::image *image, imgtool::stream &f, util::option_resolution *createoptions, ti99_img_format img_format)
|
||||
{
|
||||
const char *volname;
|
||||
int density;
|
||||
@ -5241,7 +5241,7 @@ static imgtoolerr_t dsk_image_create(imgtool::image *image, imgtool_stream *f, u
|
||||
int i;
|
||||
|
||||
l1_img.img_format = img_format;
|
||||
l1_img.file_handle = f;
|
||||
l1_img.file_handle = &f;
|
||||
|
||||
/* read options */
|
||||
volname = createoptions->lookup_string(dsk_createopts_volname).c_str();
|
||||
@ -5346,7 +5346,7 @@ static imgtoolerr_t dsk_image_create(imgtool::image *image, imgtool_stream *f, u
|
||||
/*
|
||||
Create a blank ti99_image (MESS format).
|
||||
*/
|
||||
static imgtoolerr_t dsk_image_create_mess(imgtool::image *image, imgtool_stream *f, util::option_resolution *createoptions)
|
||||
static imgtoolerr_t dsk_image_create_mess(imgtool::image *image, imgtool::stream &f, util::option_resolution *createoptions)
|
||||
{
|
||||
return dsk_image_create(image, f, createoptions, if_mess);
|
||||
}
|
||||
@ -5354,7 +5354,7 @@ static imgtoolerr_t dsk_image_create_mess(imgtool::image *image, imgtool_stream
|
||||
/*
|
||||
Create a blank ti99_image (V9T9 format).
|
||||
*/
|
||||
static imgtoolerr_t dsk_image_create_v9t9(imgtool::image *image, imgtool_stream *f, util::option_resolution *createoptions)
|
||||
static imgtoolerr_t dsk_image_create_v9t9(imgtool::image *image, imgtool::stream &f, util::option_resolution *createoptions)
|
||||
{
|
||||
return dsk_image_create(image, f, createoptions, if_v9t9);
|
||||
}
|
||||
|
@ -368,7 +368,7 @@ struct ti990_phys_sec_address
|
||||
*/
|
||||
struct ti990_image
|
||||
{
|
||||
imgtool_stream *file_handle; /* imgtool file handle */
|
||||
imgtool::stream *file_handle; /* imgtool file handle */
|
||||
ti990_geometry geometry; /* geometry */
|
||||
ti990_sc0 sec0; /* cached copy of sector 0 */
|
||||
};
|
||||
@ -386,7 +386,7 @@ struct ti990_iterator
|
||||
};
|
||||
|
||||
|
||||
static imgtoolerr_t ti990_image_init(imgtool::image *img, imgtool_stream *f);
|
||||
static imgtoolerr_t ti990_image_init(imgtool::image *img, imgtool::stream &f);
|
||||
static void ti990_image_exit(imgtool::image *img);
|
||||
static void ti990_image_info(imgtool::image *img, char *string, size_t len);
|
||||
static imgtoolerr_t ti990_image_beginenum(imgtool::directory *enumeration, const char *path);
|
||||
@ -394,11 +394,11 @@ static imgtoolerr_t ti990_image_nextenum(imgtool::directory *enumeration, imgtoo
|
||||
static void ti990_image_closeenum(imgtool::directory *enumeration);
|
||||
static imgtoolerr_t ti990_image_freespace(imgtool::partition *partition, UINT64 *size);
|
||||
#ifdef UNUSED_FUNCTION
|
||||
static imgtoolerr_t ti990_image_readfile(imgtool::partition *partition, const char *fpath, imgtool_stream *destf);
|
||||
static imgtoolerr_t ti990_image_writefile(imgtool::partition *partition, const char *fpath, imgtool_stream *sourcef, util::option_resolution *writeoptions);
|
||||
static imgtoolerr_t ti990_image_readfile(imgtool::partition *partition, const char *fpath, imgtool::stream *destf);
|
||||
static imgtoolerr_t ti990_image_writefile(imgtool::partition *partition, const char *fpath, imgtool::stream *sourcef, util::option_resolution *writeoptions);
|
||||
static imgtoolerr_t ti990_image_deletefile(imgtool::partition *partition, const char *fpath);
|
||||
#endif
|
||||
static imgtoolerr_t ti990_image_create(imgtool::image *image, imgtool_stream *f, util::option_resolution *createoptions);
|
||||
static imgtoolerr_t ti990_image_create(imgtool::image *image, imgtool::stream &f, util::option_resolution *createoptions);
|
||||
|
||||
enum
|
||||
{
|
||||
@ -531,7 +531,7 @@ static unsigned phys_address_to_offset(const ti990_phys_sec_address *address, co
|
||||
dest: pointer to destination buffer
|
||||
len: length of data to read
|
||||
*/
|
||||
static int read_sector_physical_len(imgtool_stream *file_handle, const ti990_phys_sec_address *address, const ti990_geometry *geometry, void *dest, int len)
|
||||
static int read_sector_physical_len(imgtool::stream &file_handle, const ti990_phys_sec_address *address, const ti990_geometry *geometry, void *dest, int len)
|
||||
{
|
||||
int reply;
|
||||
|
||||
@ -539,11 +539,11 @@ static int read_sector_physical_len(imgtool_stream *file_handle, const ti990_phy
|
||||
return 1;
|
||||
|
||||
/* seek to sector */
|
||||
reply = stream_seek(file_handle, phys_address_to_offset(address, geometry), SEEK_SET);
|
||||
reply = file_handle.seek(phys_address_to_offset(address, geometry), SEEK_SET);
|
||||
if (reply)
|
||||
return 1;
|
||||
/* read it */
|
||||
reply = stream_read(file_handle, dest, len);
|
||||
reply = file_handle.read(dest, len);
|
||||
if (reply != len)
|
||||
return 1;
|
||||
|
||||
@ -559,7 +559,7 @@ static int read_sector_physical_len(imgtool_stream *file_handle, const ti990_phy
|
||||
geometry: disk geometry (sectors per track, tracks per side, sides)
|
||||
dest: pointer to a destination buffer of geometry->bytes_per_sector bytes
|
||||
*/
|
||||
static int read_sector_physical(imgtool_stream *file_handle, const ti990_phys_sec_address *address, const ti990_geometry *geometry, void *dest)
|
||||
static int read_sector_physical(imgtool::stream *file_handle, const ti990_phys_sec_address *address, const ti990_geometry *geometry, void *dest)
|
||||
{
|
||||
return read_sector_physical_len(file_handle, address, geometry, dest, geometry->bytes_per_sector);
|
||||
}
|
||||
@ -574,7 +574,7 @@ static int read_sector_physical(imgtool_stream *file_handle, const ti990_phys_se
|
||||
src: pointer to source buffer
|
||||
len: length of source buffer
|
||||
*/
|
||||
static int write_sector_physical_len(imgtool_stream *file_handle, const ti990_phys_sec_address *address, const ti990_geometry *geometry, const void *src, int len)
|
||||
static int write_sector_physical_len(imgtool::stream &file_handle, const ti990_phys_sec_address *address, const ti990_geometry *geometry, const void *src, int len)
|
||||
{
|
||||
int reply;
|
||||
|
||||
@ -582,17 +582,17 @@ static int write_sector_physical_len(imgtool_stream *file_handle, const ti990_ph
|
||||
return 1;
|
||||
|
||||
/* seek to sector */
|
||||
reply = stream_seek(file_handle, phys_address_to_offset(address, geometry), SEEK_SET);
|
||||
reply = file_handle.seek(phys_address_to_offset(address, geometry), SEEK_SET);
|
||||
if (reply)
|
||||
return 1;
|
||||
/* write it */
|
||||
reply = stream_write(file_handle, src, len);
|
||||
reply = file_handle.write(src, len);
|
||||
if (reply != len)
|
||||
return 1;
|
||||
/* pad with 0s if needed */
|
||||
if (len < geometry->bytes_per_sector)
|
||||
{
|
||||
reply = stream_fill(file_handle, 0, geometry->bytes_per_sector - len);
|
||||
reply = file_handle.fill(0, geometry->bytes_per_sector - len);
|
||||
|
||||
if (reply != geometry->bytes_per_sector - len)
|
||||
return 1;
|
||||
@ -610,7 +610,7 @@ static int write_sector_physical_len(imgtool_stream *file_handle, const ti990_ph
|
||||
geometry: disk geometry (sectors per track, tracks per side, sides)
|
||||
dest: pointer to a source buffer of geometry->bytes_per_sector bytes
|
||||
*/
|
||||
static int write_sector_physical(imgtool_stream *file_handle, const ti990_phys_sec_address *address, const ti990_geometry *geometry, const void *src)
|
||||
static int write_sector_physical(imgtool::stream *file_handle, const ti990_phys_sec_address *address, const ti990_geometry *geometry, const void *src)
|
||||
{
|
||||
return write_sector_physical_len(file_handle, address, geometry, src, geometry->bytes_per_sector);
|
||||
}
|
||||
@ -636,7 +636,7 @@ static void log_address_to_phys_address(int secnum, const ti990_geometry *geomet
|
||||
dest: pointer to destination buffer
|
||||
len: length of data to read
|
||||
*/
|
||||
static int read_sector_logical_len(imgtool_stream *file_handle, int secnum, const ti990_geometry *geometry, void *dest, int len)
|
||||
static int read_sector_logical_len(imgtool::stream &file_handle, int secnum, const ti990_geometry *geometry, void *dest, int len)
|
||||
{
|
||||
ti990_phys_sec_address address;
|
||||
|
||||
@ -655,7 +655,7 @@ static int read_sector_logical_len(imgtool_stream *file_handle, int secnum, cons
|
||||
geometry: disk geometry (sectors per track, tracks per side, sides)
|
||||
dest: pointer to a destination buffer of geometry->bytes_per_sector bytes
|
||||
*/
|
||||
static int read_sector_logical(imgtool_stream *file_handle, int secnum, const ti990_geometry *geometry, void *dest)
|
||||
static int read_sector_logical(imgtool::stream *file_handle, int secnum, const ti990_geometry *geometry, void *dest)
|
||||
{
|
||||
return read_sector_logical_len(file_handle, secnum, geometry, dest, geometry->bytes_per_sector);
|
||||
}
|
||||
@ -670,7 +670,7 @@ static int read_sector_logical(imgtool_stream *file_handle, int secnum, const ti
|
||||
src: pointer to source buffer
|
||||
len: length of source buffer
|
||||
*/
|
||||
static int write_sector_logical_len(imgtool_stream *file_handle, int secnum, const ti990_geometry *geometry, const void *src, int len)
|
||||
static int write_sector_logical_len(imgtool::stream &file_handle, int secnum, const ti990_geometry *geometry, const void *src, int len)
|
||||
{
|
||||
ti990_phys_sec_address address;
|
||||
|
||||
@ -688,7 +688,7 @@ static int write_sector_logical_len(imgtool_stream *file_handle, int secnum, con
|
||||
geometry: disk geometry (sectors per track, tracks per side, sides)
|
||||
dest: pointer to a source buffer of geometry->bytes_per_sector bytes
|
||||
*/
|
||||
static int write_sector_logical(imgtool_stream *file_handle, int secnum, const ti990_geometry *geometry, const void *src)
|
||||
static int write_sector_logical(imgtool::stream &file_handle, int secnum, const ti990_geometry *geometry, const void *src)
|
||||
{
|
||||
return write_sector_logical_len(file_handle, secnum, geometry, src, geometry->bytes_per_sector);
|
||||
}
|
||||
@ -1106,15 +1106,15 @@ static int qsort_catalog_compare(const void *p1, const void *p2)
|
||||
/*
|
||||
Open a file as a ti990_image.
|
||||
*/
|
||||
static imgtoolerr_t ti990_image_init(imgtool::image *img, imgtool_stream *f)
|
||||
static imgtoolerr_t ti990_image_init(imgtool::image *img, imgtool::stream &f)
|
||||
{
|
||||
ti990_image *image = (ti990_image *) img->extra_bytes();
|
||||
disk_image_header header;
|
||||
int reply;
|
||||
unsigned totsecs;
|
||||
|
||||
image->file_handle = f;
|
||||
reply = stream_read(f, &header, sizeof(header));
|
||||
image->file_handle = &f;
|
||||
reply = f.read(&header, sizeof(header));
|
||||
if (reply != sizeof(header))
|
||||
return IMGTOOLERR_READERROR;
|
||||
|
||||
@ -1131,7 +1131,7 @@ static imgtoolerr_t ti990_image_init(imgtool::image *img, imgtool_stream *f)
|
||||
|| (image->geometry.heads > MAX_HEADS)
|
||||
|| (image->geometry.cylinders > MAX_CYLINDERS)
|
||||
|| (totsecs < 1)
|
||||
|| (stream_size(f) != header_len + totsecs*image->geometry.bytes_per_sector))
|
||||
|| (f.size() != header_len + totsecs*image->geometry.bytes_per_sector))
|
||||
{
|
||||
return IMGTOOLERR_CORRUPTIMAGE;
|
||||
}
|
||||
@ -1165,7 +1165,7 @@ static imgtoolerr_t ti990_image_init(imgtool::image *img, imgtool_stream *f)
|
||||
static void ti990_image_exit(imgtool::image *img)
|
||||
{
|
||||
ti990_image *image = (ti990_image *) img->extra_bytes();
|
||||
stream_close(image->file_handle);
|
||||
delete image->file_handle;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1195,7 +1195,7 @@ static imgtoolerr_t ti990_image_beginenum(imgtool::directory *enumeration, const
|
||||
|
||||
iter->image = image;
|
||||
|
||||
reply = read_sector_logical_len(iter->image->file_handle,
|
||||
reply = read_sector_logical_len(*iter->image->file_handle,
|
||||
(unsigned) get_UINT16BE(iter->image->sec0.vda) * get_UINT16BE(iter->image->sec0.spa),
|
||||
& iter->image->geometry, &dor, sizeof(dor));
|
||||
|
||||
@ -1223,7 +1223,7 @@ static imgtoolerr_t ti990_image_nextenum(imgtool::directory *enumeration, imgtoo
|
||||
ent->eof = 0;
|
||||
|
||||
while ((iter->level >= 0)
|
||||
&& (! (reply = read_sector_logical_len(iter->image->file_handle,
|
||||
&& (! (reply = read_sector_logical_len(*iter->image->file_handle,
|
||||
iter->level ? (unsigned) get_UINT16BE(iter->xdr[iter->level-1].fdr.paa) * get_UINT16BE(iter->image->sec0.spa) + (iter->index[iter->level]+1)
|
||||
: (unsigned) get_UINT16BE(iter->image->sec0.vda) * get_UINT16BE(iter->image->sec0.spa) + (iter->index[iter->level]+1),
|
||||
& iter->image->geometry, &iter->xdr[iter->level],
|
||||
@ -1276,7 +1276,7 @@ static imgtoolerr_t ti990_image_nextenum(imgtool::directory *enumeration, imgtoo
|
||||
ti990_fdr target_fdr;
|
||||
char buf[9];
|
||||
|
||||
reply = read_sector_logical_len(iter->image->file_handle,
|
||||
reply = read_sector_logical_len(*iter->image->file_handle,
|
||||
iter->level ? ((unsigned) get_UINT16BE(iter->xdr[iter->level-1].fdr.paa) * get_UINT16BE(iter->image->sec0.spa) + get_UINT16BE(iter->xdr[iter->level].adr.raf))
|
||||
: ((unsigned) get_UINT16BE(iter->image->sec0.vda) * get_UINT16BE(iter->image->sec0.spa) + get_UINT16BE(iter->xdr[iter->level].adr.raf)),
|
||||
& iter->image->geometry, &target_fdr,
|
||||
@ -1382,7 +1382,7 @@ static imgtoolerr_t ti990_image_nextenum(imgtool::directory *enumeration, imgtoo
|
||||
if (get_UINT16BE(iter->xdr[iter->level].fdr.saa) != 0)
|
||||
printf("ninou");
|
||||
|
||||
read_sector_logical_len(iter->image->file_handle,
|
||||
read_sector_logical_len(*iter->image->file_handle,
|
||||
get_UINT16BE(iter->xdr[iter->level].fdr.paa) * get_UINT16BE(iter->image->sec0.spa),
|
||||
& iter->image->geometry, &dor, sizeof(dor));
|
||||
|
||||
@ -1431,7 +1431,7 @@ static imgtoolerr_t ti990_image_freespace(imgtool::partition *partition, UINT64
|
||||
sub_adu = 0;
|
||||
while (adu<totadus)
|
||||
{
|
||||
read_sector_logical_len(image->file_handle, image->sec0.sbm + record, &image->geometry, buf, sizeof(buf));
|
||||
read_sector_logical_len(*image->file_handle, image->sec0.sbm + record, &image->geometry, buf, sizeof(buf));
|
||||
|
||||
while ((adu < totadus) && (sub_adu < 2032))
|
||||
{
|
||||
@ -1453,7 +1453,7 @@ static imgtoolerr_t ti990_image_freespace(imgtool::partition *partition, UINT64
|
||||
/*
|
||||
Extract a file from a ti990_image.
|
||||
*/
|
||||
static imgtoolerr_t ti990_image_readfile(imgtool::partition *partition, const char *fpath, imgtool_stream *destf)
|
||||
static imgtoolerr_t ti990_image_readfile(imgtool::partition *partition, const char *fpath, imgtool::stream *destf)
|
||||
{
|
||||
imgtool::image *img = &partition->image();
|
||||
ti990_image *image = (ti990_image *) img->extra_bytes();
|
||||
@ -1506,7 +1506,7 @@ static imgtoolerr_t ti990_image_readfile(imgtool::partition *partition, const ch
|
||||
for (i=0; i<(128-14); i++)
|
||||
dst_header.res[i] = 0;
|
||||
|
||||
if (stream_write(destf, & dst_header, 128) != 128)
|
||||
if (destf->write(& dst_header, 128) != 128)
|
||||
return IMGTOOLERR_WRITEERROR;
|
||||
|
||||
|
||||
@ -1532,7 +1532,7 @@ static imgtoolerr_t ti990_image_readfile(imgtool::partition *partition, const ch
|
||||
if (read_sector_logical(image->file_handle, cur_sec, & image->geometry, buf))
|
||||
return IMGTOOLERR_READERROR;
|
||||
|
||||
if (stream_write(destf, buf, 256) != 256)
|
||||
if (destf->write(buf, 256) != 256)
|
||||
return IMGTOOLERR_WRITEERROR;
|
||||
|
||||
i++;
|
||||
@ -1550,7 +1550,7 @@ static imgtoolerr_t ti990_image_readfile(imgtool::partition *partition, const ch
|
||||
/*
|
||||
Add a file to a ti990_image.
|
||||
*/
|
||||
static imgtoolerr_t ti990_image_writefile(imgtool::partition *partition, const char *fpath, imgtool_stream *sourcef, util::option_resolution *writeoptions)
|
||||
static imgtoolerr_t ti990_image_writefile(imgtool::partition *partition, const char *fpath, imgtool::stream *sourcef, util::option_resolution *writeoptions)
|
||||
{
|
||||
imgtool::image *img = &partition->image();
|
||||
ti990_image *image = (ti990_image *) img->extra_bytes();
|
||||
@ -1592,7 +1592,7 @@ static imgtoolerr_t ti990_image_writefile(imgtool::partition *partition, const c
|
||||
return reply;
|
||||
}
|
||||
|
||||
if (stream_read(sourcef, & src_header, 128) != 128)
|
||||
if (sourcef->read(& src_header, 128) != 128)
|
||||
return IMGTOOLERR_READERROR;
|
||||
|
||||
/* create new file */
|
||||
@ -1637,7 +1637,7 @@ static imgtoolerr_t ti990_image_writefile(imgtool::partition *partition, const c
|
||||
if (cur_sec >= totsecs)
|
||||
return IMGTOOLERR_CORRUPTIMAGE;
|
||||
|
||||
if (stream_read(sourcef, buf, 256) != 256)
|
||||
if (sourcef->read(buf, 256) != 256)
|
||||
return IMGTOOLERR_READERROR;
|
||||
|
||||
if (write_sector_logical(image->file_handle, cur_sec, & image->geometry, buf))
|
||||
@ -1764,7 +1764,7 @@ static imgtoolerr_t ti990_image_deletefile(imgtool::partition *partition, const
|
||||
/*
|
||||
Create a blank ti990_image.
|
||||
*/
|
||||
static imgtoolerr_t ti990_image_create(imgtool::image *image, imgtool_stream *f, util::option_resolution *createoptions)
|
||||
static imgtoolerr_t ti990_image_create(imgtool::image *image, imgtool::stream &f, util::option_resolution *createoptions)
|
||||
{
|
||||
//const char *volname;
|
||||
ti990_geometry geometry;
|
||||
@ -1790,7 +1790,7 @@ static imgtoolerr_t ti990_image_create(imgtool::image *image, imgtool_stream *f,
|
||||
set_UINT32BE(& header.sectors_per_track, geometry.sectors_per_track);
|
||||
set_UINT32BE(& header.bytes_per_sector, geometry.bytes_per_sector);
|
||||
|
||||
reply = stream_write(f, &header, sizeof(header));
|
||||
reply = f.write(&header, sizeof(header));
|
||||
if (reply != sizeof(header))
|
||||
{
|
||||
return IMGTOOLERR_WRITEERROR;
|
||||
|
@ -478,7 +478,7 @@ static imgtoolerr_t vzdos_diskimage_freespace(imgtool::partition *partition, UIN
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
|
||||
static imgtoolerr_t vzdos_diskimage_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf)
|
||||
static imgtoolerr_t vzdos_diskimage_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
imgtoolerr_t ret;
|
||||
imgtool::image *image = &partition->image();
|
||||
@ -514,7 +514,7 @@ static imgtoolerr_t vzdos_diskimage_readfile(imgtool::partition *partition, cons
|
||||
/* write either DATA_SIZE or the remaining bytes */
|
||||
towrite = filesize > DATA_SIZE ? DATA_SIZE : filesize;
|
||||
|
||||
if (stream_write(destf, buffer, towrite) != towrite)
|
||||
if (destf.write(buffer, towrite) != towrite)
|
||||
return IMGTOOLERR_WRITEERROR;
|
||||
|
||||
filesize -= DATA_SIZE;
|
||||
@ -602,7 +602,7 @@ static imgtoolerr_t vzdos_diskimage_deletefile(imgtool::partition *partition, co
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
|
||||
static imgtoolerr_t vzdos_writefile(imgtool::partition *partition, int offset, imgtool_stream *sourcef, vzdos_dirent *entry)
|
||||
static imgtoolerr_t vzdos_writefile(imgtool::partition *partition, int offset, imgtool::stream &sourcef, vzdos_dirent *entry)
|
||||
{
|
||||
imgtoolerr_t ret;
|
||||
imgtool::image *img = &partition->image();
|
||||
@ -629,11 +629,11 @@ static imgtoolerr_t vzdos_writefile(imgtool::partition *partition, int offset, i
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = (imgtoolerr_t)stream_seek(sourcef, offset, SEEK_SET);
|
||||
ret = (imgtoolerr_t) sourcef.seek(offset, SEEK_SET);
|
||||
if (ret) return ret;
|
||||
|
||||
/* check if there is enough space */
|
||||
filesize = stream_size(sourcef) - offset;
|
||||
filesize = sourcef.size() - offset;
|
||||
|
||||
ret = vzdos_diskimage_freespace(partition, &freespace);
|
||||
if (ret) return ret;
|
||||
@ -668,7 +668,7 @@ static imgtoolerr_t vzdos_writefile(imgtool::partition *partition, int offset, i
|
||||
/* write data to disk */
|
||||
while (filesize > 0) {
|
||||
toread = filesize > DATA_SIZE ? DATA_SIZE : filesize;
|
||||
stream_read(sourcef, buffer, toread);
|
||||
sourcef.read(buffer, toread);
|
||||
|
||||
filesize -= toread;
|
||||
|
||||
@ -700,7 +700,7 @@ static imgtoolerr_t vzdos_writefile(imgtool::partition *partition, int offset, i
|
||||
}
|
||||
|
||||
/* create a new file or overwrite a file */
|
||||
static imgtoolerr_t vzdos_diskimage_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *opts)
|
||||
static imgtoolerr_t vzdos_diskimage_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts)
|
||||
{
|
||||
imgtoolerr_t ret;
|
||||
int ftype;
|
||||
@ -789,7 +789,7 @@ static imgtoolerr_t vzdos_diskimage_suggesttransfer(imgtool::partition *partitio
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
|
||||
static imgtoolerr_t vzdos_diskimage_create(imgtool::image *img, imgtool_stream *stream, util::option_resolution *opts)
|
||||
static imgtoolerr_t vzdos_diskimage_create(imgtool::image *img, imgtool::stream &stream, util::option_resolution *opts)
|
||||
{
|
||||
imgtoolerr_t ret;
|
||||
int track, sector;
|
||||
@ -808,7 +808,7 @@ static imgtoolerr_t vzdos_diskimage_create(imgtool::image *img, imgtool_stream *
|
||||
Imgtool vz filter code
|
||||
*********************************************************************/
|
||||
|
||||
static imgtoolerr_t vzsnapshot_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *destf)
|
||||
static imgtoolerr_t vzsnapshot_readfile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &destf)
|
||||
{
|
||||
imgtoolerr_t ret;
|
||||
imgtool::image *image = &partition->image();
|
||||
@ -843,7 +843,7 @@ static imgtoolerr_t vzsnapshot_readfile(imgtool::partition *partition, const cha
|
||||
place_integer_le(header, 22, 2, entry.start_address);
|
||||
|
||||
/* write header to file */
|
||||
stream_write(destf, header, sizeof(header));
|
||||
destf.write(header, sizeof(header));
|
||||
|
||||
/* write data to file */
|
||||
ret = vzdos_diskimage_readfile(partition, filename, "", destf);
|
||||
@ -852,7 +852,7 @@ static imgtoolerr_t vzsnapshot_readfile(imgtool::partition *partition, const cha
|
||||
return IMGTOOLERR_SUCCESS;
|
||||
}
|
||||
|
||||
static imgtoolerr_t vzsnapshot_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, util::option_resolution *opts)
|
||||
static imgtoolerr_t vzsnapshot_writefile(imgtool::partition *partition, const char *filename, const char *fork, imgtool::stream &sourcef, util::option_resolution *opts)
|
||||
{
|
||||
imgtoolerr_t ret;
|
||||
int fnameopt;
|
||||
@ -860,7 +860,7 @@ static imgtoolerr_t vzsnapshot_writefile(imgtool::partition *partition, const ch
|
||||
UINT8 header[24];
|
||||
|
||||
/* get header infos from file */
|
||||
stream_read(sourcef, header, sizeof(header));
|
||||
sourcef.read(header, sizeof(header));
|
||||
|
||||
/* prepare directory entry */
|
||||
entry.ftype = header[21] == 0xF1 ? 'B' : 'T';
|
||||
|
@ -2,7 +2,7 @@
|
||||
// copyright-holders:Nathan Woods
|
||||
/***************************************************************************
|
||||
|
||||
stream.c
|
||||
stream.cpp
|
||||
|
||||
Code for implementing Imgtool streams
|
||||
|
||||
@ -16,80 +16,87 @@
|
||||
#include "osdcore.h"
|
||||
#include "imgtool.h"
|
||||
|
||||
enum imgtype_t
|
||||
|
||||
//-------------------------------------------------
|
||||
// ctor
|
||||
//-------------------------------------------------
|
||||
|
||||
imgtool::stream::stream(bool wp)
|
||||
: imgtype(IMG_FILE)
|
||||
, write_protect(wp)
|
||||
, name(nullptr)
|
||||
, position(0)
|
||||
, filesize(0)
|
||||
, file()
|
||||
, buffer(nullptr)
|
||||
{
|
||||
IMG_FILE,
|
||||
IMG_MEM
|
||||
};
|
||||
}
|
||||
|
||||
struct imgtool_stream
|
||||
|
||||
//-------------------------------------------------
|
||||
// ctor
|
||||
//-------------------------------------------------
|
||||
|
||||
imgtool::stream::stream(bool wp, util::core_file::ptr &&f)
|
||||
: imgtype(IMG_FILE)
|
||||
, write_protect(wp)
|
||||
, name(nullptr)
|
||||
, position(0)
|
||||
, filesize(f->size())
|
||||
, file(std::move(f))
|
||||
, buffer(nullptr)
|
||||
{
|
||||
typedef std::unique_ptr<imgtool_stream> ptr;
|
||||
}
|
||||
|
||||
imgtool_stream(bool wp)
|
||||
: imgtype(IMG_FILE)
|
||||
, write_protect(wp)
|
||||
, name(nullptr)
|
||||
, position(0)
|
||||
, filesize(0)
|
||||
, file()
|
||||
, buffer(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
imgtool_stream(
|
||||
bool wp,
|
||||
util::core_file::ptr &&f)
|
||||
: imgtype(IMG_FILE)
|
||||
, write_protect(wp)
|
||||
, name(nullptr)
|
||||
, position(0)
|
||||
, filesize(f->size())
|
||||
, file(std::move(f))
|
||||
, buffer(nullptr)
|
||||
{
|
||||
}
|
||||
//-------------------------------------------------
|
||||
// ctor
|
||||
//-------------------------------------------------
|
||||
|
||||
imgtool_stream(bool wp, std::size_t size)
|
||||
: imgtype(IMG_MEM)
|
||||
, write_protect(wp)
|
||||
, name(nullptr)
|
||||
, position(0)
|
||||
, filesize(size)
|
||||
, file()
|
||||
, buffer(reinterpret_cast<std::uint8_t *>(malloc(size)))
|
||||
{
|
||||
}
|
||||
imgtool::stream::stream(bool wp, std::size_t size)
|
||||
: imgtype(IMG_MEM)
|
||||
, write_protect(wp)
|
||||
, name(nullptr)
|
||||
, position(0)
|
||||
, filesize(size)
|
||||
, file()
|
||||
, buffer(reinterpret_cast<std::uint8_t *>(malloc(size)))
|
||||
{
|
||||
}
|
||||
|
||||
imgtool_stream(bool wp, std::size_t size, void *buf)
|
||||
: imgtype(IMG_MEM)
|
||||
, write_protect(wp)
|
||||
, name(nullptr)
|
||||
, position(0)
|
||||
, filesize(size)
|
||||
, file()
|
||||
, buffer(reinterpret_cast<std::uint8_t *>(buf))
|
||||
{
|
||||
}
|
||||
|
||||
~imgtool_stream()
|
||||
{
|
||||
//-------------------------------------------------
|
||||
// ctor
|
||||
//-------------------------------------------------
|
||||
|
||||
imgtool::stream::stream(bool wp, std::size_t size, void *buf)
|
||||
: imgtype(IMG_MEM)
|
||||
, write_protect(wp)
|
||||
, name(nullptr)
|
||||
, position(0)
|
||||
, filesize(size)
|
||||
, file()
|
||||
, buffer(reinterpret_cast<std::uint8_t *>(buf))
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// dtor
|
||||
//-------------------------------------------------
|
||||
|
||||
imgtool::stream::~stream()
|
||||
{
|
||||
if (buffer)
|
||||
free(buffer);
|
||||
}
|
||||
|
||||
imgtype_t imgtype;
|
||||
bool write_protect;
|
||||
const char *name; // needed for clear
|
||||
std::uint64_t position;
|
||||
std::uint64_t filesize;
|
||||
|
||||
util::core_file::ptr file;
|
||||
std::uint8_t *buffer;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// open_zip
|
||||
//-------------------------------------------------
|
||||
|
||||
static imgtool_stream *stream_open_zip(const char *zipname, const char *subname, int read_or_write)
|
||||
imgtool::stream *imgtool::stream::open_zip(const char *zipname, const char *subname, int read_or_write)
|
||||
{
|
||||
if (read_or_write)
|
||||
return nullptr;
|
||||
@ -100,7 +107,7 @@ static imgtool_stream *stream_open_zip(const char *zipname, const char *subname,
|
||||
return nullptr;
|
||||
fclose(f);
|
||||
|
||||
imgtool_stream::ptr imgfile(new imgtool_stream(true));
|
||||
imgtool::stream::ptr imgfile(new imgtool::stream(true));
|
||||
|
||||
imgfile->imgtype = IMG_MEM;
|
||||
|
||||
@ -128,7 +135,11 @@ static imgtool_stream *stream_open_zip(const char *zipname, const char *subname,
|
||||
|
||||
|
||||
|
||||
imgtool_stream *stream_open(const char *fname, int read_or_write)
|
||||
//-------------------------------------------------
|
||||
// open
|
||||
//-------------------------------------------------
|
||||
|
||||
imgtool::stream *imgtool::stream::open(const char *fname, int read_or_write)
|
||||
{
|
||||
static const UINT32 write_modes[] =
|
||||
{
|
||||
@ -137,13 +148,13 @@ imgtool_stream *stream_open(const char *fname, int read_or_write)
|
||||
OPEN_FLAG_READ | OPEN_FLAG_WRITE,
|
||||
OPEN_FLAG_READ | OPEN_FLAG_WRITE | OPEN_FLAG_CREATE
|
||||
};
|
||||
imgtool_stream *s = nullptr;
|
||||
imgtool::stream *s = nullptr;
|
||||
char c;
|
||||
|
||||
/* maybe we are just a ZIP? */
|
||||
const char *ext = strrchr(fname, '.');
|
||||
if (ext && !core_stricmp(ext, ".zip"))
|
||||
return stream_open_zip(fname, nullptr, read_or_write);
|
||||
return open_zip(fname, nullptr, read_or_write);
|
||||
|
||||
util::core_file::ptr f = nullptr;
|
||||
auto const filerr = util::core_file::open(fname, write_modes[read_or_write], f);
|
||||
@ -163,7 +174,7 @@ imgtool_stream *stream_open(const char *fname, int read_or_write)
|
||||
{
|
||||
c = buf[i];
|
||||
buf[i] = '\0';
|
||||
s = stream_open_zip(&buf[0], &buf[i + 1], read_or_write);
|
||||
s = open_zip(&buf[0], &buf[i + 1], read_or_write);
|
||||
buf[i] = c;
|
||||
}
|
||||
}
|
||||
@ -176,7 +187,7 @@ imgtool_stream *stream_open(const char *fname, int read_or_write)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
imgtool_stream::ptr imgfile(new imgtool_stream(read_or_write ? false : true, std::move(f)));
|
||||
imgtool::stream::ptr imgfile(new imgtool::stream(read_or_write ? false : true, std::move(f)));
|
||||
|
||||
/* Normal file */
|
||||
imgfile->name = fname;
|
||||
@ -184,10 +195,13 @@ imgtool_stream *stream_open(const char *fname, int read_or_write)
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// open_write_stream
|
||||
//-------------------------------------------------
|
||||
|
||||
imgtool_stream *stream_open_write_stream(int size)
|
||||
imgtool::stream *imgtool::stream::open_write_stream(int size)
|
||||
{
|
||||
imgtool_stream::ptr imgfile(new imgtool_stream(false, size));
|
||||
imgtool::stream::ptr imgfile(new imgtool::stream(false, size));
|
||||
if (!imgfile->buffer)
|
||||
return nullptr;
|
||||
|
||||
@ -195,50 +209,50 @@ imgtool_stream *stream_open_write_stream(int size)
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// open_mem
|
||||
//-------------------------------------------------
|
||||
|
||||
imgtool_stream *stream_open_mem(void *buf, size_t sz)
|
||||
imgtool::stream *imgtool::stream::open_mem(void *buf, size_t sz)
|
||||
{
|
||||
imgtool_stream::ptr imgfile(new imgtool_stream(false, sz, buf));
|
||||
imgtool::stream::ptr imgfile(new imgtool::stream(false, sz, buf));
|
||||
|
||||
return imgfile.release();
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// core_file
|
||||
//-------------------------------------------------
|
||||
|
||||
void stream_close(imgtool_stream *s)
|
||||
util::core_file *imgtool::stream::core_file()
|
||||
{
|
||||
assert(s != nullptr);
|
||||
|
||||
delete s;
|
||||
return (imgtype == IMG_FILE) ? file.get() : nullptr;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// read
|
||||
//-------------------------------------------------
|
||||
|
||||
util::core_file *stream_core_file(imgtool_stream *stream)
|
||||
{
|
||||
return (stream->imgtype == IMG_FILE) ? stream->file.get() : nullptr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
UINT32 stream_read(imgtool_stream *stream, void *buf, UINT32 sz)
|
||||
UINT32 imgtool::stream::read(void *buf, UINT32 sz)
|
||||
{
|
||||
UINT32 result = 0;
|
||||
|
||||
switch(stream->imgtype)
|
||||
switch(imgtype)
|
||||
{
|
||||
case IMG_FILE:
|
||||
assert(sz == (UINT32) sz);
|
||||
stream->file->seek(stream->position, SEEK_SET);
|
||||
result = stream->file->read(buf, (UINT32) sz);
|
||||
file->seek(position, SEEK_SET);
|
||||
result = file->read(buf, (UINT32) sz);
|
||||
break;
|
||||
|
||||
case IMG_MEM:
|
||||
/* do we have to limit sz? */
|
||||
if (sz > (stream->filesize - stream->position))
|
||||
sz = (UINT32) (stream->filesize - stream->position);
|
||||
if (sz > (filesize - position))
|
||||
sz = (UINT32) (filesize - position);
|
||||
|
||||
memcpy(buf, stream->buffer + stream->position, sz);
|
||||
memcpy(buf, buffer + position, sz);
|
||||
result = sz;
|
||||
break;
|
||||
|
||||
@ -246,46 +260,49 @@ UINT32 stream_read(imgtool_stream *stream, void *buf, UINT32 sz)
|
||||
assert(0);
|
||||
break;
|
||||
}
|
||||
stream->position += result;
|
||||
position += result;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// write
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT32 stream_write(imgtool_stream *s, const void *buf, UINT32 sz)
|
||||
UINT32 imgtool::stream::write(const void *buf, UINT32 sz)
|
||||
{
|
||||
void *new_buffer;
|
||||
UINT32 result = 0;
|
||||
|
||||
switch(s->imgtype)
|
||||
switch(imgtype)
|
||||
{
|
||||
case IMG_MEM:
|
||||
if (!s->write_protect)
|
||||
if (!write_protect)
|
||||
{
|
||||
/* do we have to expand the buffer? */
|
||||
if (s->filesize < s->position + sz)
|
||||
if (filesize < position + sz)
|
||||
{
|
||||
/* try to expand the buffer */
|
||||
new_buffer = realloc(s->buffer , s->position + sz);
|
||||
new_buffer = realloc(buffer , position + sz);
|
||||
if (new_buffer)
|
||||
{
|
||||
s->buffer = (UINT8*)new_buffer;
|
||||
s->filesize = s->position + sz;
|
||||
buffer = (UINT8*)new_buffer;
|
||||
filesize = position + sz;
|
||||
}
|
||||
}
|
||||
|
||||
/* do we have to limit sz? */
|
||||
if (sz > (s->filesize - s->position))
|
||||
sz = (UINT32) (s->filesize - s->position);
|
||||
if (sz > (filesize - position))
|
||||
sz = (UINT32) (filesize - position);
|
||||
|
||||
memcpy(s->buffer + s->position, buf, sz);
|
||||
memcpy(buffer + position, buf, sz);
|
||||
result = sz;
|
||||
}
|
||||
break;
|
||||
|
||||
case IMG_FILE:
|
||||
s->file->seek(s->position, SEEK_SET);
|
||||
result = s->file->write(buf, sz);
|
||||
file->seek(position, SEEK_SET);
|
||||
result = file->write(buf, sz);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -294,31 +311,37 @@ UINT32 stream_write(imgtool_stream *s, const void *buf, UINT32 sz)
|
||||
}
|
||||
|
||||
/* advance the file pointer */
|
||||
s->position += result;
|
||||
position += result;
|
||||
|
||||
/* did we grow the file */
|
||||
if (s->position > s->filesize)
|
||||
s->filesize = s->position;
|
||||
if (position > filesize)
|
||||
filesize = position;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// size
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT64 stream_size(imgtool_stream *s)
|
||||
UINT64 imgtool::stream::size() const
|
||||
{
|
||||
return s->filesize;
|
||||
return filesize;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// getptr
|
||||
//-------------------------------------------------
|
||||
|
||||
void *stream_getptr(imgtool_stream *f)
|
||||
void *imgtool::stream::getptr()
|
||||
{
|
||||
void *ptr;
|
||||
|
||||
switch(f->imgtype)
|
||||
switch(imgtype)
|
||||
{
|
||||
case IMG_MEM:
|
||||
ptr = f->buffer;
|
||||
ptr = buffer;
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -329,52 +352,57 @@ void *stream_getptr(imgtool_stream *f)
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// seek
|
||||
//-------------------------------------------------
|
||||
|
||||
int stream_seek(imgtool_stream *s, INT64 pos, int where)
|
||||
int imgtool::stream::seek(INT64 pos, int where)
|
||||
{
|
||||
UINT64 size;
|
||||
|
||||
size = stream_size(s);
|
||||
|
||||
switch(where)
|
||||
{
|
||||
case SEEK_CUR:
|
||||
pos += s->position;
|
||||
pos += position;
|
||||
break;
|
||||
case SEEK_END:
|
||||
pos += size;
|
||||
pos += size();
|
||||
break;
|
||||
}
|
||||
|
||||
if (pos < 0)
|
||||
s->position = 0;
|
||||
position = 0;
|
||||
else
|
||||
s->position = std::min(size, UINT64(pos));
|
||||
position = std::min(size(), UINT64(pos));
|
||||
|
||||
if (s->position < pos)
|
||||
stream_fill(s, '\0', pos - s->position);
|
||||
if (position < pos)
|
||||
fill('\0', pos - position);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// tell
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT64 stream_tell(imgtool_stream *s)
|
||||
UINT64 imgtool::stream::tell()
|
||||
{
|
||||
return s->position;
|
||||
return position;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// transfer
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT64 stream_transfer(imgtool_stream *dest, imgtool_stream *source, UINT64 sz)
|
||||
UINT64 imgtool::stream::transfer(imgtool::stream &dest, imgtool::stream &source, UINT64 sz)
|
||||
{
|
||||
UINT64 result = 0;
|
||||
UINT64 readsz;
|
||||
char buf[1024];
|
||||
|
||||
while(sz && (readsz = stream_read(source, buf, std::min(sz, UINT64(sizeof(buf))))))
|
||||
while(sz && (readsz = source.read(buf, std::min(sz, UINT64(sizeof(buf))))))
|
||||
{
|
||||
stream_write(dest, buf, readsz);
|
||||
dest.write(buf, readsz);
|
||||
sz -= readsz;
|
||||
result += readsz;
|
||||
}
|
||||
@ -382,32 +410,38 @@ UINT64 stream_transfer(imgtool_stream *dest, imgtool_stream *source, UINT64 sz)
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// transfer_all
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT64 stream_transfer_all(imgtool_stream *dest, imgtool_stream *source)
|
||||
UINT64 imgtool::stream::transfer_all(imgtool::stream &dest, imgtool::stream &source)
|
||||
{
|
||||
return stream_transfer(dest, source, stream_size(source));
|
||||
return transfer(dest, source, source.size());
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// crc
|
||||
//-------------------------------------------------
|
||||
|
||||
int stream_crc(imgtool_stream *s, unsigned long *result)
|
||||
int imgtool::stream::crc(unsigned long *result)
|
||||
{
|
||||
size_t sz;
|
||||
void *ptr;
|
||||
|
||||
switch(s->imgtype)
|
||||
switch(imgtype)
|
||||
{
|
||||
case IMG_MEM:
|
||||
*result = crc32(0, (unsigned char *) s->buffer, (size_t) s->filesize);
|
||||
*result = crc32(0, (unsigned char *) buffer, (size_t) filesize);
|
||||
break;
|
||||
|
||||
default:
|
||||
sz = stream_size(s);
|
||||
sz = size();
|
||||
ptr = malloc(sz);
|
||||
if (!ptr)
|
||||
return IMGTOOLERR_OUTOFMEMORY;
|
||||
stream_seek(s, 0, SEEK_SET);
|
||||
if (stream_read(s, ptr, sz) != sz)
|
||||
seek(0, SEEK_SET);
|
||||
if (read(ptr, sz) != sz)
|
||||
{
|
||||
free(ptr);
|
||||
return IMGTOOLERR_READERROR;
|
||||
@ -420,24 +454,30 @@ int stream_crc(imgtool_stream *s, unsigned long *result)
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// file_crc
|
||||
//-------------------------------------------------
|
||||
|
||||
int file_crc(const char *fname, unsigned long *result)
|
||||
int imgtool::stream::file_crc(const char *fname, unsigned long *result)
|
||||
{
|
||||
int err;
|
||||
imgtool_stream *f;
|
||||
imgtool::stream *f;
|
||||
|
||||
f = stream_open(fname, OSD_FOPEN_READ);
|
||||
f = imgtool::stream::open(fname, OSD_FOPEN_READ);
|
||||
if (!f)
|
||||
return IMGTOOLERR_FILENOTFOUND;
|
||||
|
||||
err = stream_crc(f, result);
|
||||
stream_close(f);
|
||||
err = f->crc(result);
|
||||
delete f;
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// fill
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT64 stream_fill(imgtool_stream *f, unsigned char b, UINT64 sz)
|
||||
UINT64 imgtool::stream::fill(unsigned char b, UINT64 sz)
|
||||
{
|
||||
UINT64 outsz;
|
||||
char buf[1024];
|
||||
@ -447,36 +487,48 @@ UINT64 stream_fill(imgtool_stream *f, unsigned char b, UINT64 sz)
|
||||
|
||||
while (sz)
|
||||
{
|
||||
outsz += stream_write(f, buf, (std::min<UINT64>)(sz, sizeof(buf)));
|
||||
outsz += write(buf, (std::min<UINT64>)(sz, sizeof(buf)));
|
||||
sz -= (std::min<UINT64>)(sz, sizeof(buf));
|
||||
}
|
||||
return outsz;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// is_read_only
|
||||
//-------------------------------------------------
|
||||
|
||||
int stream_isreadonly(imgtool_stream *s)
|
||||
int imgtool::stream::is_read_only()
|
||||
{
|
||||
return s->write_protect;
|
||||
return write_protect;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// putc
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT32 stream_putc(imgtool_stream *stream, char c)
|
||||
UINT32 imgtool::stream::putc(char c)
|
||||
{
|
||||
return stream_write(stream, &c, 1);
|
||||
return write(&c, 1);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// puts
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT32 stream_puts(imgtool_stream *stream, const char *s)
|
||||
UINT32 imgtool::stream::puts(const char *s)
|
||||
{
|
||||
return stream_write(stream, s, strlen(s));
|
||||
return write(s, strlen(s));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// printf
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT32 stream_printf(imgtool_stream *stream, const char *fmt, ...)
|
||||
UINT32 imgtool::stream::printf(const char *fmt, ...)
|
||||
{
|
||||
va_list va;
|
||||
char buf[256];
|
||||
@ -485,5 +537,5 @@ UINT32 stream_printf(imgtool_stream *stream, const char *fmt, ...)
|
||||
vsprintf(buf, fmt, va);
|
||||
va_end(va);
|
||||
|
||||
return stream_puts(stream, buf);
|
||||
return puts(buf);
|
||||
}
|
||||
|
@ -14,35 +14,71 @@
|
||||
#include "imgterrs.h"
|
||||
#include "corefile.h"
|
||||
|
||||
struct imgtool_stream;
|
||||
namespace imgtool
|
||||
{
|
||||
class stream
|
||||
{
|
||||
public:
|
||||
typedef std::unique_ptr<stream> ptr;
|
||||
|
||||
imgtool_stream *stream_open(const char *fname, int read_or_write); /* similar params to mame_fopen */
|
||||
imgtool_stream *stream_open_write_stream(int filesize);
|
||||
imgtool_stream *stream_open_mem(void *buf, size_t sz);
|
||||
void stream_close(imgtool_stream *stream);
|
||||
util::core_file *stream_core_file(imgtool_stream *stream);
|
||||
UINT32 stream_read(imgtool_stream *stream, void *buf, UINT32 sz);
|
||||
UINT32 stream_write(imgtool_stream *stream, const void *buf, UINT32 sz);
|
||||
UINT64 stream_size(imgtool_stream *stream);
|
||||
int stream_seek(imgtool_stream *stream, INT64 pos, int where);
|
||||
UINT64 stream_tell(imgtool_stream *stream);
|
||||
void *stream_getptr(imgtool_stream *stream);
|
||||
UINT32 stream_putc(imgtool_stream *stream, char c);
|
||||
UINT32 stream_puts(imgtool_stream *stream, const char *s);
|
||||
UINT32 stream_printf(imgtool_stream *stream, const char *fmt, ...) ATTR_PRINTF(2,3);
|
||||
~stream();
|
||||
|
||||
/* Transfers sz bytes from source to dest */
|
||||
UINT64 stream_transfer(imgtool_stream *dest, imgtool_stream *source, UINT64 sz);
|
||||
UINT64 stream_transfer_all(imgtool_stream *dest, imgtool_stream *source);
|
||||
static imgtool::stream *open(const char *fname, int read_or_write); /* similar params to mame_fopen */
|
||||
static imgtool::stream *open_write_stream(int filesize);
|
||||
static imgtool::stream *open_mem(void *buf, size_t sz);
|
||||
|
||||
util::core_file *core_file();
|
||||
UINT32 read(void *buf, UINT32 sz);
|
||||
UINT32 write(const void *buf, UINT32 sz);
|
||||
UINT64 size() const;
|
||||
int seek(INT64 pos, int where);
|
||||
UINT64 tell();
|
||||
void *getptr();
|
||||
UINT32 putc(char c);
|
||||
UINT32 puts(const char *s);
|
||||
UINT32 printf(const char *fmt, ...) ATTR_PRINTF(2, 3);
|
||||
|
||||
/* Fills sz bytes with b */
|
||||
UINT64 stream_fill(imgtool_stream *f, unsigned char b, UINT64 sz);
|
||||
// transfers sz bytes from source to dest
|
||||
static UINT64 transfer(imgtool::stream &dest, imgtool::stream &source, UINT64 sz);
|
||||
static UINT64 transfer_all(imgtool::stream &dest, imgtool::stream &source);
|
||||
|
||||
// fills sz bytes with b
|
||||
UINT64 fill(unsigned char b, UINT64 sz);
|
||||
|
||||
// returns the CRC of a file
|
||||
int crc(unsigned long *result);
|
||||
static int file_crc(const char *fname, unsigned long *result);
|
||||
|
||||
// returns whether a stream is read only or not
|
||||
int is_read_only();
|
||||
|
||||
private:
|
||||
enum imgtype_t
|
||||
{
|
||||
IMG_FILE,
|
||||
IMG_MEM
|
||||
};
|
||||
|
||||
imgtype_t imgtype;
|
||||
bool write_protect;
|
||||
const char *name; // needed for clear
|
||||
std::uint64_t position;
|
||||
std::uint64_t filesize;
|
||||
|
||||
util::core_file::ptr file;
|
||||
std::uint8_t *buffer;
|
||||
|
||||
// ctors
|
||||
stream(bool wp);
|
||||
stream(bool wp, util::core_file::ptr &&f);
|
||||
stream(bool wp, std::size_t size);
|
||||
stream(bool wp, std::size_t size, void *buf);
|
||||
|
||||
// private methods
|
||||
static stream *open_zip(const char *zipname, const char *subname, int read_or_write);
|
||||
};
|
||||
}
|
||||
|
||||
/* Returns the CRC of a file */
|
||||
int stream_crc(imgtool_stream *f, unsigned long *result);
|
||||
int file_crc(const char *fname, unsigned long *result);
|
||||
|
||||
/* Returns whether a stream is read only or not */
|
||||
int stream_isreadonly(imgtool_stream *f);
|
||||
|
||||
#endif /* STREAM_H */
|
||||
|
Loading…
Reference in New Issue
Block a user