2000-01-04

�����Ȃ���

�v�X�̂g�o�X�V�ɂȂ�܂��B�����x�݂��Ă��Ƃł܂Ƃ߂ĝ�������܂��B �܂������ȂƂ���ŝ��������̝̂Ă������A�Ă��������ł����ǝB
�g�b�v�̃y�[�W����������Â��Ȃ��Ăǂ����Ă�낤���A �ƔY�񂾂肵�Ă܂����������΂炭���̂܂܂ł͂Ȃ����Ǝv���܂��B
�@���[�����ꂽ���A�����܂���ł����B �قƂ�ǕԎ������܂���ł��������ӂ͂���܂���B �Z���������A�Ƃ��������������̂ĂĂ܂œ����Ă�A �Ƃ����p�����K�v�Ȃ��炢���o��������ł���B

���փl�^

�ŋ߂̎��� MOD �֌W�͂�����ƝÊ� �i�Ƃ�������̃��c�œ��{�̝i�\�̝jscene ���̂��̂���߂�������̂ŝA �Ȃ񂾂����蝇�����Ȃ��A�Ċ����ł��C������Ă�����������܂��B �i��Ԃ̌����͎����n�[�h���ʂɎア�Ƃ������Ƃɝs���܂����B�j �K���ADINO CRISIS ����v���e�N�g���C�O�i�o���Ă���܂����̂ŝA ���ꂩ��͉p�ꌗ�݂̂Ȃ��܂Ɋ��҂������ł��˝B���E�͝L��������B �����`�����`�������񂾂��ǎg�������Ԉ���Ă�q�g�͂������񂢂܂�����˝B

�@�ꉞ 2000 �N�ɂȂ�܂������A�ߋ���U��Ԃ��Ă݂悤���Ǝv���܂��B mod ����݂͌����̂P�N�i�ƂP�������傢�j�A �Ċ����ł�������Ȋ����������Ǝv���܂��B���n��̂‚���ł��������Ⴄ�����B ���[�� GIO ����̊���ɂ‚��ĝG��Ă��܂��񂪝A����͎����m��Ȃ�����ł��B HEX ����ʌ��J�͂Ȃ������H��ł͂Ȃ����Ǝv���܂��B �Ȃɂ�犮���ȝM���𔭌����������ł����A�^����...�m��܂���B

�@���ւ̗��j��U�肩����‚���ł������s���őO�҂݂̂ɂȂ��Ă��܂��܂����B ���Ƃ������ق�B ���[�ƝA���ݎ嗬�� modchip�A�ؓ� mayumi ��̃��c���Ȃ�ŝЉ�Ȃ��̝H ���ă��[�����ꂽ�������܂������A���{�l�ɝr�炳�ꂽ�爫�����Ǝv���� �����N���ĂȂ���ł��B���ē��{��ŝ����Ă��ǂ߂܂����˝B

modchip �Ɋւ��Ă͑������ɝo���邱�Ƃ͂����Ȃ���ł͂Ȃ����Ǝv���܂��B �Ă������O����o���ĂȂ���ł����ǝB ���W�A�i�����ĂȂ��Ǝ肪�o���Ȃ��̈�܂ŗ����Ⴂ�܂�������˝B ���Amodisasm �ł����o�O���P���o�Ă܂��B�Ђ����ɒ����Ă����܂��B

XPS �ŝG�ꂽ EDC/ECC �v�Z�����ł����AC �� ASM �ɒ��������̂��܂� C �ɖ߂��Ă݂܂����B���͂���ς藝���ł��܂���i���j�B �N������ŗǂ��c�[�������Ă��������܂��B �ix86 �킩��Ȃ��̂ŝh�������ł��B�j


#ifndef _CDROMXAmode1_EDC_ECC_H_
#define _CDROMXAmode1_EDC_ECC_H_
/*
 *	EDC/ECC calculator programmed by Hanimar.
 *	This is what XPS patcher does, and I converted it into C.
 *	Therefore, I don't really know what it does=(
 */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

/*
 *	Calculates EDC.
 *	Usage:
 *	ISO-9660 Mode 1: CalcEDC(�or[0], 2064)
 *	CDROM-XA format 1: CalcEDC(�or[16], 2056)
 */
unsigned long CalcEDC(const unsigned char *from, int size);
/*
 *	Stores EDC into a sector image.
 *	This function copies edc to from in Little-Endian.
 *	Usage:
 *	ISO-9660 Mode 1: StoreEDC(�or[2064], edc)
 *	CDROM-XA format 1: StoreEDC(�or[2072], edc)
 */
void StoreEDC(unsigned char *from, unsigned long edc);

/*
 *	Calculates ECC (for CDROM XA form 1)
 */
void XaCalcECC(unsigned char *sector);

/* void ISO9660mode1CalcECC(const unsigned char *sector); */

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif	/* _CDROMXAmode1_EDC_ECC_H_ */

#include "edcecc.h"

#define Multiply(a, b) do {			\
	int i, carry;				\
	b ^= a;					\
	for (i = 8 ; i > 0 ; i --) {		\
		carry = (b) & 1; b >>= 1;	\
		if (carry) b ^= 0xd8018001;	\
	}					\
} while (0)

/*
 *	EDC �v�Z
 */ 
unsigned long CalcEDC(const unsigned char *from, int size)
{
	int i;
	unsigned long a, b = 0;

	for (i = 0 ; i < size ; i ++) {
		a = (unsigned long)from[i];
		Multiply(a, b);
	}
	return b;
}

void StoreEDC(unsigned char *from, unsigned long edc)
{
	from[0] = (unsigned char)(edc >> 0) & 0xff;
	from[1] = (unsigned char)(edc >> 8) & 0xff;
	from[2] = (unsigned char)(edc >> 16) & 0xff;
	from[3] = (unsigned char)(edc >> 24) & 0xff;

	return;
}

static void mkTable4ECC(unsigned char *table);
static void calcPParity(const unsigned char *from, unsigned char *dest,
	const unsigned char *table);
static void calcQParity(const unsigned char *from, unsigned char *dest,
	const unsigned char *table);
/*
 *	ECC �v�Z (XA form 1 ��p)
 *
 *	�o�p���e�B
 *	�w�b�_�S�o�C�g�A�T�u�w�b�_�W�o�C�g�A�f�[�^�A�d�c�b���܂ނQ�O�U�S�o�C�g��
 *	�΂��Čv�Z���܂��B�������A�w�b�_�i�Z�N�^�A���[�h�������S�o�C�g�j�̓[����
 *	���Čv�Z���܂��B
 *	0x81c ���� 0x8c7 �܂ł̂P�V�Q�o�C�g���Z�o���܂��B
 *
 *	�p�p���e�B
 *	�w�b�_�S�o�C�g�A�T�u�w�b�_�W�o�C�g�A�f�[�^�A�d�c�b�A�o�p���e�B��
 *	�Q�Q�R�U�o�C�g�ɑ΂��Čv�Z���܂��B�������A�w�b�_
 *	�i�Z�N�^�ԝ��������S�o�C�g�j�̓[���Ƃ��Čv�Z���܂��B
 *	0x8c8 ����Ō�(0x92f)�܂ł̂P�O�S�o�C�g���Z�o���܂��B
 *
 *	�����F
 *	sector:
 *		�Z�N�^�̝擪�ʒu�B�����M�����̝擪
 *		�v����� 00 FF FF FF FF FF FF FF FF FF FF 00 �ƂȂ��Ă���Ƃ���B
 *
 */
void XaCalcECC(unsigned char *sector)
{
	unsigned char table[256];
	unsigned char tmp[4];
	int i;

	mkTable4ECC(table);

	for (i = 0 ; i < 4 ; i ++) {	// �w�b�_������[�N���A
		tmp[i] = sector[12 + i]; sector[12 + i] = 0;
	}

	calcPParity(�or[0x0c], �or[0x81c], table);
	calcQParity(�or[0x0c], �or[0x8c8], table);

	for (i = 0 ; i < 4 ; i ++) {	// �w�b�_����߂�
		sector[12 + i] = tmp[i];
	}
	return;
}

/*
 *	������ memmove() �ł��B
 */
#if 0
void StoreECC(unsigned char *sector, unsigned char *ecc)
{
	unsigned char *src = �or[0x81c];
	int i;
	
	for (i = 0x114; i > 0 ; i --) *ecc ++ = *src ++;
	return;
}
#endif

static void mkTable4ECC(unsigned char *table)
{
	int i, c;

	for (i = 0 ; i < 256 ; i ++) {
		c = i << 1;
		if (c >> 8) c ^= 0x11d;	// if (carry) dl ^= 01dh
		table[i ^ c] = i;
	}
	return;
}

static void calcPParity(const unsigned char *from, unsigned char *dest,
	const unsigned char *table)
{
	int i, j;
	int a, b;
	int index;
	int c;

	for (i = 0 ; i < 86 ; i ++) {
		a = b = 0;
		for (j = 0 ; j < 24 ; j ++) {
			index = ((j * 43 + (i >> 1)) << 1) + (i & 1);
			c = from[index];
			a ^= c; b ^= c;

			if ((a <<= 1) >> 8) a ^= 0x11d;
		}
		if ((a <<= 1) >> 8) a ^= 0x11d;
		a ^= b;
		*dest = table[a];
		dest[86] = table[a] ^ b;
		dest ++;
	}

	return;
}

static void calcQParity(const unsigned char *from, unsigned char *dest,
	const unsigned char *table)
{
	int i, j;
	int a, b;
	int index;
	int c;

	for (i = 0 ; i < 52 ; i ++) {	
		a = b = 0;
		for (j = 0 ; j < 43 ; j ++) {
			index = ((((j * 44) + (i >> 1) * 43) % 1118) << 1) + (i & 1);
			c = from[index];
			a ^= c; b ^= c;

			if ((a <<= 1) >> 8) a ^= 0x11d;
		}
		if ((a <<= 1) >> 8) a ^= 0x11d;
		a ^= b;
		*dest = table[a];
		dest[52] = table[a] ^ b;
		dest ++;
	}

	return;
}


�����[�A#if 0 �Ƃ����̂܂�܂ł��˝B�܂�������B �����ԑO�ɝ�����̂łǂ�����Ďg�����Y��܂����B���₵�Ă��Ȃ��ł˝B

���APS2 �̂���

���[�� PS2 ��������A�Ƃ����̂͝�����y���݂ł����A �s�������Ȃ�Ƃ��@�����킵�Ȃ���V�΂Ȃ��Ƃ����Ȃ��̂��c�����Ƃ���ł��B �ŝA�ǂ���������Ă����������ł��B ���������莩��v���O�����𓮂�����Ƃ���܂ł����ΝA ���̂��ƝH�����J������Ă���ł����APAR �̌��͂ӂ�����Ă��܂��i�Ǝv���j���A modchip �͝i�����j�������낤���B���Ăǂ����܂��傤�B�ǂ����Ɍ��͂Ȃ���ł��傤���˝B�ܝA�Ƃ肠���� PS2 �o����A���f�B�A���ǂ߂� DVD �𔃂����B ����ς�S���łP�O�����炢�͝o�ĝs���킯��˝B���񂾂��B

�ȉ��A�A�N�V�������v���C�n

PAR 3 �̂���

���[�ƝA�����ĊԂ��Ȃ���ł����A�킩�������Ƃ𝑂��܂��B

�������z�u

1f000000-1f01ffff	ROM�B�o���N�؂�ւ��ŕς��B
1f020000-1f03ffff	ROM�B�o���N�؂�ւ��ŕς��B
1f040000-1f05ffff	�Ȃ�� RAM�B�g���邩���B
1f060000-1f06003f	I/O�B�Ȍ� 1f07ffff �܂łЂ�����~���[�B
�Ȃ��� ROM �� SST 28SF040 �Ă����A�S�l�̃^�C�v�ł����B ���Ȃ݂� PAR/XT �Ȃ񂩂� ROM �T�C�Y�̌��������͝A�^�Ԃ̝Ō�� 040 ���Ă����Ƃ���̝����ł킩��݂����ł��B 010 �Ȃ�P�l���Ă������Ƃł��B
�@�‚��łȂ�ł����̊e�� PAR ���J�������ʂ�ڂ��Ƃ��܂��B

PAR2 ���J������ SST 29EE020 �Ƃ����̂������Ă����B(Silicon Storage Technology) ���� 020 �Ƃ����̂��Q�l�Ƃ����Ӗ��炵���B ���Ƃ� DATEL ASIC1 A8B1944A 9832 �Ƃ����ł����� 44pin �̂������Ă����B ���Ƀp�`�����B SST 29EE010 �Ă̂��P�l�̝B AMD AM29F010 ���݊��i�i�ǂ������H�j ATMEL AT29C010 ���P�l�B 29F010 �Ɗ�Ղɝ����Ă�̂ł���ł��n�j�B ATMEL �̂͂ł����� 32pin ���B�����J�Ƀ\�P�b�g�t���Ȃ̂ł������Ɲo���邩���B �[���v���ł��̂����Ă������ȝB �ŝAPAR ����Ȃ����� 190 �~�Ŕ����Ă������U�f�[�^�Y�B H9730 AJ NM27C010V 120 �Ɲ����Ă�B���[�ޝB�P�l�炵������... EPROM �������ł��BUV Erasable ���B�ł������Ȃ���??? ���� PIC 16C55�B�v���e�N�g�|�����Ă�̂��ȝH�q�n�l�z���o���邩���B PAR3�B SST 28SF040 �S�l�ł��˝B��H���i�i�ɂ�₱�����Ȃ��Ă���B �l�n�c�ł��Ȃ��݂� 12C508 ���͂����Ă邼�B�O���� modchip �Ƃ��Ďg���܂��A �Ƃ���������ʔ����񂾂��ǂȂ��B XT2: SST 29EE020�BATMEL �̂Ɠ����ł����� 32pin�BDIP ���Ă����̝H �W���J�����Ƃ��Ƀo�l�ƃl�W�����ł������B���������Ăǂ����������킩���B �o�r�Ƃ̃R�l�N�^���̝���ɕt���Ă����݂̂��������ǝA�܂�������B �Ȃ�ł���ȃl�W������̂�����s�\�B �����΂񂮂Ŕ����Ă��u�������傻�v�B1f040000 ����q�n�l������悤�Ȃ��� �������̂����ǝA���ۂ� 1f000000 �̃~���[�������肷��B AM29F010�B �����΂��[�Ŕ����Ă� EMS GOLD FINGER�B(HAPPY PLAY) ATMEL AT29BV020�B 256byte �������K�v�ł��B����A��Ղɂ͂���ς� 29F010 �Ɲ����Ă���B Game Booster �i�p�`�����j ATMEL AT29C010A,�� AT29C020 �̝؂�ւ����B

�����𒣂�‚��������Ȃ�ňӖ��s���������炲�߂�Ȃ����B

���������̗e�ʂŃ����J�W�����ƌ����؂�̂͂ǂ����Ǝv���܂��B �ǂ�ȃ����J�̃f�[�^��z�肵�����l�Ȃ�ł��傤�B ����Ƃ����͂����� EEPROM �ς�ł��ł��傤��... 1080 �u���b�N�Ƃ������Ă�J�[�g���b�W�͂ǂ񂾂� ROM ���̂��Ă�̂��C�ɂȂ��Ă��܂����B���������ȝA�g��Ȃ����ǝB

I/O

�W�o�C�g���E�łW��ޝH����݂����Ȋ����ł��B
1f060000 ��M�p�B�i1f060000 �����g�p�B�j�S�o�C�g���������݂����B�Ȃɂ��q���Ȃ���Ԃł� 01h �ł��B
1f060008 ���M�p�B�i1f060008 �����g�p�B�j�Ȃɂ��q���Ȃ���Ԃł� ffh �ł��B
1f060010 �f�[�^��M���͝ʼn��ʃr�b�g�������܂��B���i�� fe �ł��B
1f060018 �v�b�V���{�^���̝�ԝB�����ĂȂ��� fefefefefefefefe �ŝA������ ffffffffffffffff �ɂȂ�܂��B
1f060020 ���g�p�Ǝv���Bffffffffffffffff �ł��B
1f060028 ���g�p�Ǝv���Bffffffffffffffff �ł��B
1f060030 �o���N�؂�ւ��B1 ������Ǝ��s���̂q�n�l�A�R���ƋN�����̂q�n�l�ɕς��܂��B
1f060038 �Ȃ񂾂낤�H lbu ���Ă�B�r�b�g�O�ƂP�ɈӖ�������݂����Bfcfcfcfcfcfcfcfc �ł����B�o���N����݂��Ǝv���܂��B

ROM �̋z���o����

���[�� 1f000000 ���� 1f03ffff �Ƃ����� 1f07ffff �܂ł����C���������ɓ]������v���O�����𝑂��Ăb�c�ɝĂ��܂��B �‚��ł� 80000000 ���� 10000 ���R�s���Ă����ƕ׋��ɂȂ邩������܂���B ���� modchip ���ƒX�e���K�v�ł��B

�ȝ�͝������܂���B�o���Ȃ��ЂƂ͋z���o���Ă��Ӗ��Ȃ��ł��傤�A���Ԃ�B �Ȃ��ɝA�׋�����Νo�������ł��B���͓ˑR�ł���悤�ɂȂ�܂����B ���[�Ƃ܂� BERO ����� NOT YAROZE �ł��׋��ł��B ���������Ƃ��̓T���v���\�[�X�Ƃ����\�����N���؂�Ă܂��������͂ǂ��Ȃ�ł��傤�B�ŝA���� K-Comm. ����Ƃ��Ŗҕ׋��B�������ꂪ�����ł��B �Ƃ��������ɝ������Ă܂��������܂�����܂�킩���Ă܂���B ���蝞�݂܂��Ƃ������ς�ł��B

�{��B�o���N�؂�ւ�������A�ƌ������Ƃ���A �Q�[���N���O�ƋN����ł͂�������q�n�l���ς���Ă��܂��܂��B

�o�`�q�N���O�̂q�n�l���z���o��

�����s�������ʂȂɂ��j�����悤�Ǝ��͝ӔC�������܂���B
  1. �g���[�q�ɂȂɂ��h�����ɋN������B
  2. �N���������i���Ƃ����̉�ʎ��ł悢�B�j�ɂo�`�q�R�𝷂��B
  3. �Y�������������C���������ɓ]������b�c���N���B
  4. ���Z�b�g�{�^���������Ȃ���
  5. caetla �ɝ����ւ���B
  6. psxread �ŋz���グ�B
����������Ƃ���΂��ă��C�������������k���‚ƒ������[�J�[�h�ɋz���グ��A �Ȃ�Ă����v���O�����𝑂��΂����Ƃ͈��S�Ȃ�ł����ǝA UNISYS �̃o�J���Ċ����ň��k���@�ŝ����Ă܂��B �i�l�Ŏg���Ԃ�ɂ͂�����ł��傤���ǝB�j

�o�`�q�N�����̃��������z���o��

�����m�F�����Ԃ�ł� 1f000230 ���� 1f000 �o�C�g�i1f01f230 �܂ŝj�� 80040000 �ɃR�s�[�B�i1f01f000 ����̉����R�[�h�̈ꕔ��]�����Ă�̂͂����̊ԈႢ�H�j �������� 80090000 �Ɉ��k�f�[�^��W�J���Ă܂��B
  1. PAR ���N���B���C�����j���[�\��
  2. ���Z�b�g�������Ȃ��� caetla �Ɍ���
  3. �z�o���B
����Ȃ��ł��˝B

�Q�[���N�����̂q�n�l���z���o��

���������Ȃ��Ă��킩��܂���˝B

���[�ƒʝM���@�ɂ‚��Ă� THUMP! ����Ƃ��Ƃ� K-Comm. ����Ƃ��ŝG��Ă��悤�Ɏv���܂��̂ŋ���������͒T���Ă݂Ă��������B
�ʝM���Ă�v���O�����͂Q���i�����Ƃ��邩���H�j�ɂ����ĝA80044c0c ����� 800ac9e4 ����ɂ��ꂼ��R�}���h�ɑ΂���֝��A�h���X�̔z�񂪒u����Ă��܂��B ��M�����ԝ� - 100 ���Ă���z��Q�Ƃł��B �ŝA�v���O���������s�ł���R�}���h�����邩�A���Ă����̂���Ԃ̋����Ȃ�ł����A �悭�킩��܂���ł����i���j�B�����Ă��悳�����Ȃ�ł����ǝB

�Ċ����ł��B����܂���ɂ����Ȃ��ł����ǝA���ꂭ�炢�܂ł͉�͂ł���悤�ɂȂ����񂾂�A���ꂩ�_�߂Ă�[���Ċ����ŝ����Ă݂܂����B PS2 �Ɍ����ĕ׋��𑱂������Ǝv���܂��B
�����z�����̂͂��񂾂��ł����A�܂��W�J����ĂȂ��R�[�h�͂����Ƃ���܂��B���‚����狳���ė~�����ł��B

(2000-01-09 �NjL) �������̃y�[�W�� ROM �̝������݂����Ƃ��𝑂��܂����B �悩������ǂ����B

���ƖY��Ă����ǂȂ�� PrintInstalledDevices() ���t�b�N���Ă�̝H �����J�Z�[�u���Ă���z���グ����Ă̂����Ȃ���ȝB

�e�� PAR �� NTSC ��

�悻�� BBS �ɓ��e������ł����ǝA���̂�������Ă��܂����낤����\��t���Ă����܂��Bstealth �� NTSC ���͂�߂Ƃ��܂��B��͎��ɂ� PALPAR �̂����b�ɂȂ�܂����B ���� CPU �̃L���b�V���Ƃ����񂺂񖳎����Ă܂���ŝA �������Ȃ��Ǝv���������͝���ǂ�����𑗂�o���Ă���Ă��������B


�yPSX Action Replay Version 2.6 (par26frn) NTSC patch�z


1f0041ec: 10 fc 24 ac	sw a0,$8005fc10
--------> 10 fc 20 ac	sw zero,$8005fc10
�^�C�g���� NTSC �ɂȂ����B

800a5c9c: a0 96 24 ac
--------> a0 96 20 ac
�ł�����͈��k����Ă�Ƃ���B

�Ă��Ƃ�
	lui v0, $800a
	li  v1, $20ac
	jr  ra
	sh  v1, $5c9e(v0)

�� 16byte ���ǂ����ɝ��点��B
68b0 ��intr.c �� RCS ID �̝Ꝋ���g�����B���Ă���
SCE �̃��C�u�����g���Ă��񂩝B�ڋ����Ȃ��B

0a80023c ac200324 0800e003 9e5c43a4

	jal $800468b0 -> 2c1a010c


80040134 �ɂ�������߂�B
10*4bytes ������ɂ��炵�ĝA���߂�

�Ƃ����킯�ŝA
00001134: 10 -> 2c
00001135: 00 -> 1a
00001136: a4 -> 01
00001137: 27 -> 0c
00001138: 18 -> 10
00001139: 80 -> 00
0000113a: 05 -> a4
0000113b: 3c -> 27
0000113c: ca -> 18
0000113d: 0e -> 80
0000113e: 01 -> 05
0000113f: 0c -> 3c
00001140: 00 -> ca
00001141: 20 -> 0e
00001142: a5 -> 01
00001143: 34 -> 0c
00001144: 40 -> 00
00001145: 0e -> 20
00001146: 01 -> a5
00001147: 0c -> 34
00001148: 21 -> 40
00001149: 20 -> 0e
0000114a: 00 -> 01
0000114b: 00 -> 0c
0000114c: 34 -> 21
0000114d: 00 -> 20
0000114e: bf -> 00
0000114f: 8f -> 00
00001150: 38 -> 34
00001152: bd -> bf
00001153: 23 -> 8f
00001154: 09 -> 38
00001155: 80 -> 00
00001156: 08 -> bd
00001157: 3c -> 23
00001158: 08 -> 09
00001159: 00 -> 80
0000115a: 00 -> 08
0000115b: 01 -> 3c
0000115c: 00 -> 08
0000115f: 00 -> 01
000041ee: 24 -> 20
000078b0: 24 -> 0a
000078b1: 49 -> 80
000078b2: 64 -> 02
000078b3: 3a -> 3c
000078b4: 20 -> ac
000078b5: 69 -> 20
000078b6: 6e -> 03
000078b7: 74 -> 24
000078b8: 72 -> 08
000078b9: 2e -> 00
000078ba: 63 -> e0
000078bb: 2c -> 03
000078bc: 76 -> 9e
000078bd: 20 -> 5c
000078be: 31 -> 43
000078bf: 2e -> a4

�����A���Ђ�B

hanimar

�yAction Replay Version 2.81 (ar281) NTSC patch�z 1f001800 ���� 1f01ffff �܂ł� 80010000 �ɓ]�������B �܂� 80010f80 c406043c 80010f84 40028434 li a0, $06c40240 (����) 80010f88 0407073c 80010f8c 3080e734 li a3, $07048030 (����) �� li a3, $07040010 �ɂ��܂��B 80010f8c: 1000e734 �ł��B 80011000 09008434 ori a0,a0, $0009 �� $0001 �ɕϝX�B #2800 09->01 ���� 80010000 ����̃R�[�h�ł͌Ă΂�ĂȂ��悤�����ǝA 800109b0 21308000 mov a2,a0 �� mov a2,zero �ɕϝX�B #21b0 21308000->25300000 �����R�[�h�� 800938c4 �ɂ����ĝA 800938c4 21308000 mov a2,a0�B ���� 80093ea0 �� 80093ea0: 3080e734 or a3, a3, $8030 (li a3,$07048030) ��L�͎g���ĂȂ���������Ȃ��B ����� 80093f14 �� 80093f14: 09008434 ori a0,a0, $0009 ���ꂩ�� View Video Image �ŕ\���� PAL �ɂȂ�̂ŝA 80094d50 21408000 mov t0,a0 �� or t0, zero,zero (25400000) �ɂ�����B ����͓W�J��Ƀp�b�`�����Ă܂��B 80010230 �� 80090000 �ɔ�Ԃ̂ŝA���̑O�B 8001022c �� lui t0,$8009 �Ǝ��� jalr t0 ���S�o�C�g���炵�� 8001022c �Ƀp�b�`�����Ă܂��B jal �ǂ��� lui t0, $8009 jalr t0 �ɂȂ�܂��B t0 �� 80090000 �̝�ԂŔ�Ԃ̂ŗ��p���܂��B ��ѝ�� li v0, $0010 sh v0, $3ea0(t0) nop li v0, $0001 sh v0, $3f14(t0) nop li v0, $3025 sw v0,$38c4(t0) nop li v0, $4025 jr ra sw v0, $4d50(t0) �����Ȃ񂾂��ǝA�g�������ɂȂ� syscall �̂Ƃ�����g�킹�ĖႨ���B a0_90 �ɂ��܂��B 8001412c�B �Ă��Ƃ� jal $8001412c -> 4b50000c 8001022c: 0980083c 09f80001 00000000 ------->: 4b50000c 0980083c 09f80001 8001412c: a0000a24 08004001 90000924 a0000a24 08004001 91000924 a0000a24 08004001 ------->: 10000224 a03e02a5 00000000 01000224 143f02a5 00000000 25300224 c43802ad : 92000924 a0000a24 08004001 93000924 ------->: 00000000 25400224 0800e003 504d02ad �Ƃ�����ŝA 00001a2c: 09 -> 4b 00001a2d: 80 -> 50 00001a2e: 08 -> 00 00001a2f: 3c -> 0c 00001a31: f8 -> 80 00001a32: 00 -> 08 00001a33: 01 -> 3c 00001a34: 00 -> 09 00001a35: 00 -> f8 00001a37: 00 -> 01 000021b0: 21 -> 25 000021b2: 80 -> 00 0000278c: 30 -> 10 0000278d: 80 -> 00 00002800: 09 -> 01 0000592c: a0 -> 10 0000592e: 0a -> 02 00005930: 08 -> a0 00005931: 00 -> 3e 00005932: 40 -> 02 00005933: 01 -> a5 00005934: 90 -> 00 00005936: 09 -> 00 00005937: 24 -> 00 00005938: a0 -> 01 0000593a: 0a -> 02 0000593c: 08 -> 14 0000593d: 00 -> 3f 0000593e: 40 -> 02 0000593f: 01 -> a5 00005940: 91 -> 00 00005942: 09 -> 00 00005943: 24 -> 00 00005944: a0 -> 25 00005945: 00 -> 30 00005946: 0a -> 02 00005948: 08 -> c4 00005949: 00 -> 38 0000594a: 40 -> 02 0000594b: 01 -> ad 0000594c: 92 -> 00 0000594e: 09 -> 00 0000594f: 24 -> 00 00005950: a0 -> 25 00005951: 00 -> 40 00005952: 0a -> 02 00005956: 40 -> e0 00005957: 01 -> 03 00005958: 93 -> 50 00005959: 00 -> 4d 0000595a: 09 -> 02 0000595b: 24 -> ad �ł����A���Ђ�B hanimar
�yPSX Game Buster Version 2.3 (gbust23) NTSC patch�z �Ȃ񂾂� PAR26 �u�ӂ�񂷝v�Ɠ����l���B 1f0041ec: 10 fc 24 ac sw a0,$8005fc10 --------> 10 fc 20 ac sw zero,$8005fc10 800a5afc e09524ac -> e09520ac ���̕ӂ̕ϝX�� kaja ����� PALPAR �ŒT���܂��B SCE �̃��C�u�������g�����v���O�������ƒT����悤�ł��B ���k���ꂽ�����̃R�[�h�𓮓I�ɕϝX�B lui v0, $800a li v1, $20ac jr ra sh v1, $5afe(v0) �Ȃ�� 0a80023c ac200324 0800e003 fe5a43a4 �t�����X�łƝ��������A�h���X���Ⴄ�B ...�Ƃ����킯�ŝA����͝����‚��B ROM �̃A�h���X�F �� -> �ϝX��A�ł��B 00001146: 01 -> a5 00001147: 0c -> 34 00001148: 21 -> 40 00001149: 20 -> 0e a534400e��}�������B���Ƃ͂��炵�Ă邾���B 0000114a: 00 -> 01 0000114b: 00 -> 0c 0000114c: 34 -> 21 0000114d: 00 -> 20 0000114e: bf -> 00 0000114f: 8f -> 00 00001150: 38 -> 34 1151 �͕ϝX�Ȃ��B�C��t���ĝB 00001152: bd -> bf 00001153: 23 -> 8f 00001154: 09 -> 38 00001155: 80 -> 00 00001156: 08 -> bd 00001157: 3c -> 23 00001158: 08 -> 09 00001159: 00 -> 80 0000115a: 00 -> 08 0000115b: 01 -> 3c 0000115c: 00 -> 08 0000115f: 00 -> 01 �����܂ŝu���炵�v�B 000041ee: 24 -> 20 �^�C�g���� NTSC �ɂ���B 000078b0: 24 -> 0a ��L�̃A�Z���u�������B 000078b1: 49 -> 80 000078b2: 64 -> 02 000078b3: 3a -> 3c 000078b4: 20 -> ac 000078b5: 69 -> 20 000078b6: 6e -> 03 000078b7: 74 -> 24 000078b8: 72 -> 08 000078b9: 2e -> 00 000078ba: 63 -> e0 000078bb: 2c -> 03 000078bc: 76 -> fe 000078bd: 20 -> 5a 000078be: 31 -> 43 000078bf: 2e -> a4 �����܂��B hanimar

caetla �� CDROM ���j���[�̂���

���[�ƝA���͂ƌ����� tayan ����� CDAR �Ȃ�ł����A �b�c�̃f�B���N�g���c���[��ǂނ��Ă������b�B

�Ȃ�ł� BIOS ������ firstfile() �Ƃ��͂P�Z�N�^�̎��܂�f�[�^�ʂ̃f�B���N�g����񂵂����o���Ȃ��炵���ł��B ���߂��ɂ���Ă݂���m���Ɏ��Ȃ��ł��BCDAR8 �ł͓���̝H �f�B���N�g���̉��̃t�@�C���������Ȃ��Ƃ��m�F�ł��܂����B �v���X�e���Ă��Ȃ茩�؂蔭�Ԃŝo���Ă��܂����悤�ł��˝A�b�c�܂�肪�ň��ł��B
�ŝA����̓t�@�C���}�l�[�W���n�̃v���O�����𝑂��ƂȂ����Ƃ��ɝA �L�c�����������ƂȂ��Ă��܂��܂��B���Ⴀ�A�o���Ȃ��̂��ƌ����ΝA caetla �ł���Ă��ł���˝B����ς肷���[�Ȃ��A�Ɗ��S���Ă��܂��܂����B �ŝA�ǂ�����Ă�̂��ȝH���Ĕ`���Ă݂���ł����A ���蝞�݂܂�肪�悭������Ȃ����ł͂����ς藝���ł��܂���ł����B �ꉞ CDMANAGER �������Ƃ肾���v���O�������̂����Ƃ��܂��B ���ꂩ���ݝӂ��ċ����Ă��������B ��������b�c��L�����p�ł���v���O������肽��...
#include "syscall.h"

int doit(char *romAddr, long *dest);

int main(int argc, char **argv)
{
	unsigned long sz;
	char *p = (char *)0x80100000;
	int fd;
	char fname[128];

	if (argc == 1) strcpy(fname, "pcdrv:a.out");
	else {
		strcpy(fname, "pcdrv:");
		strcat(fname, argv[1]);
	}

/*	sz = doit((char *)0x1f01736c, (long *)0x80100000);  FLASHER */
/*	sz = doit((char *)0x1f001c20, (long *)0x80100000);  EXECUTE */
/*	sz = doit((char *)0x1f00a5a4, (long *)0x80100000);  CHEAT CODE */
/*	sz = doit((char *)0x1f00cb9c, (long *)0x80100000);  MEMORY CARD */
/*	sz = doit((char *)0x1f00ee70, (long *)0x80100000);  FRAME BUFFER */
	sz = doit((char *)0x1f0109a0, (long *)0x80100000);	/* CDROM */
/*	sz = doit((char *)0x1f016668, (long *)0x80100000);  CONFIG */


	printf("decoded from $80100000 to 0x%08x (%d bytes).\n",
		(unsigned long)0x80100000 + sz - 1, sz);

	printf("writing to %s\n", fname);
	fd = open(fname, O_CREAT);
	if (fd < 0) {
		printf("Cannot open file %s\n", fname);
	} else {
		close(fd);
		fd = open(fname, O_WRONLY);

		write(fd, p, sz);
		close(fd);
	}
	return 0;
}


#	int doit(char *romAddr, long *dest);
#
#	romAddr: �Ý����H���ꂽ�C���[�W�ւ̃|�C���^
#	dest:	�W�J��A�h���X
#
#	�߂�l�F�W�J�����T�C�Y
#
.set reorder
.globl	doit
.ent	doit
doit:
	addiu	sp, sp, -36
	sw	s0, $0010(sp)
	sw	s1, $0014(sp)
	sw	ra, $0018(sp)
	sw	a0, $001c(sp)
	sw	a1, $0020(sp)

	li	s0, $1f006a20	# API 0B �����ǒ��ڌĂ�ł��܂����B0.34 ��p
	jalr	s0		# call API 0B
	li	t2, $00a0
	li	t1, $0044	# FlushCache() �������Ȃ����炢��Ȃ��񂾂��ǝB
	jalr	t2

	or	v0, zero, a1
	lw	v1, $0020(sp)
	subu	v0, v0, v1

	lw	ra, $0018(sp)
	lw	s1, $0014(sp)
	lw	s0, $0010(sp)
	addiu	sp, sp, 36
	jr	ra
.end	doit


���[�Ǝ��ۂɂ� 80010000 �ɓW�J����܂��Bcaetla 0.34 ��p�ł��B ���ƓK���Ȃ�ŝo�̓t�@�C���͝����Ă�����s���Ă��������B���� caetla API �� $0B ���Ă�ł邾���ł��B EXE �� 80100000 �ɂ��Ԃ�Ȃ��悤�ɝ��Ȃ��ƃ_���ł��B char *p �Ƃ��A���r���[�Ȏg�����ł͂������������B�ŋ� noreorder �̝l�ɂȂ����̂Ń\�[�X���C���������ł��B������A�Ǝv���ĝ������\�[�X�Ȃ�ł��̂悤�ɝX������Ȃ킯�ł��B���ق��Ă��������B�����܂��B

caetla �̃p�`����

�ŋߓ��{�ł͌������Ȃ��Ȃ����b�c���~�܂�p�`�����ł����A ����͑̂ɂ�낵���Ȃ��ł��B �b�c���j���[���畜�A�����Ƃ��ɔ{����Ԃ����C�Ɏ~�܂�̂ŝA �����łb�c���t��]���Ă܂��B �J�ł͂b�c�̃R�}���h�@�����玟�̃R�}���h�܂� VSync �R�񕪑҂��Ȃ��ƃ_���������ŝA���Ⴀ�҂����Ă݂悤���Ǝv������ł����A ���蝞�݂Ƃ��J�E���^�Ƃ��킩���̂ŝi���ǂ����jPAD �҂��̎��ӂ��������Ă݂܂����B���A �E�F�C�g����ꂽ���������Ă����̂͂��傤�ǃv���O�����̝؂�ڂŝA �o�`�c�����ĂȂ��݂����ł����A�����B�������Ȃ��̂Ń��[�v�œK���� wait ����ꂽ�猒�N�I�Ɏ~�܂�悤�ɂȂ�܂����B �ǂ����ɂ��Ă����̋@�\�͈ꝶ�g��Ȃ��Ǝv���܂��B

���������APAR �� EEPROM ���ĝ��������� 100000 �񂮂炢�Ŏ����炵���ł����疳�ʂȝ��������A ����[���Ȃ��R�[�h���͂͝T���܂��傤�B �P���P�񝑂�������Ƃ����� 274 �N�Ŏg���Ȃ��Ȃ��Ă��܂��܂��B �P���R�񂾂� 100 �N�����܂���B

�p��̒���

���܂�ăR�i�~�̎����i���[�O�X�X�𒲂ׂ��Ƃ���A �C�O�̂o�r�œ���������p��Œ��ւ��o��悤�ɂȂ��Ă��܂����B
800c0044-0041
800c0046-2403
�ł݂�܂��B �����I�ɂ݂��悤�ɂ���킯�ł͂���܂���̂ŝA ���ւɈ����������b�܂ꂽ�‹��ɂȂ��Ƃ݂�܂���B
�@�d�b����Ƃǂ��Ȃ��ł��傤�˝B�ǂ��Ɍq�����ł��傤�B �C�^�d�U���Ŕԝ��Ȃ��Ȃ��Ă��肵�ĝB
�ŝAXPS ����Ă�����Č���ꂽ��ł����A�o���܂���B �Ă���������ĝĂ��Ă݂��瓮���Ȃ�������ŝ�ӑr���B �܂��܂��C�s������Ȃ��ł��B

(�NjL�F�Ȃ񂾝A���k���Ă��񂶂�Ȃ��̂��B�Ă��A�f���ɔėp�Q...�j

[email protected]