<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://zeroboardcomputer.com/wiki/index.php?action=history&amp;feed=atom&amp;title=System_Overview</id>
	<title>System Overview - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://zeroboardcomputer.com/wiki/index.php?action=history&amp;feed=atom&amp;title=System_Overview"/>
	<link rel="alternate" type="text/html" href="https://zeroboardcomputer.com/wiki/index.php?title=System_Overview&amp;action=history"/>
	<updated>2026-06-03T23:29:02Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://zeroboardcomputer.com/wiki/index.php?title=System_Overview&amp;diff=4&amp;oldid=prev</id>
		<title>Jbyrd: ZBC wiki page from System_Overview.wiki</title>
		<link rel="alternate" type="text/html" href="https://zeroboardcomputer.com/wiki/index.php?title=System_Overview&amp;diff=4&amp;oldid=prev"/>
		<updated>2025-12-01T12:06:26Z</updated>

		<summary type="html">&lt;p&gt;ZBC wiki page from System_Overview.wiki&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= System Overview =&lt;br /&gt;
&lt;br /&gt;
The Zero Board Computer (ZBC) system architecture defines a minimal yet complete computing environment suitable for any CPU architecture from 8-bit to 128-bit and beyond. This page describes the high-level system organization and how components interact.&lt;br /&gt;
&lt;br /&gt;
== Hardware Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant ZBC system consists of four essential hardware components connected via a standard memory bus.&lt;br /&gt;
&lt;br /&gt;
=== CPU ===&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;CPU&amp;#039;&amp;#039;&amp;#039; can be any processor architecture that supports:&lt;br /&gt;
* Memory read and write operations (load/store instructions)&lt;br /&gt;
* Sequential instruction execution&lt;br /&gt;
* Basic addressing modes&lt;br /&gt;
&lt;br /&gt;
No special CPU features are required. The ZBC specification accommodates:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;8-bit to 128-bit&amp;#039;&amp;#039;&amp;#039; (and beyond) address spaces&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Any endianness&amp;#039;&amp;#039;&amp;#039; (little-endian, big-endian, or PDP-endian)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Any word size&amp;#039;&amp;#039;&amp;#039; (8-bit, 16-bit, 32-bit, 64-bit, or larger)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Harvard or von Neumann&amp;#039;&amp;#039;&amp;#039; architectures&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;With or without MMU&amp;#039;&amp;#039;&amp;#039; (memory management unit)&lt;br /&gt;
&lt;br /&gt;
Examples of compatible CPUs:&lt;br /&gt;
* 8-bit: 6502, Z80, 8080, 6809&lt;br /&gt;
* 16-bit: 8086, 68000, Z8000&lt;br /&gt;
* 32-bit: 68020, ARM7, i386, MIPS, PowerPC&lt;br /&gt;
* 64-bit: x86-64, AArch64, RISC-V&lt;br /&gt;
&lt;br /&gt;
=== RAM ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;System RAM&amp;#039;&amp;#039;&amp;#039; provides writable storage for programs and data. The amount of RAM is sized based on the CPU&amp;#039;s address space:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;16-bit CPUs&amp;#039;&amp;#039;&amp;#039; (~64KB address space): Approximately 63KB of usable RAM&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;32-bit CPUs&amp;#039;&amp;#039;&amp;#039; (~4GB address space): Approximately 4GB of usable RAM&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;64-bit CPUs&amp;#039;&amp;#039;&amp;#039; (16EB address space): Effectively unlimited RAM&lt;br /&gt;
&lt;br /&gt;
The ZBC specification defines a dynamic memory layout algorithm that automatically calculates RAM sizing and peripheral placement based on address width. See [[Memory Layout and Addressing]] for details.&lt;br /&gt;
&lt;br /&gt;
RAM is mapped starting from a low address (typically 0x0200) and extends to just below the semihosting buffer region in high memory.&lt;br /&gt;
&lt;br /&gt;
=== MC6847 Video Display Generator ===&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;MC6847 VDG&amp;#039;&amp;#039;&amp;#039; provides text output capabilities:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Display size&amp;#039;&amp;#039;&amp;#039;: 32 columns × 16 rows (512 characters total)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Character set&amp;#039;&amp;#039;&amp;#039;: Standard ASCII alphanumerics (0x20-0x7F)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Video RAM&amp;#039;&amp;#039;&amp;#039;: 512 bytes, memory-mapped at high address&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Refresh rate&amp;#039;&amp;#039;&amp;#039;: Approximately 62Hz (PAL timing)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Color&amp;#039;&amp;#039;&amp;#039;: Monochrome text (green on black in typical implementations)&lt;br /&gt;
&lt;br /&gt;
The MC6847 is a real integrated circuit originally manufactured by Motorola in the 1980s. It was used in popular home computers including the TRS-80 Color Computer and Dragon 32/64. Its simplicity and well-documented behavior make it ideal for the ZBC specification.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VSync signal&amp;#039;&amp;#039;&amp;#039;: The MC6847 generates a vertical sync (field sync) signal at the start of each video frame. This signal can optionally be routed to CPU interrupt lines for timing purposes. See [[Interrupt System (JP1 Jumper)]] for configuration details.&lt;br /&gt;
&lt;br /&gt;
=== Semihosting Peripheral ===&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;semihosting device&amp;#039;&amp;#039;&amp;#039; is a memory-mapped peripheral that provides host I/O services:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Register space&amp;#039;&amp;#039;&amp;#039;: 32 bytes of memory-mapped registers&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Protocol&amp;#039;&amp;#039;&amp;#039;: RIFF-based communication format&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Capabilities&amp;#039;&amp;#039;&amp;#039;: File I/O, console I/O, timing, system services&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Compatibility&amp;#039;&amp;#039;&amp;#039;: ARM semihosting syscall numbers&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Operation modes&amp;#039;&amp;#039;&amp;#039;: Synchronous (polling) or asynchronous (interrupt-driven)&lt;br /&gt;
&lt;br /&gt;
The semihosting peripheral allows programs to immediately access host services without implementing device drivers or operating system infrastructure. This enables &amp;#039;&amp;#039;&amp;#039;printf() to work immediately&amp;#039;&amp;#039;&amp;#039; on any ZBC system.&lt;br /&gt;
&lt;br /&gt;
See [[Semihosting Overview]] for complete details on the semihosting interface.&lt;br /&gt;
&lt;br /&gt;
== Memory Organization ==&lt;br /&gt;
&lt;br /&gt;
ZBC systems use a &amp;#039;&amp;#039;&amp;#039;dynamic memory layout&amp;#039;&amp;#039;&amp;#039; calculated at boot time based on the CPU&amp;#039;s address space width.&lt;br /&gt;
&lt;br /&gt;
=== Memory Regions ===&lt;br /&gt;
&lt;br /&gt;
Every ZBC system organizes memory into these regions:&lt;br /&gt;
&lt;br /&gt;
==== Low Memory ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Location&amp;#039;&amp;#039;&amp;#039;: 0x0000 to load_address - 1&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Purpose&amp;#039;&amp;#039;&amp;#039;: CPU-specific data (interrupt vectors, reset vectors, stack space, boot code)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Size&amp;#039;&amp;#039;&amp;#039;: Varies by CPU architecture&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Typical size&amp;#039;&amp;#039;&amp;#039;: 512 bytes (load address usually 0x0200)&lt;br /&gt;
&lt;br /&gt;
==== Available RAM ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Location&amp;#039;&amp;#039;&amp;#039;: load_address to semihost_address - 1&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Purpose&amp;#039;&amp;#039;&amp;#039;: Program code and data&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Size&amp;#039;&amp;#039;&amp;#039;: Dynamically calculated, scales with address space&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Access&amp;#039;&amp;#039;&amp;#039;: Read and write&lt;br /&gt;
&lt;br /&gt;
==== Semihosting Buffer ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Location&amp;#039;&amp;#039;&amp;#039;: semihost_address to semihost_address + 1023&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Purpose&amp;#039;&amp;#039;&amp;#039;: Communication buffer for host I/O operations&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Size&amp;#039;&amp;#039;&amp;#039;: 1024 bytes (fixed)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Access&amp;#039;&amp;#039;&amp;#039;: Read and write (accessed by both CPU and host)&lt;br /&gt;
&lt;br /&gt;
==== Video RAM ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Location&amp;#039;&amp;#039;&amp;#039;: vram_address to vram_address + 511&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Purpose&amp;#039;&amp;#039;&amp;#039;: Character display memory&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Size&amp;#039;&amp;#039;&amp;#039;: 512 bytes (fixed, 32×16 characters)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Access&amp;#039;&amp;#039;&amp;#039;: Write to display characters, read to check contents&lt;br /&gt;
&lt;br /&gt;
==== Reserved Region ====&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Location&amp;#039;&amp;#039;&amp;#039;: reserved_start to address_space_end&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Purpose&amp;#039;&amp;#039;&amp;#039;: Reserved for future expansion or implementation-specific use&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Size&amp;#039;&amp;#039;&amp;#039;: Dynamically calculated, scales with address space&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Access&amp;#039;&amp;#039;&amp;#039;: Implementation-defined&lt;br /&gt;
&lt;br /&gt;
=== Layout Calculation ===&lt;br /&gt;
&lt;br /&gt;
The memory layout is calculated using these formulas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
reserved_start = 2^address_bits - 2^(address_bits/2)&lt;br /&gt;
vram_address   = reserved_start - 512&lt;br /&gt;
semihost_addr  = reserved_start - 1536&lt;br /&gt;
available_ram  = semihost_addr - load_address&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This algorithm ensures that peripheral locations scale proportionally with address space while maintaining consistent behavior across all CPU architectures.&lt;br /&gt;
&lt;br /&gt;
=== 16-bit Example (Z80, 6502) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Address Range      Size          Purpose&lt;br /&gt;
0x0000-0x01FF     512 bytes     Low memory&lt;br /&gt;
0x0200-0xFBFF     63,488 bytes  Available RAM&lt;br /&gt;
0xFC00-0xFDFF     1,024 bytes   Semihosting buffer&lt;br /&gt;
0xFE00-0xFEFF     512 bytes     Video RAM&lt;br /&gt;
0xFF00-0xFFFF     256 bytes     Reserved&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 32-bit Example (68000, ARM, i386) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Address Range           Size        Purpose&lt;br /&gt;
0x00000000-0x000001FF  512 bytes    Low memory&lt;br /&gt;
0x00000200-0xFFFFF9FF  ~4 GB        Available RAM&lt;br /&gt;
0xFFFFFA00-0xFFFFFDFF  1,024 bytes  Semihosting buffer&lt;br /&gt;
0xFFFFFE00-0xFFFFFFFF  512 bytes    Video RAM&lt;br /&gt;
0xFFFF0000-0xFFFFFFFF  64 KB        Reserved&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[Memory Layout and Addressing]] for complete details and additional examples.&lt;br /&gt;
&lt;br /&gt;
== Bus Architecture ==&lt;br /&gt;
&lt;br /&gt;
ZBC uses standard &amp;#039;&amp;#039;&amp;#039;memory-mapped I/O&amp;#039;&amp;#039;&amp;#039; architecture where all devices appear as memory addresses.&lt;br /&gt;
&lt;br /&gt;
=== Address Bus ===&lt;br /&gt;
* Width matches CPU address space (16-bit, 32-bit, 64-bit, etc.)&lt;br /&gt;
* All devices decode their assigned address ranges&lt;br /&gt;
* Standard memory access protocol (no special I/O instructions required)&lt;br /&gt;
&lt;br /&gt;
=== Data Bus ===&lt;br /&gt;
* Width typically 8-bit, 16-bit, or 32-bit depending on CPU&lt;br /&gt;
* Video RAM and semihosting registers support byte-wide access&lt;br /&gt;
* Multi-byte accesses supported where CPU and devices allow&lt;br /&gt;
&lt;br /&gt;
=== Bus Timing ===&lt;br /&gt;
* Synchronous operation (devices respond within clock cycles)&lt;br /&gt;
* Standard read/write protocols&lt;br /&gt;
* No wait states required for specified devices&lt;br /&gt;
&lt;br /&gt;
=== Device Access ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RAM&amp;#039;&amp;#039;&amp;#039;: Standard read/write, full-speed access&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Video RAM&amp;#039;&amp;#039;&amp;#039;: Write to display characters, read for verification&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Semihosting registers&amp;#039;&amp;#039;&amp;#039;: Read/write to 32-byte register space&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Semihosting buffer&amp;#039;&amp;#039;&amp;#039;: Guest writes requests, device writes responses&lt;br /&gt;
&lt;br /&gt;
== Interrupt System ==&lt;br /&gt;
&lt;br /&gt;
ZBC systems support optional interrupt generation for timing and I/O completion.&lt;br /&gt;
&lt;br /&gt;
=== VSync Interrupt (JP1 Jumper) ===&lt;br /&gt;
&lt;br /&gt;
The MC6847 video controller generates a vertical sync signal at the start of each frame (~62Hz). A configuration jumper (JP1) controls how this signal routes to the CPU:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Position 1-2: Disabled&amp;#039;&amp;#039;&amp;#039; - No interrupts generated (default, simplest mode)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Position 2-3: IRQ&amp;#039;&amp;#039;&amp;#039; - Maskable interrupt request, CPU can disable&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Position 3-4: NMI&amp;#039;&amp;#039;&amp;#039; - Non-maskable interrupt, always fires&lt;br /&gt;
&lt;br /&gt;
{{Warning|Programs using IRQ or NMI modes must provide proper interrupt handlers. Without handlers, the system will crash as the stack fills with return addresses.}}&lt;br /&gt;
&lt;br /&gt;
See [[Interrupt System (JP1 Jumper)]] for programming details.&lt;br /&gt;
&lt;br /&gt;
=== Semihosting Interrupt ===&lt;br /&gt;
&lt;br /&gt;
The semihosting device can optionally generate interrupts when I/O operations complete:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;IRQ_STATUS register&amp;#039;&amp;#039;&amp;#039; (0x11): Indicates interrupt conditions&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;IRQ_ENABLE register&amp;#039;&amp;#039;&amp;#039; (0x12): Controls which conditions trigger interrupts&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;IRQ_ACK register&amp;#039;&amp;#039;&amp;#039; (0x13): Acknowledge and clear interrupts&lt;br /&gt;
&lt;br /&gt;
Interrupt-driven semihosting allows programs to perform other work while waiting for I/O, enabling true asynchronous operation.&lt;br /&gt;
&lt;br /&gt;
== Boot Sequence ==&lt;br /&gt;
&lt;br /&gt;
When a ZBC system starts, the following sequence occurs:&lt;br /&gt;
&lt;br /&gt;
=== 1. Hardware Initialization ===&lt;br /&gt;
* CPU reset signal deasserted&lt;br /&gt;
* Memory cleared or in undefined state&lt;br /&gt;
* Peripherals initialize to default state&lt;br /&gt;
* JP1 jumper position read&lt;br /&gt;
&lt;br /&gt;
=== 2. CPU-Specific Initialization ===&lt;br /&gt;
Some CPUs require specific setup code:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;6502&amp;#039;&amp;#039;&amp;#039;: Reset vector set at 0xFFFC-0xFFFD pointing to load address&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Z80&amp;#039;&amp;#039;&amp;#039;: Boot code at 0x0000 jumps to load address, NMI handler at 0x0066&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;68000&amp;#039;&amp;#039;&amp;#039;: Vector table at 0x0000 with initial stack pointer and program counter&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Others&amp;#039;&amp;#039;&amp;#039;: May boot directly or require program-provided initialization&lt;br /&gt;
&lt;br /&gt;
See [[CPU Support and Initialization]] for architecture-specific details.&lt;br /&gt;
&lt;br /&gt;
=== 3. Boot Screen Display ===&lt;br /&gt;
* MC6847 video RAM set to read-only mode&lt;br /&gt;
* Boot screen text written showing system information&lt;br /&gt;
* Display shows: CPU name, load address, RAM size, peripheral addresses&lt;br /&gt;
&lt;br /&gt;
=== 4. Program Loading (if present) ===&lt;br /&gt;
If a program binary is provided via quickload:&lt;br /&gt;
* Binary read from host filesystem&lt;br /&gt;
* Written to guest RAM starting at load address&lt;br /&gt;
* Video RAM switched to read-write mode&lt;br /&gt;
* Boot screen remains visible until program writes to video RAM&lt;br /&gt;
&lt;br /&gt;
=== 5. Execution Begins ===&lt;br /&gt;
* CPU starts executing from load address (or continues idle loop)&lt;br /&gt;
* Program has full access to RAM, display, and semihosting&lt;br /&gt;
* System runs until halted or exit syscall&lt;br /&gt;
&lt;br /&gt;
== Design Variations ==&lt;br /&gt;
&lt;br /&gt;
The ZBC specification defines the &amp;#039;&amp;#039;&amp;#039;core components&amp;#039;&amp;#039;&amp;#039; required for compliance. Implementations may extend the system while maintaining compatibility.&lt;br /&gt;
&lt;br /&gt;
=== Minimum Compliance ===&lt;br /&gt;
&lt;br /&gt;
A compliant ZBC system must provide:&lt;br /&gt;
* CPU with memory access capabilities&lt;br /&gt;
* RAM with dynamic layout per specification&lt;br /&gt;
* MC6847-compatible text display (32×16 characters)&lt;br /&gt;
* Semihosting peripheral with RIFF protocol support&lt;br /&gt;
&lt;br /&gt;
=== Permitted Extensions ===&lt;br /&gt;
&lt;br /&gt;
Implementations may add:&lt;br /&gt;
* Additional peripherals (timers, serial ports, etc.)&lt;br /&gt;
* Extended video capabilities (graphics modes, color)&lt;br /&gt;
* Additional RAM or ROM regions&lt;br /&gt;
* Custom interrupt sources&lt;br /&gt;
* Performance enhancements (caching, DMA)&lt;br /&gt;
&lt;br /&gt;
{{Note|Extensions should not interfere with core functionality. Programs targeting the core specification must work on all compliant implementations.}}&lt;br /&gt;
&lt;br /&gt;
=== Implementation Examples ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;MAME ZBC&amp;#039;&amp;#039;&amp;#039;: Software implementation supporting hundreds of CPUs&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;FPGA ZBC&amp;#039;&amp;#039;&amp;#039;: Hardware implementation on reconfigurable logic&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Custom ASIC ZBC&amp;#039;&amp;#039;&amp;#039;: Integrated circuit implementation&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Hybrid systems&amp;#039;&amp;#039;&amp;#039;: Real CPU with emulated peripherals&lt;br /&gt;
&lt;br /&gt;
== Timing and Performance ==&lt;br /&gt;
&lt;br /&gt;
=== Clock Speeds ===&lt;br /&gt;
&lt;br /&gt;
CPU clock speeds are implementation-defined. Typical values:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Historical accuracy&amp;#039;&amp;#039;&amp;#039;: Match original CPU specifications (e.g., 1MHz for 6502)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Modern performance&amp;#039;&amp;#039;&amp;#039;: Higher speeds for faster testing (e.g., 10MHz+)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Variable speed&amp;#039;&amp;#039;&amp;#039;: Some implementations support runtime speed adjustment&lt;br /&gt;
&lt;br /&gt;
=== Display Refresh ===&lt;br /&gt;
&lt;br /&gt;
The MC6847 operates at PAL timing:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Frame rate&amp;#039;&amp;#039;&amp;#039;: 62.5 Hz (312 scanlines per frame)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Crystal frequency&amp;#039;&amp;#039;&amp;#039;: 4.433619 MHz&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Field sync&amp;#039;&amp;#039;&amp;#039;: Generated at frame start for interrupt timing&lt;br /&gt;
&lt;br /&gt;
=== Semihosting Latency ===&lt;br /&gt;
&lt;br /&gt;
Semihosting operation timing varies:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Fast operations&amp;#039;&amp;#039;&amp;#039;: Character output (microseconds)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Slow operations&amp;#039;&amp;#039;&amp;#039;: File I/O (milliseconds)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Mode dependent&amp;#039;&amp;#039;&amp;#039;: Polling blocks CPU, interrupts allow multitasking&lt;br /&gt;
&lt;br /&gt;
== Next Steps ==&lt;br /&gt;
&lt;br /&gt;
Explore specific aspects of the ZBC architecture:&lt;br /&gt;
&lt;br /&gt;
* [[Memory Layout and Addressing]] - Detailed memory organization and formulas&lt;br /&gt;
* [[Video Display (MC6847)]] - Complete display programming guide&lt;br /&gt;
* [[Interrupt System (JP1 Jumper)]] - Interrupt configuration and programming&lt;br /&gt;
* [[CPU Support and Initialization]] - Architecture-specific boot requirements&lt;br /&gt;
* [[Quickload System]] - Program loading mechanism&lt;br /&gt;
* [[Semihosting Overview]] - Host I/O services&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[What is Zero Board Computer]] - Introduction and overview&lt;br /&gt;
* [[Design Goals and Use Cases]] - Why ZBC exists&lt;br /&gt;
* [[Key Concepts]] - Essential terminology&lt;br /&gt;
* [[ZBC Specification]] - Complete technical specification&lt;br /&gt;
&lt;br /&gt;
{{ZBC Navigation}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Architecture]]&lt;br /&gt;
[[Category:Overview]]&lt;/div&gt;</summary>
		<author><name>Jbyrd</name></author>
	</entry>
</feed>