YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
- MACROGROK β AGC-Inspired Fixed-Point Macro-Model
- 1. Model Purpose & Scope
- 2. Numeric Representation
- 3. Memory Layout
- 4. Core Data Structures
- 5. Macro Routine Categories
- 6. Forward Pass
- 7. Initialization
- 8. Executive Wrapper (Optional)
- 9. Documentation Requirement
- 10. Example Skeleton
- Design Principles
- Fixed-Point Contract (INFER4 Example)
- Memory Map
- Primitive Macros
- INFER4 Routine
- References
- 1. Model Purpose & Scope
MACROGROK β AGC-Inspired Fixed-Point Macro-Model
Patent Pending β BEL ESPRIT D ACCORD TRUST HOLDINGS INC.
Extremely constrained, narrow-task models for 15-bit / Qm.n environments. Code lives in ROM, state in ~2K erasable words. Every bit is budgeted.
1. Model Purpose & Scope
- Single, narrowly defined task: attitude correction, trajectory offset, binary/multi-class decision, low-dimensional control law.
- No general-purpose LM or large feature spaces.
- Input/output dimensions very small (typically β€ 8β16).
2. Numeric Representation
- Word: 15-bit data (modern 16-bit with 1-bit reserved).
- Fixed-point Qm.n (e.g., Q1.14, Q3.12, Q7.8) chosen per variable, scale documented per quantity.
- Double/triple precision only where required.
- Saturation handling: clamp, wrap, or flag β defined per variable.
3. Memory Layout
Erasable (RAM) β ~2K words target: State vector, input buffer, accumulators, flags/mode bits, tiny stack.
Fixed (ROM) β majority: Model constants (weights/biases, lookup tables, scale factors), code/macros, pre-computed coefficients. Bank/segment switching optional.
4. Core Data Structures
STATE : fixed-point vector (persistent)
INPUT : fixed-point vector (current observation)
OUTPUT : fixed-point vector or discrete command
ACC : accumulator(s) β single/double precision
SCALES : constant scale factors
FLAGS : mode, validity, saturation bits
5. Macro Routine Categories
LOAD_INPUT / SCALE_INPUT Β· MATVEC_TINY / DOT_PRODUCT_FIXED (unrolled) Β· LOOKUP_SEGMENT / PIECEWISE_LINEAR Β· ACTIVATE (clip/ReLU/threshold) Β· UPDATE_STATE Β· NORMALIZE/RESCALE Β· SATURATE Β· EMIT_OUTPUT
Macros expand to shifts, adds, MUL16, and table lookups β no floating point.
6. Forward Pass
1. Acquire and scale input β INPUT
2. Optional tiny feature transform
3. Core block(s) (mat-vec + nonlinearity, macro-expanded)
4. State update (if recurrent)
5. Output scaling + saturation
6. Write command / flags
All steps use fixed-point ops and explicit erasable temporaries.
7. Initialization
Weights/biases/tables in fixed storage; init routine copies needed values to erasable once. Constants never modified at runtime.
8. Executive Wrapper (Optional)
Cyclic/priority executive, ability to skip non-critical sections under pressure, watchdog/validity flags.
9. Documentation Requirement
For every variable and macro: Qm.n format, physical units, scale, valid range, overflow behavior, memory location (erasable bank or fixed address).
10. Example Skeleton
; FIXED (ROM)
WEIGHTS_Q3_12 ...
BIAS_Q3_12 ...
SCALE_IN ... SCALE_OUT ...
; ERASABLE (RAM)
STATE DS 4 ; Q3.12
INPUT DS 4
OUTPUT DS 2
ACC DS 2 ; double precision
; MACROS
MACRO DOT4 ; 4-element dot
MACRO SAT_Q3_12
MACRO UPDATE_STATE
INFER
LOAD_INPUT
SCALE_INPUT
DOT4 WEIGHTS_Q3_12, INPUT, ACC
ADD BIAS
SAT_Q3_12
UPDATE_STATE
SCALE_OUTPUT
STORE OUTPUT
RETURN
Design Principles
Every bit budgeted β tables + interpolation over general arithmetic β unrolled tiny loops β minimal contiguous mutable state β specialized routine, not general engine.
Fixed-Point Contract (INFER4 Example)
4-input binary decision, Q format per quantity, saturate to 32-bit ACC.
| Symbol | Format | Role | Overflow |
|---|---|---|---|
INPUT[4] |
Q1.14 | sensors [-1,1) | clamp |
WEIGHTS[4] |
Q1.14 | ROM coefficients | const |
BIAS |
Q3.12 | offset | const |
ACC |
Q7.24 32-bit | dot accumulator | saturate |
STATE |
Q3.12 | smoothed output | clamp |
OUTPUT |
Q1.14 | command | clamp |
FLAGS |
bits | validity/sat/decision | β |
Q1.14 * Q1.14 β Q2.28 β >>4 β Q3.24 (4 products in 32-bit), >>12 β Q3.12 + BIAS.
Memory Map
; FIXED / ROM
WEIGHTS_Q1_14: DC 2458, -1638, 819, 3277
BIAS_Q3_12: DC -256
ALPHA_Q1_14: DC 12288 ; 0.75
ONE_Q1_14: DC 16384
OUT_MIN_Q1_14: DC -16384
OUT_MAX_Q1_14: DC 16383
SCORE_MIN_Q3_12: DC -8192 ; -2.0 Q3.12
SCORE_MAX_Q3_12: DC 8191 ; +2.0
; ERASABLE / RAM
INPUT: DS 4
STATE: DS 1 ; Q3.12
OUTPUT: DS 1
ACC_HI: DS 1 ; 32-bit hi
ACC_LO: DS 1 ; 32-bit lo
TMP0: DS 1
TMP1: DS 1
FLAGS: DS 1
FLAG_VALID=0001 FLAG_SAT=0002 FLAG_POSITIVE=0004
Primitive Macros
See examples/infer4.asm for full CLR_ACC, MAC_Q1_14 (preserves PROD_HI:PROD_LO before ADD32), ACC_TO_Q3_12, SAT_Q3_12, DOT4_Q1_14, THRESHOLD_Q3_12 (+1.0/-1.0), UPDATE_STATE_3_4 ((3*STATE+TARGET)/4).
INFER4 Routine
examples/infer4.asm β INFER4: CLR FLAGS β DOT4 β ACC_TO_Q3_12 β ADD BIAS β SAT β THRESHOLD β UPDATE_STATE_3_4 β OUTPUT=STATE β FLAG_VALID β RET
Simulator: python src/sim.py (Q1.14/Q3.12 fixed-point, matches assembly semantics).
References
[1] Virtual AGC Manual β ibiblio.org/apollo/assembly_language_manual.html [2] AGC β Wikipedia [3] Block II: 2048 erasable + 36864 fixed words, 15 data bits + parity