Пример #1
0
// YX structure is set with y,x,string,length, and start position of text
// Fix from Klaus, dr Tiger
static GOOD_OR_BAD OW_Hprintyx(struct yx * YX, struct parsedname * pn)
{
	BYTE translated_data[2 + 2 * (YX->length-YX->text_start)];
	size_t original_index ;
	size_t translate_index = 0;

	int Valid_YX = ( YX->x <= LCD_LINE_END && YX->y <= LCD_LAST_ROW && YX->x >= LCD_LINE_START && YX->y >= LCD_FIRST_ROW ) ;
	int Continue_YX = ( YX->y == LCD_SAME_LOCATION_VALUE || YX->x == LCD_SAME_LOCATION_VALUE ) ;

	if ( Valid_YX ) {
		BYTE chip_command ;
		switch (YX->y) { // row value
			case 1:
				chip_command = LCD_COMMAND_SET_DDRAM_ADDRESS;
				break;
			case 2:
				chip_command = LCD_COMMAND_SET_DDRAM_ADDRESS + LCD_SECOND_ROW_ADDRESS;
				break;
			case 3:
				chip_command = LCD_COMMAND_SET_DDRAM_ADDRESS + LCD_LINE_END;
				break;
			case 4:
				chip_command = (LCD_COMMAND_SET_DDRAM_ADDRESS + LCD_SECOND_ROW_ADDRESS) + LCD_LINE_END;
				break;
			default:
				LEVEL_DEBUG("Unrecognized row %d",YX->y) ;
				return gbBAD ;
		}
		chip_command += YX->x - 1; // add column (0 index)
		// Initial location (2 half bytes)
		translated_data[translate_index++] = NIBBLE_ONE(chip_command);
		translated_data[translate_index++] = NIBBLE_TWO(chip_command);
	} else if ( !Continue_YX ) {
		LEVEL_DEBUG("Bad screen coordinates y=%d x=%d",YX->y,YX->x);
		return gbBAD;
	}
		
	//printf("Hscreen test<%*s>\n",(int)size,buf) ;
	for ( original_index = YX->text_start ; original_index < YX->length ; ++original_index ) {
		if (YX->string[original_index]) {
			translated_data[translate_index++] = NIBBLE_ONE(YX->string[original_index]) | LCD_DATA_FLAG;
			translated_data[translate_index++] = NIBBLE_TWO(YX->string[original_index]) | LCD_DATA_FLAG;
		} else {				//null byte becomes space
			translated_data[translate_index++] = NIBBLE_ONE(' ') | LCD_DATA_FLAG;
			translated_data[translate_index++] = NIBBLE_TWO(' ') | LCD_DATA_FLAG;
		}
	}
	LEVEL_DEBUG("Print the message");
	return OW_w_pios(translated_data, translate_index, pn) ;
}
Пример #2
0
/* Redefine a character */
static GOOD_OR_BAD OW_redefchar(ASCII * pattern, struct parsedname * pn)
{
	int i ;
	int j = 0;
	int char_num = pn->extension * 8 + 0x40 ;
	int datalength = 2 * (LCD_REDEFCHAR_LENGTH+1) ; // nibbles for data plus index
	BYTE data[ datalength ] ;

	RETURN_BAD_IF_BAD( OW_Hinit(pn) ) ;

	i = j = 0;
	
	// Start with char num
	data[j++] = (char_num & 0xF0);
	data[j++] = (char_num << 4) & 0xF0;

	// Add pattern
	for ( i = 0 ; i < LCD_REDEFCHAR_LENGTH ; ++i ) {
		data[j++] = NIBBLE_ONE(pattern[i]) | LCD_DATA_FLAG;
		data[j++] = NIBBLE_TWO(pattern[i]) | LCD_DATA_FLAG;
	}

	return OW_w_pios(data, datalength, pn) ;
}