mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-13 21:31:53 +00:00
DREAMWEB: removed dummy video segment, blacklisted video-related functions.
This commit is contained in:
parent
3f592047bb
commit
9034191796
@ -7,5 +7,17 @@ p = parser()
|
||||
p.strip_path = 3
|
||||
context = p.parse('dreamweb/dreamweb.asm')
|
||||
p.link()
|
||||
generator = cpp(context, "dreamgen", blacklist = ['randomnumber', 'quickquit', 'quickquit2', 'seecommandtail', 'multiget', 'multiput', 'multidump', 'frameoutnm'])
|
||||
generator = cpp(context, "dreamgen", blacklist = [
|
||||
'randomnumber',
|
||||
'quickquit',
|
||||
'quickquit2',
|
||||
'seecommandtail',
|
||||
'multiget',
|
||||
'multiput',
|
||||
'multidump',
|
||||
'frameoutnm',
|
||||
'cls',
|
||||
'printundermon',
|
||||
'worktoscreen',
|
||||
])
|
||||
generator.generate('dreamweb') #start routine
|
||||
|
@ -10,7 +10,6 @@ void readsetdata(Context &context);
|
||||
void loadpalfromiff(Context &context);
|
||||
void titles(Context &context);
|
||||
void credits(Context &context);
|
||||
void cls(Context &context);
|
||||
void decide(Context &context);
|
||||
void clearchanges(Context &context);
|
||||
void loadroom(Context &context);
|
||||
@ -60,7 +59,6 @@ void animpointer(Context &context);
|
||||
void showpointer(Context &context);
|
||||
void dumppointer(Context &context);
|
||||
void commandonly(Context &context);
|
||||
void worktoscreen(Context &context);
|
||||
void showtime(Context &context);
|
||||
void showwatch(Context &context);
|
||||
void printmessage(Context &context);
|
||||
@ -279,7 +277,6 @@ void modifychar(Context &context);
|
||||
void printchar(Context &context);
|
||||
void showcurrentfile(Context &context);
|
||||
void printlogo(Context &context);
|
||||
void printundermon(Context &context);
|
||||
void randomaccess(Context &context);
|
||||
void locklighton(Context &context);
|
||||
void locklightoff(Context &context);
|
||||
@ -430,7 +427,6 @@ void frameoutbh(Context &context);
|
||||
void frameoutv(Context &context);
|
||||
void putunderzoom(Context &context);
|
||||
void crosshair(Context &context);
|
||||
void width160(Context &context);
|
||||
void maptopanel(Context &context);
|
||||
void movemap(Context &context);
|
||||
void dealwithspecial(Context &context);
|
||||
@ -4034,71 +4030,6 @@ nought:
|
||||
return;
|
||||
}
|
||||
|
||||
void cls(Context & context) {
|
||||
context.ax = 0x0a000;
|
||||
context.es = context.ax;
|
||||
context.di = 0;
|
||||
context.cx = 0x7fff;
|
||||
context.ax = 0;
|
||||
while(context.cx--) context._stosw();
|
||||
return;
|
||||
}
|
||||
|
||||
void printundermon(Context & context) {
|
||||
context.si = ((320)*43)+76;
|
||||
context.di = context.si;
|
||||
context.es = context.data.word(kWorkspace);
|
||||
context._add(context.si, 8*(320));
|
||||
context.dx = 0x0a000;
|
||||
context.ds = context.dx;
|
||||
context.cx = 104;
|
||||
scrollmonloop1:
|
||||
context.push(context.cx);
|
||||
context.push(context.di);
|
||||
context.push(context.si);
|
||||
context.cx = 170;
|
||||
scrollmonloop2:
|
||||
context._lodsb();
|
||||
context._cmp(context.al, 231);
|
||||
if (!context.flags.c()) goto dontplace;
|
||||
placeit:
|
||||
context._stosb();
|
||||
if (--context.cx) goto scrollmonloop2;
|
||||
goto finmonscroll;
|
||||
dontplace:
|
||||
context._add(context.di, 1);
|
||||
if (--context.cx) goto scrollmonloop2;
|
||||
finmonscroll:
|
||||
context.si = context.pop();
|
||||
context.di = context.pop();
|
||||
context.cx = context.pop();
|
||||
context._add(context.si, (320));
|
||||
context._add(context.di, (320));
|
||||
if (--context.cx) goto scrollmonloop1;
|
||||
return;
|
||||
}
|
||||
|
||||
void worktoscreen(Context & context) {
|
||||
vsync(context);
|
||||
context.si = 0;
|
||||
context.di = 0;
|
||||
context.cx = 25;
|
||||
context.ds = context.data.word(kWorkspace);
|
||||
context.dx = 0x0a000;
|
||||
context.es = context.dx;
|
||||
dumpallloop:
|
||||
width160(context);
|
||||
width160(context);
|
||||
width160(context);
|
||||
width160(context);
|
||||
width160(context);
|
||||
width160(context);
|
||||
width160(context);
|
||||
width160(context);
|
||||
if (--context.cx) goto dumpallloop;
|
||||
return;
|
||||
}
|
||||
|
||||
void paneltomap(Context & context) {
|
||||
context.di = context.data.word(kMapxstart);
|
||||
context._add(context.di, context.data.word(kMapadx));
|
||||
@ -21321,9 +21252,6 @@ void __dispatch_call(Context &context, unsigned addr) {
|
||||
case 0xc1d4: readoneblock(context); break;
|
||||
case 0xc1d8: loadpalfromiff(context); break;
|
||||
case 0xc1dc: setmode(context); break;
|
||||
case 0xc1e0: cls(context); break;
|
||||
case 0xc1e4: printundermon(context); break;
|
||||
case 0xc1e8: worktoscreen(context); break;
|
||||
case 0xc1ec: paneltomap(context); break;
|
||||
case 0xc1f0: maptopanel(context); break;
|
||||
case 0xc1f4: dumpmap(context); break;
|
||||
|
@ -16,6 +16,9 @@ namespace dreamgen {
|
||||
void multiput(Context &context);
|
||||
void multidump(Context &context);
|
||||
void frameoutnm(Context &context);
|
||||
void cls(Context &context);
|
||||
void printundermon(Context &context);
|
||||
void worktoscreen(Context &context);
|
||||
void keyboardread(Context &context);
|
||||
void resetkeyboard(Context &context);
|
||||
void setkeyboardint(Context &context);
|
||||
|
@ -86,16 +86,6 @@ void DreamWebEngine::setVSyncInterrupt(bool flag) {
|
||||
|
||||
void DreamWebEngine::waitForVSync() {
|
||||
processEvents();
|
||||
Graphics::Surface *s = _system->lockScreen();
|
||||
if (!s)
|
||||
error("lockScreen failed");
|
||||
for(int y = 0; y < 200; ++y) {
|
||||
uint8 *scanline = (uint8*)s->getBasePtr(0, y);
|
||||
uint8 *src = _context.video.ptr(y * 320, 320);
|
||||
memcpy(scanline, src, 320);
|
||||
}
|
||||
_system->unlockScreen();
|
||||
_system->updateScreen();
|
||||
/*
|
||||
while (!_vSyncInterrupt) {
|
||||
_system->delayMillis(10);
|
||||
@ -220,6 +210,7 @@ void DreamWebEngine::setGraphicsMode() {
|
||||
}
|
||||
|
||||
void DreamWebEngine::fadeDos() {
|
||||
waitForVSync();
|
||||
//processEvents will be called from vsync
|
||||
PaletteManager *palette = _system->getPaletteManager();
|
||||
_context.ds = _context.es = _context.data.word(dreamgen::kBuffers);
|
||||
@ -231,9 +222,8 @@ void DreamWebEngine::fadeDos() {
|
||||
--dst[c];
|
||||
}
|
||||
}
|
||||
//Common::hexdump(dst, 64 * 3);
|
||||
//palette->setPalette(dst, 0, 64);
|
||||
//waitForVSync();
|
||||
palette->setPalette(dst, 0, 64);
|
||||
waitForVSync();
|
||||
}
|
||||
}
|
||||
void DreamWebEngine::setPalette() {
|
||||
@ -242,7 +232,7 @@ void DreamWebEngine::setPalette() {
|
||||
PaletteManager *palette = _system->getPaletteManager();
|
||||
unsigned n = (uint16)_context.cx;
|
||||
uint8 *src = _context.ds.ptr(_context.si, n * 3);
|
||||
for(int i = 0; i < n * 3; ++i)
|
||||
for(unsigned i = 0; i < n * 3; ++i)
|
||||
colors[i] = src[i] * 3;
|
||||
//Common::hexdump(colors, n * 3);
|
||||
palette->setPalette(colors, _context.al, n);
|
||||
@ -250,6 +240,15 @@ void DreamWebEngine::setPalette() {
|
||||
_context.cx = 0;
|
||||
}
|
||||
|
||||
void DreamWebEngine::blit(uint8 *src, int pitch, int x, int y, int w, int h) {
|
||||
_system->copyRectToScreen(src, pitch, x, y, w, h);
|
||||
}
|
||||
|
||||
void DreamWebEngine::cls() {
|
||||
_system->fillScreen(0);
|
||||
}
|
||||
|
||||
|
||||
} // End of namespace DreamWeb
|
||||
|
||||
|
||||
@ -289,17 +288,25 @@ void multiput(Context &context) {
|
||||
}
|
||||
|
||||
void multidump(Context &context) {
|
||||
unsigned w = (uint8)context.cl, h = (uint8)context.ch;
|
||||
context.es = 0xa000;
|
||||
context.ds = context.data.word(kWorkspace);
|
||||
int w = (uint8)context.cl, h = (uint8)context.ch;
|
||||
int x = (int16)context.di, y = (int16)context.bx;
|
||||
int pitch = (uint16)context.data.word(kScreenwidth);
|
||||
unsigned offset = x + y * pitch;
|
||||
//debug(1, "multidump %ux%u -> segment: %04x->%04x", w, h, (uint16)context.ds, (uint16)context.es);
|
||||
unsigned pitch = (uint16)context.data.word(kScreenwidth);
|
||||
unsigned offset = (uint16)context.di + (uint16)context.bx * pitch;
|
||||
for(unsigned y = 0; y < h; ++y, offset += pitch) {
|
||||
uint8 *src_p = context.ds.ptr(offset, w);
|
||||
uint8 *dst_p = context.es.ptr(offset, w);
|
||||
memcpy(dst_p, src_p, w);
|
||||
}
|
||||
engine()->blit(context.ds.ptr(offset, w * h), pitch, x, y, w, h);
|
||||
}
|
||||
|
||||
void worktoscreen(Context &context) {
|
||||
context.ds = context.data.word(kWorkspace);
|
||||
engine()->blit(context.ds.ptr(0, 320 * 200), 320, 0, 0, 320, 200);
|
||||
}
|
||||
|
||||
void printundermon(Context &context) {
|
||||
warning("printundermon: STUB");
|
||||
}
|
||||
|
||||
void cls(Context &context) {
|
||||
engine()->cls();
|
||||
}
|
||||
|
||||
void frameoutnm(Context &context) {
|
||||
@ -579,12 +586,11 @@ void showgroup(Context &context) {
|
||||
}
|
||||
|
||||
void fadedos(Context &context) {
|
||||
vsync(context);
|
||||
engine()->fadeDos();
|
||||
}
|
||||
|
||||
void doshake(Context &context) {
|
||||
::error("doshake");
|
||||
warning("doshake: STUB");
|
||||
}
|
||||
|
||||
void vsync(Context &context) {
|
||||
@ -683,8 +689,6 @@ normal:
|
||||
endline:
|
||||
context.di = context.pop();
|
||||
context.push(context.si);
|
||||
context.dx = 0xa000;
|
||||
context.es = context.dx;
|
||||
context.si = 0+(228*13)+32+60;
|
||||
context.ds = context.data.word(kBuffers);
|
||||
|
||||
|
@ -87,6 +87,8 @@ public:
|
||||
void setGraphicsMode();
|
||||
void setPalette();
|
||||
void fadeDos();
|
||||
void blit(uint8 *src, int pitch, int x, int y, int w, int h);
|
||||
void cls();
|
||||
|
||||
private:
|
||||
|
||||
|
@ -199,7 +199,7 @@ class Context {
|
||||
FreeSegmentList _freeSegments;
|
||||
|
||||
public:
|
||||
enum { kDefaultDataSegment = 0x1000, kVideoSegment = 0xa000 };
|
||||
enum { kDefaultDataSegment = 0x1000 };
|
||||
|
||||
Register ax, dx, bx, cx, si, di;
|
||||
LowPartOfRegister al;
|
||||
@ -211,21 +211,17 @@ public:
|
||||
LowPartOfRegister dl;
|
||||
HighPartOfRegister dh;
|
||||
|
||||
SegmentRef cs, ds, es, data, video;
|
||||
SegmentRef cs, ds, es, data;
|
||||
//data == fake segment register always pointing to data segment
|
||||
Flags flags;
|
||||
|
||||
inline Context(): al(ax), ah(ax), bl(bx), bh(bx), cl(cx), ch(cx), dl(dx), dh(dx),
|
||||
cs(this), ds(this), es(this), data(this), video(this) {
|
||||
cs(this), ds(this), es(this), data(this) {
|
||||
_segments[kDefaultDataSegment] = SegmentPtr(new Segment());
|
||||
_segments[kVideoSegment] = SegmentPtr(new Segment());
|
||||
_segments[kVideoSegment]->data.resize(0x10000);
|
||||
|
||||
cs.reset(kDefaultDataSegment);
|
||||
ds.reset(kDefaultDataSegment);
|
||||
es.reset(kDefaultDataSegment);
|
||||
data.reset(kDefaultDataSegment);
|
||||
video.reset(kVideoSegment);
|
||||
}
|
||||
|
||||
SegmentRef getSegment(uint16 value) {
|
||||
|
Loading…
Reference in New Issue
Block a user