Jump to content
IGNORED

Tomy Tutor Monster Inn


Recommended Posts

Hi,

 

This has probably been posted before, but I could not find it.

 

To correct the cloud scores in Monster Inn on the Tomy Tutor, you need to patch 4 bytes (2 base addresses) to point to the correct numeric font base.

 

Offset 0x7A/0x7B contains 0x19A2, as does offset 0x80/0x81. Change both from 0x19A2 to 0x1B1A and the scores will be corrected.

 

There is a BIOS call which would have covered this - but it was not used, instead they went for a hard coded address.

 

Hope this helps someone.

 

  • Like 2
Link to comment
Share on other sites

7 hours ago, ~username~ said:

Hi,

 

This has probably been posted before, but I could not find it.

 

To correct the cloud scores in Monster Inn on the Tomy Tutor, you need to patch 4 bytes (2 base addresses) to point to the correct numeric font base.

 

Offset 0x7A/0x7B contains 0x19A2, as does offset 0x80/0x81. Change both from 0x19A2 to 0x1B1A and the scores will be corrected.

 

There is a BIOS call which would have covered this - but it was not used, instead they went for a hard coded address.

 

Hope this helps someone.

 

 

That is most intertesting! Is there any information available on the Tomy Tutor BIOS calls? 

 

Link to comment
Share on other sites

I have a list, which is a work in progress - I seem to find something new each time I look :)

 

The call I was referring to here is 0190 - which simply returns R8 pointing to the character set base address.

 

I intend one day to go through each one and note down which registers are clobbered when the call is made.

 

Anyways - here's a snippet from my utility, which covers most of the common ones used in ROMs.

 

Please don't under estimate my ability to get these wrong :)

 

Hope it helps.

/** Is this a BIOS call **/
if (addr < 0x250) {
	sprintf(output,"\tBL\t%s\t\t* ", param);
	switch(addr) {
	case 0x0028:
		strcat(output,"VRAM Clear. No inputs. Returns R0 as VDP Status.");
		break;
	case 0x0038:
		strcat(output,"Write VRAM Byte. R8H == Character R9 == VRAM Address.");
		break;
	case 0x003c:
		strcat(output,"Read VRAM Byte. R7 == VRAM Address.");
		break;
	case 0x00b0:
		strcat(output,"VRAM Write Double Word. R8 == Source address, R9 == Region address.");
		break;
	case 0x00e8:
		strcat(output,"VRAM Fill. R8H == Character R9 == Region address, R10 == length.");
		break;
	case 0x007c:
		strcat(output,"VRAM Region to Address. R9 == Region address, returns R9 == VRAM address.");
		break;
	case 0x00a0:
		strcat(output,"VRAM Write. R8 == Source Address R9 == Region address R10 == length.");
		break;
	case 0x0064:
		strcat(output,"PSG SOUND OFF.");
		break;
	case 0x0068:
		strcat(output,"PSG Track 0. R9 == Song address.");
		break;
	case 0x006C:
		strcat(output,"PSG Track 1. R9 == Song address.");
		break;
	case 0x0070:
		strcat(output,"PSG Track 2. R9 == Song address.");
		break;
	case 0x0080:
		strcat(output,"Read VRAM. R8 = Destination Adress R9 = VRAM Region R10 == Length.");
		break;
	case 0x00a4:
		strcat(output,"VRAM Write Byte. R8 == Source Address R9 == Region Address.");
		break;
	case 0x00b4:
		strcat(output,"Sprite co-ordinate. R8 == Source address, R9 == Sprite Number.");
		break;
	case 0x00cc:
		strcat(output,"Copy VRAM to VRAm. R8 == VRAM Region Source R9 == VRAM Region Destination R10 == Length.");
		break;
	case 0x00d0:
		strcat(output,"Reset timer. R9 == Timer number.");
		break;
	case 0x00d4:
		strcat(output,"Check timer. R9 == Timer numnber. R10 == Timer value.");
		break;
	case 0x00d8:
		strcat(output,"Timer value reset. R10 == Value.");
		break;
	case 0x00dc:
		strcat(output,"Player scores. R9 == Offset on screen (+1000 for player 2) R10H == Increment, R10L == Position.");
		break;
	case 0x00e4:
		strcat(output,"Reverse characters. R7 == Count R8 == Source address R9 == VRAM Region.");
		break;
	case 0x00f0:
		strcat(output,"Controller Input. R7 == 0 Controller 0 R7 == 1 Controller 1.");
		break;
	case 0x00f8:
		strcat(output,"Set ASCII score. R9 == address to set.");
		break;
	case 0x00fc:
		strcat(output,"Display within range. R8 == Source address R9 == VRAM address R10H == Vertical range R10L == Horizontal range.");
		break;
	case 0x0130:
		strcat(output,"BIOS Shot Sound.");
		break;
	case 0x0134:
		strcat(output,"BIOS Beep Sound.");
		break;
	case 0x0138:
		strcat(output,"BIOS Menu Sound.");
		break;
	case 0x013c:
		strcat(output,"BIOS Enter Sound.");
		break;
	case 0x016c:
		strcat(output,"Check Track 0 playing.");
		break;
	case 0x0170:
		strcat(output,"Check Track 1 playing.");
		break;
	case 0x0174:
		strcat(output,"Check Track 2 playing.");
		break;
	case 0x0178:
		strcat(output,"Write VRAM Word. R8 == Word R9 == VRAM Region.");
		break;
	case 0x017c:
		strcat(output,"Read VRAM Word. R9 == VRAM Address. R8 == Word read.");
		break;
	case 0x0188:
		strcat(output,"Software Delay. R13 == Wait loops. 1 loop == 084C iterations.");
		break;
	case 0x0198:
		strcat(output,"VDP Initialise to defaults.");
		break;
	case 0x01b0:
		strcat(output,"High Score Offset. R12 == Screen offset.");
		break;
	case 0x01b4:
		strcat(output,"Get Number of players. Returns byte at F0E8 in R12. 00 == 1 01 == 2");
		break;
	case 0x01b8:
		strcat(output,"Set Number of players. R12 == 0 for 1, 1 for 2. Sets byte at F0E8.");
		break;
	case 0x01bc:
		strcat(output,"Sprite Size select. R12 == 0 8x8 R12 == 1 16x16.");
		break;
	case 0x01c4:
		strcat(output,"Clear VRAM. R12 == 0 clears 40 in F06F, R12 == 1 sets 40 in F06F.");
		break;
	case 0x01d4:
		strcat(output,"Check column 0. R9 == Screen offset.");
		break;
	case 0x01d8:
		strcat(output,"VRAM to Region. R9 == VRAM Address. Returns R9 == Region Address.");
		break;
	case 0x01f4:
		strcat(output,"Get player score BCD. R10 == 0 Player 1, R10 == 1 Player 2. R12 == Low 16 bits R13H == High 8 bits.");
		break;
	case 0x01f8:
		strcat(output,"Clear scores. R12 == 0 Clear player 1 R12 == 1 Clear player 2 R12 == 2 Clear both.");
		break;
	case 0x01fc:
		strcat(output,"VDP REG 07 - R9H == Colour.");
		break;
	case 0x01c0:
		strcat(output,"Sprite Mag - R12 == 0 Not enlarged. R12 == 1 Enlarged.");
		break;
	case 0x0220:
		strcat(output,"Check ENTER (RT) hit.");
		break;
	case 0x0228:
		strcat(output,"Fill VRAM. R8H == Fill character, R1 == VRAM Address.");
		break;
	case 0x022c:
		strcat(output,"Player select. R9 == Screen offset R10 == Offset in character set.");
		break;
	case 0x0234:
		strcat(output,"Write Text. R7 == Source Address R9 == F800 length, 07FF VRAM address.");
		break;
	case 0x0248:
		strcat(output,"Copy to VRAM. R4 == Pointer triples R10 == Number of triples. WORD1 == Source Address WORD2 == Length + 4000 WORD3 == VRAM Address.");
		break;

 

  • Like 1
  • Thanks 2
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...