1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-11-26 08:49:37 +00:00

Made basic attempt at 16-line character mode.

This commit is contained in:
Thomas Harte 2016-06-12 11:23:57 -04:00
parent 19b2f46488
commit ed76e36b18
2 changed files with 5 additions and 5 deletions

View File

@ -83,7 +83,7 @@ void MOS6560::set_register(int address, uint8_t value)
case 0x3: case 0x3:
_number_of_rows = (value >> 1)&0x3f; _number_of_rows = (value >> 1)&0x3f;
_wide_characters = !!(value&0x01); _tall_characters = !!(value&0x01);
break; break;
case 0x5: case 0x5:
@ -151,7 +151,7 @@ uint16_t MOS6560::get_address()
if(_row_counter >= 0) if(_row_counter >= 0)
{ {
_row_counter++; _row_counter++;
if(_row_counter == _number_of_rows*8) _row_counter = -1; if(_row_counter == _number_of_rows*(_tall_characters ? 16 : 8)) _row_counter = -1;
} }
else if(_vertical_counter == _first_row_location * 2) else if(_vertical_counter == _first_row_location * 2)
{ {
@ -166,7 +166,7 @@ uint16_t MOS6560::get_address()
if(_column_counter == _number_of_columns*2) if(_column_counter == _number_of_columns*2)
{ {
_column_counter = -1; _column_counter = -1;
if((_row_counter&7) == 7) if((_row_counter&(_tall_characters ? 15 : 7)) == (_tall_characters ? 15 : 7))
{ {
_video_matrix_line_address_counter = _video_matrix_address_counter; _video_matrix_line_address_counter = _video_matrix_address_counter;
} }
@ -226,7 +226,7 @@ uint16_t MOS6560::get_address()
*/ */
if(_column_counter&1) if(_column_counter&1)
{ {
return _character_cell_start_address + (_character_code*8) + (_row_counter&7); return _character_cell_start_address + (_character_code*(_tall_characters ? 16 : 8)) + (_row_counter&(_tall_characters ? 15 : 7));
} }
else else
{ {

View File

@ -27,7 +27,7 @@ class MOS6560 {
private: private:
std::unique_ptr<Outputs::CRT::CRT> _crt; std::unique_ptr<Outputs::CRT::CRT> _crt;
bool _interlaced, _wide_characters; bool _interlaced, _tall_characters;
uint8_t _first_column_location, _first_row_location; uint8_t _first_column_location, _first_row_location;
uint8_t _number_of_columns, _number_of_rows; uint8_t _number_of_columns, _number_of_rows;
uint16_t _character_cell_start_address, _video_matrix_start_address; uint16_t _character_cell_start_address, _video_matrix_start_address;