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
|