PDP11: Add 11LOGO programming language and make it bootable from the NG device.
This commit is contained in:
parent
3bdf41c809
commit
a070a5375c
10 changed files with 10740 additions and 1 deletions
BIN
PDP11/11logo/11logo.lda
Normal file
BIN
PDP11/11logo/11logo.lda
Normal file
Binary file not shown.
2190
PDP11/11logo/eval.337
Normal file
2190
PDP11/11logo/eval.337
Normal file
File diff suppressed because it is too large
Load diff
899
PDP11/11logo/read.62
Normal file
899
PDP11/11logo/read.62
Normal file
|
@ -0,0 +1,899 @@
|
||||||
|
.STITLE READ -
|
||||||
|
VERN==VERN+%FNAM2
|
||||||
|
|
||||||
|
READ: PUSH A
|
||||||
|
SPUSH B
|
||||||
|
SPUSH C
|
||||||
|
SPUSH D
|
||||||
|
SPUSH E
|
||||||
|
SPUSH F
|
||||||
|
CLR RDFLAG
|
||||||
|
MOV @S,GNCN
|
||||||
|
BIC #170000,GNCN
|
||||||
|
CLR F
|
||||||
|
READA: JSR PC,RDWRD
|
||||||
|
BR READB
|
||||||
|
BIS #SEPF,RDFLAG
|
||||||
|
JSR PC,CKDOTF
|
||||||
|
READC: JSR PC,LISTB
|
||||||
|
BIT #SEPF,RDFLAG
|
||||||
|
BEQ READA
|
||||||
|
READB: BIC #SEPF,RDFLAG ;CHECK SPECIAL CHAR IN D
|
||||||
|
JSR PC,CKDOTF ;FIRST CHECK FOR PENDING ":"
|
||||||
|
CMP #15,D
|
||||||
|
BEQ READR ;C-R
|
||||||
|
CMP #'",D
|
||||||
|
BEQ READS ;STRING
|
||||||
|
CMP #'[,D
|
||||||
|
BEQ READL ;LIST
|
||||||
|
CMP #'],D
|
||||||
|
BNE .+4
|
||||||
|
ERROR+COP ;CHAR (]) OUT OF PLACE
|
||||||
|
CMP #':,D
|
||||||
|
BEQ READD ;DOTS
|
||||||
|
BITB #OPERF,DTBL(D) ;IS CHAR AN OPERATOR
|
||||||
|
BEQ READA ;NO
|
||||||
|
MOVB DTBL2(D),A
|
||||||
|
ASL A
|
||||||
|
MOV SOBLSU(A),B
|
||||||
|
;SET TYPE TO SFUN OR INFIX
|
||||||
|
MOV @B,A ;THIS HACK WORKS BECAUSE #SFUN=0
|
||||||
|
BIC #-INFIX-1,A ; AND #INFIX=10000
|
||||||
|
BR READC
|
||||||
|
READR: POPS A
|
||||||
|
MOV A,@S
|
||||||
|
CLR TOPS
|
||||||
|
JMP RETF
|
||||||
|
READS: JSR PC,GNC
|
||||||
|
JSR PC,RDST
|
||||||
|
BR .+2 ;RDST ALWAYS SKIPS
|
||||||
|
BIS #SEPF,RDFLAG
|
||||||
|
BR READC
|
||||||
|
READL: JSR PC,RDLST
|
||||||
|
POPS TOPS
|
||||||
|
BIC #SEPF,RDFLAG
|
||||||
|
BR READC
|
||||||
|
READD: BIS #DOTF,RDFLAG
|
||||||
|
BR READA
|
||||||
|
.STITLE READ - READ WORD
|
||||||
|
;READ CHARS UP THRU NEXT SEPARATOR CHAR. IF JUST A SEP,
|
||||||
|
;RETURN WITH IT IN D. OTHERWISE NUMBERIFY OR INTERN CHAR STRING,
|
||||||
|
;SKIP RETURN WITH TOKEN IN A,,B
|
||||||
|
RDWRD: CLRB RDFLAG
|
||||||
|
JSR PC,BLSTI
|
||||||
|
RDWA: JSR PC,GNC
|
||||||
|
MOVB DTBL(D),A ;GET FLAGS IN A
|
||||||
|
BIT #SEPF,A ;IS THIS CHAR A SEPARATOR?
|
||||||
|
BNE RDWB ;YES
|
||||||
|
BISB A,RDFLAG
|
||||||
|
JSR PC,BLST
|
||||||
|
BR RDWA
|
||||||
|
RDWB: JSR PC,BLSTF ;FINISH OFF STRING
|
||||||
|
RTS PC ;NO CHARS SEEN BEFORE SEP
|
||||||
|
BIT #NNUMF,RDFLAG
|
||||||
|
BNE RDWC ;NOT A POSSIBLE NUMBER
|
||||||
|
MOV TOPS,B
|
||||||
|
MOV #LNUM,A
|
||||||
|
JSR PC,CONVER ;TRY MAKING A #
|
||||||
|
SKPRET ;LOST SO LEAVE AS LSTR
|
||||||
|
SKPRET ;OK
|
||||||
|
RDWC: MOV #UFUN,A ;TRY TO INTERN STRING IN TOPS AS A SYSTEM OR USER FUNCTION
|
||||||
|
BIT #DOTF,RDFLAG ; UNLESS DOTF ON, THEN AS USER VARIABLE
|
||||||
|
BEQ RDWD
|
||||||
|
MOV #UVAR,A
|
||||||
|
BIC #DOTF,RDFLAG
|
||||||
|
RDWD: JSR PC,.INTRN ;RDSTR COMES HERE ALSO
|
||||||
|
BR RDWE
|
||||||
|
JSR PC,FRELST
|
||||||
|
RDWE: BIS A,B
|
||||||
|
SKPRET
|
||||||
|
.STITLE READ - READ STRING
|
||||||
|
;READ CHAR UP TO NEXT SPACE OR ] IF INSIDE
|
||||||
|
;A LIST. DONT ALLOW ] OR [.
|
||||||
|
;ALWAYS SKIPS
|
||||||
|
RDST: CLRB RDFLAG
|
||||||
|
JSR PC,BLSTI
|
||||||
|
BR RDSB
|
||||||
|
RDSA: JSR PC,GNC
|
||||||
|
RDSB: MOVB DTBL(D),A
|
||||||
|
BIT #SEPF,A
|
||||||
|
BEQ RDSE
|
||||||
|
CMP #' ,D
|
||||||
|
BEQ RDSX
|
||||||
|
CMP #'],D
|
||||||
|
BEQ RDSC
|
||||||
|
CMP #'[,D
|
||||||
|
BEQ RDSX
|
||||||
|
CMP #15,D
|
||||||
|
BEQ RDSX
|
||||||
|
RDSE: BIS A,RDFLAG
|
||||||
|
JSR PC,BLST
|
||||||
|
BR RDSA
|
||||||
|
RDSC: TST LISTBD ;ARE WE IN LIST
|
||||||
|
BNE RDSX ;YES
|
||||||
|
RDSD: ERROR+COP ;CHAR (D) OUT OF PLACE
|
||||||
|
RDSX: MOV #LSTR,A
|
||||||
|
MOV #LSTR, B
|
||||||
|
JSR PC,BLSTF
|
||||||
|
RDSR: RTS PC ;EMPTY STRING
|
||||||
|
MOV #LSTR,A
|
||||||
|
MOV TOPS,B
|
||||||
|
BIT #NNUMF,RDFLAG
|
||||||
|
BEQ RDSR ;IT IS A POSSIBLE NUMBER
|
||||||
|
BIT #SEPF,RDFLAG
|
||||||
|
BNE RDSR ;IT HAS A SEP CHAR IN IT
|
||||||
|
MOV #ATOM,A
|
||||||
|
JMP RDWD ; INTERN IT
|
||||||
|
.STITL READ - READ LIST
|
||||||
|
;READ THRU MATCHING ] MAKING A LIST AS U GO
|
||||||
|
RDLST: CLRB RDFLAG
|
||||||
|
JSR PC,SLISTB
|
||||||
|
RDLA: JSR PC,GNC
|
||||||
|
CMP #' ,D
|
||||||
|
BEQ RDLA ;SKIP OVER SPACES
|
||||||
|
CMP #'[,D
|
||||||
|
BEQ RDLB ;READ A LIST
|
||||||
|
CMP #'],D
|
||||||
|
BEQ RDLY ;DONE
|
||||||
|
JSR PC,RDST ;READ A STRING
|
||||||
|
BR .+2 ;RDST ALWAYS SKIPS
|
||||||
|
RDLX: JSR PC,LISTB ;ADD THIS NODE TO LIST
|
||||||
|
CMP #'[,D
|
||||||
|
BEQ RDLB
|
||||||
|
CMP #'],D ;AT END?
|
||||||
|
BNE RDLA ;NO, GET NEXT ELEMENT
|
||||||
|
RDLY: JSR PC,FLISTB
|
||||||
|
RTS PC
|
||||||
|
RDLB: JSR PC,RDLST
|
||||||
|
POPS TOPS
|
||||||
|
CLR D
|
||||||
|
BR RDLX
|
||||||
|
.STITLE READ - MISC
|
||||||
|
CKDOTF: BIT #DOTF,RDFLAG
|
||||||
|
BEQ LISTBR
|
||||||
|
BIC #DOTF,RDFLAG
|
||||||
|
PUSH A
|
||||||
|
SPUSH B
|
||||||
|
MOV #SFUN,A
|
||||||
|
MOV #$DOTS,B
|
||||||
|
JSR PC,LISTB
|
||||||
|
JMP RETB
|
||||||
|
LISTB: MOV F,C ;BUILD A LIST, ADD NODE IN A,,B TO
|
||||||
|
JSR PC,GRBAD1 ;LIST WHOSE LAST NODE PTR IS IN F
|
||||||
|
TST F
|
||||||
|
BNE LISTB1
|
||||||
|
PUSHS C
|
||||||
|
BIS #LIST,@S
|
||||||
|
LISTB1: MOV C,F
|
||||||
|
LISTBR: RTS PC
|
||||||
|
SLISTB: MOV @P,A ;START LISTB SAVE RETURN
|
||||||
|
MOV F,@P ;SAVE CURRENT LAST NODE PTR
|
||||||
|
CLR F
|
||||||
|
INC LISTBD
|
||||||
|
JMP @A
|
||||||
|
FLISTB: POP C ;SAVE RETURN
|
||||||
|
TST F
|
||||||
|
BNE FLSB1
|
||||||
|
PUSHS #LIST
|
||||||
|
FLSB1: POP F ;RESTORE OLD CURRENT NODE PTR
|
||||||
|
MOV #LIST,A
|
||||||
|
MOV @S,B
|
||||||
|
JMP @C
|
||||||
|
BLSTI: CLR NCHR
|
||||||
|
CLR E
|
||||||
|
CLR TOPS
|
||||||
|
BLSTI1: BIS #100000,E
|
||||||
|
RTS PC
|
||||||
|
BLST: ;BUILD STRING - CHAR IN D, USES E
|
||||||
|
;DESTROYS A,B,C
|
||||||
|
PUSH A
|
||||||
|
SPUSH B
|
||||||
|
SPUSH C
|
||||||
|
BIT #200,D ;CHECK IF IGNORE BIT ON
|
||||||
|
BNE BLSTRT
|
||||||
|
BIT #177,D ;CHECK IF NULL
|
||||||
|
BEQ BLSTRT
|
||||||
|
INC NCHR ;WE HAVE A CHAR
|
||||||
|
ADD #40000,E
|
||||||
|
BGE BLST2 ;IS IT THE SECOND
|
||||||
|
MOVB D,TEMP ;NO, 1ST
|
||||||
|
BLSTRT: JMP RETC
|
||||||
|
BLST2: MOVB D,TEMP+1 ;IT IS THE SECOND CHAR
|
||||||
|
MOV TEMP,B
|
||||||
|
;STORE THE CHARACTERS
|
||||||
|
BLST3: JSR PC,BSAN
|
||||||
|
BIS #100000,E
|
||||||
|
BR BLSTRT
|
||||||
|
BLSTF: ;FINISH BUILDING STRING, PUT PTR IN TOPS.
|
||||||
|
; DONT SKIP IF EMPTY STRING (TOPS=0)
|
||||||
|
TST NCHR
|
||||||
|
BEQ BSANR ;EMPTY STRING
|
||||||
|
ADD #40000,E
|
||||||
|
BGE .+4 ;IS LAST NODE USED
|
||||||
|
SKPRET
|
||||||
|
PUSH A
|
||||||
|
SPUSH B
|
||||||
|
SPUSH C
|
||||||
|
MOVB TEMP,B ;YES
|
||||||
|
JSR PC,BSAN
|
||||||
|
BLSTF1: JMP SRETC
|
||||||
|
BSAN: MOV E,C
|
||||||
|
MOV #SSTR,A
|
||||||
|
JSR PC,GRBAD1
|
||||||
|
TST E
|
||||||
|
BNE BSAN1
|
||||||
|
MOV C,TOPS ;SAVE NEW STRING PTR ON S
|
||||||
|
BIS #LSTR,TOPS
|
||||||
|
BSAN1: MOV C,E
|
||||||
|
BSANR: RTS PC
|
||||||
|
.STITL GNC - GET NEXT CHAR
|
||||||
|
GNC: PUSH A ;GET NEXT CHAR INTO D
|
||||||
|
SPUSH B ;INITIALIZE BY MOVING LSTR PTR INTO GNCN
|
||||||
|
GNC4: MOVB GNCN+2,D ; AND CLEARING TYPE FIELD (#170000)
|
||||||
|
MOV GNCN,B ;SKIPS UNLESS NO MORE CHAR
|
||||||
|
BLT GNC1 ;JUST GOT 2ND CHAR
|
||||||
|
BNE GNC3
|
||||||
|
MOV #15,D
|
||||||
|
JMP RETB ;NONE LEFT
|
||||||
|
GNC3: JSR PC,.LOAD ;GET NEXT NODE
|
||||||
|
BIS #100000,A ;SET "STILL ANOTHER CHAR" BIT
|
||||||
|
MOV A,GNCN
|
||||||
|
MOVB B,D ;FOR OUTPUT
|
||||||
|
SWAB B
|
||||||
|
MOVB B,GNCN+2
|
||||||
|
GNC2: TST D
|
||||||
|
BEQ GNC4 ;IGNORE NULL CHARS
|
||||||
|
JMP RETB
|
||||||
|
GNC1: BIC #170000,GNCN ;CLEAR "STILL ..." BIT
|
||||||
|
BR GNC2
|
||||||
|
.STITL ERRORS AND HANDLER
|
||||||
|
EMTBK: MOV #SRET,@P ;FAKE IT OUT
|
||||||
|
RTI
|
||||||
|
ERRBK: PUSH A
|
||||||
|
MOV 2(P),A ;GET LOC OF ERROR
|
||||||
|
MOV #TYO,PCHR
|
||||||
|
JSR PC,PRONL ;PRINT ADDR WHERE ERROR OCCURED
|
||||||
|
SPACE
|
||||||
|
MOV -2(A),A ;GET ERROR #
|
||||||
|
BIC #177400,A
|
||||||
|
ASL A
|
||||||
|
MOV ERTAB(A),A ;POINTS TO LIST FOR THIS ERROR
|
||||||
|
JMP @A ;XFER TO LIST
|
||||||
|
ERRRT: POP A
|
||||||
|
RTI
|
||||||
|
|
||||||
|
ERTAS: SPUSH A
|
||||||
|
MOV 2(P),A ;TYPE ASCIZ STRING, STRING FOLLOWS CALL
|
||||||
|
JSR PC,PRAS
|
||||||
|
BIT A,#1 ;IF STRING STOPPED ON ODD ADDR
|
||||||
|
BEQ .+4
|
||||||
|
INC A ;MAKE IT EVEN
|
||||||
|
MOV A,2(P)
|
||||||
|
SPOP A
|
||||||
|
RTS PC
|
||||||
|
PRLO: PUSH A ;PRINT LAST OPERATOR
|
||||||
|
SPUSH B
|
||||||
|
MOV LO,A
|
||||||
|
BEQ EMPTY
|
||||||
|
MOV LO+2,B
|
||||||
|
BR PRCO1
|
||||||
|
PRCO: PUSH A, ;PRINT CURRENT OPERATOR
|
||||||
|
SPUSH B
|
||||||
|
MOV CO,A
|
||||||
|
MOV CO+2,B
|
||||||
|
BEQ EMPTY
|
||||||
|
PRCO1: SPUSH D
|
||||||
|
JSR PC,PROAB
|
||||||
|
SPOP D
|
||||||
|
JMP RETB
|
||||||
|
PROAB: CMP A,#UFUN ;PRINT OPERATOR IN A,B
|
||||||
|
BLO PRCO2
|
||||||
|
JMP PPNAME ;PRINT PNAME
|
||||||
|
PRCO2: MOV B,A ;SYSTEM FUNCTION
|
||||||
|
ADD #4,A
|
||||||
|
JMP PRAS ;PRINT ASCIZ PNAME
|
||||||
|
EMPTY: PRTXT ^\ EMPTY \
|
||||||
|
JMP RETB
|
||||||
|
ERTAP: MOV @(P),A ;TYPE ASCIZ STRING, POINTER FOLLOWS CALL
|
||||||
|
INC @P
|
||||||
|
INC @P
|
||||||
|
PRAS: SPUSH D ;PRINT ASCIZ STRING POINTED TO BY A
|
||||||
|
PRAS1: MOVB (A)+,D
|
||||||
|
BEQ PRASR
|
||||||
|
JSR PC,@PCHR
|
||||||
|
BR PRAS1
|
||||||
|
PRASR: SPOP D
|
||||||
|
RTS PC
|
||||||
|
PRON: BIC #TF2,TFLAGS ;PRINT OCTAL NO., NO. IN A
|
||||||
|
BR PRON1 ;CALL- JSR PC,PRON
|
||||||
|
PRONL: BIS #TF2,TFLAGS
|
||||||
|
PRON1: PUSH A ;PRON DOESN'T PRINT LEADING ZEROS, PRONL DOES
|
||||||
|
SPUSH D
|
||||||
|
CLR D
|
||||||
|
SEC
|
||||||
|
ROL A ;TO TELL WHEN WE ARE DONE
|
||||||
|
BR PRON2
|
||||||
|
PRON3: CLR D
|
||||||
|
ASL A
|
||||||
|
BEQ PRON5
|
||||||
|
ROL D
|
||||||
|
ASL A
|
||||||
|
ROL D
|
||||||
|
ASL A
|
||||||
|
PRON2: ROL D
|
||||||
|
BNE PRON4
|
||||||
|
BIT #TF2,TFLAGS
|
||||||
|
BEQ PRON3
|
||||||
|
PRON4: BIS #TF2,TFLAGS
|
||||||
|
BIS #60,D
|
||||||
|
JSR PC,@PCHR
|
||||||
|
|
||||||
|
BR PRON3
|
||||||
|
PRON5: BIS #60,D
|
||||||
|
BIT #TF2,TFLAGS
|
||||||
|
BNE .+6 ;IF NOTHING HAS BEEN TYPED, TYPE A ZERO
|
||||||
|
JSR PC,@PCHR
|
||||||
|
SPOP D
|
||||||
|
SPOP A
|
||||||
|
RTS PC
|
||||||
|
PRDNL: BIS #TF1,TFLAGS
|
||||||
|
BR .+10
|
||||||
|
PRDN: BIC #TF1,TFLAGS ;PRINT DECIMAL NO. IN A
|
||||||
|
PUSH B
|
||||||
|
SPUSH D
|
||||||
|
MOV #10,B
|
||||||
|
MOV A,MQ
|
||||||
|
BGE PRDN1
|
||||||
|
NEG MQ ;ITS NEGATIVE
|
||||||
|
MOV #'-,D
|
||||||
|
JSR PC,@PCHR
|
||||||
|
PRDN1: MOV DTOTB(B),DIVIDE
|
||||||
|
BIT #TF1,TFLAGS
|
||||||
|
BNE PRDN2
|
||||||
|
BITB #MQZ,EAESR ;> ZERO?
|
||||||
|
BNE PRDN3 ;NO
|
||||||
|
BIS #TF1,TFLAGS
|
||||||
|
PRDN2: MOV MQ,D
|
||||||
|
ADD #'0,D
|
||||||
|
JSR PC,@PCHR
|
||||||
|
PRDN3: MOV AC,MQ
|
||||||
|
SUB #2,B
|
||||||
|
BNE PRDN1
|
||||||
|
MOV MQ,D
|
||||||
|
ADD #'0,D
|
||||||
|
JSR PC,@PCHR
|
||||||
|
POP D
|
||||||
|
SPOP B
|
||||||
|
RTS PC
|
||||||
|
DTOTB: 1.
|
||||||
|
10.
|
||||||
|
100.
|
||||||
|
1000.
|
||||||
|
10000.
|
||||||
|
EMPTY1: JMP EMPTY
|
||||||
|
PRS1: PUSH A ;PRINT TOP ELEMENT OF SS
|
||||||
|
SPUSH B
|
||||||
|
MOV CSPDLP,A
|
||||||
|
ADD SPRBAO,A
|
||||||
|
CMP A,S
|
||||||
|
BLOS EMPTY1
|
||||||
|
MOV @S,B
|
||||||
|
SPUSH D
|
||||||
|
JSR PC,PNODAB
|
||||||
|
SPOP D
|
||||||
|
JMP RETB
|
||||||
|
PNODAB: MOV B,A
|
||||||
|
BIC #7777,A
|
||||||
|
CMP #SSTR,A
|
||||||
|
BEQ PRS11
|
||||||
|
CMP #ATOM,A
|
||||||
|
BLOS PRS11
|
||||||
|
ERROR+INVN ;INVALID NODE
|
||||||
|
PRS11: JSR PC,PRDATA
|
||||||
|
RTS PC
|
||||||
|
PRCT: PUSH A ;PRINT CURRENT TOKEN
|
||||||
|
SPUSH B
|
||||||
|
SPUSH D
|
||||||
|
MOV CT,A
|
||||||
|
MOV CT+2,B
|
||||||
|
JSR PC,PRTAB
|
||||||
|
SPOP D
|
||||||
|
JMP RETB
|
||||||
|
PRTAB: BIC #7777,A ;PRINT TOKEN IN A,B
|
||||||
|
CMP A,#UVAR
|
||||||
|
BHIS .+6
|
||||||
|
JMP PROAB
|
||||||
|
CMP A,#UVAR
|
||||||
|
BEQ PRUV
|
||||||
|
BR PRDATA
|
||||||
|
PRATM: BIS #PQF,FLAGS2 ;PRINT ATOM IN A,B
|
||||||
|
BR PRUV1
|
||||||
|
PRUV: MOVB #':,D ;PRINT USER VARIABLE IN A,B
|
||||||
|
JSR PC,@PCHR
|
||||||
|
PPNAME: BIC #PQF,FLAGS2 ;PRINT PNAME - UOE PTR IN B
|
||||||
|
PRUV1: JSR PC,.LOAD
|
||||||
|
JMP PRLSTR ;PRINT PNAME
|
||||||
|
PRDATA: CMP #LNUM,A ;PRINT DATA IN A,B. 7777 FIELD OF A IS 0000
|
||||||
|
BEQ PRNUM ;NUMBER
|
||||||
|
CMP #SNUM,A
|
||||||
|
BEQ PRNUM
|
||||||
|
BIS #PQF,FLAGS2 ;SET PRINT QUOTE FLAG
|
||||||
|
CMP #ATOM,A
|
||||||
|
BEQ PRUV1
|
||||||
|
CMP #LSTR,A
|
||||||
|
BEQ PRLSTR ;LONG STRING
|
||||||
|
CMP #SSTR,A
|
||||||
|
BEQ PRSSTR ;SHORT STRING
|
||||||
|
BIC #PQF,FLAGS2
|
||||||
|
CMP #LIST,A
|
||||||
|
BEQ PRLST
|
||||||
|
ERROR+CPS ;CANT PRINT A SNAP
|
||||||
|
PRLSTR: JSR PC,.LOAD ;PRINT LONG STRING
|
||||||
|
PRSSTR: JSR PC,PRQQ ;PRINT SHORT STRING
|
||||||
|
PRSTR2: MOVB B,D
|
||||||
|
BLE PRSTR3 ;NULL CHAR
|
||||||
|
JSR PC,@PCHR
|
||||||
|
PRSTR3: SWAB B
|
||||||
|
MOVB B,D
|
||||||
|
BLE PRSTR4 ;NULL CHARACTER
|
||||||
|
JSR PC,@PCHR
|
||||||
|
PRSTR4: MOV A,B
|
||||||
|
BIC #170000,B
|
||||||
|
BEQ PRSRET
|
||||||
|
JSR PC,.LOAD
|
||||||
|
BR PRSTR2
|
||||||
|
PRSRET: RTS PC
|
||||||
|
PRQQ: BIT #PQF,FLAGS2 ;PRINT ' " ' IF PQF=1
|
||||||
|
BEQ PRSRET
|
||||||
|
BIT #DPQF,FLAGS2
|
||||||
|
BNE PRSRET
|
||||||
|
MOVB #'",D
|
||||||
|
JMP @PCHR
|
||||||
|
PRNUM: CLR TEMP
|
||||||
|
BIC #7777,A
|
||||||
|
CMP #SNUM,A
|
||||||
|
BEQ PRNUM2
|
||||||
|
PRNUM1: JSR PC,.LOAD ;GET FIRST NODE
|
||||||
|
BIT #7777,A ;ONLY PRINT SNUM S FOR NOW
|
||||||
|
BEQ PRNUM2
|
||||||
|
ERROR+NTB ;# TOO BIG
|
||||||
|
PRNUM2: MOV B,A
|
||||||
|
JSR PC,PRDN
|
||||||
|
RTS PC
|
||||||
|
PRLST: PUSH A ;PRINT LIST, PTR IN B
|
||||||
|
SPUSH B
|
||||||
|
SPUSH C
|
||||||
|
TST NBKTS
|
||||||
|
BEQ PRL4
|
||||||
|
MOV #'[,D
|
||||||
|
JSR PC,@PCHR
|
||||||
|
PRL4: INC NBKTS
|
||||||
|
MOV B,C
|
||||||
|
PRL1: BIT #7777,C ;EMPTY LIST
|
||||||
|
BEQ PRL2 ;YES, DONE
|
||||||
|
BIS #DPQF,FLAGS2 ;DONT PRINT QUOTE BEFORE STRINGS
|
||||||
|
BR PRL3
|
||||||
|
PRL6: SPACE
|
||||||
|
PRL3: JSR PC,.LOADC ;GET THIS NODE
|
||||||
|
MOV A,C ;SAVE PTR TO NEXT
|
||||||
|
BIC #7777,A
|
||||||
|
JSR PC,PRTAB
|
||||||
|
BIT #7777,C
|
||||||
|
BNE PRL6
|
||||||
|
PRL2: DEC NBKTS
|
||||||
|
BEQ PRL5
|
||||||
|
MOV #'],D
|
||||||
|
JSR PC,@PCHR
|
||||||
|
PRL5: JMP RETC
|
||||||
|
PRNODE: PUSH A ;PRINT NODE POINTED TO BY B
|
||||||
|
SPUSH B
|
||||||
|
SPUSH D
|
||||||
|
JSR PC,.LOAD
|
||||||
|
JSR PC,PRON
|
||||||
|
SPACE
|
||||||
|
MOV B,A
|
||||||
|
JSR PC,PRON
|
||||||
|
SPOP D
|
||||||
|
JMP RETB
|
||||||
|
SEX1: JSR PC,PRNODE ;FOR FOO$X COMMAND IN 11SIM
|
||||||
|
HALT
|
||||||
|
SEX: JSR PC,PRNODE ;FOR RUG
|
||||||
|
JMP RUG
|
||||||
|
ERTLN: ;ERR RETURN TO LEVEL N
|
||||||
|
ERTL0: ;ERR RETURN TO LEVEL 0
|
||||||
|
MOV FUNLEV,A
|
||||||
|
BEQ ERTL1
|
||||||
|
PRTXT ^\LEVEL \
|
||||||
|
JSR PC,PRDN
|
||||||
|
PRTXT ^\ LINE \
|
||||||
|
MOV CLN,A
|
||||||
|
JSR PC,PRDN
|
||||||
|
PRTXT ^\ IN \
|
||||||
|
MOV CPP,B
|
||||||
|
JSR PC,PPNAME
|
||||||
|
PRCR
|
||||||
|
ERTL1: MOV USER,U
|
||||||
|
MOV #DBITTB,A
|
||||||
|
ADD U,A
|
||||||
|
MOV #1,(A)+
|
||||||
|
CLR (A)+
|
||||||
|
CLR (A)+
|
||||||
|
CLR (A)+
|
||||||
|
CLR (A)+ ;THAT SHOULD BE ENOUGH
|
||||||
|
MOV UDSKAD(U),UNXTDB(U)
|
||||||
|
MOV #PDLINK-SLOT1,A
|
||||||
|
ADD BASEUS,A
|
||||||
|
CLR @A
|
||||||
|
CLR 2(A)
|
||||||
|
MOV A,P
|
||||||
|
MOV A,PRBAO
|
||||||
|
MOV A,PPOPL
|
||||||
|
SUB #524,A
|
||||||
|
MOV A,PPUSHL
|
||||||
|
MOV #SDLINK-SLOT1,A
|
||||||
|
ADD BASEUS,A
|
||||||
|
CLR 2(A)
|
||||||
|
CLR @A
|
||||||
|
MOV A,S
|
||||||
|
MOV A,SPRBAO
|
||||||
|
MOV A,SPOPL
|
||||||
|
SUB #524,A
|
||||||
|
MOV A,SPUSHL
|
||||||
|
MOV #TOPS,A
|
||||||
|
MOV #<NCHR-TOPS>/2,B
|
||||||
|
CLR (A)+
|
||||||
|
DEC B
|
||||||
|
BGE .-4
|
||||||
|
CLR BRAKE
|
||||||
|
JMP MLOOP
|
||||||
|
SHOW: JSR PC,GUOEB ;SHOW "FOO"
|
||||||
|
BR SHOW5
|
||||||
|
MOV B,E
|
||||||
|
JSR PC,.BINDF
|
||||||
|
SHOW5: ERROR+PNH ;PROCEDURE NOT HERE
|
||||||
|
MOV B,F
|
||||||
|
PRCR
|
||||||
|
PRTXT ^\TO \
|
||||||
|
MOV E,B
|
||||||
|
JSR PC,PPNAME
|
||||||
|
MOV F,C
|
||||||
|
JSR PC,.LOADC
|
||||||
|
MOV A,F ;SAVE PTR TO NEXT NODE
|
||||||
|
JSR PC,.LOAD ;#ARGS IN B
|
||||||
|
TST B
|
||||||
|
BEQ SHOW2
|
||||||
|
MOV A,C
|
||||||
|
SHOW1: SPACE
|
||||||
|
JSR PC,.LOADC ;NEXT ARG
|
||||||
|
MOV A,C
|
||||||
|
JSR PC,PRUV ;PRINT ITS PNAME
|
||||||
|
BIT #7777,C
|
||||||
|
BNE SHOW1
|
||||||
|
SHOW2: PRCR
|
||||||
|
BIT #7777,F
|
||||||
|
BEQ SHOW4
|
||||||
|
MOV F,C
|
||||||
|
SHOW3: JSR PC,.LOADC
|
||||||
|
MOV A,C
|
||||||
|
MOV B,@S
|
||||||
|
JSR PC,PRLN
|
||||||
|
BIT #7777,C
|
||||||
|
BNE SHOW3
|
||||||
|
SHOW4: PRTXT ^\END\
|
||||||
|
PRCR
|
||||||
|
JMP NORT
|
||||||
|
PRLN: PUSH A ;PRINT TOKENS IN LIST ON S
|
||||||
|
SPUSH B
|
||||||
|
SPUSH C
|
||||||
|
SPUSH D
|
||||||
|
BIC #DPQF,FLAGS2 ;DO PRINT QUOTE BEFORE STRINGS
|
||||||
|
MOV @S,C
|
||||||
|
BR PRLN2
|
||||||
|
PRLN1: SPACE
|
||||||
|
PRLN2: JSR PC,.LOADC
|
||||||
|
MOV A,C
|
||||||
|
JSR PC,PRTAB
|
||||||
|
BIT #7777,C ;DONE?
|
||||||
|
BNE PRLN1 ;NO
|
||||||
|
PRCR
|
||||||
|
JMP RETD
|
||||||
|
STRACE: BIT #TRACEF,FLAGS2 ;SYSTEM TRACE
|
||||||
|
BNE .+4
|
||||||
|
RTS PC
|
||||||
|
INC NBKTS
|
||||||
|
PUSH A
|
||||||
|
PRTXT ^/CT=/
|
||||||
|
BIC #DPQF,FLAGS2
|
||||||
|
JSR PC,PRCT
|
||||||
|
PRTXT ^/ CO=/
|
||||||
|
JSR PC,PRCO
|
||||||
|
PRTXT ^/ S=/
|
||||||
|
BIC #DPQF,FLAGS2
|
||||||
|
JSR PC,PRS1
|
||||||
|
PRCR
|
||||||
|
CLR NBKTS
|
||||||
|
POP A
|
||||||
|
RTS PC
|
||||||
|
ETRACE: BIC #TF6,TFLAGS
|
||||||
|
BR TRA1
|
||||||
|
TRACE: BIS #TF6,TFLAGS
|
||||||
|
TRA1: JSR PC,GUOEB
|
||||||
|
BR TRA5
|
||||||
|
JSR PC,.BNDFS
|
||||||
|
TRA5: ERROR+PNH ;PROC NOT HERE
|
||||||
|
MOV B,C ;B POINTS TO LIST OF GOODIES. FIRST IS FLAGS,,#ARGS
|
||||||
|
JSR PC,.LDP2
|
||||||
|
BIC #TPTF,A
|
||||||
|
BIT #TF6,TFLAGS
|
||||||
|
BEQ TRA2
|
||||||
|
BIS #TPTF,A
|
||||||
|
TRA2: JSR PC,.STP2
|
||||||
|
JMP NORT
|
||||||
|
SETSTF: BIS #TRACEF,FLAGS2 ;SET SYSTEM TRACE FLAG
|
||||||
|
JMP NORT
|
||||||
|
CLRSTF: BIC #TRACEF,FLAGS2
|
||||||
|
JMP NORT
|
||||||
|
FLEV: MOV FUNLEV,B ;RETURN USER PROC CALL DEPTH
|
||||||
|
JMP R1NARG
|
||||||
|
VERSN: MOV LVERNF,B
|
||||||
|
JMP R1NARG
|
||||||
|
.MACR ERMM AA
|
||||||
|
.XLIST
|
||||||
|
AA==ERMNO
|
||||||
|
ERMNO==ERMNO+1
|
||||||
|
AA'.E
|
||||||
|
.LIST
|
||||||
|
.ENDM
|
||||||
|
|
||||||
|
.MACR BEGER A
|
||||||
|
A'.E: .OFFSE 0 ;(THIS WILL BE NON-ZERO LATER)
|
||||||
|
.ENDM
|
||||||
|
|
||||||
|
.MACR ENDER
|
||||||
|
.XLIST
|
||||||
|
PRCR
|
||||||
|
JMP ERTLN
|
||||||
|
.OFFSE 0
|
||||||
|
.LIST
|
||||||
|
.ENDM
|
||||||
|
|
||||||
|
ERMNO==0
|
||||||
|
ERTAB: ERMM BSS ;BAD SS
|
||||||
|
ERMM CFL ;CANT FIND LINE #
|
||||||
|
ERMM COP ;CHAR (D) OUT OF PALCE
|
||||||
|
ERMM CPS ;CANT PRINT SNAP
|
||||||
|
ERMM CTIP ;CANT "TO" IN PROCEDURE
|
||||||
|
ERMM CTIT ;CANT "TO" IN "TO"
|
||||||
|
ERMM ERP ;EXTRA RIGHT PAREN
|
||||||
|
ERMM HNM ;... HAS NO MEANING
|
||||||
|
ERMM HNV ;... HAS NO VALUE
|
||||||
|
ERMM ILN ;..(CT).. IS AN INVALID LOGO NAME.
|
||||||
|
ERMM INF1 ;INFIX IN THE WRONG PLACE
|
||||||
|
ERMM INVN ;INVALID NODE
|
||||||
|
ERMM ITB ;INPUT TOO BIG
|
||||||
|
ERMM LCE ;LINE ... CHANGED BY EDIT
|
||||||
|
ERMM LDE ;LINE ..(B).. DOESN'T EXIST
|
||||||
|
ERMM LNTB ;LINE # TOO BIG
|
||||||
|
ERMM NDU ;NOT A DISPLAY USER
|
||||||
|
ERMM NOU ;NO OUTPUT
|
||||||
|
ERMM NSL ;NO STORAGE LEFT
|
||||||
|
ERMM NTB ;# TOO BIG
|
||||||
|
ERMM NTF ;(S) NOT "TRUE" OR "FALSE"
|
||||||
|
ERMM NTL ;NUMBER TOO LONG
|
||||||
|
ERMM NY ;NOT YET!!
|
||||||
|
ERMM OIP ;ONLY IN PROCEDURE
|
||||||
|
ERMM OOB ;OUT OF BOUNDS
|
||||||
|
ERMM OOP ;(CO) OUT OF PLACE
|
||||||
|
ERMM OOT ;OUT OF TOKENS
|
||||||
|
ERMM PAE ;PROCEDURE ..(CT).. ALREADY EXISTS
|
||||||
|
ERMM PNH ;PROCEDURE ... NOT HERE
|
||||||
|
ERMM RTB ;RESULT TOO BIG
|
||||||
|
ERMM STD ;SNAP TOO DEEP
|
||||||
|
ERMM TIP ;TOO MUCH INSIDE PARENS
|
||||||
|
ERMM TML ;TOO MANY LINES
|
||||||
|
ERMM TMS ;TOO AMNY SNAPS
|
||||||
|
ERMM UEL ;UNEXPECTED END OF LINE
|
||||||
|
ERMM WDW ;WHAT SHOULD I DO WITH ...
|
||||||
|
ERMM WIC ;YOU CAN'T WIPE WHILE IN CAMERA
|
||||||
|
ERMM WIT ;(CT) IS WRONG INPUT TO "TO"
|
||||||
|
ERMM WTA ;..(CO)..DOESN'T LIKE..(CT)..AS INPUT
|
||||||
|
ERMM WTAA ;..(CO)..DOESN'T LIKE..(A)...AS INPUT
|
||||||
|
ERMM WTAB ;..(CO)..DOESN'T LIKE..(B)...AS INPUT
|
||||||
|
ERMM YND ;YOU DON'T HAVE THE DISPLAY
|
||||||
|
ERMM YNT ;YOU DON'T HAVE THE TURTLE
|
||||||
|
ERTEND: ERMNO ;NEXT AVAILABLE ERR NO.
|
||||||
|
BEGER WTAA
|
||||||
|
PUSHS A
|
||||||
|
JSR PC,PRCO
|
||||||
|
PRTXT ^/ DOESN'T LIKE /
|
||||||
|
JSR PC,PRS1
|
||||||
|
PRTXT ^/ AS INPUT./
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER WTAB
|
||||||
|
PUSHS B
|
||||||
|
JSR PC,PRCO
|
||||||
|
PRTXT ^/ DOESN'T LIKE /
|
||||||
|
JSR PC,PRS1
|
||||||
|
PRTXT ^/ AS INPUT./
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER WTA
|
||||||
|
JSR PC,PRCO
|
||||||
|
PRTXT ^/ DOESN'T LIKE /
|
||||||
|
JSR PC,PRS1
|
||||||
|
PRTXT ^/ AS INPUT./
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER INF1
|
||||||
|
JSR PC,PRCO
|
||||||
|
PRTXT ^/ IS IN THE WRONG PLACE./
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER NOU
|
||||||
|
JSR PC,PRLO
|
||||||
|
PRTXT ^/ DIDN'T OUTPUT!/
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER OOT
|
||||||
|
PRTXT ^/OUT OF TOKENS./
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER BSS
|
||||||
|
PRTXT ^/BAD SS./
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER NY
|
||||||
|
PRTXT ^/NOT YET!!/
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER WDW
|
||||||
|
PRTXT ^/WHAT SHOULD I DO WITH /
|
||||||
|
JSR PC,PRS1
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER HNV
|
||||||
|
JSR PC,PRCT
|
||||||
|
PRTXT ^/ HAS NO VALUE./
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER ERP
|
||||||
|
PRTXT ^/EXTRA RIGHT PAREN./
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER TIP
|
||||||
|
PRTXT ^/TOO MUCH INSIDE PARENS./
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER OOP
|
||||||
|
JSR PC,PRCO
|
||||||
|
PRTXT ^/ OUT OF PLACE./
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER UEL
|
||||||
|
PRTXT ^/UNEXPECTED END OF LINE./
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER NSL
|
||||||
|
PRTXT ^/NO STORAGE LEFT./
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER NTF
|
||||||
|
JSR PC,PRS1
|
||||||
|
PRTXT ^/ NOT "TRUE" OF "FALSE"./
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER LDE
|
||||||
|
PRTXT ^\LINE \
|
||||||
|
JSR PC,PRDN ;LINE # SHOULD BE IN B
|
||||||
|
PRTXT ^\ DOESN'T EXIST.\
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER LNTB
|
||||||
|
PRTXT ^\LINE NUMBER TOO BIG.\
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER COP
|
||||||
|
PRTXT ^\CHAR \
|
||||||
|
JSR PC,TYO
|
||||||
|
PRTXT ^\ OUT OF PLACE.\
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER CPS
|
||||||
|
PRTXT ^\CANT PRINT A SNAP\
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER NTB
|
||||||
|
PRTXT ^\# TOO BIG\
|
||||||
|
ENDER
|
||||||
|
;MORE ERROR MESSAGES:
|
||||||
|
|
||||||
|
BEGER NDU
|
||||||
|
PRTXT ^/YOU DON'T HAVE A DISPLAY CONSOLE/
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER NTL
|
||||||
|
PRTXT ^/NUMBER TOO LONG/
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER OOB
|
||||||
|
PRTXT ^/OUT OF BOUNDS/
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER TML
|
||||||
|
PRTXT ^/TOO MANY LINES/
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER STD
|
||||||
|
PRTXT ^/SNAP TOO DEEP/
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER TMS
|
||||||
|
PRTXT ^/TOO MANY SNAPS/
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER WIC
|
||||||
|
PRTXT ^/YOU CANT WIPE WHILE IN CAMERA/
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER YND
|
||||||
|
PRTXT ^/YOU DONT HAVE THE DISPLAY/
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER YNT
|
||||||
|
PRTXT ^/YOU DONT HAVE THE TURTLE/
|
||||||
|
ENDER
|
||||||
|
BEGER CFL
|
||||||
|
PRTXT ^/CANT FIND LINE NO. /
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER HNM
|
||||||
|
PRTXT ^/... HAS NO MEANING./
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER LCE
|
||||||
|
PRTXT ^\LINE ... CHANGED BY EDIT.\
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER PNH
|
||||||
|
PRTXT ^/PROCEDURE ... NOT HERE/
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER PAE
|
||||||
|
CLR TOPRNM
|
||||||
|
PRTXT ^/PROCEDURE /
|
||||||
|
JSR PC,PRCT
|
||||||
|
PRTXT ^/ ALREADY EXISTS./
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER ILN
|
||||||
|
JSR PC,PRCT
|
||||||
|
PRTXT ^/ IS AN INVALID LOGO NAME./
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER WIT
|
||||||
|
CLR TOPRNM
|
||||||
|
JSR PC,PRCT
|
||||||
|
PRTXT ^/ CAN'T BE A DUMMY INPUT TO "TO"./
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER RTB
|
||||||
|
PRTXT ^\ARITHMETIC RESULT TOO BIG.\
|
||||||
|
ENDER
|
||||||
|
|
||||||
|
BEGER ITB
|
||||||
|
PRTXT ^\ARITHMETIC INPUT TOO BIG.\
|
||||||
|
ENDER
|
||||||
|
BEGER CTIP
|
||||||
|
PRTXT ^\CANT "TO" IN A PROCEDURE.\
|
||||||
|
ENDER
|
||||||
|
BEGER CTIT
|
||||||
|
PRTXT ^\CANT "TO" IN "TO".\
|
||||||
|
ENDER
|
||||||
|
BEGER INVN
|
||||||
|
PRTXT ^\INVALID NODE.\
|
||||||
|
ENDER
|
||||||
|
BEGER OIP
|
||||||
|
PRTXT ^\ ONLY WHEN IN A PROCEDURE.\
|
||||||
|
ENDER
|
||||||
|
|
3103
PDP11/11logo/system.327
Normal file
3103
PDP11/11logo/system.327
Normal file
File diff suppressed because it is too large
Load diff
1457
PDP11/11logo/turtle.62
Normal file
1457
PDP11/11logo/turtle.62
Normal file
File diff suppressed because it is too large
Load diff
1111
PDP11/11logo/tyi.152
Normal file
1111
PDP11/11logo/tyi.152
Normal file
File diff suppressed because it is too large
Load diff
297
PDP11/11logo/zend.67
Normal file
297
PDP11/11logo/zend.67
Normal file
|
@ -0,0 +1,297 @@
|
||||||
|
.STITL DISC BLOCKS, NODE SPACE AND TEST LINES
|
||||||
|
VERN==VERN+%FNAM2
|
||||||
|
|
||||||
|
.MACR NODE A,B
|
||||||
|
.XLIST
|
||||||
|
$.==$$+1
|
||||||
|
A
|
||||||
|
B
|
||||||
|
$$==$$+1
|
||||||
|
.LIST
|
||||||
|
.ENDM
|
||||||
|
|
||||||
|
VERNF==VERN
|
||||||
|
SALTL: LTL
|
||||||
|
LTL: L1
|
||||||
|
L2
|
||||||
|
L3
|
||||||
|
L4
|
||||||
|
L5
|
||||||
|
L6
|
||||||
|
0 ;L7
|
||||||
|
0 ;L8
|
||||||
|
0 ;L9
|
||||||
|
0 ;L10
|
||||||
|
0 ;L11
|
||||||
|
0 ;L12
|
||||||
|
0 ;L13
|
||||||
|
0 ;L14
|
||||||
|
0
|
||||||
|
|
||||||
|
.EVEN
|
||||||
|
SLOT1:
|
||||||
|
MSLTLN==LUVBLK+PPDLL+SPDLL+DBUFL+DDIRL+<4*4096.> ;ALL YOU COULD POSSIBLY WANT
|
||||||
|
UVSAV: .=.+LUVBLK
|
||||||
|
.=.+PPDLL
|
||||||
|
IP=.
|
||||||
|
PDLINK: .=.+4 ;LINK TO PREVIOUS DISK BLOCK
|
||||||
|
.=.+SPDLL
|
||||||
|
IS=.
|
||||||
|
SDLINK: .=.+4
|
||||||
|
HCC==67. ;HASH CODE CONSTANT - A PRIME
|
||||||
|
UHCT: .=UHCT+<2*16.>
|
||||||
|
$OB3
|
||||||
|
$OB4
|
||||||
|
$OB5
|
||||||
|
.=UHCT+<2*23.>
|
||||||
|
$OB2
|
||||||
|
.=UHCT+<2*60.>
|
||||||
|
$OB1
|
||||||
|
.=UHCT+<2*HCC>
|
||||||
|
DBUF: .=.+DBUFL
|
||||||
|
DDIR: .=.+DDIRL
|
||||||
|
0
|
||||||
|
0
|
||||||
|
|
||||||
|
.IF2
|
||||||
|
PAD ^\ START OF NODESP\,\.
|
||||||
|
.ENDC
|
||||||
|
|
||||||
|
NODESP: 0 ;NODE 0
|
||||||
|
0
|
||||||
|
.=NODESP+80.
|
||||||
|
TRUE=140000+20.
|
||||||
|
SSTR+21. ;20
|
||||||
|
"TR
|
||||||
|
SSTR+0 ;21
|
||||||
|
"UE
|
||||||
|
FALSE=140000+22.
|
||||||
|
SSTR+23. ;22
|
||||||
|
"FA
|
||||||
|
SSTR+24. ;23
|
||||||
|
"LS
|
||||||
|
SSTR+0 ;24
|
||||||
|
'E
|
||||||
|
.=NODESP+404.
|
||||||
|
L1=101. ;PRINT "ABCD"
|
||||||
|
SFUN+102. ;NODE 101
|
||||||
|
$PRINT
|
||||||
|
LSTR+0 ;102
|
||||||
|
LSTR+103.
|
||||||
|
SSTR+104. ;103
|
||||||
|
"AB
|
||||||
|
SSTR ;104
|
||||||
|
"CD
|
||||||
|
L2=105. ;"123"
|
||||||
|
LSTR+0 ;105
|
||||||
|
LSTR+106.
|
||||||
|
SSTR+107. ;106
|
||||||
|
"12
|
||||||
|
SSTR ;107
|
||||||
|
'3
|
||||||
|
SFUN ;108
|
||||||
|
0
|
||||||
|
SFUN ;109
|
||||||
|
0
|
||||||
|
L3=110. ;(PRINT "AXBYJ" "1Q" "FOOBAR")
|
||||||
|
SFUN+111. ;110
|
||||||
|
$LPAR
|
||||||
|
SFUN+112. ;111
|
||||||
|
$PRINT
|
||||||
|
LSTR+117. ;112
|
||||||
|
LSTR+114.
|
||||||
|
SSTR+0 ;113
|
||||||
|
"1Q
|
||||||
|
SSTR+115. ;114
|
||||||
|
"AX
|
||||||
|
SSTR+116. ;115
|
||||||
|
"BY
|
||||||
|
SSTR+0 ;116
|
||||||
|
'J
|
||||||
|
LSTR+118. ;117
|
||||||
|
LSTR+113.
|
||||||
|
ATOM+119. ;118
|
||||||
|
ATOM+122.
|
||||||
|
SFUN+0 ;119
|
||||||
|
$RPAR
|
||||||
|
SFUN+0 ;120
|
||||||
|
0
|
||||||
|
$OB1=121.
|
||||||
|
0 ;121 = START OF UOB BUCKET 60.
|
||||||
|
$FOO
|
||||||
|
$FOO=122.
|
||||||
|
ATOM+125. ;122 - HEADER OF FIRST UOE
|
||||||
|
LSTR+123.
|
||||||
|
SSTR+124. ;123
|
||||||
|
"FO
|
||||||
|
SSTR+0 ;124
|
||||||
|
'O
|
||||||
|
VBIND+$FOOF ;125 - VARIABLE BINDING OF 1ST UOE
|
||||||
|
LSTR+126.
|
||||||
|
SSTR+127. ;126
|
||||||
|
"FO
|
||||||
|
SSTR+128. ;127
|
||||||
|
"OB
|
||||||
|
SSTR+0 ;128
|
||||||
|
"AR
|
||||||
|
0 ;129
|
||||||
|
0
|
||||||
|
L4=130. ;IF "TRUE" THEN PRINT "TRUE" ELSE PRINT "FALSE"
|
||||||
|
SFUN+131. ;130
|
||||||
|
$IF
|
||||||
|
LSTR+134. ;131
|
||||||
|
LSTR+132.
|
||||||
|
SSTR+133. ;132
|
||||||
|
"TR
|
||||||
|
SSTR+0 ;133
|
||||||
|
"UE
|
||||||
|
SFUN+135. ;134
|
||||||
|
$THEN
|
||||||
|
SFUN+136. ;135
|
||||||
|
$PRINT
|
||||||
|
LSTR+137. ;136
|
||||||
|
LSTR+132.
|
||||||
|
SFUN+138. ;137
|
||||||
|
$ELSE
|
||||||
|
SFUN+139. ;138
|
||||||
|
$PRINT
|
||||||
|
LSTR+0 ;139
|
||||||
|
LSTR+140.
|
||||||
|
SSTR+141. ;140
|
||||||
|
"FA
|
||||||
|
SSTR+142. ;141
|
||||||
|
"LS
|
||||||
|
SSTR+0 ;142
|
||||||
|
'E
|
||||||
|
SFUN+0 ;143
|
||||||
|
0
|
||||||
|
$$=144.
|
||||||
|
L5=$$ ;MAKE "BAR" "AB1C"
|
||||||
|
NODE SFUN+$.,$MAKE
|
||||||
|
NODE ATOM+$.,ATOM+$BAR
|
||||||
|
NODE LSTR,LSTR+$.
|
||||||
|
NODE SSTR+$.,"AB
|
||||||
|
NODE SSTR,"1C
|
||||||
|
L6=$$ ;PRINT :BAR
|
||||||
|
NODE SFUN+$.,$PRINT
|
||||||
|
NODE UVAR,UVAR+$BAR
|
||||||
|
$OB2=$$
|
||||||
|
NODE 0,$BAR ;START OF UOB BUCKET 23.
|
||||||
|
$BAR=$$
|
||||||
|
NODE ATOM,LSTR+$.
|
||||||
|
NODE SSTR+$.,"BA
|
||||||
|
NODE SSTR,'R
|
||||||
|
L7==$$ ;FOO :BAR "GRINCH"
|
||||||
|
NODE UFUN+$.,$FOO
|
||||||
|
NODE UVAR+$.,UVAR+$BAR
|
||||||
|
NODE LSTR,LSTR+$.
|
||||||
|
NODE SSTR+$.,"GR
|
||||||
|
NODE SSTR+$.,"IN
|
||||||
|
NODE SSTR,"CH
|
||||||
|
$FOOF=$$
|
||||||
|
NODE FBIND+$.,LIST+$FLLP
|
||||||
|
NODE SFBIND,LIST+$FSFB
|
||||||
|
$FLLP=$$
|
||||||
|
NODE LIST+$.,LIST+$FL0
|
||||||
|
NODE LIST+$.,LIST+$FL1
|
||||||
|
NODE LIST,LIST+$FL2
|
||||||
|
$FL0=$$
|
||||||
|
NODE SNUM+$.,2
|
||||||
|
NODE SNUM+$.,$A
|
||||||
|
NODE SNUM,$B
|
||||||
|
$FL1=$$
|
||||||
|
NODE SNUM+$.,10.
|
||||||
|
NODE SFUN+$.,$PRINT
|
||||||
|
NODE UVAR,UVAR+$A
|
||||||
|
$FL2=$$
|
||||||
|
NODE SNUM+$.,20.
|
||||||
|
NODE SFUN+$.,$PRINT
|
||||||
|
NODE UVAR,UVAR+$B
|
||||||
|
$FSFB=$$
|
||||||
|
NODE SNUM+$.,2 ;NO. ARGS
|
||||||
|
NODE SNUM+$.,0 ;PROCD SWAP NO.
|
||||||
|
NODE SNUM+$.,0 ;NO. NODES
|
||||||
|
NODE SNUM+$.,0 ;NO. FLUSHABLE NODES
|
||||||
|
NODE SNUM+$.,0 ;DISC ADDR 1
|
||||||
|
NODE SNUM+$.,0 ; " " 2
|
||||||
|
NODE SNUM+$.,0 ;# WORDS ON DISC
|
||||||
|
$OB3=$$
|
||||||
|
NODE 0,$A ;START OF UOB BUCKET 16.
|
||||||
|
$OB4=$$
|
||||||
|
NODE 0,$B ;START OF UOB BUCKET 17.
|
||||||
|
$OB5=$$
|
||||||
|
NODE 0,$C ;START OF UOB BUCKET 18.
|
||||||
|
$A=$$
|
||||||
|
NODE ATOM,LSTR+$.
|
||||||
|
NODE SSTR,'A
|
||||||
|
$B=$$
|
||||||
|
NODE ATOM+$BVB,LSTR+$.
|
||||||
|
NODE SSTR,'B
|
||||||
|
$BVB=$$
|
||||||
|
NODE VBIND,LSTR+$.
|
||||||
|
NODE SSTR+$.,"B.
|
||||||
|
NODE SSTR+$.,"HA
|
||||||
|
NODE SSTR+$.,"S.
|
||||||
|
NODE SSTR+$.,"LO
|
||||||
|
NODE SSTR,"TS
|
||||||
|
$C==$$
|
||||||
|
NODE ATOM+$CVB,LSTR+$.
|
||||||
|
NODE SSTR,'C
|
||||||
|
$CVB==$$
|
||||||
|
NODE VBIND,LNUM+$.
|
||||||
|
NODE SNUM,100.
|
||||||
|
L8=$$ ;MAKE "BLIP" 13
|
||||||
|
NODE SFUN+$.,$MAKE
|
||||||
|
NODE LSTR+$.,LSTR+$BLIP
|
||||||
|
NODE LNUM,LNUM+$.
|
||||||
|
NODE SNUM,13
|
||||||
|
L9=$$ ;PRINT : "BLIP"
|
||||||
|
NODE SFUN+$.,$PRINT
|
||||||
|
NODE SFUN+$.,$DOTS
|
||||||
|
NODE LSTR,LSTR+$BLIP
|
||||||
|
L10=$$ ;MAKE "BLIP" "XX"
|
||||||
|
NODE SFUN+$.,$MAKE
|
||||||
|
NODE LSTR+$.,LSTR+$BLIP
|
||||||
|
NODE LSTR,LSTR+$.
|
||||||
|
NODE SSTR,"XX
|
||||||
|
L11=$$ ;PRINT :"BLIP"
|
||||||
|
NODE SFUN+$.,$PRINT
|
||||||
|
NODE SFUN+$.,$DOTS
|
||||||
|
NODE LSTR,LSTR+$BLIP
|
||||||
|
L12=$$ ;MAKE "BLAP" "YY"
|
||||||
|
NODE SFUN+$.,$MAKE
|
||||||
|
NODE LSTR+$.,LSTR+$BLAP
|
||||||
|
NODE LSTR,LSTR+$.
|
||||||
|
NODE SSTR,"YY
|
||||||
|
L13==$$ ;PRINT :"BLAP"
|
||||||
|
NODE SFUN+$.,$PRINT
|
||||||
|
NODE SFUN+$.,$DOTS
|
||||||
|
NODE LSTR,LSTR+$BLAP
|
||||||
|
L14==$$ ;STARTDISPLAY
|
||||||
|
NODE SFUN,$START
|
||||||
|
L15==$$ ;FORWARD :C
|
||||||
|
NODE SFUN+$.,$FORWA
|
||||||
|
NODE UVAR,UVAR+$C
|
||||||
|
$BLAP==$$ ;"BLAP"
|
||||||
|
NODE SSTR+$.,"BL
|
||||||
|
NODE SSTR,"AP
|
||||||
|
$BLIP==$$ ;"BLIP"
|
||||||
|
NODE SSTR+$.,"BL
|
||||||
|
NODE SSTR,"IP
|
||||||
|
NNN=$$ ;NEXT NODE NO.
|
||||||
|
SOFN=NNN ;START OF FREE NODES
|
||||||
|
ASOFN=.
|
||||||
|
LOGEND=.
|
||||||
|
|
||||||
|
|
||||||
|
;IN THE EVENT THAT THE SYSTEM OBLIST
|
||||||
|
;HAS BEEN INCORRECTLY SET UP, AND THE MACRO TRIED TO WRITE OVER
|
||||||
|
;PARTS OF IT, THIS LITTLE .IFLE WILL PRINT OUT A MESSAGE
|
||||||
|
.IFLE OBX0
|
||||||
|
********
|
||||||
|
YOU ARE OVERWRITING THE SYSTEM OBLIST
|
||||||
|
********
|
||||||
|
.XLIST
|
||||||
|
.ENDC
|
||||||
|
.END
|
||||||
|
|
1639
PDP11/pdp11_11logo_rom.h
Normal file
1639
PDP11/pdp11_11logo_rom.h
Normal file
File diff suppressed because it is too large
Load diff
|
@ -29,6 +29,7 @@
|
||||||
#include "display/display.h"
|
#include "display/display.h"
|
||||||
#include "display/ng.h"
|
#include "display/ng.h"
|
||||||
#include "sim_video.h"
|
#include "sim_video.h"
|
||||||
|
#include "pdp11_11logo_rom.h"
|
||||||
|
|
||||||
/* Run a NG cycle every this many PDP-11 "cycle" times. */
|
/* Run a NG cycle every this many PDP-11 "cycle" times. */
|
||||||
#define NG_DELAY 1
|
#define NG_DELAY 1
|
||||||
|
@ -42,6 +43,7 @@ t_stat ng_rd(int32 *data, int32 PA, int32 access);
|
||||||
t_stat ng_wr(int32 data, int32 PA, int32 access);
|
t_stat ng_wr(int32 data, int32 PA, int32 access);
|
||||||
t_stat ng_svc(UNIT *uptr);
|
t_stat ng_svc(UNIT *uptr);
|
||||||
t_stat ng_reset(DEVICE *dptr);
|
t_stat ng_reset(DEVICE *dptr);
|
||||||
|
t_stat ng_boot(int32 unit, DEVICE *dptr);
|
||||||
t_stat ng_set_type(UNIT *uptr, int32 val, CONST char *cptr, void *desc);
|
t_stat ng_set_type(UNIT *uptr, int32 val, CONST char *cptr, void *desc);
|
||||||
t_stat ng_show_type(FILE *st, UNIT *uptr, int32 val, CONST void *desc);
|
t_stat ng_show_type(FILE *st, UNIT *uptr, int32 val, CONST void *desc);
|
||||||
t_stat ng_set_scale(UNIT *uptr, int32 val, CONST char *cptr, void *desc);
|
t_stat ng_set_scale(UNIT *uptr, int32 val, CONST char *cptr, void *desc);
|
||||||
|
@ -103,7 +105,7 @@ DEVICE ng_dev = {
|
||||||
"NG", &ng_unit, ng_reg, ng_mod,
|
"NG", &ng_unit, ng_reg, ng_mod,
|
||||||
1, 8, 16, 1, 8, 16,
|
1, 8, 16, 1, 8, 16,
|
||||||
NULL, NULL, &ng_reset,
|
NULL, NULL, &ng_reset,
|
||||||
NULL, NULL, NULL,
|
&ng_boot, NULL, NULL,
|
||||||
&ng_dib, DEV_DIS | DEV_DISABLE | DEV_UBUS | DEV_DEBUG,
|
&ng_dib, DEV_DIS | DEV_DISABLE | DEV_UBUS | DEV_DEBUG,
|
||||||
0, ng_deb, NULL, NULL, NULL, &ng_help, NULL,
|
0, ng_deb, NULL, NULL, NULL, &ng_help, NULL,
|
||||||
&ng_description
|
&ng_description
|
||||||
|
@ -193,6 +195,40 @@ ng_reset(DEVICE *dptr)
|
||||||
return SCPE_OK;
|
return SCPE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t_stat
|
||||||
|
ng_boot(int32 unit, DEVICE *dptr)
|
||||||
|
{
|
||||||
|
t_stat r;
|
||||||
|
|
||||||
|
set_cmd (0, "CPU 56K");
|
||||||
|
set_cmd (0, "NG TYPE=LOGO");
|
||||||
|
set_cmd (0, "PCLK ENABLED");
|
||||||
|
set_cmd (0, "KE ENABLED");
|
||||||
|
set_cmd (0, "RF ENABLED");
|
||||||
|
attach_cmd (0, "RF dummy");
|
||||||
|
sim_set_memory_load_file (BOOT_CODE_ARRAY, BOOT_CODE_SIZE);
|
||||||
|
r = load_cmd (0, BOOT_CODE_FILENAME);
|
||||||
|
sim_set_memory_load_file (NULL, 0);
|
||||||
|
cpu_set_boot (0400);
|
||||||
|
sim_printf ("List of 11LOGO commands:\n");
|
||||||
|
sim_printf (
|
||||||
|
"AND, BACK, BUTFIRST, BUTLAST, COUNT, CTF, DIFFERENCE, DISPLAY, DO,\n"
|
||||||
|
"EDIT, ELSE, EMPTYP, END, EQUAL, ERASETRACE, FIRST, FORWARD, FPRINT,\n"
|
||||||
|
"FPUT, GO, GREATER, HEADING, HERE, HIDETURTLE, HOME, IF, KILLDISPLAY,\n"
|
||||||
|
"LAMPOFF, LAMPON, LAST, LEFT, LESS, LEVEL, LIST, LISTP, LPUT, MAKE,\n"
|
||||||
|
"MOD, NEWSNAP, NUMBERP, OF, OUTPUT, PENDOWN, PENUP, PRINT, PRODUCT,\n"
|
||||||
|
"QUOTIENT, REQUEST, RIGHT, RUG, SENTENCE, SETHEADING, SETTURTLE, SETX,\n"
|
||||||
|
"SETXY, SETY, SHOW, SHOWTURTLE, SNAP, STARTDISPLAY, STF, STOP, SUM,\n"
|
||||||
|
"THEN, TO, TOOT, TRACE, TYPE, VERSION, WIPE, WIPECLEAN, WORD, WORDP,\n"
|
||||||
|
"XCOR, YCOR.\n\n");
|
||||||
|
sim_printf ("MIT AI memo 315 documents a later version of 11LOGO but may be helpful\n");
|
||||||
|
sim_printf ("in exploring the software. It can currently be found here:\n");
|
||||||
|
sim_printf ("https://dspace.mit.edu/handle/1721.1/6228\n\n");
|
||||||
|
sim_printf ("To get started with turtle graphics, type STARTDISPLAY.\n\n\n");
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
t_stat
|
t_stat
|
||||||
ng_set_type(UNIT *uptr, int32 val, CONST char *cptr, void *desc)
|
ng_set_type(UNIT *uptr, int32 val, CONST char *cptr, void *desc)
|
||||||
{
|
{
|
||||||
|
@ -289,6 +325,12 @@ t_stat ng_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr
|
||||||
fprintf(st, "Set SCALE to one of 1, 2, 3, or 4 to select full size, half size,\n");
|
fprintf(st, "Set SCALE to one of 1, 2, 3, or 4 to select full size, half size,\n");
|
||||||
fprintf(st, "quarter size, or eighth size.\n\n");
|
fprintf(st, "quarter size, or eighth size.\n\n");
|
||||||
|
|
||||||
|
fprintf(st, "The primary software for the NG display was MIT's PDP-11 Logo, or 11LOGO.\n");
|
||||||
|
fprintf(st, "To run 11LOGO:\n\n\n");
|
||||||
|
fprintf(st, " sim> set cpu 11/45\n");
|
||||||
|
fprintf(st, " sim> set ng enabled\n");
|
||||||
|
fprintf(st, " sim> boot ng\n\n");
|
||||||
|
|
||||||
return SCPE_OK;
|
return SCPE_OK;
|
||||||
}
|
}
|
||||||
#else /* USE_DISPLAY not defined */
|
#else /* USE_DISPLAY not defined */
|
||||||
|
|
|
@ -48,6 +48,7 @@ struct ROM_File_Descriptor {
|
||||||
{"VAX/vmb.exe", "VAX/vax_vmb_exe.h", 44544, 0xFFC014BB, "vax_vmb_exe"},
|
{"VAX/vmb.exe", "VAX/vax_vmb_exe.h", 44544, 0xFFC014BB, "vax_vmb_exe"},
|
||||||
{"PDP11/lunar11/lunar.lda", "PDP11/pdp11_vt_lunar_rom.h", 13824 , 0xFFF15D00, "lunar_lda"},
|
{"PDP11/lunar11/lunar.lda", "PDP11/pdp11_vt_lunar_rom.h", 13824 , 0xFFF15D00, "lunar_lda"},
|
||||||
{"PDP11/dazzledart/dazzle.lda", "PDP11/pdp11_dazzle_dart_rom.h", 6096, 0xFFF83848, "dazzle_lda"},
|
{"PDP11/dazzledart/dazzle.lda", "PDP11/pdp11_dazzle_dart_rom.h", 6096, 0xFFF83848, "dazzle_lda"},
|
||||||
|
{"PDP11/11logo/11logo.lda", "PDP11/pdp11_11logo_rom.h", 26009, 0xFFDD77F7, "logo_lda"},
|
||||||
{"swtp6800/swtp6800/swtbug.bin", "swtp6800/swtp6800/swtp_swtbug_bin.h", 1024, 0xFFFE4FBC, "swtp_swtbug_bin"},
|
{"swtp6800/swtp6800/swtbug.bin", "swtp6800/swtp6800/swtp_swtbug_bin.h", 1024, 0xFFFE4FBC, "swtp_swtbug_bin"},
|
||||||
{"3B2/rom_400.bin", "3B2/rom_400_bin.h", 32768, 0xFFD55762, "rom_400_bin"},
|
{"3B2/rom_400.bin", "3B2/rom_400_bin.h", 32768, 0xFFD55762, "rom_400_bin"},
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue