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;