mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-19 00:15:30 +00:00
DREAMWEB: Ported 'dirfile' to C++
Needs some checking of es:di usage and work to remove _operand1 to dreambase.h
This commit is contained in:
parent
b3b904ddab
commit
6a7e798f46
@ -1027,6 +1027,7 @@ generator = cpp(context, "DreamGen", blacklist = [
|
||||
'zoomonoff',
|
||||
], skip_output = [
|
||||
# These functions are processed but not output
|
||||
'dirfile',
|
||||
'dreamweb',
|
||||
], skip_dispatch_call = True, skip_addr_constants = True,
|
||||
header_omit_blacklisted = True,
|
||||
|
@ -26,83 +26,6 @@
|
||||
|
||||
namespace DreamGen {
|
||||
|
||||
void DreamGenContext::dirFile() {
|
||||
STACK_CHECK;
|
||||
al = 34;
|
||||
es.byte(di) = al;
|
||||
push(es);
|
||||
push(di);
|
||||
ds = data.word(kTextfile1);
|
||||
si = (66*2);
|
||||
searchForString();
|
||||
_cmp(al, 0);
|
||||
if (flags.z())
|
||||
goto foundfile;
|
||||
di = pop();
|
||||
es = pop();
|
||||
push(es);
|
||||
push(di);
|
||||
ds = data.word(kTextfile2);
|
||||
si = (66*2);
|
||||
searchForString();
|
||||
_cmp(al, 0);
|
||||
if (flags.z())
|
||||
goto foundfile;
|
||||
di = pop();
|
||||
es = pop();
|
||||
push(es);
|
||||
push(di);
|
||||
ds = data.word(kTextfile3);
|
||||
si = (66*2);
|
||||
searchForString();
|
||||
_cmp(al, 0);
|
||||
if (flags.z())
|
||||
goto foundfile;
|
||||
di = pop();
|
||||
es = pop();
|
||||
al = 7;
|
||||
monMessage();
|
||||
return;
|
||||
foundfile:
|
||||
ax = pop();
|
||||
ax = pop();
|
||||
getKeyAndLogo();
|
||||
_cmp(al, 0);
|
||||
if (flags.z())
|
||||
goto keyok2;
|
||||
return;
|
||||
keyok2:
|
||||
push(es);
|
||||
push(bx);
|
||||
ds = cs;
|
||||
si = offset_operand1+1;
|
||||
es = cs;
|
||||
di = 408+1;
|
||||
cx = 12;
|
||||
_movsb(cx, true);
|
||||
monitorLogo();
|
||||
scrollMonitor();
|
||||
al = 10;
|
||||
monMessage();
|
||||
bx = pop();
|
||||
es = pop();
|
||||
directloop2:
|
||||
al = es.byte(bx);
|
||||
_inc(bx);
|
||||
_cmp(al, 34);
|
||||
if (flags.z())
|
||||
goto endofdir2;
|
||||
_cmp(al, '*');
|
||||
if (flags.z())
|
||||
goto endofdir2;
|
||||
_cmp(al, '=');
|
||||
if (!flags.z())
|
||||
goto directloop2;
|
||||
monPrint();
|
||||
goto directloop2;
|
||||
endofdir2:
|
||||
scrollMonitor();
|
||||
}
|
||||
|
||||
void DreamGenContext::__start() {
|
||||
static const uint8 src[] = {
|
||||
|
@ -453,6 +453,61 @@ void DreamGenContext::getKeyAndLogo() {
|
||||
}
|
||||
}
|
||||
|
||||
void DreamGenContext::dirFile() {
|
||||
bool foundFile = false;
|
||||
|
||||
es.byte(di) = 34;
|
||||
|
||||
ds = data.word(kTextfile1);
|
||||
si = kTextstart;
|
||||
searchForString();
|
||||
if (al == 0) {
|
||||
foundFile = true;
|
||||
} else {
|
||||
ds = data.word(kTextfile2);
|
||||
si = kTextstart;
|
||||
searchForString();
|
||||
if (al == 0) {
|
||||
foundFile = true;
|
||||
} else {
|
||||
ds = data.word(kTextfile3);
|
||||
si = kTextstart;
|
||||
searchForString();
|
||||
if (al == 0)
|
||||
foundFile = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!foundFile) {
|
||||
monMessage(7);
|
||||
return;
|
||||
}
|
||||
|
||||
// "foundfile"
|
||||
getKeyAndLogo();
|
||||
if (al != 0)
|
||||
return;
|
||||
|
||||
// "keyok2"
|
||||
memcpy(data.ptr(kCurrentfile+1, 0), data.ptr(offset_operand1+1, 0), 12);
|
||||
monitorLogo();
|
||||
scrollMonitor();
|
||||
monMessage(10);
|
||||
|
||||
while (true) {
|
||||
al = es.byte(bx);
|
||||
bx++;
|
||||
if (al == 34 || al == '*') {
|
||||
// "endofdir2"
|
||||
scrollMonitor();
|
||||
return;
|
||||
}
|
||||
|
||||
if (al == '=')
|
||||
monPrint();
|
||||
}
|
||||
}
|
||||
|
||||
void DreamGenContext::dirCom() {
|
||||
randomAccess(30);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user