mirror of
https://github.com/TomHarte/CLK.git
synced 2025-02-09 17:31:18 +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;
|
||||
}
|
||||
|
||||
InputOutputController(InterruptObserverT &observer) :
|
||||
InputOutputController(InterruptObserverT &observer, const uint8_t *ram) :
|
||||
observer_(observer),
|
||||
keyboard_(serial_),
|
||||
sound_(*this),
|
||||
video_(*this, sound_)
|
||||
sound_(*this, ram),
|
||||
video_(*this, sound_, ram)
|
||||
{
|
||||
irq_a_.status = IRQA::SetAlways | IRQA::PowerOnReset;
|
||||
irq_b_.status = 0x00;
|
||||
|
@ -32,7 +32,7 @@ static_assert(BitMask<15, 14>::value == 49152);
|
||||
template <typename InterruptObserverT>
|
||||
struct MemoryController {
|
||||
MemoryController(InterruptObserverT &observer) :
|
||||
ioc_(observer) {}
|
||||
ioc_(observer, ram_.data()) {}
|
||||
|
||||
int interrupt_mask() const {
|
||||
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.
|
||||
template <typename InterruptObserverT>
|
||||
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) {
|
||||
next_.end = value;
|
||||
@ -83,6 +83,8 @@ struct Sound {
|
||||
}
|
||||
|
||||
private:
|
||||
const uint8_t *ram_ = nullptr;
|
||||
|
||||
uint8_t divider_ = 0, reload_ = 0;
|
||||
int byte_ = 0;
|
||||
|
||||
|
@ -16,8 +16,8 @@ namespace Archimedes {
|
||||
|
||||
template <typename InterruptObserverT, typename SoundT>
|
||||
struct Video {
|
||||
Video(InterruptObserverT &observer, SoundT &sound) :
|
||||
observer_(observer), sound_(sound) {}
|
||||
Video(InterruptObserverT &observer, SoundT &sound, const uint8_t *ram) :
|
||||
observer_(observer), sound_(sound), ram_(ram) {}
|
||||
|
||||
void write(uint32_t value) {
|
||||
const auto target = (value >> 24) & 0xfc;
|
||||
@ -166,6 +166,10 @@ private:
|
||||
InterruptObserverT &observer_;
|
||||
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.
|
||||
uint32_t position_ = 0;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user