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/ng.h"
|
||||
#include "sim_video.h"
|
||||
#include "pdp11_11logo_rom.h"
|
||||
|
||||
/* Run a NG cycle every this many PDP-11 "cycle" times. */
|
||||
#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_svc(UNIT *uptr);
|
||||
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_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);
|
||||
|
@ -103,7 +105,7 @@ DEVICE ng_dev = {
|
|||
"NG", &ng_unit, ng_reg, ng_mod,
|
||||
1, 8, 16, 1, 8, 16,
|
||||
NULL, NULL, &ng_reset,
|
||||
NULL, NULL, NULL,
|
||||
&ng_boot, NULL, NULL,
|
||||
&ng_dib, DEV_DIS | DEV_DISABLE | DEV_UBUS | DEV_DEBUG,
|
||||
0, ng_deb, NULL, NULL, NULL, &ng_help, NULL,
|
||||
&ng_description
|
||||
|
@ -193,6 +195,40 @@ ng_reset(DEVICE *dptr)
|
|||
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
|
||||
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, "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;
|
||||
}
|
||||
#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"},
|
||||
{"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/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"},
|
||||
{"3B2/rom_400.bin", "3B2/rom_400_bin.h", 32768, 0xFFD55762, "rom_400_bin"},
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue