Der "Y"-Prozessor ================= Register ======== CSP DSP IR PC TPLBASE LITBASE DATAO ADDRO Registerfile ============ *-------* selA -->| |--> A | | selB -->| |--> B | | | | | | selIn-->| | | | *-------* ^ | In ALU === ALU_OUT = ALU ( A, B ) 1. Kontrolltransfer ================ 1.1. Sprungbefehle ============= JNIL d Wenn <(DSP++)> = NIL then PC := PC + d else PC := PC + 4 JMP d PC := PC + d 1.2. Closure-Calls ============= CALLCLOS d (d = Anzahl der Parameter) CALLCLOSV (Anzahl Parameter liegt auf (DSP)) 1.3 Returns ======= RET 1.4. Halts und Interrupts ==================== HALT EXCEPT d 2. Datentransfers ============== 2.1. Innerhalb des Datenstacks ========================= LOD d -> <--DSP> STO d -> <(++DSP)[d-1]> 2.2. Zwischen Daten- und Kontrollstack ================================= LODCS d -> <--DSP> STOCS d -> PUSHCS d -> <--CSP> 2.3. Vom aktuellen Template ====================== LITIDX d <--DSP> := 3. Änderungen der Stapelzeiger =========================== INCSP d DSP := DSP + d DECSP d DSP := DSP - d INCCSP d CSP := CSP + d Sonderbefehle ============= %print %svref %set-svref %closure-ref %symbol-function %set-symbol-function %symbol-value %set-symbol-value %eq %car %cdr %cons %consp %make-closure %make-vector Später zu implementierende Basisbefehle ======================================= Elementare gets =============== get-byte get-hword get-word Elementare sets =============== set-byte set-hword set-word Unsichere Funktionen ==================== p-constr p-add p-shiftl p-shiftr p-align Tag-Funktionen ============== tag-and tag-andc1 tag-ior tag-xor tag-not tag-eq get-tag tag-set Addr-Funktionen =============== addr-eq addr-eqi addr-and addr-andc1 addr-ior get-addr