mirror of
https://github.com/TomHarte/CLK.git
synced 2024-12-25 03:32:01 +00:00
Adds support for the alternate video buffer.
This commit is contained in:
parent
cefc3af08b
commit
4f5a38b5c5
@ -189,6 +189,10 @@ class ConcreteMachine:
|
|||||||
ROM_is_overlay_ = rom_is_overlay;
|
ROM_is_overlay_ = rom_is_overlay;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_use_alternate_screen_buffer(bool use_alternate_screen_buffer) {
|
||||||
|
video_.set_use_alternate_screen_buffer(use_alternate_screen_buffer);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class VIAPortHandler: public MOS::MOS6522::PortHandler {
|
class VIAPortHandler: public MOS::MOS6522::PortHandler {
|
||||||
public:
|
public:
|
||||||
@ -213,8 +217,9 @@ class ConcreteMachine:
|
|||||||
b3: 0 = use alternate sound buffer, 1 = use ordinary sound buffer
|
b3: 0 = use alternate sound buffer, 1 = use ordinary sound buffer
|
||||||
b2–b0: audio output volume
|
b2–b0: audio output volume
|
||||||
*/
|
*/
|
||||||
printf(" w A: %02x", value);
|
printf("6522 A: %02x\n", value);
|
||||||
machine_.set_rom_is_overlay(!!(value & 0x10));
|
machine_.set_rom_is_overlay(!!(value & 0x10));
|
||||||
|
machine_.set_use_alternate_screen_buffer(!(value & 0x40));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Port::B:
|
case Port::B:
|
||||||
@ -229,7 +234,7 @@ class ConcreteMachine:
|
|||||||
b1: clock's data-clock line
|
b1: clock's data-clock line
|
||||||
b0: clock's serial data line
|
b0: clock's serial data line
|
||||||
*/
|
*/
|
||||||
printf(" w B: %02x", value);
|
printf("6522 B: %02x\n", value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -237,18 +242,17 @@ class ConcreteMachine:
|
|||||||
uint8_t get_port_input(Port port) {
|
uint8_t get_port_input(Port port) {
|
||||||
switch(port) {
|
switch(port) {
|
||||||
case Port::A:
|
case Port::A:
|
||||||
printf(" r A");
|
printf("6522 r A\n");
|
||||||
break;
|
return 0xff;
|
||||||
|
|
||||||
case Port::B:
|
case Port::B:
|
||||||
printf(" r B");
|
printf("6522 r B\n");
|
||||||
break;
|
return 0x00;
|
||||||
}
|
}
|
||||||
return 0xff;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_control_line_output(Port port, Line line, bool value) {
|
void set_control_line_output(Port port, Line line, bool value) {
|
||||||
printf(" l %c%d: %c", port ? 'B' : 'A', int(line), value ? 't' : 'f');
|
printf("6522 line %c%d: %c\n", port ? 'B' : 'A', int(line), value ? 't' : 'f');
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -137,11 +137,14 @@ void Video::run_for(HalfCycles duration) {
|
|||||||
frame_position_ = frame_position_ + cycles_left_in_line;
|
frame_position_ = frame_position_ + cycles_left_in_line;
|
||||||
if(frame_position_ == frame_length) {
|
if(frame_position_ == frame_length) {
|
||||||
frame_position_ = HalfCycles(0);
|
frame_position_ = HalfCycles(0);
|
||||||
video_address_ = 0x1a700 >> 1;
|
/*
|
||||||
|
Video: $1A700 and the alternate buffer starts at $12700; for a 512K Macintosh, add $60000 to these numbers.
|
||||||
|
*/
|
||||||
|
video_address_ = use_alternate_screen_buffer_ ? (0x12700 >> 1) : (0x1a700 >> 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
void Video::set_use_alternate_screen_buffer(bool use_alternate_screen_buffer) {
|
||||||
Video: $1A700 and the alternate buffer starts at $12700; for a 512K Macintosh, add $60000 to these numbers.
|
use_alternate_screen_buffer_ = use_alternate_screen_buffer;
|
||||||
*/
|
}
|
||||||
|
@ -20,6 +20,7 @@ class Video {
|
|||||||
Video(uint16_t *ram);
|
Video(uint16_t *ram);
|
||||||
void set_scan_target(Outputs::Display::ScanTarget *scan_target);
|
void set_scan_target(Outputs::Display::ScanTarget *scan_target);
|
||||||
void run_for(HalfCycles duration);
|
void run_for(HalfCycles duration);
|
||||||
|
void set_use_alternate_screen_buffer(bool use_alternate_screen_buffer);
|
||||||
|
|
||||||
// TODO: feedback on blanks and syncs.
|
// TODO: feedback on blanks and syncs.
|
||||||
|
|
||||||
@ -30,6 +31,7 @@ class Video {
|
|||||||
size_t video_address_;
|
size_t video_address_;
|
||||||
uint16_t *ram_;
|
uint16_t *ram_;
|
||||||
uint8_t *pixel_buffer_;
|
uint8_t *pixel_buffer_;
|
||||||
|
bool use_alternate_screen_buffer_ = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user