See the “Debugger Commands” in the manual for more details.
To enter debugger from an already running program hit M-BREAK
(BREAK is bound to PgDn by default in usim
).
C-b (and the more verbose M-b) show the back trace.
C-n and C-p can be used to navigate the back trace.
M-l will dump the current function in disassembled form.w
C-c and M-c will try and continue from the current frame.
C-e will open the file the function is associated with.
C-r will return a value from the current frame.
M-C-r will re-run the current frame with the same arguments.
Overal working of QC:
Serial SPY protocol (values are octal, as usual):
<ADDRESS>/ Read from address ADDRESS, used by DBG-READ. <ADDRESS>:<VALUE>: Write value VALUE to address ADDRESS, used by DBG-WRITE. R Read status, returns a octal number. <N>S Manipulates some kind of high serial bit. <N>A Set the baud rate of the UART, where N is one of: 0: 50. baud 1: 75. baud 2: 110. baud 4: 150. baud 5: 300. baud 6: 600. baud 7: 1200. baud 10: 1800. baud 11: 2000. baud 12: 2400. baud 13: 3600. baud 14: 4800. baud 15: 7200. baud 16: 9600. baud 17: 19200. baud <LOW>L<MIDDLE>M<HIGH>H1I CC-EXECUTE-R <LOW>L<MIDDLE>M<HIGH>H7I CC-EXECUTE-W <LOW>L<MIDDLE>M<HIGH>H0I CC-EXECUTE-LOAD-DEBUG-IR
Error code:
#o7 ERRONEOUS COMMAND RECEIVED BY DEBUGGER #o10 DEBUGGER GOT PARITY ERROR, RESETTING DEBUGGER; when getting this we type out #o33 o15 Nothing.
When tracing, the macro disassembler prints out the PC, this can be used to figure out where in the LOD:
00012140044 054010 BR-NOT-NIL 12140055 00012140046 040206 CALL D-PDL FEF|134 00012140050 076060 PUSH-NUMBER 48 00012140052 042143 MOVE D-PDL FEF|99 00012140054 055324 (MISC) LENGTH D-PDL
E.g, for a load band from System 99:
$ ~/l/usim/lod -p 00012140052 LOD %SYS-COM-AREA-ORIGIN-PNTR: 00000000400 03200004000 (0x1a000800) %SYS-COM-BAND-FORMAT: 00000000410 01200000000 (0x0a000000) %SYS-COM-POINTER-WIDTH: 00000000432 01200000031 (0x0a000019) %SYS-COM-MAJOR-VERSION: 00000000427 00600000000 (0x06000000) %SYS-COM-DESIRED-MICROCODE-VERSION: 00000000430 00600000000 (0x06000000) fef @ 12140052: pc 12140052, addr 2430012 [...] 30602143675 31001656007 (0xc8075c07) 'LISP-REINITIALIZE' 00002427411 31200400001 (0xca020001) 00002427412 31220000000 (0xca400000) [...] 00002427771 23401056520 (0x9c045d50) 00002427772 042401 MOVE D-PDL '401 00002427772 173010 POP FEF|8 00002427773 042160 MOVE D-PDL FEF|112 00002427773 072403 EQ '403 00002427774 034004 BR-NIL 2430001 00002427774 073157 SET-NIL FEF|111 00002427775 073156 SET-NIL FEF|110 00002427775 073155 SET-NIL FEF|109 00002427776 014011 BR 2430010 00002427776 042160 MOVE D-PDL FEF|112 00002427777 072404 EQ '404 00002427777 034006 BR-NIL 2430006 00002430000 075113 (MISC) %lambda-tv-quad-slot D-PDL 00002430000 173157 POP FEF|111 00002430001 075112 (MISC) %lambda-rg-quad-slot D-PDL 00002430001 173156 POP FEF|110 00002430002 075116 (MISC) %lambda-sdu-quad-slot D-PDL 00002430002 173155 POP FEF|109 00002430003 073154 SET-NIL FEF|108 00002430003 073153 SET-NIL FEF|107 00002430004 073152 SET-NIL FEF|106 00002430004 073151 SET-NIL FEF|105 00002430005 073150 SET-NIL FEF|104 00002430005 073147 SET-NIL FEF|103 00002430006 073146 SET-NIL FEF|102 00002430006 073145 SET-NIL FEF|101 00002430007 042205 MOVE D-PDL FEF|133 00002430007 015576 (MISC) BOUNDP D-IGNORE 00002430010 034002 BR-NIL 2430013 00002430010 002144 MOVE D-IGNORE FEF|100 00002430011 054010 BR-NOT-NIL 2430022 00002430011 040206 CALL D-PDL FEF|134 00002430012 076060 PUSH-NUMBER 48 00002430012 042143 MOVE D-PDL FEF|99 00002430013 055324 (MISC) LENGTH D-PDL 00002430013 031777 + PDL|511 (undefined) 00002430014 042207 MOVE D-PDL FEF|135 00002430014 142142 MOVE D-LAST FEF|98 00002430015 173144 POP FEF|100 [...]
Notes based on the Pipistrello implementation
This is also used by ram_controller_BOARD for driving the MIG.
Drives ram_controller_BOARD and support_BOARD modules.
These variables are defined in SYS: SYS; SYSDCL LISP.
File loaded into the cold load are defined by COLD-LOAD-FILE-LIST:
SYS: FONTS; CPTFON QFASL SYS: SYS; QRAND QFASL SYS: IO; QIO QFASL SYS: IO; RDTBL QFASL -- done specially SYS: IO; READ QFASL SYS: IO; PRINT QFASL SYS: WINDOW; COLD QFASL SYS: SYS; SGFCTN QFASL SYS: SYS; QEV QFASL SYS: SYS; LTOP QFASL SYS: SYS; QFASL QFASL SYS: IO; MINI QFASL SYS: SYS; QFCTNS QFASL SYS: SYS2; STRING QFASL
When booting (cold, or warm) we call LISP-TOP-LEVEL.
When doing QLD files listed in MINI-FILE-ALIST-LIST get loaded into the running system over MINI:
LOAD-PACKAGES-FILE-ALIST-1 SYS: SYS; PACK4 QFASL GLOBAL-PACKAGE-FILE-ALIST SYS: SYS2; GLOBAL LISP SYS: SYS2; SYSTEM LISP LOAD-PACKAGES-FILE-ALIST-2 SYS: SYS; PKGDCL LISP INNER-SYSTEM-FILE-ALIST SYS: SYS; QMISC QFASL SYS: SYS; SORT QFASL -- Needed by FLAVOR SYS: SYS2; DEFSEL QFASL -- Needed by FQUERY SYS: IO; FORMAT QFASL -- ditto SYS: IO1; FQUERY QFASL -- Needed by everything in sight SYS: SYS2; FLAVOR QFASL -- Needed by PROCES SYS: SYS2; PRODEF QFASL -- Definitions for PROCES SYS: SYS2; PROCES QFASL SYS: WINDOW; EH QFASL SYS: WINDOW; EHR QFASL SYS: WINDOW; EHC QFASL SYS: SYS2; DISASS QFASL -- EH calls subroutines in DISASS SYS: IO; DISK QFASL SYS: SYS2; LOGIN QFASL -- ditto SYS: IO; RDDEFS QFASL -- Load this before trying to read any #\'s SYS: SYS2; HOST QFASL SYS: SYS2; HASH QFASL -- Needed by PATHNM SYS: IO; STREAM QFASL -- Probably needed by any file system -- PATHNM must be the last file in this list. It -- breaks things while cold loading that QLD knows how -- to fix after this alist is loaded. SYS: IO; PATHNM QFASL CHAOS-FILE-ALIST SYS: IO; CHSNCP QFASL SYS: IO; CHSAUX QFASL SYS: IO; QFILE QFASL SITE-FILE-ALIST SYS: SYS; SITE HOST-TABLE-FILE-ALIST SYS: IO; HSTTBL SYS: IO; LMLOCS
Then, SYSTEM-SYSTEM-FILE-ALIST is loaded:
SYS: SYS2; MAKSYS QFASL SYS: SYS2; PATCH QFASL SYS: SYS; SYSDCL QFASL
At this point, QLD will do MAKE-SYSTEM on SYSTEM to load the rest of the Lisp Machine system. And we are done.
These variables are defined in SYS: SYS; SYSDCL LISP.
File loaded into the cold load are defined by COLD-LOAD-FILE-LIST:
SYS: FONTS; CPTFON QFASL SYS: SYS; QRAND QFASL SYS: IO; QIO QFASL SYS: IO; RDTBL QFASL -- done specially RTCs fine on System 78. SYS: IO; READ QFASL QCs fine on System 78. SYS: IO; PRINT QFASL SYS: WINDOW; COLD QFASL SYS: SYS; SGFCTN QFASL SYS: SYS; QEV QFASL SYS: SYS; LTOP QFASL SYS: SYS; QFASL QFASL SYS: IO; MINI QFASL SYS: SYS; QFCTNS QFASL SYS: SYS2; STRING QFASL
When booting (cold, or warm) we call LISP-TOP-LEVEL.
When doing QLD files listed in MINI-FILE-ALIST-LIST get loaded into the running system over MINI:
LOAD-PACKAGES-FILE-ALIST-1 SYS: SYS; PACK4 QFASL GLOBAL-PACKAGE-FILE-ALIST SYS: SYS2; GLOBAL LISP SYS: SYS2; SYSTEM LISP LOAD-PACKAGES-FILE-ALIST-2 SYS: SYS; PKGDCL LISP INNER-SYSTEM-FILE-ALIST SYS: SYS2; DEFSEL QFASL -- By (resource si:named-structure-invoke) SYS: SYS2; RESOUR QFASL -- By FILLARRAY SYS: SYS; QMISC QFASL SYS: SYS; SORT QFASL -- Needed by FLAVOR SYS: IO; FORMAT QFASL -- ditto SYS: IO1; FQUERY QFASL -- Needed by everything in sight SYS: SYS2; HASH QFASL -- Needed by FLAVOR,PATHNM SYS: SYS2; FLAVOR QFASL -- Needed by PROCES SYS: SYS2; PRODEF QFASL -- Definitions for PROCES SYS: SYS2; PROCES QFASL SYS: SYS2; NUMER QFASL -- SI:EXPT-HARD needed by PROCES SYS: WINDOW; EH QFASL SYS: WINDOW; EHR QFASL SYS: WINDOW; EHC QFASL SYS: SYS2; DISASS QFASL -- EH calls subroutines in DISASS SYS: IO; DISK QFASL SYS: SYS2; LOGIN QFASL -- ditto SYS: IO; RDDEFS QFASL -- Load this before trying to read any #\'s SYS: SYS2; HOST QFASL SYS: IO; STREAM QFASL -- Probably needed by any file system -- PATHNM must be the last file in this list. It -- breaks things while cold loading that QLD knows how -- to fix after this alist is loaded. SYS: IO; PATHNM QFASL REST-OF-PATHNAMES-FILE-ALIST SYS: IO; PATHST QFASL SYS: IO; OPEN QFASL CHAOS-FILE-ALIST SYS: IO; CHSNCP QFASL SYS: IO; CHSAUX QFASL SYS: IO; QFILE QFASL SITE-FILE-ALIST SYS: SITE; SITE QFASL HOST-TABLE-FILE-ALIST SYS: SITE; HSTTBL QFASL SYS: SITE; LMLOCS QFASL
Then, SYSTEM-SYSTEM-FILE-ALIST is loaded:
SYS: SYS2; MAKSYS QFASL SYS: SYS2; PATCH QFASL SYS: SYS; SYSDCL QFASL
At this point, QLD will do MAKE-SYSTEM on SYSTEM to load the rest of the Lisp Machine system. And we are done.
(DEFMIC %PERMIT-TAIL-RECURSION 306 () NIL T) (DEFMIC %GET-SELF-MAPPING-TABLE 506 (METHOD-FLAVOR-NAME) T) (DEFMIC %SET-SELF-MAPPING-TABLE 336 (MAPPING-TABLE) T)
The read-table only has one additional XR:
(#/ . XR-/#/-MACRO)
From SYS: IO; READ LISP (QCs fine on System 78):
(DEFUN XR-/#/-MACRO (LIST-SO-FAR STREAM) LIST-SO-FAR (LET* ((FLAVOR-NAME (LET ((PACKAGE PKG-USER-PACKAGE)) (READ STREAM))) (INSTANCE (LET ((HANDLER (OR (GET FLAVOR-NAME 'READ-INSTANCE) (GET-FLAVOR-HANDLER-FOR FLAVOR-NAME ':READ-INSTANCE))) (SELF NIL)) (FUNCALL HANDLER ':READ-INSTANCE FLAVOR-NAME STREAM))) (CHAR (TYI STREAM))) ;; Make sure that the read-instance function read as much as it was supposed to. (IF (EQ CHAR #/) INSTANCE (FUNCALL STREAM ':UNTYI CHAR) (FERROR NIL "Malformatted #~S... encountered during READ" FLAVOR-NAME))))
These variables are defined in SYS: SYS; SYSDCL LISP.
File loaded into the cold load are defined by COLD-LOAD-FILE-LIST:
SYS: FONTS; CPTFON QFASL SYS: SYS; QRAND QFASL SYS: IO; QIO QFASL SYS: IO; RDTBL QFASL -- done specially SYS: IO; READ QFASL SYS: IO; PRINT QFASL SYS: WINDOW; COLD QFASL SYS: SYS; SGFCTN QFASL SYS: SYS; EVAL QFASL SYS: SYS; TYPES QFASL SYS: SYS; LTOP QFASL SYS: SYS; QFASL QFASL SYS: IO; MINI QFASL SYS: SYS; QFCTNS QFASL SYS: SYS2; STRING QFASL SYS: SYS; CLPACK QFASL SYS: SYS2; GLOBAL QFASL SYS: SYS2; SYSTEM QFASL
When booting (cold, or warm) we call LISP-TOP-LEVEL.
When doing QLD files listed in MINI-FILE-ALIST-LIST get loaded into the running system over MINI:
INNER-SYSTEM-FILE-ALIST SYS: SYS2; DEFSEL QFASL -- By (resource si:named-structure-invoke) SYS: SYS2; RESOUR QFASL -- By FILLARRAY SYS: SYS; QMISC QFASL SYS: SYS; SORT QFASL -- Needed by FLAVOR SYS: IO; FORMAT QFASL -- ditto SYS: IO1; FQUERY QFASL -- Needed by everything in sight SYS: SYS2; HASH QFASL -- Needed by FLAVOR,PATHNM SYS: SYS2; FLAVOR QFASL -- Needed by PROCES SYS: SYS2; HASHFL QFASL -- Make flavors really work. SYS: SYS2; PRODEF QFASL -- Definitions for PROCES SYS: SYS2; PROCES QFASL SYS: SYS2; NUMER QFASL -- SI:EXPT-HARD needed by PROCES SYS: WINDOW; EH QFASL SYS: WINDOW; EHF QFASL SYS: WINDOW; EHC QFASL SYS: SYS2; DISASS QFASL -- EH calls subroutines in DISASS SYS: IO; DISK QFASL SYS: SYS2; LOGIN QFASL -- ditto SYS: IO; RDDEFS QFASL -- Load this before trying to read any #\'s SYS: SYS2; HOST QFASL SYS: IO; STREAM QFASL -- Probably needed by any file system -- PATHNM must be the last file in this list. It -- breaks things while cold loading that QLD knows how -- to fix after this alist is loaded. SYS: IO; PATHNM QFASL REST-OF-PATHNAMES-FILE-ALIST SYS: IO; PATHST QFASL SYS: FILE2; PATHNM QFASL SYS: FILE; LMPARS QFASL SYS: IO; OPEN QFASL CHAOS-FILE-ALIST SYS: IO; CHSNCP QFASL SYS: IO; CHSAUX QFASL SYS: IO; QFILE QFASL SITE-FILE-ALIST SYS: SITE; SITE QFASL HOST-TABLE-FILE-ALIST SYS: SITE; HSTTBL QFASL SYS: SITE; LMLOCS QFASL
Then, SYSTEM-SYSTEM-FILE-ALIST is loaded:
SYS: SYS2; MAKSYS QFASL SYS: SYS2; PATCH QFASL SYS: SYS; SYSDCL QFASL
At this point, QLD will do MAKE-SYSTEM on SYSTEM to load the rest of the Lisp Machine system. And we are done.
These variables are defined in SYS: SYS; SYSDCL LISP.
File loaded into the cold load are defined by COLD-LOAD-FILE-LIST:
SYS: FONTS; CPTFON QFASL SYS: SYS; QRAND QFASL SYS: SYS; FSPEC QFASL SYS: IO; QIO QFASL SYS: IO; RDTBL QFASL -- done specially SYS: IO; CRDTBL QFASL -- done specially SYS: IO; READ QFASL SYS: IO; PRINT QFASL SYS: WINDOW; COLD QFASL SYS: SYS; SGFCTN QFASL SYS: SYS; EVAL QFASL SYS: SYS; TYPES QFASL SYS: SYS; LTOP QFASL SYS: SYS; QFASL QFASL SYS: IO; MINI QFASL SYS: SYS; QFCTNS QFASL SYS: SYS2; STRING QFASL SYS: SYS2; CHARACTER QFASL SYS: SYS; CLPACK QFASL SYS: COLD; GLOBAL QFASL SYS: COLD; SYSTEM QFASL SYS: COLD; LISP QFASL
When booting (cold, or warm) we call LISP-TOP-LEVEL.
When doing QLD files listed in MINI-FILE-ALIST-LIST get loaded into the running system over MINI:
INNER-SYSTEM-FILE-ALIST SYS: SYS2; DEFSEL QFASL -- By (resource named-structure-invoke) SYS: SYS2; RESOUR QFASL -- By FILLARRAY SYS: SYS; QMISC QFASL SYS: SYS; SORT QFASL -- Needed by FLAVOR SYS: IO; FORMAT QFASL -- ditto SYS: IO1; FQUERY QFASL -- Needed by everything in sight SYS: SYS2; HASH QFASL -- Needed by FLAVOR,PATHNM SYS: SYS2; FLAVOR QFASL -- Needed by PROCES SYS: SYS2; HASHFL QFASL -- Make flavors really work. SYS: SYS2; PRODEF QFASL -- Definitions for PROCES SYS: SYS2; PROCES QFASL SYS: SYS2; NUMER QFASL -- SI:EXPT-HARD needed by PROCES SYS: EH; EH QFASL SYS: EH; EHF QFASL SYS: EH; EHC QFASL SYS: EH; EHBPT QFASL SYS: SYS2; DISASS QFASL -- EH calls subroutines in DISASS SYS: SYS2; DESCRIBE QFASL -- For hack value SYS: IO; DISK QFASL SYS: SYS2; LOGIN QFASL -- ditto SYS: IO; RDDEFS QFASL -- Load this before trying to read any #\'s SYS: NETWORK; HOST QFASL SYS: NETWORK; PACKAGE QFASL SYS: IO; FILE; ACCESS QFASL SYS: IO; STREAM QFASL -- Probably needed by any file system -- PATHNM must be the last file in this list. It -- breaks things while cold loading that QLD knows how -- to fix after this alist is loaded. SYS: IO; FILE; PATHNM QFASL REST-OF-PATHNAMES-FILE-ALIST SYS: IO; FILE; PATHST QFASL SYS: IO; FILE; LOGICAL QFASL SYS: FILE2; PATHNM QFASL SYS: FILE; LMPARS QFASL SYS: IO; FILE; OPEN QFASL SYS: NETWORK; CHAOS; CHSNCP QFASL SYS: NETWORK; CHAOS; CHUSE QFASL SYS: NETWORK; CHAOS; QFILE QFASL ETHERNET-FILE-ALIST SYS: IO; SIMPLE-ETHER QFASL SYS: IO; ADDR-RES QFASL SITE-FILE-ALIST SYS: SITE; SITE QFASL HOST-TABLE-FILE-ALIST SYS: SITE; HSTTBL QFASL SYS: SITE; LMLOCS QFASL
Then, SYSTEM-SYSTEM-FILE-ALIST is loaded:
SYS: SYS2; MAKSYS QFASL SYS: SYS2; PATCH QFASL SYS: SYS; SYSDCL QFASL
At this point, QLD will do MAKE-SYSTEM on SYSTEM to load the rest of the Lisp Machine system. And we are done.
This was written by Brad Parker, around 10/17/04.
While writing a CADR emulator I ran into some issues and/or discrepancies in the available documentation. I’ve tried to list them here.
[These are my conclusions; If you read them and disagree, please send me email and set me straight. I do not have a functional hardware description (i.e. verilog) yet, so some things are assuptions based on quick scans of the schematics]
Here’s an interesting quote:
;NOTE THAT THE LC HARDWARE IGNORES THE LOW BIT ;AND READS IT BACK AS ZERO IN HALFWORD MODE
First, let me quote from "lmdocs: popj.2", a document which I found illuminating.
POPJ-AFTER-NEXT in combination with JUMP and DISPATCH [CONTRL] Dispatch R P N PC SPC NOP 0 0 0 jump pop no 0 0 1 jump pop yes 0 1 0 jump push no 0 1 1 jump push yes 1 0 0 popj pop no 1 0 1 popj pop yes 1 1 0 popj pop no 1 1 1 popj pop yes Jump R P N PC SPC NOP (cond 0 0 0 jump pop no satisfied) 0 0 1 jump pop yes 0 1 0 jump push no 0 1 1 jump push yes 1 0 0 popj pop no 1 0 1 popj pop yes 1 1 0 iwrite 1 1 1 iwrite
Jump with condition not satisfied is similar to ALU and BYTE instructions.
Possible mods to increase usefulness:
A dispatch-call or jump-call in combination with popj-after-next should neither popj nor pushj but just jump. If it’s xct-next the right thing happens. If the next instruction is inhibited, well that’s OK. However, if the next instruction is not inhibited, and it’s a CALL, normally (without the previous call) would be like tail recursive, but here will end up with two return addresses on pdl, however, the top one is the address of the place called in the first instruction and the one under that is the original return so that’s right too.
Dispatch example - POPJ+DISPATCH, enumerating cases
001 LABEL (CHECK-PAGE-READ) 002 (POPJ-AFTER-NEXT DISPATCH TRANSPORT READ-MEMORY-DATA) ;FOLLOW ALL INVZ 003 ((M-T) Q-TYPED-POINTER READ-MEMORY-DATA) ;RETURN C(E) IN M-T 004 005
dispatch yields N=0,P=0,R=0 - exec check-page-read jump fetch 002/popj - exec popj + dispatch fetch 003/alu new pc<- dispatch address (disable popj) - exec alu fetch new pc (dispatch address) dispatch yields N=0,P=0,R=1 - exec check-page-read jump fetch 002/popj - exec popj + dispatch fetch 003/alu new pc <- spc[spc-ptr--] (disable popj) - exec alu fetch new pc (from stack) dispatch yields N=0,P=1,R=0 - exec check-page-read jump fetch 002/popj - exec popj + dispatch fetch 003/alu spc[++spc-ptr] <- 004 new pc <- dispatch address (disable popj) - exec alu fetch new pc (dispatch address) dispatch yields N=0,P=1,R=1 - exec check-page-read jump fetch 002/popj - exec popj + dispatch fetch 003/alu ignore dispatch, do popj new pc <- spc[spc-ptr--] if pc14, advance-lc - exec alu fetch new pc dispatch yields N=1,P=0,R=0 - exec check-page-read jump fetch 002/popj - exec popj + dispatch fetch 003/alu new pc<- dispatch address (disable popj) - (nop - pipe flush) fetch new pc dispatch yields N=1,P=0,R=1 - exec check-page-read jump fetch 002/popj - exec popj + dispatch fetch 003/alu new pc <- spc[spc-ptr--] if pc14, advance-lc (disable popj) - (nop - pipe flush) fetch new pc dispatch yields N=1,P=1,R=0 - exec check-page-read jump fetch 002/popj - exec popj + dispatch fetch 003/alu spc[++spc-ptr] <- 005 new pc <- dispatch address (disable popj) - exec alu fetch new pc
Another Dispatch example - POPJ+DISPATCH with CALL, enumerating cases
001 LABEL (CHECK-PAGE-READ) 002 (POPJ-AFTER-NEXT DISPATCH TRANSPORT READ-MEMORY-DATA) ;FOLLOW ALL INVZ 003 (CALL-XCT-NEXT FUNC) 004 005
dispatch yields N=0,P=0,R=0 - exec check-page-read jump fetch 002/popj - exec popj + dispatch fetch 003/call new pc<- dispatch address (disable popj) - exec call fetch new pc (dispatch address) spc[++spc-ptr] <- new pc+1 new pc<- call address - exec 1st inst @ dispatch address fetch call address - exec 1st inst @ call address [help! I'm confused here. I don't think the action above is correct. When the call returns it will return to new pc + 1...] dispatch yields N=0,P=0,R=1 - exec check-page-read jump fetch 002/popj - exec popj + dispatch fetch 003/call new pc <- spc[spc-ptr--] (disable popj) - exec call fetch new pc (from stack) spc[++spc-ptr] <- new pc+1 new pc<- call address - exec 1st inst @ new pc fetch call address - exec 1st inst @ call address [again; I don't think the action above is correct. When the call returns it will return to new pc + 1...] dispatch yields N=0,P=1,R=0a - exec check-page-read jump fetch 002/popj - exec popj + dispatch fetch 003/call spc[++spc-ptr] <- 004 new pc <- dispatch address (disable popj) - exec call fetch new pc (dispatch address) spc[++spc-ptr] <- new pc+1 new pc<- call address - exec 1st inst @ dispatch address fetch call address - exec 1st inst @ call address dispatch yields N=0,P=1,R=1 - exec check-page-read jump fetch 002/popj - exec popj + dispatch fetch 003/call ignore dispatch, do popj new pc <- spc[spc-ptr--] if pc14, advance-lc - exec call fetch new pc (from stack) spc[++spc-ptr] <- new pc+1 new pc<- call address - exec 1st inst @ new pc fetch call address - exec 1st inst @ call address dispatch yields N=1,P=0,R=0 - exec check-page-read jump fetch 002/popj - exec popj + dispatch fetch 003/call new pc<- dispatch address (disable popj) - (nop - pipe flush) fetch new pc (dispatch address) - exec 1st inst @ new pc fetch new pc+1 dispatch yields N=1,P=0,R=1 - exec check-page-read jump fetch 002/popj - exec popj + dispatch fetch 003/call new pc <- spc[spc-ptr--] if pc14, advance-lc (disable popj) - (nop - pipe flush) fetch new pc (from stack) - exec 1st inst @ new pc fetch new pc+1 dispatch yields N=1,P=1,R=0 - exec check-page-read jump fetch 002/popj - exec popj + dispatch fetch 003/call spc[++spc-ptr] <- 005 new pc <- dispatch address (disable popj) - exec call fetch new pc (dispatch address) spc[++spc-ptr] <- dispatch address+1 new pc<- call address - exec 1st inst @ new pc fetch call address - exec 1st inst @ call address
Another Dispatch example - with CALL, enumerating cases
001 (NOP) 002 (DISPATCH TRANSPORT READ-MEMORY-DATA) ;FOLLOW ALL INVZ 003 (CALL FUNC) 004 005
dispatch yields N=0,P=0,R=0 - exec check-page-read jump fetch 002/dispatch - exec dispatch fetch 003/call new pc <- dispatch address - exec call w/n-bit fetch new pc (dispatch address) spc[++spc-ptr] <- new pc+1 new pc<- call address - (nop - pipe flush) fetch call address - exec 1nd inst @ call address
The call pushes the dispatch address + 1 and the pipe stalls because the call has the N bit set, followed by the 1st instruction at the call address.
For creating a TAGS database that also contains DEFMETHOD mixins for :BEFORE or :AFTER, one can pass the following to etags:
-r "/(defmethod ([A-Z-_ \t(]+\(:BEFORE\|:AFTER\)?[ \t]+:\([A-Z-]+\)/\2/i"
The following chapters are intended to be merged into the Lisp Machine Manual when they have been written.
This section describes the format in which objects are stored in the Lisp Machine.
---------------------------------------------------------------- | 2 |1| 5 | 24 | ---------------------------------------------------------------- | | | | CDR CODE--| | | | USER CONTROL-| | | | | DATA TYPE------------| | POINTER-----------------------------------------|
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | 24 | ---------------------------------------------------------------- | | | | | VALUE OF FIXNUM-------------------------|
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
---------------------------------------------------------------- | | ----------------------------------------------------------------
This section describes the Lisp Machine’s interpreted order code, referred to below as "macrocode." The macrocode is designed to be highly bit-efficient, and well-suited to Lisp. The compilation of Lisp into macrocode is very straightforward, as will be shown in examples below.
29-Oct-83 11:21:24-CDT,1900;000000000000 Return-Path: <@MIT-MC:rsl@SPA-NIMBUS> Received: from MIT-MC by UTEXAS-20.ARPA with TCP; Tue 25 Oct 83 15:19:04-CDT Received: from SPA-RUSSIAN by SPA-Nimbus with CHAOS; Tue 25-Oct-83 13:24:02-PST Date: Tuesday, 25 October 1983, 13:23-PST From: Richard Lamson <rsl at SPA-NIMBUS> Subject: pathname defaulting To: Jonathan Slocum <LRC.Slocum at UTEXAS-20 at mc>, cmp.cohen at UTEXAS-20 at mc, HOSS at SCRC-TENEX Cc: slug at UTEXAS-20 at mc In-reply-to: The message of 25 Oct 83 07:42-PST from Jonathan Slocum <LRC.Slocum at UTEXAS-20> Date: Tue 25 Oct 83 10:42:44-CDT From: Jonathan Slocum <LRC.Slocum@UTEXAS-20.ARPA> .... What do you think -- is this a bug, or a feature? The way things are arranged now, it is not safe to reconfigure a configured band that one has used the editor in [for example], since all sorts of old pathnames start getting saved away for future use. Beware... As documented in the Lisp Machine manual on page 424, the "right" way to create a world is to do as little as possible in it before saving it. That is, you should not use the editor, the File System Editor, Peek, etc. Please read the last paragraph on that page for (slightly) incorrect information but sound advice. You should do something which looks like this: <cold boot> (login "whoever" T) ; don't load an init file -- makes your world dirtier (make-system ...) ; load whatever things you want in your world or (load ...) ; repeat for each file you want loaded (si:update-site-configuration-info) ; only if the site information has changed (si:full-gc) ; optional -- makes the world somewhat smaller. (disk-save ...) ; save it away Although it says to use the function PRINT-DISK-LABEL, I try to do that before cold booting, so even the little garbage that function generates is not present in the saved world.