1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-07-04 18:29:40 +00:00

Adds composite monochrome output for the Oric. At least temporarily.

This commit is contained in:
Thomas Harte 2019-02-18 16:56:48 -05:00
parent 6b2e1fe62b
commit 6c1d94beaa
3 changed files with 25 additions and 21 deletions

View File

@ -28,18 +28,18 @@ VideoOutput::VideoOutput(uint8_t *memory) :
counter_period_(PAL50Period) { counter_period_(PAL50Period) {
crt_.set_visible_area(crt_.get_rect_for_area(54, 224, 16 * 6, 40 * 6, 4.0f / 3.0f)); crt_.set_visible_area(crt_.get_rect_for_area(54, 224, 16 * 6, 40 * 6, 4.0f / 3.0f));
crt_.set_phase_linked_luminance_offset(-1.0f / 8.0f); crt_.set_phase_linked_luminance_offset(-1.0f / 8.0f);
display_type_ = Outputs::Display::DisplayType::RGB; data_type_ = Outputs::Display::InputDataType::Red1Green1Blue1;
} }
void VideoOutput::set_display_type(Outputs::Display::DisplayType display_type) { void VideoOutput::set_display_type(Outputs::Display::DisplayType display_type) {
if(display_type_ != display_type) { const auto data_type =
display_type_ = display_type; (display_type == Outputs::Display::DisplayType::RGB) ?
Outputs::Display::InputDataType::Red1Green1Blue1 :
Outputs::Display::InputDataType::PhaseLinkedLuminance8;
if(data_type_ != data_type) {
data_type_ = data_type;
crt_.set_display_type(display_type); crt_.set_display_type(display_type);
crt_.set_input_data_type( crt_.set_input_data_type(data_type_);
(display_type == Outputs::Display::DisplayType::RGB) ?
Outputs::Display::InputDataType::Red1Green1Blue1 :
Outputs::Display::InputDataType::PhaseLinkedLuminance8
);
} }
} }
@ -102,8 +102,11 @@ void VideoOutput::run_for(const Cycles cycles) {
use_alternative_character_set_ = use_double_height_characters_ = blink_text_ = false; use_alternative_character_set_ = use_double_height_characters_ = blink_text_ = false;
set_character_set_base_address(); set_character_set_base_address();
if(display_type_ == Outputs::Display::DisplayType::RGB) rgb_pixel_target_ = reinterpret_cast<uint8_t *>(crt_.begin_data(240)); if(data_type_ == Outputs::Display::InputDataType::Red1Green1Blue1) {
else composite_pixel_target_ = reinterpret_cast<uint32_t *>(crt_.begin_data(240)); rgb_pixel_target_ = reinterpret_cast<uint8_t *>(crt_.begin_data(240));
} else {
composite_pixel_target_ = reinterpret_cast<uint32_t *>(crt_.begin_data(240));
}
if(!counter_) { if(!counter_) {
frame_counter_++; frame_counter_++;
@ -136,7 +139,7 @@ void VideoOutput::run_for(const Cycles cycles) {
pixels &= blink_mask; pixels &= blink_mask;
if(control_byte & 0x60) { if(control_byte & 0x60) {
if(display_type_ == Outputs::Display::DisplayType::RGB && rgb_pixel_target_) { if(data_type_ == Outputs::Display::InputDataType::Red1Green1Blue1 && rgb_pixel_target_) {
const uint8_t colours[2] = { const uint8_t colours[2] = {
uint8_t(paper_ ^ inverse_mask), uint8_t(paper_ ^ inverse_mask),
uint8_t(ink_ ^ inverse_mask) uint8_t(ink_ ^ inverse_mask)
@ -147,7 +150,7 @@ void VideoOutput::run_for(const Cycles cycles) {
rgb_pixel_target_[3] = colours[(pixels >> 2)&1]; rgb_pixel_target_[3] = colours[(pixels >> 2)&1];
rgb_pixel_target_[4] = colours[(pixels >> 1)&1]; rgb_pixel_target_[4] = colours[(pixels >> 1)&1];
rgb_pixel_target_[5] = colours[(pixels >> 0)&1]; rgb_pixel_target_[5] = colours[(pixels >> 0)&1];
} else if(display_type_ == Outputs::Display::DisplayType::CompositeColour && composite_pixel_target_) { } else if(composite_pixel_target_) {
const uint32_t colours[2] = { const uint32_t colours[2] = {
colour_forms_[paper_ ^ inverse_mask], colour_forms_[paper_ ^ inverse_mask],
colour_forms_[ink_ ^ inverse_mask] colour_forms_[ink_ ^ inverse_mask]
@ -196,11 +199,11 @@ void VideoOutput::run_for(const Cycles cycles) {
default: break; default: break;
} }
if(display_type_ == Outputs::Display::DisplayType::RGB && rgb_pixel_target_) { if(data_type_ == Outputs::Display::InputDataType::Red1Green1Blue1 && rgb_pixel_target_) {
rgb_pixel_target_[0] = rgb_pixel_target_[1] = rgb_pixel_target_[0] = rgb_pixel_target_[1] =
rgb_pixel_target_[2] = rgb_pixel_target_[3] = rgb_pixel_target_[2] = rgb_pixel_target_[3] =
rgb_pixel_target_[4] = rgb_pixel_target_[5] = paper_ ^ inverse_mask; rgb_pixel_target_[4] = rgb_pixel_target_[5] = paper_ ^ inverse_mask;
} else if(display_type_ == Outputs::Display::DisplayType::CompositeColour && composite_pixel_target_) { } else if(composite_pixel_target_) {
composite_pixel_target_[0] = composite_pixel_target_[1] = composite_pixel_target_[0] = composite_pixel_target_[1] =
composite_pixel_target_[2] = composite_pixel_target_[3] = composite_pixel_target_[2] = composite_pixel_target_[3] =
composite_pixel_target_[4] = composite_pixel_target_[5] = colour_forms_[paper_ ^ inverse_mask]; composite_pixel_target_[4] = composite_pixel_target_[5] = colour_forms_[paper_ ^ inverse_mask];

View File

@ -40,7 +40,7 @@ class VideoOutput {
uint8_t *rgb_pixel_target_; uint8_t *rgb_pixel_target_;
uint32_t *composite_pixel_target_; uint32_t *composite_pixel_target_;
uint32_t colour_forms_[8]; uint32_t colour_forms_[8];
Outputs::Display::DisplayType display_type_; Outputs::Display::InputDataType data_type_;
// Registers // Registers
uint8_t ink_, paper_; uint8_t ink_, paper_;

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14113" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14113"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
@ -13,17 +13,17 @@
</customObject> </customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/> <customObject id="-3" userLabel="Application" customClass="NSObject"/>
<window title="Options" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="ZW7-Bw-4RP" customClass="MachinePanel" customModule="Clock_Signal" customModuleProvider="target"> <window title="Options" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="ZW7-Bw-4RP" customClass="MachinePanel" customModule="Clock_Signal" customModuleProvider="target">
<windowStyleMask key="styleMask" titled="YES" closable="YES" utility="YES" nonactivatingPanel="YES" HUD="YES"/> <windowStyleMask key="styleMask" titled="YES" closable="YES" utility="YES" nonactivatingPanel="YES" HUD="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/> <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="80" y="150" width="200" height="83"/> <rect key="contentRect" x="80" y="150" width="200" height="83"/>
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="900"/> <rect key="screenRect" x="0.0" y="0.0" width="1440" height="900"/>
<view key="contentView" id="tpZ-0B-QQu"> <view key="contentView" id="tpZ-0B-QQu">
<rect key="frame" x="0.0" y="0.0" width="200" height="83"/> <rect key="frame" x="0.0" y="0.0" width="222" height="83"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<subviews> <subviews>
<button translatesAutoresizingMaskIntoConstraints="NO" id="zPG-yW-4Gy"> <button translatesAutoresizingMaskIntoConstraints="NO" id="zPG-yW-4Gy">
<rect key="frame" x="18" y="47" width="164" height="18"/> <rect key="frame" x="18" y="47" width="186" height="18"/>
<buttonCell key="cell" type="check" title="Load Quickly" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="alI-Mw-35c"> <buttonCell key="cell" type="check" title="Load Quickly" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="alI-Mw-35c">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@ -33,7 +33,7 @@
</connections> </connections>
</button> </button>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="rh8-km-57n"> <popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="rh8-km-57n">
<rect key="frame" x="18" y="17" width="165" height="26"/> <rect key="frame" x="18" y="17" width="187" height="25"/>
<popUpButtonCell key="cell" type="push" title="SCART" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="tJM-kX-gaK" id="8SX-c5-ud1"> <popUpButtonCell key="cell" type="push" title="SCART" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="tJM-kX-gaK" id="8SX-c5-ud1">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/> <font key="font" metaFont="menu"/>
@ -41,6 +41,7 @@
<items> <items>
<menuItem title="SCART" state="on" id="tJM-kX-gaK"/> <menuItem title="SCART" state="on" id="tJM-kX-gaK"/>
<menuItem title="Composite" tag="1" id="fFm-fS-rWG"/> <menuItem title="Composite" tag="1" id="fFm-fS-rWG"/>
<menuItem title="Composite Monochrome" tag="3" id="hjs-qh-WKP"/>
</items> </items>
</menu> </menu>
</popUpButtonCell> </popUpButtonCell>