Twenex Muddle.
[pdp10-muddle.git] / <mdl.int> / pxcore.mid.9
diff --git a/<mdl.int>/pxcore.mid.9 b/<mdl.int>/pxcore.mid.9
new file mode 100644 (file)
index 0000000..8e3ecee
--- /dev/null
@@ -0,0 +1,77 @@
+
+TITLE .CORE
+
+RELOCATABLE
+
+.INSRT MUDDLE >
+
+.GLOBAL P.CORE,P.TOP,PHIBOT,PURBOT,FRETOP,SQKIL,GCFLG,KILBUF
+
+; .CORE AND .SUSET [.RMEMT,,---] FOR PAGED ENVIRONMENT
+
+P.CORE:        PUSH    P,0
+       PUSH    P,A
+       PUSH    P,B
+       PUSH    P,C
+       PUSH    P,D
+       PUSH    P,E
+       SKIPN   GCFLG
+       PUSHJ   P,SQKIL
+       MOVE    A,-4(P)
+       ASH     A,10.           ; CHECK IT
+       CAMLE   A,PURBOT        ; A CAML HERE IS OBSERVED TO LOSE
+       FATAL   BAD ARG TO GET CORE
+       MOVE    A,-4(P)         ; RESTORE A
+       HRRZ    B,P.TOP         ; GET FIRST ADDRESS ABOVE TOP
+       ASH     B,-10.          ; TO BLOCKS
+       CAIG    A,(B)           ; SKIP IF GROWING
+       JRST    P.COR1
+       SUBM    B,A             ; A/ -NUMBER OF BLOCKS TO GET
+       HRLI    B,(A)           ; AOBJN TO BLOCKS
+
+       .CALL   P.CORU          ; TRY
+       JRST    POPBJ           ; LOSE
+       MOVE    A,B
+P.COR2:        ASH     B,10.           ; TO WORDS
+       MOVEM   B,P.TOP         ; NEW TOP
+POPBJ1:        AOS     -6(P)           ; SKIP RETURN ON SUCCESS
+POPBJ: POP     P,E
+       POP     P,D
+       POP     P,C
+       POP     P,B
+       POP     P,A
+       POP     P,0
+       POPJ    P,
+
+; HERE TO CORE DOWN
+
+P.COR1:        SUBM    A,B
+       JUMPE   B,POPBJ1        ; SUCCESS, YOU ALREADY HAVE WHAT YOU WANT
+       HRLI    A,(B)
+       MOVEI   B,(A)
+       .CALL   P.CORD
+       JRST    POPBJ
+       JRST    P.COR2
+
+P.CORU:        SETZ
+       SIXBIT /CORBLK/
+       1000,,100000
+       1000,,-1
+       B
+       401000,,400001
+
+P.CORD:        SETZ
+       SIXBIT /CORBLK/
+       1000,,0
+       1000,,-1
+       SETZ A
+       
+
+IMPURE
+
+P.TOP==FRETOP
+
+PURE
+       
+END
+\f\ 3\f\ 3
\ No newline at end of file