snapkitty
agents
python
6502-asm
File size: 4,566 Bytes
dbfda7d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
; ============================================================
; KID-8B/8K — SAT Safety Kernel
; 6502 NMOS-compatible boot verifier
;
; Safety variable mapping:
;   x0 = KERNEL_INTEGRITY     (True  required)
;   x1 = CHILD_PROFILE_VALID  (True  required)
;   x2 = PRIVACY_FILTER_ACTIVE(True  required)
;   x3 = UNRESTRICTED_TOOLS   (False required)
;   x4 = RAW_REMOTE_SESSION   (False required)
;
; BOOT_ASSIGNMENT = %00000111 = $07
; All five clauses must evaluate TRUE under this assignment.
;
; C1: (x0 OR !x1 OR x2)      -- kernel + privacy
; C2: (!x0 OR x1 OR !x3)     -- no unauth override
; C3: (x1 OR x2 OR x3)       -- at least one safety net
; C4: (!x2 OR !x3 OR x4)     -- privacy XOR raw session
; C5: (x0 OR x3 OR !x4)      -- kernel OR no raw session
;
; Result: Carry SET = BOOT_OK, permit CAP_LESSON_REPLY
;         Carry CLEAR = SAFE_MODE, local templates only
; ============================================================

        .org $0800

; Zero-page
ASSIGNMENT      = $00
CLAUSEPTR       = $01
LIT             = $03
VALUE           = $04
INDEX           = $06



BOOT_ASSIGNMENT:
        .byte %00000111         ; $07 — x0,x1,x2=T  x3,x4=F



SAT_SEED:
        ; C1: x0 OR !x1 OR x2
        .byte $00, $81, $02
        ; C2: !x0 OR x1 OR !x3
        .byte $80, $01, $83
        ; C3: x1 OR x2 OR x3
        .byte $01, $02, $03
        ; C4: !x2 OR !x3 OR x4
        .byte $82, $83, $04
        ; C5: x0 OR x3 OR !x4
        .byte $00, $03, $84

; ============================================================
; BOOT_SAT_CHECK
; ============================================================

BOOT_SAT_CHECK:
        LDA BOOT_ASSIGNMENT

        STA ASSIGNMENT
        LDA #<SAT_SEED
        STA CLAUSEPTR
        LDA #>SAT_SEED
        STA CLAUSEPTR+1
        LDX #5



NEXT_CLAUSE:
        JSR EVAL_CLAUSE_3
        BCC UNSAT
        CLC
        LDA CLAUSEPTR
        ADC #3
        STA CLAUSEPTR
        BCC NO_PAGE_CROSS
        INC CLAUSEPTR+1

NO_PAGE_CROSS:
        DEX
        BNE NEXT_CLAUSE
        SEC                     ; All clauses TRUE => BOOT_OK
        RTS

UNSAT:
        CLC
        RTS

; ============================================================
; EVAL_CLAUSE_3
; ============================================================

EVAL_CLAUSE_3:
        LDY #0

CHECK_LITERAL:
        LDA (CLAUSEPTR),Y
        JSR EVAL_LITERAL
        BCS CLAUSE_TRUE
        INY
        CPY #3
        BNE CHECK_LITERAL
        CLC
        RTS

CLAUSE_TRUE:
        SEC
        RTS

; ============================================================
; EVAL_LITERAL
; Input:  A = %0vvv = positive, %1vvv = negated
; Output: C=1 if literal TRUE
; ============================================================

EVAL_LITERAL:
        STA LIT
        AND #$07
        STA INDEX
        LDA ASSIGNMENT
        LDX INDEX

SHIFT_TO_VARIABLE:
        CPX #0
        BEQ VARIABLE_READY
        LSR A
        DEX
        JMP SHIFT_TO_VARIABLE

VARIABLE_READY:
        AND #$01
        STA VALUE
        LDA LIT
        BMI NEGATED_LITERAL
        LDA VALUE
        BEQ LITERAL_FALSE
        SEC
        RTS

NEGATED_LITERAL:
        LDA VALUE
        BNE LITERAL_FALSE
        SEC
        RTS

LITERAL_FALSE:
        CLC
        RTS

; ============================================================
; Policy dispatch after BOOT_SAT_CHECK
; ============================================================

POLICY_DISPATCH:
        JSR BOOT_SAT_CHECK

        BCC SAFE_MODE_ENTRY
        JMP SANDBOX_READY       ; CAP_LESSON_REPLY enabled



SAFE_MODE_ENTRY:
        ; Disable model broker
        ; Serve local educational templates only
        JMP SAFE_MODE

; ============================================================
; 8 KB ROM map (see sovereign-mum paper)
; $0800-$080F  SAT seed + assignment
; $0810-$08FF  Boot verifier (this code)
; $0900-$0BFF  Input normalization / PII removal
; $0C00-$11FF  Policy bytecode VM
; $1200-$15FF  Model broker (CAP_LESSON_REPLY only)
; $1600-$1BFF  Output classifier / redaction
; $1C00-$1EFF  Parent/educator settings
; $1F00-$21FF  Audit chain
; $2200-$25FF  Local educational templates
; $2600-$27FF  Version, manifest digest, key material
; ============================================================



SAFE_MODE:
        ; Display: "Ask a trusted adult to restore learning mode"
        RTS



SANDBOX_READY:
        ; Permit sanitized educational request
        RTS