News:

Printed Amstrad Addict magazine announced, check it out here!

Main Menu
T

Zynaps title music on emulators.

Started by tastefulmrship, 14:44, 11 October 11

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

tastefulmrship

A few years ago I found this interview with J. Dave Rogers. And in it, there was one paragraph that has haunted me ever since;

Quote
What is your favourite tune that you wrote?
Netherworld, because of it's general weirdness. I was quite pleased with the middle bit, the way the 10-bar pattern looped. Most of my stuff contains bits like this, that depart from the bog standard multiples-of-four-bars that comprise 99% of popular music. You can probably blame this on my listening to Jethro Tull in the 60s :-) Other favourites are Zynaps (which, by the way, is not working properly on the Emulators!!! One channel is missing) and "Bear a Grudge", a Spectrum magazine covergame by Chris Wood.
My all-time _worst_ music was probably "G.l.Hero", but it was quite fitting really, a crappy tune for a crappy game. This one isn't working properly on the emulators either, but in this case I'm not bothered.
(the important bit is in bold)

I have downloaded numerous copies of ZYNAPS over the years, and each one of them has silence on CHANNEL 2 (the middle one) during the eye-destroying title screen (*). However, if you download the JDR Music Disk, then all three channels play as expected. Initially, I thought it was an emulator problem, so I left it...
Emulators have been updated and re-programmed and most of them are pretty close to real hardware (please, I don't want to start a flame war here; emulators are good for people like me without real hardware!), but still this problem remains.


So, I looked into it. And, eventually, I present to you ZYNAPS on .dsk with three channel music on the title screen. (Attached!)
(If this fix already exists, then please tell me so I can delete this thread! Thanks!)


- JTMS... (#1 JDR fan!)

(* Can someone reprogram the rasters so INK 0 & the BORDER doesn't flash with the raster-bars? I'm sure that's what it was supposed to look like!)

redbox

Quote from: tastefulmrship on 14:44, 11 October 11
So, I looked into it. And, eventually, I present to you ZYNAPS on .dsk with three channel music on the title screen. (Attached!)


Nice work.  More importantly, how did you do it...?


Quote from: tastefulmrship on 14:44, 11 October 11
(* Can someone reprogram the rasters so INK 0 & the BORDER doesn't flash with the raster-bars? I'm sure that's what it was supposed to look like!)


Looks like the rasters aren't real rasters but are colour swapping ones.  So you'd have to change the background to another INK, and there might not be enough left...

TotO



Quote from: tastefulmrship on 14:44, 11 October 11
A few years ago I found this interview with J. Dave Rogers.
Strange or funy , I have just read this interview last week ! And I was intrigued by this sentance too...
But, after seen the interview date (1998) I have trough it was because old emulators was not accurate for sound at this time.
But you said this bug remain today !?  :o


Thank you for the fixed version, I'll listen that this evening. :)
"You make one mistake in your life and the internet will never let you live it down" (Keith Goodyer)

tastefulmrship

Ah bugger! It looks like the CP/M version on CPC-Power works perfectly, too!
http://www.cpc-power.com/index.php?page=detail&onglet=dsk&num=148

It's just the cracked versions online that are messed-up!
Oh, well! Can't win 'em all, eh?

TFM

Better to have your version, on the !CPM startable version you can't use any other bit of the disc. But on your version one can use the space :-)

Great work!!! And now get a real 6128 ;-)
TFM of FutureSoft
Also visit the CPC and Plus users favorite OS: FutureOS - The Revolution on CPC6128 and 6128Plus

tastefulmrship

Quote from: redbox on 14:59, 11 October 11
More importantly, how did you do it...?
To be honest, there's nothing wrong with the game on TAPE or (as I've found out today) CP/M. The problem lies with the original ZYNAPS crack that all of the .dsk files are based on. It turns out, it's 4k shorter than the original TAPE file, so some of the music data was missing (along with other stuff, maybe). All I did was re-rip it and saved it to a new .dsk file.
I then adjusted the original crack loader program. Simples!

Quote from: redbox on 14:59, 11 October 11
Looks like the rasters aren't real rasters but are colour swapping ones.  So you'd have to change the background to another INK, and there might not be enough left...
The fact that the bars are never dead-straight makes me think they're CRCT calls rather than palette switching (there are OUTs at &6D60). My knowledge of rasters & CRCT is very limited, but I can see that BC is set to &7F10 (screen, INK 16?) at &6D42.

Quote from: TFM/FS on 16:31, 11 October 11
And now get a real 6128 ;-)
Yeah, still working on that! ^_^

SyX

Quote from: tastefulmrship on 16:54, 11 October 11
The fact that the bars are never dead-straight makes me think they're CRCT calls rather than palette switching (there are OUTs at &6D60). My knowledge of rasters & CRCT is very limited, but I can see that BC is set to &7F10 (screen, INK 16?) at &6D42.
To change a colour using the hardware, you make two outs in the Gate Array Port ($7Fxx), with the first out you select one of the 15 pens ($00-$0F) and if you want to change the border you send the colour index 16 ($10). The second out is to select the colour.

And example:
10 OUT &7F00,&10
20 OUT &7F00,rnd * 27 + &40
30 GOTO 10

tastefulmrship

#7
Quote from: SyX on 17:01, 11 October 11
To change a colour using the hardware, you make two outs in the Gate Array Port ($7Fxx), with the first out you select one of the 15 pens ($00-$0F) and if you want to change the border you send the colour index 16 ($10). The second out is to select the colour.

And example:
10 OUT &7F00,&10
20 OUT &7F00,rnd * 27 + &40
30 GOTO 10
So setting C to &10 at &6D42 is setting the new colour to go to BORDER (&7F00,&10). Ok... I might change that to &00 and see if it fixes that eye-destroying screen! Thanks again, sir!


EDIT: Ok, ok. So you could effectively add those OUT commands to a decompressor routine to make it look like a C64/Amiga depacker routine. Nice.


EDIT2: Oooh... new toy!! Try this;

OPENOUT "d"
MEMORY &EFF
LOAD "ZYNAPS  .GAM",&F00
POKE &6D45,&02
POKE &6D64,&00
POKE &6D65,&00
POKE &6D66,&00
POKE &6D67,&00
CALL &9000

SyX

Really Nice!!! :D :D :D

Sir, i strongly urge you to make a DSK with your "Pokemon Not Seizure" patch :D

tastefulmrship

Quote from: SyX on 18:27, 11 October 11
Sir, i strongly urge you to make a DSK with your "Pokemon Not Seizure" patch :D
As requested... (attached)

However, I wouldn't mind working out how to remove the top/bottom section of the raster. The code uses the STACK to run through a section of memory, making the addition of a blank (&40) first and last difficult. Any ideas, anyone?

redbox

Quote from: tastefulmrship on 16:54, 11 October 11
All I did was re-rip it and saved it to a new .dsk file.

Did you transfer it from tape using a utility or did you do it yourself?  If the latter, did you have to break any copy protection?

Quote from: tastefulmrship on 18:38, 11 October 11
The code uses the STACK to run through a section of memory, making the addition of a blank (&40) first and last difficult. Any ideas, anyone?

Can't look at the code right now, but it seems a bit of overkill to read this data from the stack as that is usually used as an optimisation.

Are you sure it's not just reading it from a table?  If it is, you could relocate the table somewhere with more room and change the pointer to it quite easily.

tastefulmrship

Quote from: redbox on 19:21, 11 October 11
Did you transfer it from tape using a utility or did you do it yourself?  If the latter, did you have to break any copy protection?
ZYNAPS, EXOLON & NEBULUS were the first games I ever cracked in the 80s. Those early HEWSON games used a headerless tape loading system (CAS_READ &BCA1) as protection. Simply load the data in, then save as normal to disk.

redbox

Oh yeah, stack pointer.  Weird way of doing it.


I like your non-seizure version and think that's much better anyway  :)

Gryzor

Maybe the filename should be changed to denote some change...

tastefulmrship

Quote from: Gryzor on 19:47, 11 October 11
Maybe the filename should be changed to denote some change...
The change is hardcoded, hence the new .dsk file. I could make some kind of menu if you want, so it's possible to choose whether you want to have an epileptic fit or not.

Ythcal

I liked the psychedelic effect of the original, but the striped logo one is really cool, too...
A menu to choose the version would be nice.

Gryzor

Quote from: tastefulmrship on 20:07, 11 October 11
The change is hardcoded, hence the new .dsk file. I could make some kind of menu if you want, so it's possible to choose whether you want to have an epileptic fit or not.

Sorry, I meant the dsk filename, not the file *within* the dsk. Something like  "Zynaps (1987)(Hewson Consultants)(audio fix).dsk"...

TotO

#17
Quote from: Ythcal on 04:48, 12 October 11
I liked the psychedelic effect of the original, but the striped logo one is really cool, too...
A menu to choose the version would be nice.
I prefert two distinct versions. Original and patched.
I have always trough that was an original display bug and it may have to look like it's now.
Thank you again for my eyes ! :D
"You make one mistake in your life and the internet will never let you live it down" (Keith Goodyer)

tastefulmrship

Quote from: Gryzor on 07:23, 12 October 11
Sorry, I meant the dsk filename, not the file *within* the dsk. Something like  "Zynaps (1987)(Hewson Consultants)(audio fix).dsk"...
Well, to be honest I think it should just be "Zynaps (1987)(Hewson Consultants).dsk" as the original cracked .dsk files are corrupt in some way. This version is a direct rip from the .cdt version on CPC-Power. All I did was tack it to the end of the cracked loader. Maybe that needs to be removed as well...

Quote from: TotO on 07:54, 12 October 11
I prefert two distinct versions. Original and patched.
I have always trough that was an original display bug and it may have to look like it's now.
If you look at the C64 version, you can see the copper bars around the logo, like ours, but the border is black. I think this is what the original coders were trying to get... instead they created the first Amstrad CPC epilepsy trigger.

Commodore 64 version of ZYNAPS (1/3, but this shows the title screen)

C64 Longplay - Zynaps Part 1/3

TotO

#19
In this case, why the CPC programmer do not kept a small strip height centered behind the logo ?
It look like a filling cycling color but not at the good place. (unlike your patch does nicely)

I always think (too) the title stay no enough time on screen. (5 seconds alterning with hi-scores table).
By viewing the C64 version on your link, I can see the title screen during 20 seconds... It's more apreciate.

Finaly, is-it possible to get something like "15s title / 5s scores" (timing to test) ? And it will be perfect. :)
(notice that I don't ask for a runing demo :D )
"You make one mistake in your life and the internet will never let you live it down" (Keith Goodyer)

tastefulmrship

#20
Dumb programming question #64731;

I'm using &BB06 or &BB18 to capture keypresses, which returns ASCII to 'A', but how can I force upper or lower case characters in 'A' from either firmware call other than comparing against all possible characters?
In other words, how do you code A$=LOWER$(INKEY$) in assembler?

Axelay

Something like this, only with more checks if need be?


call &bb18
cp a,97
jr nc,LowerCase
; is not lower case
add a,32
. LowerCase
; is now lower case, or rubbish if it wasnt a letter :)

redbox

#22
I had a quick think about this and wrote the following:



org &8000


call &bb18 ; get key input


add 32
jp m,was_lowercase ; is it over 128? then A is already lowercase
jr print_it ; otherwise we've converted it, so just print it


was_lowercase: sub 32 ; deduct the 32 we added earlier
print_it: call &bb5a ; print it
ret

This will convert the whole uppercase alphabet (any input in that range) to lowercase, and if it's already lowercase then it will leave it alone.

It works because if the input is lowercase, the ASCII for "a" starts at 97.  Therefore if you add 32 to it, it will be 129 which is over 128.

The JP M command checks for the sign flag (i.e. is the number over 128) and creates a conditional jump based on this.

tastefulmrship

Thanks for your responses, guys! It's always useful to have differing versions of the same routine in my, slowly increasing, library! ^_^

Here's a clean-rip of ZYNAPS, making it look as close to the TAPE version as I could. It also contains a few cheats as well, just to round it all off. I am missing the INFINITE LIVES cheat because it stops you from progressing to the next level; it just replays level 1 over and over.
(Attached)


@TotO
I'm still looking into extending the logo duration, but I think it's connected to the highscore table, too. Which will mean we'll get 20 seconds of rastered-logo followed by 20 seconds of highscore table! But don't quote me on that just yet!

redbox

Nice version.

I don't think the initial "LOADING : ZYNAPS" is needed though...?  And you didn't compress the loading screen  :P

I see you went for Axelay's solution in your code as you're only checking for Y or N inputs  :)

Powered by SMFPacks Menu Editor Mod