Z-machine opcode list

Here is a list of Z-machine opcodes that may be useful in a C or JavaScript code (or possibly other programming languages too):

// Instruction mode bits: 1=predicate 2=value 4=text 8=eight-operands A(1,"EQUAL?",1,ZIP,YZIP); A(2,"LESS?",1,ZIP,YZIP); A(3,"GRTR?",1,ZIP,YZIP); A(4,"DLESS?",1,ZIP,YZIP); A(5,"IGRTR?",1,ZIP,YZIP); A(6,"IN?",1,ZIP,YZIP); A(7,"BTST",1,ZIP,YZIP); A(8,"BOR",2,ZIP,YZIP); A(9,"BAND",2,ZIP,YZIP); A(10,"FSET?",1,ZIP,YZIP); A(11,"FSET",0,ZIP,YZIP); A(12,"FCLEAR",0,ZIP,YZIP); A(13,"SET",0,ZIP,YZIP); A(14,"MOVE",0,ZIP,YZIP); A(15,"GET",2,ZIP,YZIP); A(16,"GETB",2,ZIP,YZIP); A(17,"GETP",2,ZIP,YZIP); A(18,"GETPT",2,ZIP,YZIP); A(19,"NEXTP",2,ZIP,YZIP); A(20,"ADD",2,ZIP,YZIP); A(21,"SUB",2,ZIP,YZIP); A(22,"MUL",2,ZIP,YZIP); A(23,"DIV",2,ZIP,YZIP); A(24,"MOD",2,ZIP,YZIP); A(25,"CALL2",2,EZIP,YZIP); A(26,"ICALL2",0,XZIP,YZIP); A(27,"COLOR",0,XZIP,YZIP); A(28,"THROW",0,XZIP,YZIP); A(128,"ZERO?",1,ZIP,YZIP); A(129,"NEXT?",3,ZIP,YZIP); A(130,"FIRST?",3,ZIP,YZIP); A(131,"LOC",2,ZIP,YZIP); A(132,"PTSIZE",2,ZIP,YZIP); A(133,"INC",0,ZIP,YZIP); A(134,"DEC",0,ZIP,YZIP); A(135,"PRINTB",0,ZIP,YZIP); A(136,"CALL1",2,EZIP,YZIP); A(137,"REMOVE",0,ZIP,YZIP); A(138,"PRINTD",0,ZIP,YZIP); A(139,"RETURN",0,ZIP,YZIP); A(140,"JUMP",0,ZIP,YZIP); A(141,"PRINT",0,ZIP,YZIP); A(142,"VALUE",2,ZIP,YZIP); A(143,"BCOM",2,ZIP,EZIP); A(143,"ICALL1",1,XZIP,YZIP); A(176,"RTRUE",0,ZIP,YZIP); A(177,"RFALSE",0,ZIP,YZIP); A(178,"PRINTI",4,ZIP,YZIP); A(179,"PRINTR",4,ZIP,YZIP); A(180,"NOOP",0,ZIP,YZIP); A(181,"SAVE",1,ZIP,ZIP); A(181,"SAVE",2,EZIP,EZIP); A(182,"RESTORE",1,ZIP,ZIP); A(182,"RESTORE",2,EZIP,EZIP); A(183,"RESTART",0,ZIP,YZIP); A(184,"RSTACK",0,ZIP,YZIP); A(185,"FSTACK",0,ZIP,EZIP); A(185,"CATCH",2,XZIP,YZIP); A(186,"QUIT",0,ZIP,YZIP); A(187,"CRLF",0,ZIP,YZIP); A(188,"USL",0,ZIP,ZIP); A(189,"VERIFY",1,ZIP,YZIP); A(191,"ORIGINAL?",1,XZIP,YZIP); A(224,"CALL",2,ZIP,YZIP); A(225,"PUT",0,ZIP,YZIP); A(226,"PUTB",0,ZIP,YZIP); A(227,"PUTP",0,ZIP,YZIP); A(228,"READ",0,ZIP,EZIP); A(228,"READ",2,XZIP,YZIP); A(229,"PRINTC",0,ZIP,YZIP); A(230,"PRINTN",0,ZIP,YZIP); A(231,"RANDOM",2,ZIP,YZIP); A(232,"PUSH",0,ZIP,YZIP); A(233,"POP",0,ZIP,XZIP); A(233,"POP",2,YZIP,YZIP); A(234,"SPLIT",0,ZIP,YZIP); A(235,"SCREEN",0,ZIP,YZIP); A(236,"XCALL",10,EZIP,YZIP); A(237,"CLEAR",0,EZIP,YZIP); A(238,"ERASE",0,EZIP,YZIP); A(239,"CURSET",0,EZIP,YZIP); A(240,"CURGET",0,EZIP,YZIP); A(241,"HLIGHT",0,EZIP,YZIP); A(242,"BUFOUT",0,EZIP,YZIP); A(243,"DIROUT",0,EZIP,YZIP); A(244,"DIRIN",0,EZIP,YZIP); A(245,"SOUND",0,EZIP,YZIP); A(246,"INPUT",2,EZIP,YZIP); A(247,"INTBL?",3,EZIP,YZIP); A(248,"BCOM",2,XZIP,YZIP); A(249,"ICALL",0,XZIP,YZIP); A(250,"IXCALL",8,XZIP,YZIP); A(251,"LEX",0,XZIP,YZIP); A(252,"ZWSTR",0,XZIP,YZIP); A(253,"COPYT",0,XZIP,YZIP); A(254,"PRINTT",0,XZIP,YZIP); A(255,"ASSIGNED?",1,XZIP,YZIP); A(256,"SAVE",2,XZIP,YZIP); A(257,"RESTORE",2,XZIP,YZIP); A(258,"SHIFT",2,XZIP,YZIP); A(259,"ASHIFT",2,XZIP,YZIP); A(260,"FONT",2,XZIP,YZIP); A(261,"DISPLAY",0,XZIP,YZIP); A(262,"PICINF",1,XZIP,YZIP); A(263,"DCLEAR",0,XZIP,YZIP); A(264,"MARGIN",0,XZIP,YZIP); A(265,"ISAVE",2,XZIP,YZIP); A(266,"IRESTORE",2,XZIP,YZIP); A(272,"WINPOS",0,YZIP,YZIP); A(273,"WINSIZE",0,YZIP,YZIP); A(274,"WINATTR",0,YZIP,YZIP); A(275,"WINGET",2,YZIP,YZIP); A(276,"SCROLL",0,YZIP,YZIP); A(277,"FSTACK",0,YZIP,YZIP); A(278,"MOUSE-INFO",0,YZIP,YZIP); A(279,"MOUSE-LIMIT",0,YZIP,YZIP); A(280,"XPUSH",1,YZIP,YZIP); A(281,"WINPUT",0,YZIP,YZIP); A(282,"PRINTF",0,YZIP,YZIP); A(283,"MENU",1,YZIP,YZIP); A(284,"PICSET",0,YZIP,YZIP);
I was using this and posted it here in case anyone finds it useful. ZIP, EZIP, XZIP, and YZIP are constants (with values 3 to 6), while you will then define the function A that fills in the table (or you can use search/replace to give it a different name). (Another alternative use is to use it as a JavaScript code that generates a C code.) If it contains errors, you can mention it on here. I agree to release this data as public domain.