.TITLE ZOPTAB .IDENT /V1.6/ ; ++ ; This is the Z-machine opcode tables and functions. ; (c) 2000 by Johnny Billquist ; ; History: ; ; 00-07-19 BQT Initial coding started. ; Y1.0 00-08-26 21:00 BQT First release. ; Y1.1 00-09-11 14:00 BQT Bugfix. Two references to NOT should have been ; ZNOT. ; V1.2 00-09-16 12:00 BQT Changed ZEXIT to ABORT. ; Make it more officially done. ; V1.3 01-02-26 12:30 BQT Added print_unicode and check_unicode. ; V1.4 05-02-23 16:00 BQT Started adding V6 opcodes. ; V1.5 07-10-01 23:00 BQT Bugfix. V7 and V8 games are actually using ; the same opcodes as V5, not V6. ; V1.6 09-05-13 23:00 BQT Bugfix. The opcode for scroll_window ; and read_mouse were exchanged. ; -- .INCLUDE /ZMAC/ .IIF GT MAXVER-8. .ERROR MAXVER ; Can't handle game version .PSECT DATA,D,RW ; OP2FP:: .WORD OP2F1 OP1FP:: .WORD OP1F1 OP0FP:: .WORD OP0F1 OPVFP:: .WORD VOPF1 ; .PSECT CONST,D,RO ; OP2FL: .WORD OP2F1 ; V1 .WORD OP2F1 ; V2 .WORD OP2F1 ; V3 .WORD OP2F4 ; V4 .WORD OP2F5 ; V5 .WORD OP2F5 ; V6 .WORD OP2F5 ; V7 .WORD OP2F5 ; V8 ; OP1FL: .WORD OP1F1 ; V1 .WORD OP1F1 ; V2 .WORD OP1F1 ; V3 .WORD OP1F4 ; V4 .WORD OP1F5 ; V5 .WORD OP1F5 ; V6 .WORD OP1F5 ; V7 .WORD OP1F5 ; V8 ; OP0FL: .WORD OP0F1 ; V1 .WORD OP0F1 ; V2 .WORD OP0F3 ; V3 .WORD OP0F4 ; V4 .WORD OP0F5 ; V5 .WORD OP0F5 ; V6 .WORD OP0F5 ; V7 .WORD OP0F5 ; V8 ; VOPFL: .WORD VOPF1 ; V1 .WORD VOPF1 ; V2 .WORD VOPF3 ; V3 .WORD VOPF4 ; V4 .WORD VOPF5 ; V5 .WORD VOPF6 ; V6 .WORD VOPF5 ; V7 .WORD VOPF5 ; V8 ; ; Opcode tables... ; OP2F1: .WORD BADFUN ; 0 .WORD JE ; 1 .WORD JL ; 2 .WORD JG ; 3 .WORD DECCHK ; 4 .WORD INCCHK ; 5 .WORD JIN1 ; 6 .WORD TEST ; 7 .WORD OR ; 8 .WORD AND ; 9 .WORD TATTR ; 10 .WORD SATTR ; 11 .WORD CATTR ; 12 .WORD STORE ; 13 .WORD IOBJ ; 14 .WORD LOADW ; 15 .WORD LOADB ; 16 .WORD GPROP ; 17 .WORD GPROPA ; 18 .WORD GNPROP ; 19 .WORD ZADD ; 20 .WORD ZSUB ; 21 .WORD ZMUL ; 22 .WORD ZDIV ; 23 .WORD ZMOD ; 24 .WORD BADFUN ; 25 .WORD BADFUN ; 26 .WORD BADFUN ; 27 .WORD BADFUN ; 28 .WORD BADFUN ; 29 .WORD BADFUN ; 30 .WORD BADFUN ; 31 ; OP2F4: .WORD BADFUN ; 0 .WORD JE ; 1 .WORD JL ; 2 .WORD JG ; 3 .WORD DECCHK ; 4 .WORD INCCHK ; 5 .WORD JIN4 ; 6 .WORD TEST ; 7 .WORD OR ; 8 .WORD AND ; 9 .WORD TATTR ; 10 .WORD SATTR ; 11 .WORD CATTR ; 12 .WORD STORE ; 13 .WORD IOBJ ; 14 .WORD LOADW ; 15 .WORD LOADB ; 16 .WORD GPROP ; 17 .WORD GPROPA ; 18 .WORD GNPROP ; 19 .WORD ZADD ; 20 .WORD ZSUB ; 21 .WORD ZMUL ; 22 .WORD ZDIV ; 23 .WORD ZMOD ; 24 .WORD CALL2S ; 25 .WORD BADFUN ; 26 .WORD BADFUN ; 27 .WORD BADFUN ; 28 .WORD BADFUN ; 29 .WORD BADFUN ; 30 .WORD BADFUN ; 31 ; OP2F5: .WORD BADFUN ; 0 .WORD JE ; 1 .WORD JL ; 2 .WORD JG ; 3 .WORD DECCHK ; 4 .WORD INCCHK ; 5 .WORD JIN4 ; 6 .WORD TEST ; 7 .WORD OR ; 8 .WORD AND ; 9 .WORD TATTR ; 10 .WORD SATTR ; 11 .WORD CATTR ; 12 .WORD STORE ; 13 .WORD IOBJ ; 14 .WORD LOADW ; 15 .WORD LOADB ; 16 .WORD GPROP ; 17 .WORD GPROPA ; 18 .WORD GNPROP ; 19 .WORD ZADD ; 20 .WORD ZSUB ; 21 .WORD ZMUL ; 22 .WORD ZDIV ; 23 .WORD ZMOD ; 24 .WORD CALL2S ; 25 .WORD CALL2N ; 26 .WORD SETCOL ; 27 .WORD THROW ; 28 .WORD BADFUN ; 29 .WORD BADFUN ; 30 .WORD BADFUN ; 31 ; OP1F1: .WORD JZ ; 0 .WORD GSIB ; 1 .WORD GCHLD ; 2 .WORD GPAREN ; 3 .WORD GPROPL ; 4 .WORD ZINC ; 5 .WORD ZDEC ; 6 .WORD PADDR ; 7 .WORD BADFUN ; 8 .WORD REMOBJ ; 9 .WORD PROBJ ; 10 .WORD RET ; 11 .WORD JUMP ; 12 .WORD PRPADR ; 13 .WORD LOAD ; 14 .WORD ZNOT ; 15 OP1F4: .WORD JZ ; 0 .WORD GSIB ; 1 .WORD GCHLD ; 2 .WORD GPAREN ; 3 .WORD GPROPL ; 4 .WORD ZINC ; 5 .WORD ZDEC ; 6 .WORD PADDR ; 7 .WORD CALL1S ; 8 .WORD REMOBJ ; 9 .WORD PROBJ ; 10 .WORD RET ; 11 .WORD JUMP ; 12 .WORD PRPADR ; 13 .WORD LOAD ; 14 .WORD ZNOT ; 15 OP1F5: .WORD JZ ; 0 .WORD GSIB ; 1 .WORD GCHLD ; 2 .WORD GPAREN ; 3 .WORD GPROPL ; 4 .WORD ZINC ; 5 .WORD ZDEC ; 6 .WORD PADDR ; 7 .WORD CALL1S ; 8 .WORD REMOBJ ; 9 .WORD PROBJ ; 10 .WORD RET ; 11 .WORD JUMP ; 12 .WORD PRPADR ; 13 .WORD LOAD ; 14 .WORD CALL1N ; 15 ; OP0F1: .WORD RTRUE ; 0 .WORD RFALSE ; 1 .WORD PRINT ; 2 .WORD PRINTR ; 3 .WORD ZNOP ; 4 .WORD SAVE1 ; 5 .WORD REST1 ; 6 .WORD RSTART ; 7 .WORD RETPOP ; 8 .WORD POP ; 9 .WORD QUIT ; 10 .WORD NEWLIN ; 11 .WORD BADFUN ; 12 .WORD BADFUN ; 13 .WORD BADFUN ; 14 .WORD BADFUN ; 15 OP0F3: .WORD RTRUE ; 0 .WORD RFALSE ; 1 .WORD PRINT ; 2 .WORD PRINTR ; 3 .WORD ZNOP ; 4 .WORD SAVE1 ; 5 .WORD REST1 ; 6 .WORD RSTART ; 7 .WORD RETPOP ; 8 .WORD POP ; 9 .WORD QUIT ; 10 .WORD NEWLIN ; 11 .WORD SHOSTS ; 12 .WORD VERIFY ; 13 .WORD BADFUN ; 14 .WORD BADFUN ; 15 OP0F4: .WORD RTRUE ; 0 .WORD RFALSE ; 1 .WORD PRINT ; 2 .WORD PRINTR ; 3 .WORD ZNOP ; 4 .WORD SAVE4 ; 5 .WORD REST4 ; 6 .WORD RSTART ; 7 .WORD RETPOP ; 8 .WORD POP ; 9 .WORD QUIT ; 10 .WORD NEWLIN ; 11 .WORD BADFUN ; 12 .WORD VERIFY ; 13 .WORD BADFUN ; 14 .WORD BADFUN ; 15 OP0F5: .WORD RTRUE ; 0 .WORD RFALSE ; 1 .WORD PRINT ; 2 .WORD PRINTR ; 3 .WORD ZNOP ; 4 .WORD BADFUN ; 5 .WORD BADFUN ; 6 .WORD RSTART ; 7 .WORD RETPOP ; 8 .WORD CATCH ; 9 .WORD QUIT ; 10 .WORD NEWLIN ; 11 .WORD BADFUN ; 12 .WORD VERIFY ; 13 .WORD EXTEND ; 14 .WORD PIRACY ; 15 ; VOPF1: .WORD ZCALL ; 0 .WORD STOREW ; 1 .WORD STOREB ; 2 .WORD PUTPRP ; 3 .WORD SREAD1 ; 4 .WORD PCHAR ; 5 .WORD PNUM ; 6 .WORD RANDOM ; 7 .WORD PUSH ; 8 .WORD PULL1 ; 9 .WORD BADFUN ; 10 .WORD BADFUN ; 11 .WORD BADFUN ; 12 .WORD BADFUN ; 13 .WORD BADFUN ; 14 .WORD BADFUN ; 15 .WORD BADFUN ; 16 .WORD BADFUN ; 17 .WORD BADFUN ; 18 .WORD BADFUN ; 19 .WORD BADFUN ; 20 .WORD BADFUN ; 21 .WORD BADFUN ; 22 .WORD BADFUN ; 23 .WORD BADFUN ; 24 .WORD BADFUN ; 25 .WORD BADFUN ; 26 .WORD BADFUN ; 27 .WORD BADFUN ; 28 .WORD BADFUN ; 29 .WORD BADFUN ; 30 .WORD BADFUN ; 31 VOPF3: .WORD ZCALL ; 0 .WORD STOREW ; 1 .WORD STOREB ; 2 .WORD PUTPRP ; 3 .WORD SREAD1 ; 4 .WORD PCHAR ; 5 .WORD PNUM ; 6 .WORD RANDOM ; 7 .WORD PUSH ; 8 .WORD PULL1 ; 9 .WORD SPLITW ; 10 .WORD SETW ; 11 .WORD BADFUN ; 12 .WORD BADFUN ; 13 .WORD BADFUN ; 14 .WORD BADFUN ; 15 .WORD BADFUN ; 16 .WORD BADFUN ; 17 .WORD BADFUN ; 18 .WORD OUTSTR ; 19 .WORD INSTRN ; 20 .WORD SOUND ; 21 .WORD BADFUN ; 22 .WORD BADFUN ; 23 .WORD BADFUN ; 24 .WORD BADFUN ; 25 .WORD BADFUN ; 26 .WORD BADFUN ; 27 .WORD BADFUN ; 28 .WORD BADFUN ; 29 .WORD BADFUN ; 30 .WORD BADFUN ; 31 VOPF4: .WORD CALLVS ; 0 .WORD STOREW ; 1 .WORD STOREB ; 2 .WORD PUTPRP ; 3 .WORD SREAD4 ; 4 .WORD PCHAR ; 5 .WORD PNUM ; 6 .WORD RANDOM ; 7 .WORD PUSH ; 8 .WORD PULL1 ; 9 .WORD SPLITW ; 10 .WORD SETW ; 11 .WORD CALVS2 ; 12 .WORD ERWIN ; 13 .WORD ERLINE ; 14 .WORD SETCUR ; 15 .WORD GETCUR ; 16 .WORD STSTY ; 17 .WORD BMODE ; 18 .WORD OUTSTR ; 19 .WORD INSTRN ; 20 .WORD SOUND ; 21 .WORD RCHAR ; 22 .WORD SCANT ; 23 .WORD BADFUN ; 24 .WORD BADFUN ; 25 .WORD BADFUN ; 26 .WORD BADFUN ; 27 .WORD BADFUN ; 28 .WORD BADFUN ; 29 .WORD BADFUN ; 30 .WORD BADFUN ; 31 VOPF5: .WORD CALLVS ; 0 .WORD STOREW ; 1 .WORD STOREB ; 2 .WORD PUTPRP ; 3 .WORD AREAD ; 4 .WORD PCHAR ; 5 .WORD PNUM ; 6 .WORD RANDOM ; 7 .WORD PUSH ; 8 .WORD PULL1 ; 9 .WORD SPLITW ; 10 .WORD SETW ; 11 .WORD CALVS2 ; 12 .WORD ERWIN ; 13 .WORD ERLINE ; 14 .WORD SETCUR ; 15 .WORD GETCUR ; 16 .WORD STSTY ; 17 .WORD BMODE ; 18 .WORD OUTST2 ; 19 .WORD INSTRN ; 20 .WORD SOUND ; 21 .WORD RCHAR ; 22 .WORD SCANT ; 23 .WORD ZNOT ; 24 .WORD CALLVN ; 25 .WORD CALVN2 ; 26 .WORD TKNIZE ; 27 .WORD ENCTXT ; 28 .WORD CPYTAB ; 29 .WORD PRTAB ; 30 .WORD CKACNT ; 31 VOPF6: .WORD CALLVS ; 0 .WORD STOREW ; 1 .WORD STOREB ; 2 .WORD PUTPRP ; 3 .WORD AREAD ; 4 .WORD PCHAR ; 5 .WORD PNUM ; 6 .WORD RANDOM ; 7 .WORD PUSH ; 8 .WORD PULL2 ; 9 .WORD SPLITW ; 10 .WORD SETW ; 11 .WORD CALVS2 ; 12 .WORD ERWIN ; 13 .WORD ERLIN2 ; 14 .WORD SETCU2 ; 15 .WORD GETCUR ; 16 .WORD STSTY ; 17 .WORD BMODE ; 18 .WORD OUTST3 ; 19 .WORD INSTRN ; 20 .WORD SOUND ; 21 .WORD RCHAR ; 22 .WORD SCANT ; 23 .WORD ZNOT ; 24 .WORD CALLVN ; 25 .WORD CALVN2 ; 26 .WORD TKNIZE ; 27 .WORD ENCTXT ; 28 .WORD CPYTAB ; 29 .WORD PRTAB ; 30 .WORD CKACNT ; 31 ; EOPTAB:: .WORD SAVE2 ; 0 .WORD REST2 ; 1 .WORD LOGSFT ; 2 .WORD ARTSFT ; 3 .WORD SETFNT ; 4 .WORD DRWPIC ; 5 .WORD PICDAT ; 6 .WORD ERPIC ; 7 .WORD WINMAR ; 8 .WORD SUNDO ; 9 .WORD RUNDO ; 10 .WORD PUNICD ; 11 .WORD CUNICD ; 12 .WORD BADF2 ; 13 .WORD BADF2 ; 14 .WORD BADF2 ; 15 .WORD WINMOV ; 16 .WORD WINSIZ ; 17 .WORD WINSTY ; 18 .WORD GWINPR ; 19 .WORD SCROLL ; 20 .WORD POPSTK ; 21 .WORD BADF2 ; 22 .WORD MOUWIN ; 23 .WORD PUSHUS ; 24 .WORD PWINPR ; 25 .WORD BADF2 ; 26 .WORD BADF2 ; 27 .WORD PICTBL ; 28 .WORD BADF2 ; 29 .WORD BADF2 ; 30 .WORD BADF2 ; 31 .REPT 256.-32. .WORD BADF2 .ENDR ; .PSECT CODE,I,RO ; ZOPINI:: MOV ZVER,R1 ; Get game version. DEC R1 ; Make zero-bias. ASL R1 MOV OP2FL(R1),OP2FP MOV OP1FL(R1),OP1FP MOV OP0FL(R1),OP0FP MOV VOPFL(R1),OPVFP RETURN ; BADFUN:: .MSG <"Stop at %P,,%P. Bad opcode: %O.">,ZPC,ZPC+2,INSTR .MSG <"Game is V%D.">,ZVER BF2: MOV #ARGS,R2 MOV ARGC,R3 BEQ NOARGS .MSG <"%D arguments.">,R3 ALOOP: .MSG <"Argument: %M.">,(R2)+ SOB R3,ALOOP NOARGS: CALL ABORT ; BADF2:: .MSG <"Bad extended opcode: %O.">,INSTR JMP BF2 ; .END