MACROGROK / README.md
SNAPKITTYWEST's picture
push from SNAPKITTYWEST/MACROGROK
b86c469 verified
|
Raw
History Blame Contribute Delete
5.12 kB
# 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