Path: utzoo!utgpu!cs.utexas.edu!uunet!pilchuck!ssc!markz From: markz@ssc.UUCP (Mark Zenier) Newsgroups: alt.sources Subject: Frankenstein Cross Assemblers, Zilog Z8 flavor, Part 1 of 1 Message-ID: <608@ssc.UUCP> Date: 5 Dec 90 06:19:51 GMT Organization: SSC, Inc., Seattle, WA Lines: 2690 Archive-name: Frankasm/Asz801 Submitted-by: markz@ssc.uucp ---- Cut Here and feed the following to sh ---- #!/bin/sh # This is Frankasm/Asz8, a shell archive (shar 3.43) # made 12/04/1990 08:46 UTC by markz@ssc.uucp # Source directory /usr/mark/frank.shar # # existing files will NOT be overwritten unless -c is specified # This format requires very little intelligence at unshar time. # "if test", "echo", "true", and "sed" may be needed. # # This shar contains: # length mode name # ------ ---------- ------------------------------------------ # 1463 -r--r----- asz8.1 # 8593 -r--r----- asz8.doc # 3548 -r--r----- asz8.tst # 7110 -r--r----- asz8.tut # 36629 -r--r--r-- asz8.y # # ============= asz8.1 ============== if test -f 'asz8.1' -a X"$1" != X"-c"; then echo 'x - skipping asz8.1 (File already exists)' else echo 'x - extracting asz8.1 (Text)' sed 's/^X//' << 'SHAR_EOF' > 'asz8.1' && X.TH ASZ8 1L X.SH NAME Xasz8 \- cross assemblers for microcomputers X.SH SYNOPSIS X.nf Xasz8 [-p cpu] [-l listfile] [-o hexfile] [-d] [-s symbolfile] input X.fi X.SH DESCRIPTION XThe asz8 command assembles the input file into a Xtext output file representing the program memory for a microcomputer. X XOptions X.IP "-p cpu" XOverride the instruction set selection. X.RS 10 XValid Values for Cpu X.RS 5 Xz8600, z8, Z8, UPC, upc, Z8090 X.RE X.RE X.IP "-l listfile" XOutput a file formated with the memory address, data, and source input lines. X.IP "-o hexfile" XOutput the memory data image in a form accepted by most prom programmers. X.IP "-h hexfile" XSame as \-o. X.IP \-d XSave the intermediate data file (see FILE) and abort the execution at the Xend of processing. X.IP "-s symbolfile" XPrint the symbol table values and names, one per line in the specified file. X.SH FILES X/usr/tmp/frtXXXXXX X.SH SEE ALSO XFrankenstein Cross Assemblers Users Manual (file base.doc) XAppendix for asz8 Frankenstein Assembler (file asz8.doc) X.SH NOTES XThere is only one input file. X XThe program can select which subset of instructions is accepted. XThe program first uses the name with which it is invoked. XThis is scanned for a substring which indicates which set to use. XThe -p options overrides this selction by performing the same substring Xsearch. XFinally the input file can select which subset to use with the CPU statement. X XThere should only be one executable file with all of its names linked to it. SHAR_EOF true || echo 'restore of asz8.1 failed' fi # ============= asz8.doc ============== if test -f 'asz8.doc' -a X"$1" != X"-c"; then echo 'x - skipping asz8.doc (File already exists)' else echo 'x - extracting asz8.doc (Text)' sed 's/^X//' << 'SHAR_EOF' > 'asz8.doc' && X.HM A 1 1 1 1 1 1 X.H 1 "Appendix for asz8 Frankenstein Assembler" X.H 2 "Pseudo Operations" X.H 3 "Standard Pseudo Operation Mnemonics" X.VL 40 5 1 X.LI "End" XEND X.LI "File Inclusion" XINCL XINCLUDE X.LI "If" XIF X.LI "Else" XELSE X.LI "End If" XENDI X.LI "Equate" XEQU X.LI "Set" XSET X.LI "Org" XORG X.LI "Reserve Memory" XRESERVE XRMB X.LI "Define Byte Data" XBYTE XDB XFCB X.LI "Define Word Data" XDW XFDB XWORD X.LI "Define String Data" XFCC XSTRING X.LI "Define Character Set Translation" XCHARSET X.LI "Define Character Value" XCHARDEF XCHD X.LI "Use Character Translation" XCHARUSE X.LE X.H 3 "Machine Dependent Pseudo Operations" X.H 4 "Register Symbol Definitions" X.DS I N XLabel REG RegisterSymbol XLabel RREG RegisterSymbol XLabel REG expression XLabel RREG expression XLabel REG XLabel RREG X.DE X.P XSymbols in the register address space are defined with the REG, and RREG Xpseudooperations. XThe symbol in the label field is added to the symbol table as a register Xsymbol. XThe symbols defined with the REG are single byte registers. XThe symbols defined with RREG are double registers, and must be on even Xboundries. X.P XThe operand can be in three forms. X.P XWhen the operand is a register symbol, the label symbol is defined with Xthe same register address as the symbol, with the size determined by which Xpseudoop is used. XAliases to working registers must use this form. X.P XWhen the operand is an expression, the label symbol is defined at the Xvalue of the expression, with the size determined by which pseudoop is used. XThe value must be in the range 0 to 127 (or 223 for the UPC register set), Xor 240 to 255, and must be defined at the first pass. X.P XWith no operand, the label symbol is defined at the register address Xfollowing the previous REG or RREG instruction. XIf a previous Register Definition used a working register as its operand, Xthe current definition will be in the working set, otherwise it will be Xin the register file. X.P XRegister Symbols must be surrounded by parenthesis when used in expressions. X.H 4 "Register Set Selection" X.DS I N XCPU string X.DE XThe register set can be specified in the source file with the CPU Xpseudooperation. XThe string, delimited by quotes or apostrophes, is scanned for a Xsubstring which selects which register set is used. XWhen the program is invoked, this operation is performed on the name of Xthe program, then the -p optional arguement, if any, and then any CPU Xstatements. XThe last one selects the which subset of the registers the assembler will Xaccept. X.VL 30 5 1 X.LI "Register Architecture" XSubstrings X.SP X.LI "z8" X86 Xz8 XZ8 X.SP X.LI "Universal" XUPC Xupc X9 X.LI "Peripheral" X.LI "Controller" X.LE X.H 2 "Instructions" X.H 3 "Instruction List" X.TS H X; Xl l l. XOpcode Syntax Selection Criteria X.sp X.TH X.sp XADC '@' REGISTER ',' '#' expr XADC REGISTER ',' '#' expr XADC REGISTER ',' '@' REGISTER XADC REGISTER ',' '@' REGISTER SRCWORK+DSTWORK XADC REGISTER ',' REGISTER XADC REGISTER ',' REGISTER SRCWORK+DSTWORK X.sp XADD '@' REGISTER ',' '#' expr XADD REGISTER ',' '#' expr XADD REGISTER ',' '@' REGISTER XADD REGISTER ',' '@' REGISTER SRCWORK+DSTWORK XADD REGISTER ',' REGISTER XADD REGISTER ',' REGISTER SRCWORK+DSTWORK X.sp XAND '@' REGISTER ',' '#' expr XAND REGISTER ',' '#' expr XAND REGISTER ',' '@' REGISTER XAND REGISTER ',' '@' REGISTER SRCWORK+DSTWORK XAND REGISTER ',' REGISTER XAND REGISTER ',' REGISTER SRCWORK+DSTWORK X.sp XCALL '@' REGISTER DSTDBL XCALL expr X.sp XCCF X.sp XCLR '@' REGISTER XCLR REGISTER X.sp XCOM '@' REGISTER XCOM REGISTER X.sp XCP '@' REGISTER ',' '#' expr XCP REGISTER ',' '#' expr XCP REGISTER ',' '@' REGISTER XCP REGISTER ',' '@' REGISTER SRCWORK+DSTWORK XCP REGISTER ',' REGISTER XCP REGISTER ',' REGISTER SRCWORK+DSTWORK X.sp XDA '@' REGISTER XDA REGISTER X.sp XDEC '@' REGISTER XDEC REGISTER X.sp XDECW '@' REGISTER XDECW REGISTER DSTDBL X.sp XDI X.sp XDJNZ REGISTER ',' expr DSTWORK X.sp XEI X.sp XINC '@' REGISTER XINC REGISTER XINC REGISTER DSTWORK X.sp XINCW '@' REGISTER XINCW REGISTER DSTDBL X.sp XIRET X.sp XJP '@' REGISTER DSTDBL XJP CONDITION ',' expr XJP expr X.sp XJR CONDITION ',' expr XJR expr X.sp XLD '@' REGISTER ',' '#' expr XLD '@' REGISTER ',' REGISTER XLD '@' REGISTER ',' REGISTER DSTWORK+SRCWORK XLD REGISTER ',' '#' expr XLD REGISTER ',' '#' expr DSTWORK XLD REGISTER ',' '@' REGISTER XLD REGISTER ',' '@' REGISTER DSTWORK+SRCWORK XLD REGISTER ',' REGISTER XLD REGISTER ',' REGISTER DSTWORK XLD REGISTER ',' REGISTER SRCWORK XLD REGISTER ',' expr '(' REGISTER ')' DSTWORK+SRCWORK XLD expr '(' REGISTER ')' ',' REGISTER DSTWORK+SRCWORK X.sp XLDC '@' REGISTER ',' REGISTER DSTWORK+SRCWORK XLDC REGISTER ',' '@' REGISTER DSTWORK+SRCWORK X.sp XLDCI '@' REGISTER ',' '@' REGISTER DSTDBL+DSTWORK+SRCWORK XLDCI '@' REGISTER ',' '@' REGISTER SRCDBL+DSTWORK+SRCWORK X.sp XLDE '@' REGISTER ',' REGISTER DSTWORK+SRCWORK XLDE REGISTER ',' '@' REGISTER DSTWORK+SRCWORK X.sp XLDEI '@' REGISTER ',' '@' REGISTER DSTDBL+DSTWORK+SRCWORK XLDEI '@' REGISTER ',' '@' REGISTER SRCDBL+DSTWORK+SRCWORK X.sp XNOP X.sp XOR '@' REGISTER ',' '#' expr XOR REGISTER ',' '#' expr XOR REGISTER ',' '@' REGISTER XOR REGISTER ',' '@' REGISTER SRCWORK+DSTWORK XOR REGISTER ',' REGISTER XOR REGISTER ',' REGISTER SRCWORK+DSTWORK X.sp XPOP '@' REGISTER XPOP REGISTER X.sp XPUSH '@' REGISTER XPUSH REGISTER X.sp XRCF X.sp XRET X.sp XRL '@' REGISTER XRL REGISTER X.sp XRLC '@' REGISTER XRLC REGISTER X.sp XRR '@' REGISTER XRR REGISTER X.sp XRRC '@' REGISTER XRRC REGISTER X.sp XSBC '@' REGISTER ',' '#' expr XSBC REGISTER ',' '#' expr XSBC REGISTER ',' '@' REGISTER XSBC REGISTER ',' '@' REGISTER SRCWORK+DSTWORK XSBC REGISTER ',' REGISTER XSBC REGISTER ',' REGISTER SRCWORK+DSTWORK X.sp XSCF X.sp XSRA '@' REGISTER XSRA REGISTER X.sp XSRP '#' expr X.sp XSUB '@' REGISTER ',' '#' expr XSUB REGISTER ',' '#' expr XSUB REGISTER ',' '@' REGISTER XSUB REGISTER ',' '@' REGISTER SRCWORK+DSTWORK XSUB REGISTER ',' REGISTER XSUB REGISTER ',' REGISTER SRCWORK+DSTWORK X.sp XSWAP '@' REGISTER XSWAP REGISTER X.sp XTCM '@' REGISTER ',' '#' expr XTCM REGISTER ',' '#' expr XTCM REGISTER ',' '@' REGISTER XTCM REGISTER ',' '@' REGISTER SRCWORK+DSTWORK XTCM REGISTER ',' REGISTER XTCM REGISTER ',' REGISTER SRCWORK+DSTWORK X.sp XTM '@' REGISTER ',' '#' expr XTM REGISTER ',' '#' expr XTM REGISTER ',' '@' REGISTER XTM REGISTER ',' '@' REGISTER SRCWORK+DSTWORK XTM REGISTER ',' REGISTER XTM REGISTER ',' REGISTER SRCWORK+DSTWORK X.sp XXOR '@' REGISTER ',' '#' expr XXOR REGISTER ',' '#' expr XXOR REGISTER ',' '@' REGISTER XXOR REGISTER ',' '@' REGISTER SRCWORK+DSTWORK XXOR REGISTER ',' REGISTER XXOR REGISTER ',' REGISTER SRCWORK+DSTWORK X.TE X.H 3 "Selection Criteria Keywords" X.VL 25 5 X.LI DSTWORK XThe instruction will use the short form if Xthe register is in the working set. X.LI DSTDBL XThe instruction requires that the destination register be a double register. X.LI SRCWORK XThe instruction will use the short form if Xthe register is in the working set. X.LI SRCDBL XThe instruction requires that the source register be a double register. X.LE X.H 3 "Apostrophes" XThe apostrophes in the syntax field are a notation used for the Xparser generator and are not put in the assembler source statement. X.H 2 "Notes" X.H 3 "Registers" XRegisters are treated as symbols with a different syntactic type than Xmemory addresses. XThis seperates symbols which would have the same numeric value into the Xdifferent address spaces, register and memory. XUsing a symbol that is already defined as a Register as a statement label Xfor an instruction or a SET/EQU will result in a "Syntax Error". X.P XRegisters are represented by the reserved symbols R0 thru R15 and RR0 thru XRR14 for the working set registers. XOther registers are defined with the REG and RREG pseudooperations. X.P XRegister Symbols must be surrounded by parenthesis when used in expressions. XConverted register values are meaningless as ROM or Data memory addresses. XWorking set registers have a value between 0e0h and 0efh. X.DS I N XExample X.SP Xld r3, #(buffstart) X.DE X.H 3 "Data Memory" XROM and Data memory addresses are not differentiated. X.H 3 "Conditions" XConditions are represented by the reserved symbols F, C, NC, Z, NZ, PL, MI, XOV, NOV, EQ, NE, GE, LT, GT, LE, UGE, ULT, UGT, ULE X.P XNote that the EQ, NE, GT, LE, GE, LT operators are not available in this Xassembler, the =, <>, >, <=, >=, < special character representations must Xbe used. X.H 3 "Reserved Symbols" X.H 4 "Machine Dependent Reserved Symbols" XAND XC XDEFINED XEQ XF XGE XGT XHIGH XLE XLOW XLT XMI XMOD XNC XNE XNOT XNOV XNZ XOR XOV XPL XR0 XR1 XR10 XR11 XR12 XR13 XR14 XR15 XR2 XR3 XR4 XR5 XR6 XR7 XR8 XR9 XRR0 XRR10 XRR12 XRR14 XRR2 XRR4 XRR6 XRR8 XSHL XSHR XUGE XUGT XULE XULT XXOR XZ Xand Xdefined Xhigh Xlow Xmod Xnot Xor Xshl Xshr Xxor X.TC 1 1 7 SHAR_EOF true || echo 'restore of asz8.doc failed' fi # ============= asz8.tst ============== if test -f 'asz8.tst' -a X"$1" != X"-c"; then echo 'x - skipping asz8.tst (File already exists)' else echo 'x - extracting asz8.tst (Text)' sed 's/^X//' << 'SHAR_EOF' > 'asz8.tst' && Ximmed equ 11H Xxdest reg $2d Xxsrc reg $1c Xxddest rreg $44 X adc @ xdest , # immed X adc R13, @ R12 X adc R13, R12 X adc xdest , # immed X adc xdest, @ xsrc X adc xdest, xsrc X add @ xdest , # immed X add R13, @ R12 X add R13, R12 X add xdest , # immed X add xdest, @ xsrc X add xdest, xsrc X and @ xdest , # immed X and R13, @ R12 X and R13, R12 X and xdest , # immed X and xdest, @ xsrc X and xdest, xsrc X call @ xddest X call jmpdst X ccf X clr @ xdest X clr xdest X com @ xdest X com xdest X cp @ xdest , # immed X cp R13, @ R12 X cp R13, R12 X cp xdest , # immed X cp xdest, @ xsrc X cp xdest, xsrc X da @ xdest X da xdest X dec @ xdest X dec xdest X decw @ xddest X decw xddest X di X djnz R0, *+56 X djnz R1, *+56 X djnz R10, *+56 X djnz R11, *+56 X djnz R12, *+56 X djnz R13, *+56 X djnz R14, *+56 X djnz R15, *+56 X djnz R2, *+56 X djnz R3, *+56 X djnz R4, *+56 X djnz R5, *+56 X djnz R6, *+56 X djnz R7, *+56 X djnz R8, *+56 X djnz R9, *+56 X ei X inc @ xdest X inc R0 X inc R1 X inc R10 X inc R11 X inc R12 X inc R13 X inc R14 X inc R15 X inc R2 X inc R3 X inc R4 X inc R5 X inc R6 X inc R7 X inc R8 X inc R9 X inc xdest X incw @ xddest X incw xddest X iret X jp @ xddest X jp jmpdst X jp C, jmpdst X jp EQ, jmpdst X jp F, jmpdst X jp GE, jmpdst X jp GT, jmpdst X jp LE, jmpdst X jp LT, jmpdst X jp MI, jmpdst X jp NC, jmpdst X jp NE, jmpdst X jp NOV, jmpdst X jp NZ, jmpdst X jp OV, jmpdst X jp PL, jmpdst X jp UGE, jmpdst X jp UGT, jmpdst X jp ULE, jmpdst X jp ULT, jmpdst X jp Z, jmpdst X jr *+56 X jr C, *+56 X jr EQ, *+56 X jr F, *+56 X jr GE, *+56 X jr GT, *+56 X jr LE, *+56 X jr LT, *+56 X jr MI, *+56 X jr NC, *+56 X jr NE, *+56 X jr NOV, *+56 X jr NZ, *+56 X jr OV, *+56 X jr PL, *+56 X jr UGE, *+56 X jr UGT, *+56 X jr ULE, *+56 X jr ULT, *+56 X jr Z, *+56 X ld R13, $44(R12) X ld $55(R13), R12 X ld R13, @ R12 X ld xdest, xsrc X ld xdest, @ xsrc X ld xdest, # immed X ld @ xdest, # immed X ld @ R13, R12 X ld @ xdest, xsrc X ld R0, # immed X ld R0, xsrc X ld R1, # immed X ld R1, xsrc X ld R10, # immed X ld R10, xsrc X ld R11, # immed X ld R11, xsrc X ld R12, # immed X ld R12, xsrc X ld R13, # immed X ld R13, xsrc X ld R14, # immed X ld R14, xsrc X ld R15, # immed X ld R15, xsrc X ld R2, # immed X ld R2, xsrc X ld R3, # immed X ld R3, xsrc X ld R4, # immed X ld R4, xsrc X ld R5, # immed X ld R5, xsrc X ld R6, # immed X ld R6, xsrc X ld R7, # immed X ld R7, xsrc X ld R8, # immed X ld R8, xsrc X ld R9, # immed X ld R9, xsrc X ld xdest, R0 X ld xdest, R1 X ld xdest, R10 X ld xdest, R11 X ld xdest, R12 X ld xdest, R13 X ld xdest, R14 X ld xdest, R15 X ld xdest, R2 X ld xdest, R3 X ld xdest, R4 X ld xdest, R5 X ld xdest, R6 X ld xdest, R7 X ld xdest, R8 X ld xdest, R9 X ldc @ RR10, R13 X ldc R13, @RR10 X ldci @ R13, @RR10 X ldci @ RR10, @ R13 X lde @ RR10, R13 X lde R13, @RR10 X ldei @ R13, @RR10 X ldei @ RR10, @ R13 X nop X or @ xdest , # immed X or R13, @ R12 X or R13, R12 X or xdest , # immed X or xdest, @ xsrc X or xdest, xsrc X pop @ xdest X pop xdest X push @ xdest X push xdest X rcf X ret X rl @ xdest X rl xdest X rlc @ xdest X rlc xdest X rr @ xdest X rr xdest X rrc @ xdest X rrc xdest X sbc @ xdest , # immed X sbc R13, @ R12 X sbc R13, R12 X sbc xdest , # immed X sbc xdest, @ xsrc X sbc xdest, xsrc X scf X sra @ xdest X sra xdest X srp # 112 X sub @ xdest , # immed X sub R13, @ R12 X sub R13, R12 X sub xdest , # immed X sub xdest, @ xsrc X sub xdest, xsrc X swap @ xdest X swap xdest X tcm @ xdest , # immed X tcm R13, @ R12 X tcm R13, R12 X tcm xdest , # immed X tcm xdest, @ xsrc X tcm xdest, xsrc X tm @ xdest , # immed X tm R13, @ R12 X tm R13, R12 X tm xdest , # immed X tm xdest, @ xsrc X tm xdest, xsrc X xor @ xdest , # immed X xor R13, @ R12 X xor R13, R12 X xor xdest , # immed X xor xdest, @ xsrc X xor xdest, xsrc Xjmpdst SHAR_EOF true || echo 'restore of asz8.tst failed' fi # ============= asz8.tut ============== if test -f 'asz8.tut' -a X"$1" != X"-c"; then echo 'x - skipping asz8.tut (File already exists)' else echo 'x - extracting asz8.tut (Text)' sed 's/^X//' << 'SHAR_EOF' > 'asz8.tut' && X00000011 immed 0000002d xdest 0000001c xsrc X00000244 xddest 0000020a jmpdst X 0x11 immed equ 11H X 0x2d xdest reg $2d X 0x1c xsrc reg $1c X 0x44 xddest rreg $44 X0000 17 2d 11 adc @ xdest , # immed X0003 13 dc adc R13, @ R12 X0005 12 dc adc R13, R12 X0007 16 2d 11 adc xdest , # immed X000a 15 1c 2d adc xdest, @ xsrc X000d 14 1c 2d adc xdest, xsrc X0010 07 2d 11 add @ xdest , # immed X0013 03 dc add R13, @ R12 X0015 02 dc add R13, R12 X0017 06 2d 11 add xdest , # immed X001a 05 1c 2d add xdest, @ xsrc X001d 04 1c 2d add xdest, xsrc X0020 57 2d 11 and @ xdest , # immed X0023 53 dc and R13, @ R12 X0025 52 dc and R13, R12 X0027 56 2d 11 and xdest , # immed X002a 55 1c 2d and xdest, @ xsrc X002d 54 1c 2d and xdest, xsrc X0030 d4 44 call @ xddest X0032 d6 02 0a call jmpdst X0035 ef ccf X0036 b1 2d clr @ xdest X0038 b0 2d clr xdest X003a 61 2d com @ xdest X003c 60 2d com xdest X003e a7 2d 11 cp @ xdest , # immed X0041 a3 dc cp R13, @ R12 X0043 a2 dc cp R13, R12 X0045 a6 2d 11 cp xdest , # immed X0048 a5 1c 2d cp xdest, @ xsrc X004b a4 1c 2d cp xdest, xsrc X004e 41 2d da @ xdest X0050 40 2d da xdest X0052 01 2d dec @ xdest X0054 00 2d dec xdest X0056 81 44 decw @ xddest X0058 80 44 decw xddest X005a 8f di X005b 0a 36 djnz R0, *+56 X005d 1a 36 djnz R1, *+56 X005f aa 36 djnz R10, *+56 X0061 ba 36 djnz R11, *+56 X0063 ca 36 djnz R12, *+56 X0065 da 36 djnz R13, *+56 X0067 ea 36 djnz R14, *+56 X0069 fa 36 djnz R15, *+56 X006b 2a 36 djnz R2, *+56 X006d 3a 36 djnz R3, *+56 X006f 4a 36 djnz R4, *+56 X0071 5a 36 djnz R5, *+56 X0073 6a 36 djnz R6, *+56 X0075 7a 36 djnz R7, *+56 X0077 8a 36 djnz R8, *+56 X0079 9a 36 djnz R9, *+56 X007b 9f ei X007c 21 2d inc @ xdest X007e 0e inc R0 X007f 1e inc R1 X0080 ae inc R10 X0081 be inc R11 X0082 ce inc R12 X0083 de inc R13 X0084 ee inc R14 X0085 fe inc R15 X0086 2e inc R2 X0087 3e inc R3 X0088 4e inc R4 X0089 5e inc R5 X008a 6e inc R6 X008b 7e inc R7 X008c 8e inc R8 X008d 9e inc R9 X008e 20 2d inc xdest X0090 a1 44 incw @ xddest X0092 a0 44 incw xddest X0094 bf iret X0095 30 44 jp @ xddest X0097 8d 02 0a jp jmpdst X009a 7d 02 0a jp C, jmpdst X009d 6d 02 0a jp EQ, jmpdst X00a0 0d 02 0a jp F, jmpdst X00a3 9d 02 0a jp GE, jmpdst X00a6 ad 02 0a jp GT, jmpdst X00a9 2d 02 0a jp LE, jmpdst X00ac 1d 02 0a jp LT, jmpdst X00af 5d 02 0a jp MI, jmpdst X00b2 fd 02 0a jp NC, jmpdst X00b5 ed 02 0a jp NE, jmpdst X00b8 cd 02 0a jp NOV, jmpdst X00bb ed 02 0a jp NZ, jmpdst X00be 4d 02 0a jp OV, jmpdst X00c1 dd 02 0a jp PL, jmpdst X00c4 fd 02 0a jp UGE, jmpdst X00c7 bd 02 0a jp UGT, jmpdst X00ca 3d 02 0a jp ULE, jmpdst X00cd 7d 02 0a jp ULT, jmpdst X00d0 6d 02 0a jp Z, jmpdst X00d3 8b 36 jr *+56 X00d5 7b 36 jr C, *+56 X00d7 6b 36 jr EQ, *+56 X00d9 0b 36 jr F, *+56 X00db 9b 36 jr GE, *+56 X00dd ab 36 jr GT, *+56 X00df 2b 36 jr LE, *+56 X00e1 1b 36 jr LT, *+56 X00e3 5b 36 jr MI, *+56 X00e5 fb 36 jr NC, *+56 X00e7 eb 36 jr NE, *+56 X00e9 cb 36 jr NOV, *+56 X00eb eb 36 jr NZ, *+56 X00ed 4b 36 jr OV, *+56 X00ef db 36 jr PL, *+56 X00f1 fb 36 jr UGE, *+56 X00f3 bb 36 jr UGT, *+56 X00f5 3b 36 jr ULE, *+56 X00f7 7b 36 jr ULT, *+56 X00f9 6b 36 jr Z, *+56 X00fb c7 dc 44 ld R13, $44(R12) X00fe d7 cd 55 ld $55(R13), R12 X0101 e3 dc ld R13, @ R12 X0103 e4 1c 2d ld xdest, xsrc X0106 e5 1c 2d ld xdest, @ xsrc X0109 e6 2d 11 ld xdest, # immed X010c e7 2d 11 ld @ xdest, # immed X010f f3 dc ld @ R13, R12 X0111 f5 1c 2d ld @ xdest, xsrc X0114 0c 11 ld R0, # immed X0116 08 1c ld R0, xsrc X0118 1c 11 ld R1, # immed X011a 18 1c ld R1, xsrc X011c ac 11 ld R10, # immed X011e a8 1c ld R10, xsrc X0120 bc 11 ld R11, # immed X0122 b8 1c ld R11, xsrc X0124 cc 11 ld R12, # immed X0126 c8 1c ld R12, xsrc X0128 dc 11 ld R13, # immed X012a d8 1c ld R13, xsrc X012c ec 11 ld R14, # immed X012e e8 1c ld R14, xsrc X0130 fc 11 ld R15, # immed X0132 f8 1c ld R15, xsrc X0134 2c 11 ld R2, # immed X0136 28 1c ld R2, xsrc X0138 3c 11 ld R3, # immed X013a 38 1c ld R3, xsrc X013c 4c 11 ld R4, # immed X013e 48 1c ld R4, xsrc X0140 5c 11 ld R5, # immed X0142 58 1c ld R5, xsrc X0144 6c 11 ld R6, # immed X0146 68 1c ld R6, xsrc X0148 7c 11 ld R7, # immed X014a 78 1c ld R7, xsrc X014c 8c 11 ld R8, # immed X014e 88 1c ld R8, xsrc X0150 9c 11 ld R9, # immed X0152 98 1c ld R9, xsrc X0154 09 2d ld xdest, R0 X0156 19 2d ld xdest, R1 X0158 a9 2d ld xdest, R10 X015a b9 2d ld xdest, R11 X015c c9 2d ld xdest, R12 X015e d9 2d ld xdest, R13 X0160 e9 2d ld xdest, R14 X0162 f9 2d ld xdest, R15 X0164 29 2d ld xdest, R2 X0166 39 2d ld xdest, R3 X0168 49 2d ld xdest, R4 X016a 59 2d ld xdest, R5 X016c 69 2d ld xdest, R6 X016e 79 2d ld xdest, R7 X0170 89 2d ld xdest, R8 X0172 99 2d ld xdest, R9 X0174 d2 da ldc @ RR10, R13 X0176 c2 da ldc R13, @RR10 X0178 c3 da ldci @ R13, @RR10 X017a d3 da ldci @ RR10, @ R13 X017c 92 da lde @ RR10, R13 X017e 82 da lde R13, @RR10 X0180 83 da ldei @ R13, @RR10 X0182 93 da ldei @ RR10, @ R13 X0184 ff nop X0185 47 2d 11 or @ xdest , # immed X0188 43 dc or R13, @ R12 X018a 42 dc or R13, R12 X018c 46 2d 11 or xdest , # immed X018f 45 1c 2d or xdest, @ xsrc X0192 44 1c 2d or xdest, xsrc X0195 51 2d pop @ xdest X0197 50 2d pop xdest X0199 71 2d push @ xdest X019b 70 2d push xdest X019d cf rcf X019e af ret X019f 91 2d rl @ xdest X01a1 90 2d rl xdest X01a3 11 2d rlc @ xdest X01a5 10 2d rlc xdest X01a7 e1 2d rr @ xdest X01a9 e0 2d rr xdest X01ab c1 2d rrc @ xdest X01ad c0 2d rrc xdest X01af 37 2d 11 sbc @ xdest , # immed X01b2 33 dc sbc R13, @ R12 X01b4 32 dc sbc R13, R12 X01b6 36 2d 11 sbc xdest , # immed X01b9 35 1c 2d sbc xdest, @ xsrc X01bc 34 1c 2d sbc xdest, xsrc X01bf df scf X01c0 d1 2d sra @ xdest X01c2 d0 2d sra xdest X01c4 31 70 srp # 112 X01c6 27 2d 11 sub @ xdest , # immed X01c9 23 dc sub R13, @ R12 X01cb 22 dc sub R13, R12 X01cd 26 2d 11 sub xdest , # immed X01d0 25 1c 2d sub xdest, @ xsrc X01d3 24 1c 2d sub xdest, xsrc X01d6 f1 2d swap @ xdest X01d8 f0 2d swap xdest X01da 67 2d 11 tcm @ xdest , # immed X01dd 63 dc tcm R13, @ R12 X01df 62 dc tcm R13, R12 X01e1 66 2d 11 tcm xdest , # immed X01e4 65 1c 2d tcm xdest, @ xsrc X01e7 64 1c 2d tcm xdest, xsrc X01ea 77 2d 11 tm @ xdest , # immed X01ed 73 dc tm R13, @ R12 X01ef 72 dc tm R13, R12 X01f1 76 2d 11 tm xdest , # immed X01f4 75 1c 2d tm xdest, @ xsrc X01f7 74 1c 2d tm xdest, xsrc X01fa b7 2d 11 xor @ xdest , # immed X01fd b3 dc xor R13, @ R12 X01ff b2 dc xor R13, R12 X0201 b6 2d 11 xor xdest , # immed X0204 b5 1c 2d xor xdest, @ xsrc X0207 b4 1c 2d xor xdest, xsrc X 0x20a jmpdst X ERROR SUMMARY - ERRORS DETECTED 0 X - WARNINGS 0 SHAR_EOF true || echo 'restore of asz8.tut failed' fi # ============= asz8.y ============== if test -f 'asz8.y' -a X"$1" != X"-c"; then echo 'x - skipping asz8.y (File already exists)' else echo 'x - extracting asz8.y (Text)' sed 's/^X//' << 'SHAR_EOF' > 'asz8.y' && X%{ X X/* XHEADER: ; XTITLE: Frankenstein Cross Assemblers; XVERSION: 2.0; XDESCRIPTION: " Reconfigurable Cross-assembler producing Intel (TM) X Hex format object records. "; XKEYWORDS: cross-assemblers, 1805, 2650, 6301, 6502, 6805, 6809, X 6811, tms7000, 8048, 8051, 8096, z8, z80; XSYSTEM: UNIX, MS-Dos ; XFILENAME: asz8.y; XWARNINGS: "This software is in the public domain. X Any prior copyright claims are relinquished. X X This software is distributed with no warranty whatever. X The author takes no responsibility for the consequences X of its use. X X Yacc (or Bison) required to compile." ; XSEE-ALSO: asz8.doc,frasmain.c; XAUTHORS: Mark Zenier; XCOMPILERS: Microport Sys V/AT, ATT Yacc, Turbo C V1.5, Bison (CUG disk 285) X (previous versions Xenix, Unisoft 68000 Version 7, Sun 3); X*/ X/* z8 instruction generation file */ X/* November 17, 1990 */ X X/* X description frame work parser description for framework cross X assemblers X history February 2, 1988 X September 11, 1990 - merge table definition X September 12, 1990 - short file names X September 14, 1990 - short variable names X September 17, 1990 - use yylex as external X*/ X#include X#include "frasmdat.h" X#include "fragcon.h" X X#define yylex lexintercept X X/* X file critz8.h X author Mark Zenier X description Selection criteria and syntax type constants for X the z8 framework assembler X usage Unix X history October 28, 1987 X*/ X X/* 0000.0000.0000.000x destination register is in working set */ X#define DSTWORK 0x1 X X/* 0000.0000.0000.00x0 destination is double register */ X#define DSTDBL 0x2 X X/* 0000.0000.0000.0x00 source register is in working set */ X#define SRCWORK 0x4 X X/* 0000.0000.0000.x000 source is double register */ X#define SRCDBL 0x8 X X/* type flags for symbol table value for registers */ X#define REGFLGSHFT 8 X#define REGDFLGSH REGFLGSHFT X#define REGSFLGSH (REGFLGSHFT -2) X#define REGFLGS ((DSTWORK|DSTDBL)< REGISTER X%token CONDITION X X%type regdefop regoperand X X%token KOC_BDEF X%token KOC_ELSE X%token KOC_END X%token KOC_ENDI X%token KOC_EQU X%token KOC_IF X%token KOC_INCLUDE X%token KOC_ORG X%token KOC_RESM X%token KOC_SDEF X%token KOC_SET X%token KOC_WDEF X%token KOC_CHSET X%token KOC_CHDEF X%token KOC_CHUSE X%token KOC_REG X%token KOC_RREG X%token KOC_CPU X%token KOC_opcode X%token KOC_srp X X%token CONSTANT X%token EOL X%token KEOP_AND X%token KEOP_DEFINED X%token KEOP_EQ X%token KEOP_GE X%token KEOP_GT X%token KEOP_HIGH X%token KEOP_LE X%token KEOP_LOW X%token KEOP_LT X%token KEOP_MOD X%token KEOP_MUN X%token KEOP_NE X%token KEOP_NOT X%token KEOP_OR X%token KEOP_SHL X%token KEOP_SHR X%token KEOP_XOR X%token KEOP_locctr X%token LABEL X%token STRING X%token SYMBOL X X%token KTK_invalid X X%right KEOP_HIGH KEOP_LOW X%left KEOP_OR KEOP_XOR X%left KEOP_AND X%right KEOP_NOT X%nonassoc KEOP_GT KEOP_GE KEOP_LE KEOP_LT KEOP_NE KEOP_EQ X%left '+' '-' X%left '*' '/' KEOP_MOD KEOP_SHL KEOP_SHR X%right KEOP_MUN X X X%type expr exprlist stringlist X X%start file X X%% X Xfile : file allline X | allline X ; X Xallline : line EOL X { X clrexpr(); X } X | EOL X | error EOL X { X clrexpr(); X yyerrok; X } X ; X Xline : LABEL KOC_END X { X endsymbol = $1; X nextreadact = Nra_end; X } X | KOC_END X { X nextreadact = Nra_end; X } X | KOC_INCLUDE STRING X { X if(nextfstk >= FILESTKDPTH) X { X fraerror("include file nesting limit exceeded"); X } X else X { X infilestk[nextfstk].fnm = savestring($2,strlen($2)); X if( (infilestk[nextfstk].fpt = fopen($2,"r")) X ==(FILE *)NULL ) X { X fraerror("cannot open include file"); X } X else X { X nextreadact = Nra_new; X } X } X } X | LABEL KOC_EQU expr X { X if($1 -> seg == SSG_UNDEF) X { X pevalexpr(0, $3); X if(evalr[0].seg == SSG_ABS) X { X $1 -> seg = SSG_EQU; X $1 -> value = evalr[0].value; X prtequvalue("C: 0x%lx\n", X evalr[0].value); X } X else X { X fraerror( X "noncomputable expression for EQU"); X } X } X else X { X fraerror( X "cannot change symbol value with EQU"); X } X } X | LABEL KOC_SET expr X { X if($1 -> seg == SSG_UNDEF X || $1 -> seg == SSG_SET) X { X pevalexpr(0, $3); X if(evalr[0].seg == SSG_ABS) X { X $1 -> seg = SSG_SET; X $1 -> value = evalr[0].value; X prtequvalue("C: 0x%lx\n", X evalr[0].value); X } X else X { X fraerror( X "noncomputable expression for SET"); X } X } X else X { X fraerror( X "cannot change symbol value with SET"); X } X } X | KOC_IF expr X { X if((++ifstkpt) < IFSTKDEPTH) X { X pevalexpr(0, $2); X if(evalr[0].seg == SSG_ABS) X { X if(evalr[0].value != 0) X { X elseifstk[ifstkpt] = If_Skip; X endifstk[ifstkpt] = If_Active; X } X else X { X fraifskip = TRUE; X elseifstk[ifstkpt] = If_Active; X endifstk[ifstkpt] = If_Active; X } X } X else X { X fraifskip = TRUE; X elseifstk[ifstkpt] = If_Active; X endifstk[ifstkpt] = If_Active; X } X } X else X { X fraerror("IF stack overflow"); X } X } X X | KOC_IF X { X if(fraifskip) X { X if((++ifstkpt) < IFSTKDEPTH) X { X elseifstk[ifstkpt] = If_Skip; X endifstk[ifstkpt] = If_Skip; X } X else X { X fraerror("IF stack overflow"); X } X } X else X { X yyerror("syntax error"); X YYERROR; X } X } X X | KOC_ELSE X { X switch(elseifstk[ifstkpt]) X { X case If_Active: X fraifskip = FALSE; X break; X X case If_Skip: X fraifskip = TRUE; X break; X X case If_Err: X fraerror("ELSE with no matching if"); X break; X } X } X X | KOC_ENDI X { X switch(endifstk[ifstkpt]) X { X case If_Active: X fraifskip = FALSE; X ifstkpt--; X break; X X case If_Skip: X fraifskip = TRUE; X ifstkpt--; X break; X X case If_Err: X fraerror("ENDI with no matching if"); X break; X } X } X | LABEL KOC_ORG expr X { X pevalexpr(0, $3); X if(evalr[0].seg == SSG_ABS) X { X locctr = labelloc = evalr[0].value; X if($1 -> seg == SSG_UNDEF) X { X $1 -> seg = SSG_ABS; X $1 -> value = labelloc; X } X else X fraerror( X "multiple definition of label"); X prtequvalue("C: 0x%lx\n", X evalr[0].value); X } X else X { X fraerror( X "noncomputable expression for ORG"); X } X } X | KOC_ORG expr X { X pevalexpr(0, $2); X if(evalr[0].seg == SSG_ABS) X { X locctr = labelloc = evalr[0].value; X prtequvalue("C: 0x%lx\n", X evalr[0].value); X } X else X { X fraerror( X "noncomputable expression for ORG"); X } X } X | LABEL KOC_CHSET X { X if($1 -> seg == SSG_UNDEF) X { X $1 -> seg = SSG_EQU; X if( ($1->value = chtcreate()) <= 0) X { X fraerror( "cannot create character translation table"); X } X prtequvalue("C: 0x%lx\n", $1 -> value); X } X else X { X fraerror( "multiple definition of label"); X } X } X | KOC_CHUSE X { X chtcpoint = (int *) NULL; X prtequvalue("C: 0x%lx\n", 0L); X } X | KOC_CHUSE expr X { X pevalexpr(0, $2); X if( evalr[0].seg == SSG_ABS) X { X if( evalr[0].value == 0) X { X chtcpoint = (int *)NULL; X prtequvalue("C: 0x%lx\n", 0L); X } X else if(evalr[0].value < chtnxalph) X { X chtcpoint = chtatab[evalr[0].value]; X prtequvalue("C: 0x%lx\n", evalr[0].value); X } X else X { X fraerror("nonexistent character translation table"); X } X } X else X { X fraerror("noncomputable expression"); X } X } X | KOC_CHDEF STRING ',' exprlist X { X int findrv, numret, *charaddr; X char *sourcestr = $2, *before; X X if(chtnpoint != (int *)NULL) X { X for(satsub = 0; satsub < $4; satsub++) X { X before = sourcestr; X X pevalexpr(0, exprlist[satsub]); X findrv = chtcfind(chtnpoint, &sourcestr, X &charaddr, &numret); X if(findrv == CF_END) X { X fraerror("more expressions than characters"); X break; X } X X if(evalr[0].seg == SSG_ABS) X { X switch(findrv) X { X case CF_UNDEF: X { X if(evalr[0].value < 0 || X evalr[0].value > 255) X { X frawarn("character translation value truncated"); X } X *charaddr = evalr[0].value & 0xff; X prtequvalue("C: 0x%lx\n", evalr[0].value); X } X break; X X case CF_INVALID: X case CF_NUMBER: X fracherror("invalid character to define", X before, sourcestr); X break; X X case CF_CHAR: X fracherror("character already defined", X before, sourcestr); X break; X } X } X else X { X fraerror("noncomputable expression"); X } X } X X if( *sourcestr != '\0') X { X fraerror("more characters than expressions"); X } X } X else X { X fraerror("no CHARSET statement active"); X } X X } X | LABEL X { X if($1 -> seg == SSG_UNDEF) X { X $1 -> seg = SSG_ABS; X $1 -> value = labelloc; X prtequvalue("C: 0x%lx\n", labelloc); X X } X else X fraerror( X "multiple definition of label"); X } X | labeledline X ; X Xlabeledline : LABEL genline X { X if($1 -> seg == SSG_UNDEF) X { X $1 -> seg = SSG_ABS; X $1 -> value = labelloc; X } X else X fraerror( X "multiple definition of label"); X labelloc = locctr; X } X X | genline X { X labelloc = locctr; X } X ; X Xgenline : KOC_BDEF exprlist X { X genlocrec(currseg, labelloc); X for( satsub = 0; satsub < $2; satsub++) X { X pevalexpr(1, exprlist[satsub]); X locctr += geninstr(genbdef); X } X } X | KOC_SDEF stringlist X { X genlocrec(currseg, labelloc); X for(satsub = 0; satsub < $2; satsub++) X { X locctr += genstring(stringlist[satsub]); X } X } X | KOC_WDEF exprlist X { X genlocrec(currseg, labelloc); X for( satsub = 0; satsub < $2; satsub++) X { X pevalexpr(1, exprlist[satsub]); X locctr += geninstr(genwdef); X } X } X | KOC_RESM expr X { X pevalexpr(0, $2); X if(evalr[0].seg == SSG_ABS) X { X locctr = labelloc + evalr[0].value; X prtequvalue("C: 0x%lx\n", labelloc); X } X else X { X fraerror( X "noncomputable result for RMB expression"); X } X } X ; X Xexprlist : exprlist ',' expr X { X exprlist[nextexprs ++ ] = $3; X $$ = nextexprs; X } X | expr X { X nextexprs = 0; X exprlist[nextexprs ++ ] = $1; X $$ = nextexprs; X } X ; X Xstringlist : stringlist ',' STRING X { X stringlist[nextstrs ++ ] = $3; X $$ = nextstrs; X } X | STRING X { X nextstrs = 0; X stringlist[nextstrs ++ ] = $1; X $$ = nextstrs; X } X ; X X X Xline : LABEL regdefop regoperand X { X if($1 -> seg == SSG_UNDEF) X { X $1 -> value = ( $3 & REGBITS ) X | ( $3 & REGDEFWRK ) X | ($2 == 2 ? REGDEFDBL : 0); X $1 -> seg = SSG_RESV; X $1 -> tok = REGISTER; X X if($3 & REGDEFWRK) X { X if(($3 & 0xf0) != 0xe0) X fraerror( X "invalid working register address"); X } X else X { X switch(cpuselect) X { X case CPU8600: X if( ($3 & REGBITS) > 0x7f && X ($3 & REGBITS) < 0xf0) X { X fraerror( X "unimplemented register address"); X } X break; X X case CPU8090: X if( ($3 & REGBITS) > 0xdf && X ($3 & REGBITS) < 0xf0) X { X fraerror( X "unimplemented register address"); X } X break; X X } X } X X if( ( $1 -> value & REGDEFDBL) && ( $1 -> value & 1) ) X fraerror("double register not on even boundry"); X X prtequvalue("C: 0x%x\n",REGBITS & ((int) $1->value)); X } X else X { X fraerror("multiple definition of label"); X } X prevregwork = $3 & REGDEFWRK; X regloccnt = ($3 & REGBITS) + $2; X } X ; X Xregdefop : KOC_REG X { X $$ = 1; X } X | KOC_RREG X { X $$ = 2; X } X ; X Xregoperand : REGISTER X { X $$ = $1; X } X | expr X { X $$ = 0; X pevalexpr(0, $1); X if(evalr[0].seg != SSG_ABS) X { X fraerror("noncomputable value for REG"); X } X else X { X if(evalr[0].value >= 0 && evalr[0].value <= 255) X $$ = evalr[0].value; X else X fraerror("value out of range"); X } X } X | X { X if(regloccnt <= 255) X $$ = regloccnt | prevregwork ; X else X { X $$ = 0; X fraerror("register location counter out of range"); X } X } X ; X Xline : KOC_CPU STRING X { X if( ! cpumatch($2)) X { X fraerror("unknown cpu type, z8 assumed"); X cpuselect = CPU8600; X } X } X ; Xgenline : KOC_opcode CONDITION ',' expr X { X genlocrec(currseg, labelloc); X evalr[1].value = $2; X pevalexpr(2, $4); X locctr += geninstr(findgen($1, ST_CEXP, 0)); X } X ; Xgenline : KOC_opcode expr X { X genlocrec(currseg, labelloc); X pevalexpr(1, $2); X locctr += geninstr(findgen($1, ST_EXP, 0)); X } X ; Xgenline : KOC_opcode X { X genlocrec(currseg, labelloc); X locctr += geninstr(findgen($1, ST_INH, 0)); X } X ; Xgenline : KOC_opcode '@' REGISTER X { X genlocrec(currseg, labelloc); X evalr[1].value = $3 & REGBITS; X evalr[2].value = $3 & REGWORKBITS; X locctr += geninstr(findgen($1, ST_IR1, X ($3 & REGFLGS) >> REGDFLGSH )); X } X ; Xgenline : KOC_opcode '@' REGISTER ',' '#' expr X { X genlocrec(currseg, labelloc); X evalr[1].value = $3 & REGBITS; X evalr[3].value = $3 & REGWORKBITS; X pevalexpr(2, $6); X locctr += geninstr(findgen($1, ST_IRIM, X ($3 & REGFLGS) >> REGDFLGSH )); X } X ; Xgenline : KOC_opcode '@' REGISTER ',' '@' REGISTER X { X genlocrec(currseg, labelloc); X evalr[1].value = $3 & REGBITS; X evalr[2].value = $3 & REGWORKBITS; X evalr[3].value = $6 & REGBITS; X evalr[4].value = $6 & REGWORKBITS; X locctr += geninstr(findgen($1, ST_IRIR, X ( ($3 & REGFLGS) >> REGDFLGSH ) | X ( ($6 & REGFLGS) >> REGSFLGSH ) )); X } X ; Xgenline : KOC_opcode '@' REGISTER ',' REGISTER X { X genlocrec(currseg, labelloc); X evalr[1].value = $3 & REGBITS; X evalr[2].value = $3 & REGWORKBITS; X evalr[3].value = $5 & REGBITS; X evalr[4].value = $5 & REGWORKBITS; X locctr += geninstr(findgen($1, ST_IRR, X ( ($3 & REGFLGS) >> REGDFLGSH ) | X ( ($5 & REGFLGS) >> REGSFLGSH ) )); X } X ; Xgenline : KOC_opcode REGISTER X { X genlocrec(currseg, labelloc); X evalr[1].value = $2 & REGBITS; X evalr[2].value = $2 & REGWORKBITS; X locctr += geninstr(findgen($1, ST_R1, X ($2 & REGFLGS) >> REGDFLGSH )); X } X ; Xgenline : KOC_opcode REGISTER ',' REGISTER X { X genlocrec(currseg, labelloc); X evalr[1].value = $2 & REGBITS; X evalr[2].value = $2 & REGWORKBITS; X evalr[3].value = $4 & REGBITS; X evalr[4].value = $4 & REGWORKBITS; X locctr += geninstr(findgen($1, ST_R2, X ( ($2 & REGFLGS) >> REGDFLGSH ) | X ( ($4 & REGFLGS) >> REGSFLGSH ) )); X } X ; Xgenline : KOC_opcode REGISTER ',' expr X { X genlocrec(currseg, labelloc); X evalr[1].value = $2 & REGBITS; X pevalexpr(2, $4); X evalr[3].value = $2 & REGWORKBITS; X locctr += geninstr(findgen($1, ST_REXP, X ($2 & REGFLGS) >> REGDFLGSH )); X } X ; Xgenline : KOC_opcode REGISTER ',' '#' expr X { X genlocrec(currseg, labelloc); X evalr[1].value = $2 & REGBITS; X evalr[3].value = $2 & REGWORKBITS; X pevalexpr(2, $5); X locctr += geninstr(findgen($1, ST_RIMM, X ($2 & REGFLGS) >> REGDFLGSH )); X } X ; Xgenline : KOC_opcode REGISTER ',' '@' REGISTER X { X genlocrec(currseg, labelloc); X evalr[1].value = $2 & REGBITS; X evalr[2].value = $2 & REGWORKBITS; X evalr[3].value = $5 & REGBITS; X evalr[4].value = $5 & REGWORKBITS; X locctr += geninstr(findgen($1, ST_RIR, X ( ($2 & REGFLGS) >> REGDFLGSH ) | X ( ($5 & REGFLGS) >> REGSFLGSH ) )); X } X ; Xgenline : KOC_opcode REGISTER ',' expr '(' REGISTER ')' X { X genlocrec(currseg, labelloc); X evalr[1].value = $2 & REGWORKBITS; X pevalexpr(2, $4); X evalr[3].value = $6 & REGWORKBITS; X locctr += geninstr(findgen($1, ST_RX, X ( ($2 & REGFLGS) >> REGDFLGSH ) | X ( ($6 & REGFLGS) >> REGSFLGSH ) )); X } X ; Xgenline : KOC_opcode expr '(' REGISTER ')' ',' REGISTER X { X genlocrec(currseg, labelloc); X pevalexpr(1, $2); X evalr[2].value = $4 & REGWORKBITS; X evalr[3].value = $7 & REGWORKBITS; X locctr += geninstr(findgen($1, ST_XR, X ( ($4 & REGFLGS) >> REGDFLGSH ) | X ( ($7 & REGFLGS) >> REGSFLGSH ) )); X } X ; Xgenline : KOC_srp '#' expr X { X pevalexpr(1, $3); X if(evalr[1].seg != SSG_ABS) X { X fraerror("noncomputable value for SRP"); X } X else X { X switch(( (int) evalr[1].value ) & REGBITS) X { X case 0x80: X case 0x90: X case 0xa0: X case 0xb0: X case 0xc0: X case 0xd0: X if(cpuselect == CPU8600) X { X fraerror("invalid value for SRP"); X break; X } X /* fall thru */ X case 0x00: X case 0x10: X case 0x20: X case 0x30: X case 0x40: X case 0x50: X case 0x60: X case 0x70: X case 0xf0: X genlocrec(currseg, labelloc); X locctr += geninstr(findgen($1, ST_IMM, 0)); X break; X default: X fraerror("invalid value for SRP"); X break; X } X } X } X ; Xexpr : '+' expr %prec KEOP_MUN X { X $$ = $2; X } X | '-' expr %prec KEOP_MUN X { X $$ = exprnode(PCCASE_UN,$2,IFC_NEG,0,0L, X SYMNULL); X } X | KEOP_NOT expr X { X $$ = exprnode(PCCASE_UN,$2,IFC_NOT,0,0L, X SYMNULL); X } X | KEOP_HIGH expr X { X $$ = exprnode(PCCASE_UN,$2,IFC_HIGH,0,0L, X SYMNULL); X } X | KEOP_LOW expr X { X $$ = exprnode(PCCASE_UN,$2,IFC_LOW,0,0L, X SYMNULL); X } X | expr '*' expr X { X $$ = exprnode(PCCASE_BIN,$1,IFC_MUL,$3,0L, X SYMNULL); X } X | expr '/' expr X { X $$ = exprnode(PCCASE_BIN,$1,IFC_DIV,$3,0L, X SYMNULL); X } X | expr '+' expr X { X $$ = exprnode(PCCASE_BIN,$1,IFC_ADD,$3,0L, X SYMNULL); X } X | expr '-' expr X { X $$ = exprnode(PCCASE_BIN,$1,IFC_SUB,$3,0L, X SYMNULL); X } X | expr KEOP_MOD expr X { X $$ = exprnode(PCCASE_BIN,$1,IFC_MOD,$3,0L, X SYMNULL); X } X | expr KEOP_SHL expr X { X $$ = exprnode(PCCASE_BIN,$1,IFC_SHL,$3,0L, X SYMNULL); X } X | expr KEOP_SHR expr X { X $$ = exprnode(PCCASE_BIN,$1,IFC_SHR,$3,0L, X SYMNULL); X } X | expr KEOP_GT expr X { X $$ = exprnode(PCCASE_BIN,$1,IFC_GT,$3,0L, X SYMNULL); X } X | expr KEOP_GE expr X { X $$ = exprnode(PCCASE_BIN,$1,IFC_GE,$3,0L, X SYMNULL); X } X | expr KEOP_LT expr X { X $$ = exprnode(PCCASE_BIN,$1,IFC_LT,$3,0L, X SYMNULL); X } X | expr KEOP_LE expr X { X $$ = exprnode(PCCASE_BIN,$1,IFC_LE,$3,0L, X SYMNULL); X } X | expr KEOP_NE expr X { X $$ = exprnode(PCCASE_BIN,$1,IFC_NE,$3,0L, X SYMNULL); X } X | expr KEOP_EQ expr X { X $$ = exprnode(PCCASE_BIN,$1,IFC_EQ,$3,0L, X SYMNULL); X } X | expr KEOP_AND expr X { X $$ = exprnode(PCCASE_BIN,$1,IFC_AND,$3,0L, X SYMNULL); X } X | expr KEOP_OR expr X { X $$ = exprnode(PCCASE_BIN,$1,IFC_OR,$3,0L, X SYMNULL); X } X | expr KEOP_XOR expr X { X $$ = exprnode(PCCASE_BIN,$1,IFC_XOR,$3,0L, X SYMNULL); X } X | KEOP_DEFINED SYMBOL X { X $$ = exprnode(PCCASE_DEF,0,IGP_DEFINED,0,0L,$2); X } X | SYMBOL X { X $$ = exprnode(PCCASE_SYMB,0,IFC_SYMB,0,0L,$1); X } X | '*' X { X $$ = exprnode(PCCASE_PROGC,0,IFC_PROGCTR,0, X labelloc, SYMNULL); X } X | CONSTANT X { X $$ = exprnode(PCCASE_CONS,0,IGP_CONSTANT,0,$1, X SYMNULL); X } X | STRING X { X char *sourcestr = $1; X long accval = 0; X X if(strlen($1) > 0) X { X accval = chtran(&sourcestr); X if(*sourcestr != '\0') X { X accval = (accval << 8) + X chtran(&sourcestr); X } X X if( *sourcestr != '\0') X { X frawarn("string constant in expression more than 2 characters long"); X } X } X $$ = exprnode(PCCASE_CONS, 0, IGP_CONSTANT, 0, X accval, SYMNULL); X } X | '(' expr ')' X { X $$ = $2; X } X ; X Xexpr : '(' REGISTER ')' X { X $$ = exprnode(PCCASE_CONS,0,IGP_CONSTANT,0, X (long) (REGBITS & $2), X SYMNULL); X } X ; X X%% X Xlexintercept() X/* X description intercept the call to yylex (the lexical analyzer) X and filter out all unnecessary tokens when skipping X the input between a failed IF and its matching ENDI or X ELSE X globals fraifskip the enable flag X*/ X{ X#undef yylex X X int rv; X X if(fraifskip) X { X for(;;) X { X X switch(rv = yylex()) X X { X case 0: X case KOC_END: X case KOC_IF: X case KOC_ELSE: X case KOC_ENDI: X case EOL: X return rv; X default: X break; X } X } X } X else X return yylex(); X#define yylex lexintercept X} X X X Xsetreserved() X{ X X reservedsym("and", KEOP_AND, 0); X reservedsym("defined", KEOP_DEFINED,0); X reservedsym("high", KEOP_HIGH, 0); X reservedsym("low", KEOP_LOW, 0); X reservedsym("mod", KEOP_MOD, 0); X reservedsym("not", KEOP_NOT, 0); X reservedsym("or", KEOP_OR, 0); X reservedsym("shl", KEOP_SHL, 0); X reservedsym("shr", KEOP_SHR, 0); X reservedsym("xor", KEOP_XOR, 0); X reservedsym("AND", KEOP_AND, 0); X reservedsym("DEFINED", KEOP_DEFINED,0); X reservedsym("HIGH", KEOP_HIGH, 0); X reservedsym("LOW", KEOP_LOW, 0); X reservedsym("MOD", KEOP_MOD, 0); X reservedsym("NOT", KEOP_NOT, 0); X reservedsym("OR", KEOP_OR, 0); X reservedsym("SHL", KEOP_SHL, 0); X reservedsym("SHR", KEOP_SHR, 0); X reservedsym("XOR", KEOP_XOR, 0); X reservedsym("F", CONDITION, 0); X reservedsym("C", CONDITION, 0x7); X reservedsym("NC", CONDITION, 0xf); X reservedsym("Z", CONDITION, 0x6); X reservedsym("NZ", CONDITION, 0xe); X reservedsym("PL", CONDITION, 0xd); X reservedsym("MI", CONDITION, 0x5); X reservedsym("OV", CONDITION, 0x4); X reservedsym("NOV", CONDITION, 0xc); X reservedsym("EQ", CONDITION, 0x6); X reservedsym("NE", CONDITION, 0xe); X reservedsym("GE", CONDITION, 0x9); X reservedsym("LT", CONDITION, 0x1); X reservedsym("GT", CONDITION, 0xa); X reservedsym("LE", CONDITION, 0x2); X reservedsym("UGE", CONDITION, 0xf); X reservedsym("ULT", CONDITION, 0x7); X reservedsym("UGT", CONDITION, 0xb); X reservedsym("ULE", CONDITION, 0x3); X reservedsym("R0", REGISTER, REGDEFWRK + 0xe0); X reservedsym("R1", REGISTER, REGDEFWRK + 0xe1); X reservedsym("R2", REGISTER, REGDEFWRK + 0xe2); X reservedsym("R3", REGISTER, REGDEFWRK + 0xe3); X reservedsym("R4", REGISTER, REGDEFWRK + 0xe4); X reservedsym("R5", REGISTER, REGDEFWRK + 0xe5); X reservedsym("R6", REGISTER, REGDEFWRK + 0xe6); X reservedsym("R7", REGISTER, REGDEFWRK + 0xe7); X reservedsym("R8", REGISTER, REGDEFWRK + 0xe8); X reservedsym("R9", REGISTER, REGDEFWRK + 0xe9); X reservedsym("R10", REGISTER, REGDEFWRK + 0xea); X reservedsym("R11", REGISTER, REGDEFWRK + 0xeb); X reservedsym("R12", REGISTER, REGDEFWRK + 0xec); X reservedsym("R13", REGISTER, REGDEFWRK + 0xed); X reservedsym("R14", REGISTER, REGDEFWRK + 0xee); X reservedsym("R15", REGISTER, REGDEFWRK + 0xef); X reservedsym("RR0", REGISTER, REGDEFWRK + REGDEFDBL + 0xe0); X reservedsym("RR2", REGISTER, REGDEFWRK + REGDEFDBL + 0xe2); X reservedsym("RR4", REGISTER, REGDEFWRK + REGDEFDBL + 0xe4); X reservedsym("RR6", REGISTER, REGDEFWRK + REGDEFDBL + 0xe6); X reservedsym("RR8", REGISTER, REGDEFWRK + REGDEFDBL + 0xe8); X reservedsym("RR10", REGISTER, REGDEFWRK + REGDEFDBL + 0xea); X reservedsym("RR12", REGISTER, REGDEFWRK + REGDEFDBL + 0xec); X reservedsym("RR14", REGISTER, REGDEFWRK + REGDEFDBL + 0xee); X} X X Xcpumatch(str) X char * str; X{ X int msub; X X static struct X { X char * mtch; X int cpuv; X } matchtab[] = X { X {"86", CPU8600 }, X {"z8", CPU8600 }, X {"Z8", CPU8600 }, X {"upc", CPU8090 }, X {"UPC", CPU8090 }, X {"9", CPU8090 }, X {"", 0} X }; X X for(msub = 0; matchtab[msub].cpuv != 0; msub++) X { X if(strcontains(str, matchtab[msub].mtch)) X { X cpuselect = matchtab[msub].cpuv; X return TRUE; X } X } X X return FALSE; X} X X Xstrcontains(s1, sm) X char * s1, *sm; X{ X int l1 = strlen(s1), lm = strlen(sm); X X for(; l1 >= lm; l1--, s1++) X { X if(strncmp(s1, sm, lm) == 0) X { X return TRUE; X } X } X return FALSE; X} X X/* X description Opcode and Instruction generation tables X usage Unix, framework crossassembler X history September 25, 1987 X*/ X X#define NUMOPCODE 70 X#define NUMSYNBLK 102 X#define NUMDIFFOP 130 X Xint gnumopcode = NUMOPCODE; X Xint ophashlnk[NUMOPCODE]; X Xstruct opsym optab[NUMOPCODE+1] X = { X {"invalid", KOC_opcode, 2, 0 }, X {"ADC", KOC_opcode, 4, 2 }, X {"ADD", KOC_opcode, 4, 6 }, X {"AND", KOC_opcode, 4, 10 }, X {"BYTE", KOC_BDEF, 0, 0 }, X {"CALL", KOC_opcode, 2, 14 }, X {"CCF", KOC_opcode, 1, 16 }, X {"CHARDEF", KOC_CHDEF, 0, 0 }, X {"CHARSET", KOC_CHSET, 0, 0 }, X {"CHARUSE", KOC_CHUSE, 0, 0 }, X {"CHD", KOC_CHDEF, 0, 0 }, X {"CLR", KOC_opcode, 2, 17 }, X {"COM", KOC_opcode, 2, 19 }, X {"CP", KOC_opcode, 4, 21 }, X {"CPU", KOC_CPU, 0, 0 }, X {"DA", KOC_opcode, 2, 25 }, X {"DB", KOC_BDEF, 0, 0 }, X {"DEC", KOC_opcode, 2, 27 }, X {"DECW", KOC_opcode, 2, 29 }, X {"DI", KOC_opcode, 1, 31 }, X {"DJNZ", KOC_opcode, 1, 32 }, X {"DW", KOC_WDEF, 0, 0 }, X {"EI", KOC_opcode, 1, 33 }, X {"ELSE", KOC_ELSE, 0, 0 }, X {"END", KOC_END, 0, 0 }, X {"ENDI", KOC_ENDI, 0, 0 }, X {"EQU", KOC_EQU, 0, 0 }, X {"FCB", KOC_BDEF, 0, 0 }, X {"FCC", KOC_SDEF, 0, 0 }, X {"FDB", KOC_WDEF, 0, 0 }, X {"IF", KOC_IF, 0, 0 }, X {"INC", KOC_opcode, 2, 34 }, X {"INCL", KOC_INCLUDE, 0, 0 }, X {"INCLUDE", KOC_INCLUDE, 0, 0 }, X {"INCW", KOC_opcode, 2, 36 }, X {"IRET", KOC_opcode, 1, 38 }, X {"JP", KOC_opcode, 3, 39 }, X {"JR", KOC_opcode, 2, 42 }, X {"LD", KOC_opcode, 7, 44 }, X {"LDC", KOC_opcode, 2, 51 }, X {"LDCI", KOC_opcode, 1, 53 }, X {"LDE", KOC_opcode, 2, 54 }, X {"LDEI", KOC_opcode, 1, 56 }, X {"NOP", KOC_opcode, 1, 57 }, X {"OR", KOC_opcode, 4, 58 }, X {"ORG", KOC_ORG, 0, 0 }, X {"POP", KOC_opcode, 2, 62 }, X {"PUSH", KOC_opcode, 2, 64 }, X {"RCF", KOC_opcode, 1, 66 }, X {"REG", KOC_REG, 0, 0 }, X {"RESERVE", KOC_RESM, 0, 0 }, X {"RET", KOC_opcode, 1, 67 }, X {"RL", KOC_opcode, 2, 68 }, X {"RLC", KOC_opcode, 2, 70 }, X {"RMB", KOC_RESM, 0, 0 }, X {"RR", KOC_opcode, 2, 72 }, X {"RRC", KOC_opcode, 2, 74 }, X {"RREG", KOC_RREG, 0, 0 }, X {"SBC", KOC_opcode, 4, 76 }, X {"SCF", KOC_opcode, 1, 80 }, X {"SET", KOC_SET, 0, 0 }, X {"SRA", KOC_opcode, 2, 81 }, X {"SRP", KOC_srp, 1, 83 }, X {"STRING", KOC_SDEF, 0, 0 }, X {"SUB", KOC_opcode, 4, 84 }, X {"SWAP", KOC_opcode, 2, 88 }, X {"TCM", KOC_opcode, 4, 90 }, X {"TM", KOC_opcode, 4, 94 }, X {"WORD", KOC_WDEF, 0, 0 }, X {"XOR", KOC_opcode, 4, 98 }, X { "", 0, 0, 0 }}; X Xstruct opsynt ostab[NUMSYNBLK+1] X = { X/* invalid 0 */ { 0, 1, 0 }, X/* invalid 1 */ { 0xffff, 1, 1 }, X/* ADC 2 */ { ST_IRIM, 1, 2 }, X/* ADC 3 */ { ST_R2, 2, 3 }, X/* ADC 4 */ { ST_RIMM, 1, 5 }, X/* ADC 5 */ { ST_RIR, 2, 6 }, X/* ADD 6 */ { ST_IRIM, 1, 8 }, X/* ADD 7 */ { ST_R2, 2, 9 }, X/* ADD 8 */ { ST_RIMM, 1, 11 }, X/* ADD 9 */ { ST_RIR, 2, 12 }, X/* AND 10 */ { ST_IRIM, 1, 14 }, X/* AND 11 */ { ST_R2, 2, 15 }, X/* AND 12 */ { ST_RIMM, 1, 17 }, X/* AND 13 */ { ST_RIR, 2, 18 }, X/* CALL 14 */ { ST_EXP, 1, 20 }, X/* CALL 15 */ { ST_IR1, 1, 21 }, X/* CCF 16 */ { ST_INH, 1, 22 }, X/* CLR 17 */ { ST_IR1, 1, 23 }, X/* CLR 18 */ { ST_R1, 1, 24 }, X/* COM 19 */ { ST_IR1, 1, 25 }, X/* COM 20 */ { ST_R1, 1, 26 }, X/* CP 21 */ { ST_IRIM, 1, 27 }, X/* CP 22 */ { ST_R2, 2, 28 }, X/* CP 23 */ { ST_RIMM, 1, 30 }, X/* CP 24 */ { ST_RIR, 2, 31 }, X/* DA 25 */ { ST_IR1, 1, 33 }, X/* DA 26 */ { ST_R1, 1, 34 }, X/* DEC 27 */ { ST_IR1, 1, 35 }, X/* DEC 28 */ { ST_R1, 1, 36 }, X/* DECW 29 */ { ST_IR1, 1, 37 }, X/* DECW 30 */ { ST_R1, 1, 38 }, X/* DI 31 */ { ST_INH, 1, 39 }, X/* DJNZ 32 */ { ST_REXP, 1, 40 }, X/* EI 33 */ { ST_INH, 1, 41 }, X/* INC 34 */ { ST_IR1, 1, 42 }, X/* INC 35 */ { ST_R1, 2, 43 }, X/* INCW 36 */ { ST_IR1, 1, 45 }, X/* INCW 37 */ { ST_R1, 1, 46 }, X/* IRET 38 */ { ST_INH, 1, 47 }, X/* JP 39 */ { ST_CEXP, 1, 48 }, X/* JP 40 */ { ST_EXP, 1, 49 }, X/* JP 41 */ { ST_IR1, 1, 50 }, X/* JR 42 */ { ST_CEXP, 1, 51 }, X/* JR 43 */ { ST_EXP, 1, 52 }, X/* LD 44 */ { ST_IRIM, 1, 53 }, X/* LD 45 */ { ST_IRR, 2, 54 }, X/* LD 46 */ { ST_R2, 3, 56 }, X/* LD 47 */ { ST_RIMM, 2, 59 }, X/* LD 48 */ { ST_RIR, 2, 61 }, X/* LD 49 */ { ST_RX, 1, 63 }, X/* LD 50 */ { ST_XR, 1, 64 }, X/* LDC 51 */ { ST_IRR, 1, 65 }, X/* LDC 52 */ { ST_RIR, 1, 66 }, X/* LDCI 53 */ { ST_IRIR, 2, 67 }, X/* LDE 54 */ { ST_IRR, 1, 69 }, X/* LDE 55 */ { ST_RIR, 1, 70 }, X/* LDEI 56 */ { ST_IRIR, 2, 71 }, X/* NOP 57 */ { ST_INH, 1, 73 }, X/* OR 58 */ { ST_IRIM, 1, 74 }, X/* OR 59 */ { ST_R2, 2, 75 }, X/* OR 60 */ { ST_RIMM, 1, 77 }, X/* OR 61 */ { ST_RIR, 2, 78 }, X/* POP 62 */ { ST_IR1, 1, 80 }, X/* POP 63 */ { ST_R1, 1, 81 }, X/* PUSH 64 */ { ST_IR1, 1, 82 }, X/* PUSH 65 */ { ST_R1, 1, 83 }, X/* RCF 66 */ { ST_INH, 1, 84 }, X/* RET 67 */ { ST_INH, 1, 85 }, X/* RL 68 */ { ST_IR1, 1, 86 }, X/* RL 69 */ { ST_R1, 1, 87 }, X/* RLC 70 */ { ST_IR1, 1, 88 }, X/* RLC 71 */ { ST_R1, 1, 89 }, X/* RR 72 */ { ST_IR1, 1, 90 }, X/* RR 73 */ { ST_R1, 1, 91 }, X/* RRC 74 */ { ST_IR1, 1, 92 }, X/* RRC 75 */ { ST_R1, 1, 93 }, X/* SBC 76 */ { ST_IRIM, 1, 94 }, X/* SBC 77 */ { ST_R2, 2, 95 }, X/* SBC 78 */ { ST_RIMM, 1, 97 }, X/* SBC 79 */ { ST_RIR, 2, 98 }, X/* SCF 80 */ { ST_INH, 1, 100 }, X/* SRA 81 */ { ST_IR1, 1, 101 }, X/* SRA 82 */ { ST_R1, 1, 102 }, X/* SRP 83 */ { ST_IMM, 1, 103 }, X/* SUB 84 */ { ST_IRIM, 1, 104 }, X/* SUB 85 */ { ST_R2, 2, 105 }, X/* SUB 86 */ { ST_RIMM, 1, 107 }, X/* SUB 87 */ { ST_RIR, 2, 108 }, X/* SWAP 88 */ { ST_IR1, 1, 110 }, X/* SWAP 89 */ { ST_R1, 1, 111 }, X/* TCM 90 */ { ST_IRIM, 1, 112 }, X/* TCM 91 */ { ST_R2, 2, 113 }, X/* TCM 92 */ { ST_RIMM, 1, 115 }, X/* TCM 93 */ { ST_RIR, 2, 116 }, X/* TM 94 */ { ST_IRIM, 1, 118 }, X/* TM 95 */ { ST_R2, 2, 119 }, X/* TM 96 */ { ST_RIMM, 1, 121 }, X/* TM 97 */ { ST_RIR, 2, 122 }, X/* XOR 98 */ { ST_IRIM, 1, 124 }, X/* XOR 99 */ { ST_R2, 2, 125 }, X/* XOR 100 */ { ST_RIMM, 1, 127 }, X/* XOR 101 */ { ST_RIR, 2, 128 }, X { 0, 0, 0 } }; X Xstruct igel igtab[NUMDIFFOP+1] X = { X/* invalid 0 */ { 0 , 0, X "[Xnullentry" }, X/* invalid 1 */ { 0 , 0, X "[Xinvalid opcode" }, X/* ADC 2 */ { 0 , 0, X "17;[1#];[2=];" }, X/* ADC 3 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "12;[2#4#];" }, X/* ADC 4 */ { 0 , 0, X "14;[3#];[1#];" }, X/* ADC 5 */ { 0 , 0, X "16;[1#];[2=];" }, X/* ADC 6 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "13;[2#4#];" }, X/* ADC 7 */ { 0 , 0, X "15;[3#];[1#];" }, X/* ADD 8 */ { 0 , 0, X "07;[1#];[2=];" }, X/* ADD 9 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "02;[2#4#];" }, X/* ADD 10 */ { 0 , 0, X "04;[3#];[1#];" }, X/* ADD 11 */ { 0 , 0, X "06;[1#];[2=];" }, X/* ADD 12 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "03;[2#4#];" }, X/* ADD 13 */ { 0 , 0, X "05;[3#];[1#];" }, X/* AND 14 */ { 0 , 0, X "57;[1#];[2=];" }, X/* AND 15 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "52;[2#4#];" }, X/* AND 16 */ { 0 , 0, X "54;[3#];[1#];" }, X/* AND 17 */ { 0 , 0, X "56;[1#];[2=];" }, X/* AND 18 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "53;[2#4#];" }, X/* AND 19 */ { 0 , 0, X "55;[3#];[1#];" }, X/* CALL 20 */ { 0 , 0, X "d6;[1=]x" }, X/* CALL 21 */ { DSTDBL , DSTDBL, X "d4;[1#];" }, X/* CCF 22 */ { 0 , 0, X "ef;" }, X/* CLR 23 */ { 0 , 0, X "b1;[1#];" }, X/* CLR 24 */ { 0 , 0, X "b0;[1#];" }, X/* COM 25 */ { 0 , 0, X "61;[1#];" }, X/* COM 26 */ { 0 , 0, X "60;[1#];" }, X/* CP 27 */ { 0 , 0, X "a7;[1#];[2=];" }, X/* CP 28 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "a2;[2#4#];" }, X/* CP 29 */ { 0 , 0, X "a4;[3#];[1#];" }, X/* CP 30 */ { 0 , 0, X "a6;[1#];[2=];" }, X/* CP 31 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "a3;[2#4#];" }, X/* CP 32 */ { 0 , 0, X "a5;[3#];[1#];" }, X/* DA 33 */ { 0 , 0, X "41;[1#];" }, X/* DA 34 */ { 0 , 0, X "40;[1#];" }, X/* DEC 35 */ { 0 , 0, X "01;[1#];" }, X/* DEC 36 */ { 0 , 0, X "00;[1#];" }, X/* DECW 37 */ { 0 , 0, X "81;[1#];" }, X/* DECW 38 */ { DSTDBL , DSTDBL, X "80;[1#];" }, X/* DI 39 */ { 0 , 0, X "8f;" }, X/* DJNZ 40 */ { DSTWORK , DSTWORK, X "[3#]a;[2=].Q.1+-r" }, X/* EI 41 */ { 0 , 0, X "9f;" }, X/* INC 42 */ { 0 , 0, X "21;[1#];" }, X/* INC 43 */ { DSTWORK , DSTWORK, X "[2#]e;" }, X/* INC 44 */ { 0 , 0, X "20;[1#];" }, X/* INCW 45 */ { 0 , 0, X "a1;[1#];" }, X/* INCW 46 */ { DSTDBL , DSTDBL, X "a0;[1#];" }, X/* IRET 47 */ { 0 , 0, X "bf;" }, X/* JP 48 */ { 0 , 0, X "[1#]d;[2=]x" }, X/* JP 49 */ { 0 , 0, X "8d;[1=]x" }, X/* JP 50 */ { DSTDBL , DSTDBL, X "30;[1#];" }, X/* JR 51 */ { 0 , 0, X "[1#]b;[2=].Q.1+-r" }, X/* JR 52 */ { 0 , 0, X "8b;[1=].Q.1+-r" }, X/* LD 53 */ { 0 , 0, X "e7;[1#];[2=];" }, X/* LD 54 */ { DSTWORK+SRCWORK , DSTWORK+SRCWORK, X "f3;[2#4#];" }, X/* LD 55 */ { 0 , 0, X "f5;[3#];[1#];" }, X/* LD 56 */ { DSTWORK , DSTWORK, X "[2#]8;[3#];" }, X/* LD 57 */ { SRCWORK , SRCWORK, X "[4#]9;[1#];" }, X/* LD 58 */ { 0 , 0, X "e4;[3#];[1#];" }, X/* LD 59 */ { DSTWORK , DSTWORK, X "[3#]c;[2=];" }, X/* LD 60 */ { 0 , 0, X "e6;[1#];[2=];" }, X/* LD 61 */ { DSTWORK+SRCWORK , DSTWORK+SRCWORK, X "e3;[2#4#];" }, X/* LD 62 */ { 0 , 0, X "e5;[3#];[1#];" }, X/* LD 63 */ { DSTWORK+SRCWORK , DSTWORK+SRCWORK, X "c7;[1#3#];[2=];" }, X/* LD 64 */ { DSTWORK+SRCWORK , DSTWORK+SRCWORK, X "d7;[3#2#];[1=];" }, X/* LDC 65 */ { DSTWORK+SRCWORK , DSTWORK+SRCWORK, X "d2;[4#2#];" }, X/* LDC 66 */ { DSTWORK+SRCWORK , DSTWORK+SRCWORK, X "c2;[2#4#];" }, X/* LDCI 67 */ { SRCDBL+DSTDBL+DSTWORK+SRCWORK , SRCDBL+DSTWORK+SRCWORK, X "c3;[2#4#];" }, X/* LDCI 68 */ { SRCDBL+DSTDBL+DSTWORK+SRCWORK , DSTDBL+DSTWORK+SRCWORK, X "d3;[4#2#];" }, X/* LDE 69 */ { DSTWORK+SRCWORK , DSTWORK+SRCWORK, X "92;[4#2#];" }, X/* LDE 70 */ { DSTWORK+SRCWORK , DSTWORK+SRCWORK, X "82;[2#4#];" }, X/* LDEI 71 */ { SRCDBL+DSTDBL+DSTWORK+SRCWORK , SRCDBL+DSTWORK+SRCWORK, X "83;[2#4#];" }, X/* LDEI 72 */ { SRCDBL+DSTDBL+DSTWORK+SRCWORK , DSTDBL+DSTWORK+SRCWORK, X "93;[4#2#];" }, X/* NOP 73 */ { 0 , 0, X "ff;" }, X/* OR 74 */ { 0 , 0, X "47;[1#];[2=];" }, X/* OR 75 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "42;[2#4#];" }, X/* OR 76 */ { 0 , 0, X "44;[3#];[1#];" }, X/* OR 77 */ { 0 , 0, X "46;[1#];[2=];" }, X/* OR 78 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "43;[2#4#];" }, X/* OR 79 */ { 0 , 0, X "45;[3#];[1#];" }, X/* POP 80 */ { 0 , 0, X "51;[1#];" }, X/* POP 81 */ { 0 , 0, X "50;[1#];" }, X/* PUSH 82 */ { 0 , 0, X "71;[1#];" }, X/* PUSH 83 */ { 0 , 0, X "70;[1#];" }, X/* RCF 84 */ { 0 , 0, X "cf;" }, X/* RET 85 */ { 0 , 0, X "af;" }, X/* RL 86 */ { 0 , 0, X "91;[1#];" }, X/* RL 87 */ { 0 , 0, X "90;[1#];" }, X/* RLC 88 */ { 0 , 0, X "11;[1#];" }, X/* RLC 89 */ { 0 , 0, X "10;[1#];" }, X/* RR 90 */ { 0 , 0, X "e1;[1#];" }, X/* RR 91 */ { 0 , 0, X "e0;[1#];" }, X/* RRC 92 */ { 0 , 0, X "c1;[1#];" }, X/* RRC 93 */ { 0 , 0, X "c0;[1#];" }, X/* SBC 94 */ { 0 , 0, X "37;[1#];[2=];" }, X/* SBC 95 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "32;[2#4#];" }, X/* SBC 96 */ { 0 , 0, X "34;[3#];[1#];" }, X/* SBC 97 */ { 0 , 0, X "36;[1#];[2=];" }, X/* SBC 98 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "33;[2#4#];" }, X/* SBC 99 */ { 0 , 0, X "35;[3#];[1#];" }, X/* SCF 100 */ { 0 , 0, X "df;" }, X/* SRA 101 */ { 0 , 0, X "d1;[1#];" }, X/* SRA 102 */ { 0 , 0, X "d0;[1#];" }, X/* SRP 103 */ { 0 , 0, X "31;[1=];" }, X/* SUB 104 */ { 0 , 0, X "27;[1#];[2=];" }, X/* SUB 105 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "22;[2#4#];" }, X/* SUB 106 */ { 0 , 0, X "24;[3#];[1#];" }, X/* SUB 107 */ { 0 , 0, X "26;[1#];[2=];" }, X/* SUB 108 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "23;[2#4#];" }, X/* SUB 109 */ { 0 , 0, X "25;[3#];[1#];" }, X/* SWAP 110 */ { 0 , 0, X "f1;[1#];" }, X/* SWAP 111 */ { 0 , 0, X "f0;[1#];" }, X/* TCM 112 */ { 0 , 0, X "67;[1#];[2=];" }, X/* TCM 113 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "62;[2#4#];" }, X/* TCM 114 */ { 0 , 0, X "64;[3#];[1#];" }, X/* TCM 115 */ { 0 , 0, X "66;[1#];[2=];" }, X/* TCM 116 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "63;[2#4#];" }, X/* TCM 117 */ { 0 , 0, X "65;[3#];[1#];" }, X/* TM 118 */ { 0 , 0, X "77;[1#];[2=];" }, X/* TM 119 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "72;[2#4#];" }, X/* TM 120 */ { 0 , 0, X "74;[3#];[1#];" }, X/* TM 121 */ { 0 , 0, X "76;[1#];[2=];" }, X/* TM 122 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "73;[2#4#];" }, X/* TM 123 */ { 0 , 0, X "75;[3#];[1#];" }, X/* XOR 124 */ { 0 , 0, X "b7;[1#];[2=];" }, X/* XOR 125 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "b2;[2#4#];" }, X/* XOR 126 */ { 0 , 0, X "b4;[3#];[1#];" }, X/* XOR 127 */ { 0 , 0, X "b6;[1#];[2=];" }, X/* XOR 128 */ { SRCWORK+DSTWORK , SRCWORK+DSTWORK, X "b3;[2#4#];" }, X/* XOR 129 */ { 0 , 0, X "b5;[3#];[1#];" }, X { 0,0,""} }; X/* end fraptabdef.c */ SHAR_EOF true || echo 'restore of asz8.y failed' fi exit 0 Brought to you by Super Global Mega Corp .com