Clock Signal: Difference between revisions
mNo edit summary |
Ilyagredasov (talk | contribs) No edit summary Tags: Mobile edit Mobile web edit Advanced mobile edit |
||
| (15 intermediate revisions by 3 users not shown) | |||
| Line 8: | Line 8: | ||
|platform = [[Emulators on BSD|BSD]]<br/>[[Emulators on Linux|Linux]]<br/>[[Emulators on macOS|macOS]] | |platform = [[Emulators on BSD|BSD]]<br/>[[Emulators on Linux|Linux]]<br/>[[Emulators on macOS|macOS]] | ||
|accuracy = Subcycle | |accuracy = Subcycle | ||
|target = [[BBC Micro emulators|Acorn Electron]], [[Amstrad CPC emulators|Amstrad CPC]], [[Amiga line|Amiga]], [[Apple II emulators|Apple II]], [[Atari 2600 emulators|Atari 2600]], [[Atari ST emulators|Atari ST]], [[ColecoVision emulators|ColecoVision]], Commodore VIC-20, Enterprise 64/128, [[Macintosh line|Macintosh]], [[MSX emulators|MSX 1/2]], Oric 1/Atmos/Pravetz, [[SG-1000 emulators|Sega SG-1000]], [[Master System emulators|Master System]], [[Sinclair ZX81 emulators|Sinclair ZX80/ZX81]], [[ZX Spectrum emulators|ZX Spectrum]] | |target = [[BBC Micro emulators|Acorn Electron]], [[Amstrad CPC emulators|Amstrad CPC]], [[Amiga line|Amiga]], [[Apple II emulators|Apple II]], [[Atari 2600 emulators|Atari 2600]], [[Atari ST emulators|Atari ST]], [[BBC Micro emulators|BBC Micro]], [[ColecoVision emulators|ColecoVision]], Commodore 16/Plus 4, [[VIC-20]], [[Enterprise 64/128 emulators|Enterprise 64/128]], [[Macintosh line|Macintosh]], [[MSX emulators|MSX 1/2]], Oric 1/Atmos/Pravetz, [[SG-1000 emulators|Sega SG-1000]], [[Master System emulators|Master System]], [[Sinclair ZX81 emulators|Sinclair ZX80/ZX81]], [[ZX Spectrum emulators|ZX Spectrum]], Thomson MO5, Thomson MO6, Tandy Colour Computer 1/2 | ||
|prog-lang = {{Proglang|C++}}; Mac bindings in {{Proglang|Objective-C}} and {{Proglang|Swift}} | |prog-lang = {{Proglang|C++}}; Mac bindings in {{Proglang|Objective-C}} and {{Proglang|Swift}} | ||
|download = [https://github.com/TomHarte/CLK/releases Official releases] (macOS); [http://snapcraft.io/clock-signal Snapcraft listing] (Linux) | |download = [https://github.com/TomHarte/CLK/releases Official releases] (macOS); [http://snapcraft.io/clock-signal Snapcraft listing] (Linux) | ||
| Line 14: | Line 14: | ||
|support = [https://www.amazon.com/hz/wishlist/ls/8WPVFLQQDPTA Author's Amazon US wishlist] | |support = [https://www.amazon.com/hz/wishlist/ls/8WPVFLQQDPTA Author's Amazon US wishlist] | ||
|license = {{license|MIT}} | |license = {{license|MIT}} | ||
|issuetracker = [https://github.com/TomHarte/CLK/issues GitHub] | |||
}} | }} | ||
| Line 38: | Line 39: | ||
==Display emulation== | ==Display emulation== | ||
[[File:CLK ZX80.gif| | [[File:CLK ZX80.gif|thumb|The emulated display of a ZX80, showing accurate emulation of synchronization issues.]] | ||
Clock Signal's emulated machines produce a 1d video signal, just as real machines do. Its emulated display, therefore, has to: | Clock Signal's emulated machines produce a 1d video signal, just as real machines do. Its emulated display, therefore, has to: | ||
* maintain a raster positioning; | * maintain a raster positioning; | ||
| Line 44: | Line 45: | ||
* decode composite color if that's what the machine is supplying. | * decode composite color if that's what the machine is supplying. | ||
It uses this information to paint a virtual phosphor display | It uses this information to paint a virtual phosphor display which, in practice, is just an accumulation of recently-painted material with each new painting undergoing exponential decay. Output to the host screen is simply a capture of that surface as and when the host screen requests a new frame. | ||
An unambiguously desirable result is that machines with variable programmatic sync, such as the Atari 2600, ZX80/81 and Amstrad CPC, should produce the proper display results, even down to rolling, bouncing and other sync issues as and when the programmer diverges, even if only transiently, from PAL or NTSC timing specifications. | An unambiguously desirable result is that machines with variable programmatic sync, such as the Atari 2600, ZX80/81 and Amstrad CPC, should produce the proper display results, even down to rolling, bouncing and other sync issues as and when the programmer diverges, even if only transiently, from PAL or NTSC timing specifications. | ||
| Line 57: | Line 58: | ||
Sound emulation is generally performed by internal generation of original megahertz-rate audio, which is resampled to the output frequency of the host computer. Therefore just as the video can scale up to modern low-latency high-refresh-rate displays, the audio can scale up to digital output rates such as 96Khz and 192Khz. | Sound emulation is generally performed by internal generation of original megahertz-rate audio, which is resampled to the output frequency of the host computer. Therefore just as the video can scale up to modern low-latency high-refresh-rate displays, the audio can scale up to digital output rates such as 96Khz and 192Khz. | ||
Filling sound packets is an independent trigger of emulation — the emulated machines will run to make sure they're up to date when the display needs a new frame, and they'll also run to produce the next packet of audio when the previous has been consumed. | Filling sound packets is an independent trigger of emulation — the emulated machines will run to make sure they're up-to-date when the display needs a new frame, and they'll also run to produce the next packet of audio when the previous has been consumed. | ||
That generally allows the emulator to maintain audio latency guarantees completely decoupled from the frame rate. It aims for between 5 and 10ms of audio latency. | That generally allows the emulator to maintain audio latency guarantees completely decoupled from the frame rate. It aims for between 5 and 10ms of audio latency. | ||
| Line 66: | Line 67: | ||
===Qt=== | ===Qt=== | ||
Clock Signal provides a full-UI Qt | Clock Signal provides a full-UI Qt 6 build for X11 users, offering arbitrarily many machines at once and custom machine selection alongside the emulator's preferred automatic machine selection; building for other Qt targets that support OpenGL ES 3 and C++20 is possible but Qt's deficiencies in keyboard handling make platform-specific adaptations a necessity for regular usage, and latency is likely to be higher than with native builds. | ||
===SDL=== | ===SDL=== | ||
| Line 82: | Line 83: | ||
[[Category:Atari ST emulators]] | [[Category:Atari ST emulators]] | ||
[[Category:ColecoVision emulators]] | [[Category:ColecoVision emulators]] | ||
[[Category:Enterprise 64/128 emulators]] | |||
[[Category:Macintosh emulators]] | [[Category:Macintosh emulators]] | ||
[[Category:Master System emulators]] | [[Category:Master System emulators]] | ||