FANCO-16 v7 — ADDITIVE SIREN AND PHYSICAL KEYBOARD ================================================ CPU encoding, graphics, timer and atomic stores match v6. The virtual cycle clock is 60,000,000 Hz (v6: 120,000,000 Hz); the timer period is 60000000/Hz. Applications identify themselves with ASCII FAN1 then byte 07. V6 and unversioned programs are rejected before resetting or changing memory. Memory (hexadecimal) 0000–000F CPU registers 0010–0015 IRQ vector, 16-bit timer Hz, active flag, missed-tick count 0020–0027 Existing buttons and pointer 0040–005F SID-friendly aliases to the SAME first three SIREN operators 0060–006D Blitter 0070–0078 RGBA graphics 0080–00A7 Ten touch slots 00D0–00E7 Two audio capture descriptors 0100–02FF Sixteen 32-byte SIREN operators 0300–0327 Eight five-byte mixer slots 0328–0342 Three nine-byte filters 0343 Coarse master 0344–03F3 Eight 22-byte two-tap delay lines 03F4–03F5 Chip control rate, initially 600 Hz 03F6 Status; write one to acknowledge an error 03F7 Fine master 03F8–03FF Reserved 0400–041F Keyboard DOWN bitmap (read-only) 0420–043F Keyboard PRESSED bitmap (write-one-to-clear) 0440–045F Keyboard RELEASED bitmap (write-one-to-clear) 0460–047F Reserved keyboard control space (read-only zero) 0480–FFFF Program/data/stack RAM Keyboard key IDs follow USB HID Keyboard/Keypad usage IDs, 0–255. byte = key >> 3; mask = 1 << (key & 7). Physical Z is ID 1D: check bit 20 at 0403 for held, or 0423 for a new press. Write 20 to 0423 to acknowledge only that press. Release events appear at 0443. Host repeat does not create a second press. A tap between polls can set both edges. Focus loss releases held keys and sets release edges. Bitmaps retain one occurrence of each edge, not an ordered event queue. /v7/ runs piano.asm, a self-contained guest program: its 100 Hz IRQ polls the keyboard bitmaps and touch slots, allocates eight additive voices with six shared extension banks, advances measured two-stage per-partial decays, handles dampers and the sustain pedal, and draws its own keyboard. The older host-driven page remains at /v7/piano/. Custom-envelope pointers must be zero or 0480–FFF7. Pointer writes snapshot nine envelope bytes at retirement, preserving v6 atomic preflight behavior.