[LispM] LispM assembly reference?
Fabrice Leal
fabrice.leal.ch at gmail.com
Tue Nov 1 04:00:54 PDT 2016
Thanks for the pointers @alfred and @steven, i'll do more research!
Yeah I don't have a specific machine as a target, I was just hoping I could
find some thorough reference in some LispM that I could study before
starting anything. As I said, it wouldnt be a 100% emulation of an existing
machine.
On Tue, Nov 1, 2016 at 8:47 AM, Alfred M. Szmidt <ams at gnu.org> wrote:
> Was skimming this Lisp Machine manual
> (http://bitsavers.trailing-edge.com/pdf/mit/cadr/chinual_
> 3rdEd_Mar81.pdf)
> and fantasizing about making up some lisp-processor-like emulator.
>
> Does anybody have resources on the assembly language used by Lisp
> Machines (check chapter 27, page 432 of pdf) or the Ivory
> processors? I cant find a full reference online.
>
> There is really no assembly language for the Lisp Machines. The
> "stuff" you see there cannot be inputted as is, only via writing Lisp
> code and compiling/interpreting it. So the "assembly" is infact the
> Lisp form entered.
>
> How for example ASSQ and GET and other "basic" functions are
> implemented is done in microcode for the CADR/Lambda/3600 (the Ivory
> is different), the definitions of ASSQ and GET look like this:
>
> XGET (MISC-INST-ENTRY GET)
> ((M-A) Q-TYPED-POINTER C-PDL-BUFFER-POINTER-POP) ;ARG2, PROPERTY
> NAME
> (CALL-XCT-NEXT PLGET) ;ARG2, FROB TO GET FROM, GET ITS PLIST INTO
> M-T
> ((M-T) Q-TYPED-POINTER C-PDL-BUFFER-POINTER-POP)
> XGET1 (POPJ-EQUAL M-T A-V-NIL) ;END OF PLIST REACHED
> (CALL-XCT-NEXT QCAR)
> ((C-PDL-BUFFER-POINTER-PUSH) M-T) ;SAVE THIS PLIST NODE
> (JUMP-EQUAL M-T A-A QTAD) ;GOT IT, RETURN CADR OF
> NODE
> (JUMP-XCT-NEXT XGET1)
> (CALL QTDD) ;TAKE CDDR AND LOOK AGAIN
>
> XASSQ (MISC-INST-ENTRY ASSQ)
> ((M-T) Q-TYPED-POINTER C-PDL-BUFFER-POINTER-POP) ;ARG2
> ((M-A) Q-TYPED-POINTER C-PDL-BUFFER-POINTER-POP) ;ARG1
> XASSQ1 (POPJ-EQUAL M-T A-V-NIL)
> (CALL-XCT-NEXT QMAA)
> ((C-PDL-BUFFER-POINTER-PUSH) M-T)
> (JUMP-EQUAL M-T A-A QTA)
> (JUMP-XCT-NEXT XASSQ1)
> (CALL QTD)
>
> But, the only way to call them is to evaluate a Lisp form, or compile
> a Lisp form and FUNCALL it.
>
> You will also need to be a bit more specific on which machine you are
> talking about, Ivory is vastly different from say CADR, Lambda and the
> 36xx machines. Though a good start is the CADR document, and the
> actual CADR microcode for understanding how the Lisp part works.
>
> Cheers!
>
--
---
Fabrice Leal
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </archives/lispm/attachments/20161101/25d72e3d/attachment.html>
More information about the LispM
mailing list