Example #1
0
void test_memset2() {
    char i;
    char m[100];

    printf("TEST MEMSET2: ");

    // забиваем массив тестовыми данными
    // 1,2,3,4,5...100
    for (i = 0; i < 100; ++i)
        m[i] = i;

    // 1 тест
    // memset не должен тронуть массив если n = 0
    memset2(m, 5, 0);
    for (i = 0; i < 100; ++i)
        assert(m[i] == i);

    // 2 тест
    // memset должен выставить на 5 только первые 25 элементов
    // остальные не должен тронуть
    memset2(m, 5, 25);
    // проверяем первые 25 элементов
    // там должны быть пятёрки
    for (i = 0; i < 25; ++i)
        assert(m[i] == 5);
    // проверяем оставшиеся элементы
    // там должны быть старые данные
    for (i = 25; i < 100; ++i)
        assert(m[i] == i);
    printf("[ OK ]\n");
}
Example #2
0
static int fb_write(int c) {
    uint16 *t = fb;

    if(!t)
        t = vram_s;

    if(c != '\n') {
        bfont_draw(t + cur_y * fb_w + cur_x, fb_w, 1, c);
        cur_x += FONT_CHAR_WIDTH;
    }

    /* If we have a newline or we've gone past the end of the line, advance down
       one line. */
    if(c == '\n' || cur_x + FONT_CHAR_WIDTH > max_x) {
        cur_y += FONT_CHAR_HEIGHT;
        cur_x = min_x;

        /* If going down a line put us over the edge of the screen, move
           everything up a line, fixing the problem. */
        if(cur_y + FONT_CHAR_HEIGHT > max_y) {
            memcpy2(t + min_y * fb_w, t + (min_y + FONT_CHAR_HEIGHT) * fb_w,
                    (cur_y - min_y - FONT_CHAR_HEIGHT) * fb_w * 2);
            cur_y -= FONT_CHAR_HEIGHT;
            memset2(t + cur_y * fb_w, 0, FONT_CHAR_HEIGHT * fb_w * 2);
        }
    }

    return 1;
}
Example #3
0
void memset2d2(void* dst, size_t row_pitch, int16_t value, size_t set_pitch, size_t num_rows)
{
	oCheck((set_pitch & 1) == 0, std::errc::invalid_argument, "set_pitch must be 2-byte aligned");
	int8_t* d = (int8_t*)dst;
	for (const int8_t* end = row_pitch * num_rows + d; d < end; d += row_pitch)
		memset2(d, value, set_pitch);
}
Example #4
0
void readDataCompressedWithFixedHuffmanCodes(BitReadState *in_pBitReadState, 
	SetjmpStreamState *in_out_pWriteStreamState, 
	ByteStreamInterface in_writeInterface)
{
	static bool tableInitialized = false;
	HuffmanNode lengthCode, distanceCode;
	static uint16_t lencnt[MAXIMUM_BITS_IN_A_CODE+1], lensym[FIXED_LITERALLENGTH_HUFFMAN_CODES_COUNT];
    static uint16_t distcnt[MAXIMUM_BITS_IN_A_CODE+1], distsym[MAXIMUM_NUMBER_OF_DISTANCE_CODES];

	if (!tableInitialized)
	{
		uint16_t codeLengths[FIXED_LITERALLENGTH_HUFFMAN_CODES_COUNT];

		{
			const uint16_t literalValueRangeBoundaries[LITERAL_VALUE_RANGE_BOUNDARY_COUNT+1] = 
			{ 0, 144, 256, 280, FIXED_LITERALLENGTH_HUFFMAN_CODES_COUNT };
			const uint8_t literalCodeLengthsInArea[LITERAL_VALUE_RANGE_BOUNDARY_COUNT] = { 8, 9, 7, 8 };
			uint8_t idx;

			for (idx = 0; idx < LITERAL_VALUE_RANGE_BOUNDARY_COUNT; idx++)
			{
				memset2(codeLengths+literalValueRangeBoundaries[idx], literalCodeLengthsInArea[idx], 
					literalValueRangeBoundaries[idx+1]-literalValueRangeBoundaries[idx]);
			}
		}
		lengthCode.count = lencnt;
		lengthCode.symbol = lensym;
		constructHuffmanTree(&lengthCode, codeLengths, FIXED_LITERALLENGTH_HUFFMAN_CODES_COUNT);

		memset2(codeLengths, 5, MAXIMUM_NUMBER_OF_DISTANCE_CODES);
		distanceCode.count = distcnt;
		distanceCode.symbol = distsym;
		constructHuffmanTree(&distanceCode, codeLengths, MAXIMUM_NUMBER_OF_DISTANCE_CODES);
	}


	// ...
}
Example #5
0
int RunElf(char *name)
{
	int fd,size,i;
	u8 *boot_elf = (u8 *) 0;//&_end;
	elf_header_t *eh = &elfh;
	elf_pheader_t *eph;
	char *argv[1];
	void *pdata;
	fd=-1;
	if(name[0]=='m' && name[1]=='c') // if mc, test mc0 and mc1
	{
		if((fd = fioOpen(name,1)) < 0) 
		{
			name[2]='1';
		}
	}
	if(fd < 0)
		if((fd = fioOpen(name,1)) < 0) 
		{
			return -1;
		}
		size = fioLseek(fd, 0, SEEK_END);
		if(!size) {
			fioClose(fd);
			return -2;
		}

		fioLseek(fd, 0, 0);
		fioRead(fd, eh, sizeof(elf_header_t)); // read the elf header

		// crazy code for crazy man :P
		boot_elf=(u8 *)0x1800000-size-256; 
		//if((eh->entry+size)>=boot_elf) boot_elf=(u8 *)eh->entry-size-256;
		boot_elf=(u8 *) (((unsigned)boot_elf) &0xfffffff0);

		// read rest file elf
		fioRead(fd, boot_elf+sizeof(elf_header_t), size-sizeof(elf_header_t));
		fioClose(fd);

		// mrbrown machine gun ;)
		eph = (elf_pheader_t *)(boot_elf + eh->phoff);
		// Scan through the ELF's program headers and copy them into RAM, then
		// zero out any non-loaded regions.
		for (i = 0; i < eh->phnum; i++) {
	   	   if (eph[i].type != ELF_PT_LOAD)
			   continue;
			   
		pdata = (void *)(boot_elf + eph[i].offset);
		memcpy2((unsigned char *)eph[i].vaddr, (unsigned char *)pdata, (int)eph[i].filesz);

		if (eph[i].memsz > eph[i].filesz)
			memset2((unsigned char *)eph[i].vaddr + eph[i].filesz, (unsigned char)0, (int)eph[i].memsz - eph[i].filesz);
	}

	// Let's go.
	argv[0] = name;

	fioExit();
	Reset();
	FlushCache(0);
	FlushCache(2);
	ExecPS2((void *)eh->entry, 0, 1, argv);
	return 0;
}