Difference between revisions of "Maxc Byte Lisp"

From Computer History Wiki
Jump to: navigation, search
m (Additional PDP-10 instructions)
(9-bit byte codes.)
Line 45: Line 45:
 
| REWIND
 
| REWIND
 
| Reverse shallow-deep bindings in a frame
 
| Reverse shallow-deep bindings in a frame
 +
|}
 +
 +
==Byte Lisp instructions==
 +
 +
These instructions are 9 bits.  They are defined in the microcode source files '''lispm1.mc''' and '''lispm2.mc''', which are for Maxc1 and Maxc2, respectively.
 +
 +
{| class="wikitable"
 +
! Opcode
 +
! Mnemonic
 +
|-
 +
| 601
 +
| SVARX
 +
|-
 +
| 603
 +
| LVARX
 +
|-
 +
| 605
 +
| XVARX
 +
|-
 +
| 607
 +
| ARG
 +
|-
 +
| 611
 +
| CONSTX
 +
|-
 +
| 613
 +
| SDSETX
 +
|-
 +
| 615
 +
| SSETX
 +
|-
 +
| 617
 +
| LDSETX
 +
|-
 +
| 621
 +
| LSETX
 +
|-
 +
| 623
 +
| XDSETX
 +
|-
 +
| 625
 +
| XSETX
 +
|-
 +
| 627
 +
| JUMPXX
 +
|-
 +
| 631
 +
| GETLIST
 +
|-
 +
| 633
 +
| ASSOC
 +
|-
 +
| 635
 +
| ITIMES2
 +
|-
 +
| 637
 +
| IQUOT
 +
|-
 +
| 641
 +
| IREMN
 +
|-
 +
| 643
 +
| IOR2
 +
|-
 +
| 645
 +
| IXOR2
 +
|-
 +
| 647
 +
| BLSH
 +
|-
 +
| 651
 +
| BASH
 +
|-
 +
| 653
 +
| NTYP
 +
|-
 +
| 702
 +
| MINONE
 +
|-
 +
| 703
 +
| ZERO
 +
|-
 +
| 704
 +
| ONE
 +
|-
 +
| 705
 +
| TWO
 +
|-
 +
| 706
 +
| SIC
 +
|-
 +
| 707
 +
| NIL
 +
|-
 +
| 710
 +
| T
 +
|-
 +
| 711
 +
| COPY
 +
|-
 +
| 712
 +
| POP
 +
|-
 +
| 714
 +
| POP2
 +
|-
 +
| 715
 +
| POP3
 +
|-
 +
| 716
 +
| VAG
 +
|-
 +
| 717
 +
| IPLUS2
 +
|-
 +
| 720
 +
| IDIF
 +
|-
 +
| 721
 +
| IAND2
 +
|-
 +
| 722
 +
| ADD1
 +
|-
 +
| 723
 +
| SUB1
 +
|-
 +
| 725
 +
| DBIND
 +
|-
 +
| 726
 +
| BIND
 +
|-
 +
| 727
 +
| UNBIND
 +
|-
 +
| 730
 +
| RETURN
 +
|-
 +
| 731
 +
| XRETURN
 +
|-
 +
| 732
 +
| JUMP IF 0(PP) = NIL
 +
|-
 +
| 733
 +
| JUMP IF 0(PP) # NIL
 +
|-
 +
| 734
 +
| JUMP IF 0(PP) # -1(PP)
 +
|-
 +
| 735
 +
| JUMP IF 0(PP) = -1(PP)
 +
|-
 +
| 736
 +
| JUMP IF 0(PP) IS NOT AN ATOM
 +
|-
 +
| 737
 +
| JUMP IF 0(PP) IS AN ATOM
 +
|-
 +
| 740
 +
| JUMP IF 0(PP) IS NOT A LIST
 +
|-
 +
| 741
 +
| JUMP IF 0(PP) IS A LIST
 +
|-
 +
| 742
 +
| JNNUM
 +
|-
 +
| 743
 +
| JNUM (TYPE .E. FLOATT TO SMALLT)
 +
|-
 +
| 744
 +
| JNFIXP
 +
|-
 +
| 745
 +
| JFIXP (TYPE .E. FIXT TO SMALLT)
 +
|-
 +
| 746
 +
| JUMP IF 0(PP) IS NOT OF TYPE = NEXTBYTE
 +
|-
 +
| 747
 +
| JUMP IF 0(PP) IS OF TYPE = NEXTBYTE
 +
|-
 +
| 750
 +
| JUMP IF -1(PP) .NE. 0(PP)
 +
|-
 +
| 751
 +
| JUMP IF -1(PP) .E. 0(PP)
 +
|-
 +
| 752
 +
| JUMP IF -1(PP) .GE. 0(PP)
 +
|-
 +
| 753
 +
| JUMP IF -1(PP) .L. 0(PP)
 +
|-
 +
| 754
 +
| JUMP IF -1(PP) .G. 0(PP)
 +
|-
 +
| 755
 +
| JUMP IF -1(PP) .LE. 0(PP)
 +
|-
 +
| 756
 +
| JUMPX
 +
|-
 +
| 757
 +
| SWAP
 +
|-
 +
| 760
 +
| LAST
 +
|-
 +
| 761
 +
| FETCHFIELD
 +
|-
 +
| 762
 +
| REPLACEFIELD
 +
|-
 +
| 763
 +
| FRPLACD
 +
|-
 +
| 764
 +
| FRPLACA
 +
|-
 +
| 765
 +
| RPLACD
 +
|-
 +
| 766
 +
| RPLACA
 +
|-
 +
| 767
 +
| GETP
 +
|-
 +
| 770
 +
| CDDR
 +
|-
 +
| 771
 +
| CDAR
 +
|-
 +
| 772
 +
| CADR
 +
|-
 +
| 773
 +
| CAAR
 +
|-
 +
| 774
 +
| CDR
 +
|-
 +
| 775
 +
| CAR
 +
|-
 +
| 776
 +
| FMEMB
 
|}
 
|}

Revision as of 09:26, 12 May 2023

Notes about the Maxc Byte Lisp instructions, gleaned from microcode sources.

Additional PDP-10 instructions

It's not entirely clear, but it seems to me most of these are used in addition to the normal PDP-10 instruction set. These are defined in the microcode source file lisp.mc.

Opcode Mnemonic Description
107 BLISP
114 RETFR Return from function
115 UPSHJ Dispatching UUO call
116 LDT Load type of pointer
117 BTLU Bit table lookup
120 BFRET Return to Byte Lisp function
121 CALLFN Call Lisp function
247 CHASE
257 REWIND Reverse shallow-deep bindings in a frame

Byte Lisp instructions

These instructions are 9 bits. They are defined in the microcode source files lispm1.mc and lispm2.mc, which are for Maxc1 and Maxc2, respectively.

Opcode Mnemonic
601 SVARX
603 LVARX
605 XVARX
607 ARG
611 CONSTX
613 SDSETX
615 SSETX
617 LDSETX
621 LSETX
623 XDSETX
625 XSETX
627 JUMPXX
631 GETLIST
633 ASSOC
635 ITIMES2
637 IQUOT
641 IREMN
643 IOR2
645 IXOR2
647 BLSH
651 BASH
653 NTYP
702 MINONE
703 ZERO
704 ONE
705 TWO
706 SIC
707 NIL
710 T
711 COPY
712 POP
714 POP2
715 POP3
716 VAG
717 IPLUS2
720 IDIF
721 IAND2
722 ADD1
723 SUB1
725 DBIND
726 BIND
727 UNBIND
730 RETURN
731 XRETURN
732 JUMP IF 0(PP) = NIL
733 JUMP IF 0(PP) # NIL
734 JUMP IF 0(PP) # -1(PP)
735 JUMP IF 0(PP) = -1(PP)
736 JUMP IF 0(PP) IS NOT AN ATOM
737 JUMP IF 0(PP) IS AN ATOM
740 JUMP IF 0(PP) IS NOT A LIST
741 JUMP IF 0(PP) IS A LIST
742 JNNUM
743 JNUM (TYPE .E. FLOATT TO SMALLT)
744 JNFIXP
745 JFIXP (TYPE .E. FIXT TO SMALLT)
746 JUMP IF 0(PP) IS NOT OF TYPE = NEXTBYTE
747 JUMP IF 0(PP) IS OF TYPE = NEXTBYTE
750 JUMP IF -1(PP) .NE. 0(PP)
751 JUMP IF -1(PP) .E. 0(PP)
752 JUMP IF -1(PP) .GE. 0(PP)
753 JUMP IF -1(PP) .L. 0(PP)
754 JUMP IF -1(PP) .G. 0(PP)
755 JUMP IF -1(PP) .LE. 0(PP)
756 JUMPX
757 SWAP
760 LAST
761 FETCHFIELD
762 REPLACEFIELD
763 FRPLACD
764 FRPLACA
765 RPLACD
766 RPLACA
767 GETP
770 CDDR
771 CDAR
772 CADR
773 CAAR
774 CDR
775 CAR
776 FMEMB