mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-25 05:21:02 +00:00
- use FileWriter for the OPL dumper.
This commit is contained in:
parent
ebf5c5763e
commit
1af42b3d50
2 changed files with 31 additions and 40 deletions
|
@ -40,6 +40,7 @@
|
||||||
#include "m_swap.h"
|
#include "m_swap.h"
|
||||||
#include "w_wad.h"
|
#include "w_wad.h"
|
||||||
#include "opl.h"
|
#include "opl.h"
|
||||||
|
#include "files.h"
|
||||||
|
|
||||||
// MACROS ------------------------------------------------------------------
|
// MACROS ------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -48,7 +49,7 @@
|
||||||
class OPLDump : public OPLEmul
|
class OPLDump : public OPLEmul
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
OPLDump(FILE *file) : File(file), TimePerTick(0), CurTime(0),
|
OPLDump(FileWriter *file) : File(file), TimePerTick(0), CurTime(0),
|
||||||
CurIntTime(0), TickMul(1), CurChip(0) {}
|
CurIntTime(0), TickMul(1), CurChip(0) {}
|
||||||
|
|
||||||
// If we're doing things right, these should never be reset.
|
// If we're doing things right, these should never be reset.
|
||||||
|
@ -66,7 +67,7 @@ public:
|
||||||
virtual void WriteDelay(int ticks) = 0;
|
virtual void WriteDelay(int ticks) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
FILE *File;
|
FileWriter *File;
|
||||||
double TimePerTick; // in milliseconds
|
double TimePerTick; // in milliseconds
|
||||||
double CurTime;
|
double CurTime;
|
||||||
int CurIntTime;
|
int CurIntTime;
|
||||||
|
@ -91,10 +92,10 @@ protected:
|
||||||
class OPL_RDOSdump : public OPLDump
|
class OPL_RDOSdump : public OPLDump
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
OPL_RDOSdump(FILE *file) : OPLDump(file)
|
OPL_RDOSdump(FileWriter *file) : OPLDump(file)
|
||||||
{
|
{
|
||||||
assert(File != NULL);
|
assert(File != NULL);
|
||||||
fwrite("RAWADATA\0", 1, 10, File);
|
file->Write("RAWADATA\0", 10);
|
||||||
NeedClockRate = true;
|
NeedClockRate = true;
|
||||||
}
|
}
|
||||||
virtual ~OPL_RDOSdump()
|
virtual ~OPL_RDOSdump()
|
||||||
|
@ -102,8 +103,8 @@ public:
|
||||||
if (File != NULL)
|
if (File != NULL)
|
||||||
{
|
{
|
||||||
uint16_t endmark = 0xFFFF;
|
uint16_t endmark = 0xFFFF;
|
||||||
fwrite(&endmark, 2, 1, File);
|
File->Write(&endmark, 2);
|
||||||
fclose(File);
|
delete File;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,13 +115,13 @@ public:
|
||||||
if (chipnum != CurChip)
|
if (chipnum != CurChip)
|
||||||
{
|
{
|
||||||
uint8_t switcher[2] = { (uint8_t)(chipnum + 1), 2 };
|
uint8_t switcher[2] = { (uint8_t)(chipnum + 1), 2 };
|
||||||
fwrite(switcher, 1, 2, File);
|
File->Write(switcher, 2);
|
||||||
}
|
}
|
||||||
reg &= 255;
|
reg &= 255;
|
||||||
if (reg != 0 && reg != 2 && (reg != 255 || v != 255))
|
if (reg != 0 && reg != 2 && (reg != 255 || v != 255))
|
||||||
{
|
{
|
||||||
uint8_t cmd[2] = { uint8_t(v), uint8_t(reg) };
|
uint8_t cmd[2] = { uint8_t(v), uint8_t(reg) };
|
||||||
fwrite(cmd, 1, 2, File);
|
File->Write(cmd, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,15 +147,15 @@ public:
|
||||||
if (NeedClockRate)
|
if (NeedClockRate)
|
||||||
{ // Set the initial clock rate.
|
{ // Set the initial clock rate.
|
||||||
clock_word = LittleShort(clock_word);
|
clock_word = LittleShort(clock_word);
|
||||||
fseek(File, 8, SEEK_SET);
|
File->Seek(8, SEEK_SET);
|
||||||
fwrite(&clock_word, 2, 1, File);
|
File->Write(&clock_word, 2);
|
||||||
fseek(File, 0, SEEK_END);
|
File->Seek(0, SEEK_END);
|
||||||
NeedClockRate = false;
|
NeedClockRate = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // Change the clock rate in the middle of the song.
|
{ // Change the clock rate in the middle of the song.
|
||||||
uint8_t clock_change[4] = { 0, 2, uint8_t(clock_word & 255), uint8_t(clock_word >> 8) };
|
uint8_t clock_change[4] = { 0, 2, uint8_t(clock_word & 255), uint8_t(clock_word >> 8) };
|
||||||
fwrite(clock_change, 1, 4, File);
|
File->Write(clock_change, 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
virtual void WriteDelay(int ticks)
|
virtual void WriteDelay(int ticks)
|
||||||
|
@ -170,10 +171,10 @@ public:
|
||||||
{
|
{
|
||||||
ticks -= 255;
|
ticks -= 255;
|
||||||
delay[0] = 255;
|
delay[0] = 255;
|
||||||
fwrite(delay, 1, 2, File);
|
File->Write(delay, 2);
|
||||||
}
|
}
|
||||||
delay[0] = uint8_t(ticks);
|
delay[0] = uint8_t(ticks);
|
||||||
fwrite(delay, 1, 2, File);
|
File->Write(delay, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
protected:
|
protected:
|
||||||
|
@ -183,30 +184,30 @@ protected:
|
||||||
class OPL_DOSBOXdump : public OPLDump
|
class OPL_DOSBOXdump : public OPLDump
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
OPL_DOSBOXdump(FILE *file, bool dual) : OPLDump(file), Dual(dual)
|
OPL_DOSBOXdump(FileWriter *file, bool dual) : OPLDump(file), Dual(dual)
|
||||||
{
|
{
|
||||||
assert(File != NULL);
|
assert(File != NULL);
|
||||||
fwrite("DBRAWOPL"
|
File->Write("DBRAWOPL"
|
||||||
"\0\0" // Minor version number
|
"\0\0" // Minor version number
|
||||||
"\1\0" // Major version number
|
"\1\0" // Major version number
|
||||||
"\0\0\0\0" // Total milliseconds
|
"\0\0\0\0" // Total milliseconds
|
||||||
"\0\0\0", // Total data
|
"\0\0\0", // Total data
|
||||||
1, 20, File);
|
20);
|
||||||
char type[4] = { (char)(Dual * 2), 0, 0, 0 }; // Single or dual OPL-2
|
char type[4] = { (char)(Dual * 2), 0, 0, 0 }; // Single or dual OPL-2
|
||||||
fwrite(type, 1, 4, File);
|
File->Write(type, 4);
|
||||||
}
|
}
|
||||||
virtual ~OPL_DOSBOXdump()
|
virtual ~OPL_DOSBOXdump()
|
||||||
{
|
{
|
||||||
if (File != NULL)
|
if (File != NULL)
|
||||||
{
|
{
|
||||||
long where_am_i = ftell(File);
|
long where_am_i =File->Tell();
|
||||||
uint32_t len[2];
|
uint32_t len[2];
|
||||||
|
|
||||||
fseek(File, 12, SEEK_SET);
|
File->Seek(12, SEEK_SET);
|
||||||
len[0] = LittleLong(CurIntTime);
|
len[0] = LittleLong(CurIntTime);
|
||||||
len[1] = LittleLong(uint32_t(where_am_i - 24));
|
len[1] = LittleLong(uint32_t(where_am_i - 24));
|
||||||
fwrite(len, 4, 2, File);
|
File->Write(len, 8);
|
||||||
fclose(File);
|
delete File;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
virtual void WriteReg(int reg, int v)
|
virtual void WriteReg(int reg, int v)
|
||||||
|
@ -216,11 +217,12 @@ public:
|
||||||
if (chipnum != CurChip)
|
if (chipnum != CurChip)
|
||||||
{
|
{
|
||||||
CurChip = chipnum;
|
CurChip = chipnum;
|
||||||
fputc(chipnum + 2, File);
|
chipnum += 2;
|
||||||
|
File->Write(&chipnum, 1);
|
||||||
}
|
}
|
||||||
reg &= 255;
|
reg &= 255;
|
||||||
uint8_t cmd[3] = { 4, uint8_t(reg), uint8_t(v) };
|
uint8_t cmd[3] = { 4, uint8_t(reg), uint8_t(v) };
|
||||||
fwrite (cmd + (reg > 4), 1, 3 - (reg > 4), File);
|
File->Write(cmd + (reg > 4), 3 - (reg > 4));
|
||||||
}
|
}
|
||||||
virtual void WriteDelay(int ticks)
|
virtual void WriteDelay(int ticks)
|
||||||
{
|
{
|
||||||
|
@ -234,20 +236,20 @@ public:
|
||||||
while (delay > 65536)
|
while (delay > 65536)
|
||||||
{
|
{
|
||||||
uint8_t cmd[3] = { 1, 255, 255 };
|
uint8_t cmd[3] = { 1, 255, 255 };
|
||||||
fwrite(cmd, 1, 2, File);
|
File->Write(cmd, 2);
|
||||||
delay -= 65536;
|
delay -= 65536;
|
||||||
}
|
}
|
||||||
delay--;
|
delay--;
|
||||||
if (delay <= 255)
|
if (delay <= 255)
|
||||||
{
|
{
|
||||||
uint8_t cmd[2] = { 0, uint8_t(delay) };
|
uint8_t cmd[2] = { 0, uint8_t(delay) };
|
||||||
fwrite(cmd, 1, 2, File);
|
File->Write(cmd, 2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
assert(delay <= 65535);
|
assert(delay <= 65535);
|
||||||
uint8_t cmd[3] = { 1, uint8_t(delay & 255), uint8_t(delay >> 8) };
|
uint8_t cmd[3] = { 1, uint8_t(delay & 255), uint8_t(delay >> 8) };
|
||||||
fwrite(cmd, 1, 3, File);
|
File->Write(cmd, 3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -338,7 +340,7 @@ DiskWriterIO::~DiskWriterIO()
|
||||||
|
|
||||||
int DiskWriterIO::Init(uint32_t numchips, bool, bool initopl3)
|
int DiskWriterIO::Init(uint32_t numchips, bool, bool initopl3)
|
||||||
{
|
{
|
||||||
FILE *file = fopen(Filename, "wb");
|
FileWriter *file = FileWriter::Open(Filename);
|
||||||
if (file == NULL)
|
if (file == NULL)
|
||||||
{
|
{
|
||||||
Printf("Could not open %s for writing.\n", Filename.GetChars());
|
Printf("Could not open %s for writing.\n", Filename.GetChars());
|
||||||
|
|
|
@ -380,18 +380,7 @@ enum
|
||||||
BQS_InGameColormap,
|
BQS_InGameColormap,
|
||||||
};
|
};
|
||||||
|
|
||||||
#if 0
|
#if _DEBUG && 0
|
||||||
#define STARTLOG do { if (!dbg) dbg = fopen ("e:/vid.log", "w"); } while(0)
|
|
||||||
#define STOPLOG do { if (dbg) { fclose (dbg); dbg=NULL; } } while(0)
|
|
||||||
#define LOG(x) do { if (dbg) { fprintf (dbg, x); fflush (dbg); } } while(0)
|
|
||||||
#define LOG1(x,y) do { if (dbg) { fprintf (dbg, x, y); fflush (dbg); } } while(0)
|
|
||||||
#define LOG2(x,y,z) do { if (dbg) { fprintf (dbg, x, y, z); fflush (dbg); } } while(0)
|
|
||||||
#define LOG3(x,y,z,zz) do { if (dbg) { fprintf (dbg, x, y, z, zz); fflush (dbg); } } while(0)
|
|
||||||
#define LOG4(x,y,z,a,b) do { if (dbg) { fprintf (dbg, x, y, z, a, b); fflush (dbg); } } while(0)
|
|
||||||
#define LOG5(x,y,z,a,b,c) do { if (dbg) { fprintf (dbg, x, y, z, a, b, c); fflush (dbg); } } while(0)
|
|
||||||
extern FILE *dbg;
|
|
||||||
#define VID_FILE_DEBUG 1
|
|
||||||
#elif _DEBUG && 0
|
|
||||||
#define STARTLOG
|
#define STARTLOG
|
||||||
#define STOPLOG
|
#define STOPLOG
|
||||||
#define LOG(x) { OutputDebugString(x); }
|
#define LOG(x) { OutputDebugString(x); }
|
||||||
|
|
Loading…
Reference in a new issue