mirror of
https://github.com/TomHarte/CLK.git
synced 2024-06-26 10:29:31 +00:00
Give sound and video somewhere to read from.
This commit is contained in:
parent
5c645fb3c2
commit
1f49c3b113
|
@ -314,11 +314,11 @@ struct InputOutputController {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
InputOutputController(InterruptObserverT &observer) :
|
InputOutputController(InterruptObserverT &observer, const uint8_t *ram) :
|
||||||
observer_(observer),
|
observer_(observer),
|
||||||
keyboard_(serial_),
|
keyboard_(serial_),
|
||||||
sound_(*this),
|
sound_(*this, ram),
|
||||||
video_(*this, sound_)
|
video_(*this, sound_, ram)
|
||||||
{
|
{
|
||||||
irq_a_.status = IRQA::SetAlways | IRQA::PowerOnReset;
|
irq_a_.status = IRQA::SetAlways | IRQA::PowerOnReset;
|
||||||
irq_b_.status = 0x00;
|
irq_b_.status = 0x00;
|
||||||
|
|
|
@ -32,7 +32,7 @@ static_assert(BitMask<15, 14>::value == 49152);
|
||||||
template <typename InterruptObserverT>
|
template <typename InterruptObserverT>
|
||||||
struct MemoryController {
|
struct MemoryController {
|
||||||
MemoryController(InterruptObserverT &observer) :
|
MemoryController(InterruptObserverT &observer) :
|
||||||
ioc_(observer) {}
|
ioc_(observer, ram_.data()) {}
|
||||||
|
|
||||||
int interrupt_mask() const {
|
int interrupt_mask() const {
|
||||||
return ioc_.interrupt_mask();
|
return ioc_.interrupt_mask();
|
||||||
|
|
|
@ -15,7 +15,7 @@ namespace Archimedes {
|
||||||
/// Models the Archimedes sound output; in a real machine this is a joint efort between the VIDC and the MEMC.
|
/// Models the Archimedes sound output; in a real machine this is a joint efort between the VIDC and the MEMC.
|
||||||
template <typename InterruptObserverT>
|
template <typename InterruptObserverT>
|
||||||
struct Sound {
|
struct Sound {
|
||||||
Sound(InterruptObserverT &observer) : observer_(observer) {}
|
Sound(InterruptObserverT &observer, const uint8_t *ram) : ram_(ram), observer_(observer) {}
|
||||||
|
|
||||||
void set_next_end(uint32_t value) {
|
void set_next_end(uint32_t value) {
|
||||||
next_.end = value;
|
next_.end = value;
|
||||||
|
@ -83,6 +83,8 @@ struct Sound {
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
const uint8_t *ram_ = nullptr;
|
||||||
|
|
||||||
uint8_t divider_ = 0, reload_ = 0;
|
uint8_t divider_ = 0, reload_ = 0;
|
||||||
int byte_ = 0;
|
int byte_ = 0;
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,8 @@ namespace Archimedes {
|
||||||
|
|
||||||
template <typename InterruptObserverT, typename SoundT>
|
template <typename InterruptObserverT, typename SoundT>
|
||||||
struct Video {
|
struct Video {
|
||||||
Video(InterruptObserverT &observer, SoundT &sound) :
|
Video(InterruptObserverT &observer, SoundT &sound, const uint8_t *ram) :
|
||||||
observer_(observer), sound_(sound) {}
|
observer_(observer), sound_(sound), ram_(ram) {}
|
||||||
|
|
||||||
void write(uint32_t value) {
|
void write(uint32_t value) {
|
||||||
const auto target = (value >> 24) & 0xfc;
|
const auto target = (value >> 24) & 0xfc;
|
||||||
|
@ -166,6 +166,10 @@ private:
|
||||||
InterruptObserverT &observer_;
|
InterruptObserverT &observer_;
|
||||||
SoundT &sound_;
|
SoundT &sound_;
|
||||||
|
|
||||||
|
// In the current version of this code, video DMA occurrs costlessly,
|
||||||
|
// being deferred to the component itself.
|
||||||
|
const uint8_t *ram_ = nullptr;
|
||||||
|
|
||||||
// TODO: real video output.
|
// TODO: real video output.
|
||||||
uint32_t position_ = 0;
|
uint32_t position_ = 0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user