diff options
| -rwxr-xr-x | devtools/tasmrecover/tasm-recover | 2 | ||||
| -rw-r--r-- | engines/dreamweb/dreamgen.cpp | 94 | ||||
| -rw-r--r-- | engines/dreamweb/dreamgen.h | 6 | ||||
| -rw-r--r-- | engines/dreamweb/stubs.cpp | 56 | ||||
| -rw-r--r-- | engines/dreamweb/stubs.h | 4 | 
5 files changed, 58 insertions, 104 deletions
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover index 647b080813..2b4fbb2678 100755 --- a/devtools/tasmrecover/tasm-recover +++ b/devtools/tasmrecover/tasm-recover @@ -266,6 +266,8 @@ generator = cpp(context, "DreamGen", blacklist = [  	'powerlightoff',  	'accesslighton',  	'accesslightoff', +	'playchannel0', +	'playchannel1',  	'createpanel',  	'createpanel2',  	], skip_output = [ diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp index d685617f6d..65f002bb3e 100644 --- a/engines/dreamweb/dreamgen.cpp +++ b/engines/dreamweb/dreamgen.cpp @@ -11831,98 +11831,6 @@ soundfail:  	deallocatemem();  } -void DreamGenContext::playchannel0() { -	STACK_CHECK; -	_cmp(data.byte(kSoundint), 255); -	if (flags.z()) -		return /* (dontbother4) */; -	push(es); -	push(ds); -	push(bx); -	push(cx); -	push(di); -	push(si); -	data.byte(kCh0playing) = al; -	es = data.word(kSounddata); -	_cmp(al, 12); -	if (flags.c()) -		goto notsecondbank; -	es = data.word(kSounddata2); -	_sub(al, 12); -notsecondbank: -	data.byte(kCh0repeat) = ah; -	ah = 0; -	_add(ax, ax); -	bx = ax; -	_add(ax, ax); -	_add(bx, ax); -	al = es.byte(bx); -	ah = 0; -	data.word(kCh0emmpage) = ax; -	ax = es.word(bx+1); -	data.word(kCh0offset) = ax; -	ax = es.word(bx+3); -	data.word(kCh0blockstocopy) = ax; -	_cmp(data.byte(kCh0repeat), 0); -	if (flags.z()) -		goto nosetloop; -	ax = data.word(kCh0emmpage); -	data.word(kCh0oldemmpage) = ax; -	ax = data.word(kCh0offset); -	data.word(kCh0oldoffset) = ax; -	ax = data.word(kCh0blockstocopy); -	data.word(kCh0oldblockstocopy) = ax; -nosetloop: -	si = pop(); -	di = pop(); -	cx = pop(); -	bx = pop(); -	ds = pop(); -	es = pop(); -} - -void DreamGenContext::playchannel1() { -	STACK_CHECK; -	_cmp(data.byte(kSoundint), 255); -	if (flags.z()) -		return /* (dontbother5) */; -	_cmp(data.byte(kCh1playing), 7); -	if (flags.z()) -		return /* (dontbother5) */; -	push(es); -	push(ds); -	push(bx); -	push(cx); -	push(di); -	push(si); -	data.byte(kCh1playing) = al; -	es = data.word(kSounddata); -	_cmp(al, 12); -	if (flags.c()) -		goto notsecondbank1; -	es = data.word(kSounddata2); -	_sub(al, 12); -notsecondbank1: -	ah = 0; -	_add(ax, ax); -	bx = ax; -	_add(ax, ax); -	_add(bx, ax); -	al = es.byte(bx); -	ah = 0; -	data.word(kCh1emmpage) = ax; -	ax = es.word(bx+1); -	data.word(kCh1offset) = ax; -	ax = es.word(bx+3); -	data.word(kCh1blockstocopy) = ax; -	si = pop(); -	di = pop(); -	cx = pop(); -	bx = pop(); -	ds = pop(); -	es = pop(); -} -  void DreamGenContext::volumeadjust() {  	STACK_CHECK;  	al = data.byte(kVolumedirection); @@ -15109,8 +15017,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {  		case addr_interupttest: interupttest(); break;  		case addr_soundend: soundend(); break;  		case addr_out22c: out22c(); break; -		case addr_playchannel0: playchannel0(); break; -		case addr_playchannel1: playchannel1(); break;  		case addr_volumeadjust: volumeadjust(); break;  		case addr_channel0only: channel0only(); break;  		case addr_channel1only: channel1only(); break; diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h index 468e0a2f6d..63173610a9 100644 --- a/engines/dreamweb/dreamgen.h +++ b/engines/dreamweb/dreamgen.h @@ -129,8 +129,6 @@ public:  	static const uint16 addr_channel1only = 0xc91c;  	static const uint16 addr_channel0only = 0xc918;  	static const uint16 addr_volumeadjust = 0xc908; -	static const uint16 addr_playchannel1 = 0xc900; -	static const uint16 addr_playchannel0 = 0xc8fc;  	static const uint16 addr_out22c = 0xc8f8;  	static const uint16 addr_soundend = 0xc8f4;  	static const uint16 addr_interupttest = 0xc8f0; @@ -1516,8 +1514,8 @@ public:  	void rollendcredits();  	void intro1text();  	void transfertoex(); -	void playchannel1(); -	void playchannel0(); +	//void playchannel1(); +	//void playchannel0();  	//void usemon();  	void steady();  	//void pixelcheckset(); diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp index 5ee27e1878..668e388453 100644 --- a/engines/dreamweb/stubs.cpp +++ b/engines/dreamweb/stubs.cpp @@ -2203,14 +2203,60 @@ Frame * DreamGenContext::tempGraphics3() {  	return (Frame *)segRef(data.word(kTempgraphics3)).ptr(0, 0);  } -void DreamGenContext::playchannel0(uint8 index) { -	al = index; -	playchannel0(); +void DreamGenContext::playchannel0(uint8 index, uint8 repeat) { +	if (data.byte(kSoundint) == 255) +		return; +	push(es); +	push(bx); +	data.byte(kCh0playing) = index; +	if (index >= 12) { +		es = data.word(kSounddata2); +		index -= 12; +	} else +		es = data.word(kSounddata); + +	data.byte(kCh0repeat) = repeat; +	bx = index * 6; +	data.word(kCh0emmpage) = es.byte(bx); +	data.word(kCh0offset) = es.word(bx+1); +	data.word(kCh0blockstocopy) = es.word(bx+3); +	if (repeat) { +		data.word(kCh0oldemmpage) = data.word(kCh0emmpage); +		data.word(kCh0oldoffset) = data.word(kCh0offset); +		data.word(kCh0oldblockstocopy) = data.word(kCh0blockstocopy); +	} +	bx = pop(); +	es = pop(); +} + +void DreamGenContext::playchannel0() { +	playchannel0(al, ah);  }  void DreamGenContext::playchannel1(uint8 index) { -	al = index; -	playchannel1(); +	if (data.byte(kSoundint) == 255) +		return; +	if (data.byte(kCh1playing) == 7) +		return; +	push(es); +	push(bx); +	data.byte(kCh1playing) = index; +	if (index >= 12) { +		es = data.word(kSounddata2); +		index -= 12; +	} else +		es = data.word(kSounddata); + +	bx = index * 6; +	data.word(kCh1emmpage) = es.byte(bx); +	data.word(kCh1offset) = es.word(bx+1); +	data.word(kCh1blockstocopy) = es.word(bx+3); +	bx = pop(); +	es = pop(); +} + +void DreamGenContext::playchannel1() { +	playchannel1(al);  }  } /*namespace dreamgen */ diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h index ba44970e65..f9bd62d928 100644 --- a/engines/dreamweb/stubs.h +++ b/engines/dreamweb/stubs.h @@ -322,7 +322,9 @@  	void turnonpower();  	void powerlighton();  	void powerlightoff(); -	void playchannel0(uint8 index); +	void playchannel0(); +	void playchannel0(uint8 index, uint8 repeat); +	void playchannel1();  	void playchannel1(uint8 index);  	void showmainops();  	void createpanel();  | 
