d8: more than 8 MSBs are determined by the opcode

This commit is contained in:
Jeff Epler 2014-08-07 21:05:28 -05:00
parent 80ccc56ee6
commit d78899bc26
3 changed files with 202 additions and 202 deletions

396
d8_tab.py
View file

@ -36,234 +36,234 @@ from pta.BasicWordInstruction import *
# o : offset
# 0000 0000 xxxx xxxx
# OPERAND
Insn("NOP", I0, 0x00)
Insn("DATAPIPE", I0, 0x00)
Insn("INDEXPIPE", I0, 0x00)
Insn("JUMPSHADOWPIPE", I0, 0x00)
Insn("NOP", I0, 0x0000)
Insn("DATAPIPE", I0, 0x0001)
Insn("INDEXPIPE", I0, 0x0002)
Insn("JUMPSHADOWPIPE", I0, 0x0003)
# 0000 0001 kkkk kkkk
# BYTE OPERAND
Insn("LDIB *", I8, 0x01)
Insn("LDIB *", I8, 0x0100)
# 0000 00rr xxxx xxxx
# OPERAND
Insn("RCLB", I0, 0x02)
Insn("RCRB", I0, 0x03)
Insn("SHLN", I0, 0x02)
Insn("SHRN", I0, 0x03)
Insn("RCLB", I0, 0x0200)
Insn("RCRB", I0, 0x0300)
Insn("SHLN", I0, 0x0280)
Insn("SHRN", I0, 0x0380)
# 0000 rrii ixxx xxxx
Insn("LDAB XL", I0, 0x04)
Insn("LDAB YL", I0, 0x05)
Insn("LDAB ZL", I0, 0x06)
Insn("LDAB TL", I0, 0x07)
Insn("LDAB XH", I0, 0x04)
Insn("LDAB YH", I0, 0x05)
Insn("LDAB ZH", I0, 0x06)
Insn("LDAB TH", I0, 0x07)
Insn("STAB XL", I0, 0x08)
Insn("STAB YL", I0, 0x09)
Insn("STAB ZL", I0, 0x0a)
Insn("STAB TL", I0, 0x0b)
Insn("STAB XH", I0, 0x08)
Insn("STAB YH", I0, 0x09)
Insn("STAB ZH", I0, 0x0a)
Insn("STAB TH", I0, 0x0b)
Insn("ADDIX *", I7, 0x0c)
Insn("ADDIY *", I7, 0x0d)
Insn("ADDIZ *", I7, 0x0e)
Insn("ADDIT *", I7, 0x0f)
Insn("POP", I0, 0x0c)
Insn("PUSH", I0, 0x0d)
Insn("LDAB SP", I0, 0x0e)
Insn("STAB SP", I0, 0x0f)
Insn("LDAB XL", I0, 0x0400)
Insn("LDAB YL", I0, 0x0500)
Insn("LDAB ZL", I0, 0x0600)
Insn("LDAB TL", I0, 0x0700)
Insn("LDAB XH", I0, 0x0480)
Insn("LDAB YH", I0, 0x0580)
Insn("LDAB ZH", I0, 0x0680)
Insn("LDAB TH", I0, 0x0780)
Insn("STAB XL", I0, 0x0800)
Insn("STAB YL", I0, 0x0900)
Insn("STAB ZL", I0, 0x0a00)
Insn("STAB TL", I0, 0x0b00)
Insn("STAB XH", I0, 0x0880)
Insn("STAB YH", I0, 0x0980)
Insn("STAB ZH", I0, 0x0a80)
Insn("STAB TH", I0, 0x0b80)
Insn("ADDIX *", I7, 0x0c00)
Insn("ADDIY *", I7, 0x0d00)
Insn("ADDIZ *", I7, 0x0e00)
Insn("ADDIT *", I7, 0x0f00)
Insn("POP", I0, 0x0c80)
Insn("PUSH", I0, 0x0d80)
Insn("LDAB SP", I0, 0x0e80)
Insn("STAB SP", I0, 0x0f80)
# BIT OPERAND, PROGRAM ADDRESS FOR JUMPS
# iiii 0aaa aaaa aaaa DIRECT INSTRUCTIONS
Insn("JMP *", I11, 0x10)
Insn("JMPNZ *", I11, 0x20)
Insn("JMPZ *", I11, 0x30)
Insn("JMPNC *", I11, 0x40)
Insn("JMPC *", I11, 0x50)
Insn("JSR *", I11, 0x60)
Insn("JMP *", I11, 0x1000)
Insn("JMPNZ *", I11, 0x2000)
Insn("JMPZ *", I11, 0x3000)
Insn("JMPNC *", I11, 0x4000)
Insn("JMPC *", I11, 0x5000)
Insn("JSR *", I11, 0x6000)
# 8 BIT OFFSET,
# iiii 0100 0000 0000 INDIRECT INSTRUCTIONS
Insn("LDAB @X", I0, 0x74)
Insn("ORB @X", I0, 0x84)
Insn("XORB @X", I0, 0x94)
Insn("ANDB @X", I0, 0xa4)
Insn("STAB @X", I0, 0xb4)
Insn("ADDB @X", I0, 0xc4)
Insn("ADDCB @X", I0, 0xd4)
Insn("SUBB @X", I0, 0xe4)
Insn("SUBCB @X", I0, 0xf4)
Insn("LDAB @X", I0, 0x7400)
Insn("ORB @X", I0, 0x8400)
Insn("XORB @X", I0, 0x9400)
Insn("ANDB @X", I0, 0xa400)
Insn("STAB @X", I0, 0xb400)
Insn("ADDB @X", I0, 0xc400)
Insn("ADDCB @X", I0, 0xd400)
Insn("SUBB @X", I0, 0xe400)
Insn("SUBCB @X", I0, 0xf400)
# 8 BIT OPERAND,
# iiii 0100 oooo oooo INDIRECT INSTRUCTIONS
Insn("LDAB @X,*", I7, 0x74)
Insn("ORB @X,*", I7, 0x84)
Insn("XORB @X,*", I7, 0x94)
Insn("ANDB @X,*", I7, 0xa4)
Insn("STAB @X,*", I7, 0xb4)
Insn("ADDB @X,*", I7, 0xc4)
Insn("ADDCB @X,*", I7, 0xd4)
Insn("SUBB @X,*", I7, 0xe4)
Insn("SUBCB @X,*", I7, 0xf4)
Insn("LDAB @X,*", I7, 0x7400)
Insn("ORB @X,*", I7, 0x8400)
Insn("XORB @X,*", I7, 0x9400)
Insn("ANDB @X,*", I7, 0xa400)
Insn("STAB @X,*", I7, 0xb400)
Insn("ADDB @X,*", I7, 0xc400)
Insn("ADDCB @X,*", I7, 0xd400)
Insn("SUBB @X,*", I7, 0xe400)
Insn("SUBCB @X,*", I7, 0xf400)
# 8 BIT OFFSET,
# iiii 1100 0000 0000 INDIRECT INSTRUCTIONS
Insn("ORTOB @X", I0, 0x8c)
Insn("XORTOB @X", I0, 0x9c)
Insn("ANDTOB @X", I0, 0xac)
Insn("STATOB @X", I0, 0xbc)
Insn("ADDTOB @X", I0, 0xcc)
Insn("ADDCTOB @X", I0, 0xdc)
Insn("SUBTOB @X", I0, 0xec)
Insn("SUBCTOB @X", I0, 0xfc)
Insn("ORTOB @X", I0, 0x8c00)
Insn("XORTOB @X", I0, 0x9c00)
Insn("ANDTOB @X", I0, 0xac00)
Insn("STATOB @X", I0, 0xbc00)
Insn("ADDTOB @X", I0, 0xcc00)
Insn("ADDCTOB @X", I0, 0xdc00)
Insn("SUBTOB @X", I0, 0xec00)
Insn("SUBCTOB @X", I0, 0xfc00)
# 8 BIT OPERAND,
# iiii 1100 oooo oooo INDIRECT INSTRUCTIONS
Insn("ORTOB @X,*", I7, 0x8c)
Insn("XORTOB @X,*", I7, 0x9c)
Insn("ANDTOB @X,*", I7, 0xac)
Insn("STATOB @X,*", I7, 0xbc)
Insn("ADDTOB @X,*", I7, 0xcc)
Insn("ADDCTOB @X,*", I7, 0xdc)
Insn("SUBTOB @X,*", I7, 0xec)
Insn("SUBCTOB @X,*", I7, 0xfc)
Insn("ORTOB @X,*", I7, 0x8c00)
Insn("XORTOB @X,*", I7, 0x9c00)
Insn("ANDTOB @X,*", I7, 0xac00)
Insn("STATOB @X,*", I7, 0xbc00)
Insn("ADDTOB @X,*", I7, 0xcc00)
Insn("ADDCTOB @X,*", I7, 0xdc00)
Insn("SUBTOB @X,*", I7, 0xec00)
Insn("SUBCTOB @X,*", I7, 0xfc00)
# iiii 0101 0000 0000 INDIRECT INSTRUCTIONS
Insn("LDAB @Y", I0, 0x75)
Insn("ORB @Y", I0, 0x85)
Insn("XORB @Y", I0, 0x95)
Insn("ANDB @Y", I0, 0xa5)
Insn("STAB @Y", I0, 0xb5)
Insn("ADDB @Y", I0, 0xc5)
Insn("ADDCB @Y", I0, 0xd5)
Insn("SUBB @Y", I0, 0xe5)
Insn("SUBCB @Y", I0, 0xf5)
Insn("LDAB @Y", I0, 0x7580)
Insn("ORB @Y", I0, 0x8580)
Insn("XORB @Y", I0, 0x9580)
Insn("ANDB @Y", I0, 0xa580)
Insn("STAB @Y", I0, 0xb580)
Insn("ADDB @Y", I0, 0xc580)
Insn("ADDCB @Y", I0, 0xd580)
Insn("SUBB @Y", I0, 0xe580)
Insn("SUBCB @Y", I0, 0xf580)
# iiii 0101 oooo oooo INDIRECT INSTRUCTIONS
Insn("LDAB @Y,*", I7, 0x75)
Insn("ORB @Y,*", I7, 0x85)
Insn("XORB @Y,*", I7, 0x95)
Insn("ANDB @Y,*", I7, 0xa5)
Insn("STAB @Y,*", I7, 0xb5)
Insn("ADDB @Y,*", I7, 0xc5)
Insn("ADDCB @Y,*", I7, 0xd5)
Insn("SUBB @Y,*", I7, 0xe5)
Insn("SUBCB @Y,*", I7, 0xf5)
Insn("LDAB @Y,*", I7, 0x7580)
Insn("ORB @Y,*", I7, 0x8580)
Insn("XORB @Y,*", I7, 0x9580)
Insn("ANDB @Y,*", I7, 0xa580)
Insn("STAB @Y,*", I7, 0xb580)
Insn("ADDB @Y,*", I7, 0xc580)
Insn("ADDCB @Y,*", I7, 0xd580)
Insn("SUBB @Y,*", I7, 0xe580)
Insn("SUBCB @Y,*", I7, 0xf580)
# iiii 1101 0000 0000 INDIRECT INSTRUCTIONS
Insn("ORTOB @Y", I0, 0x8d)
Insn("XORTOB @Y", I0, 0x9d)
Insn("ANDTOB @Y", I0, 0xad)
Insn("STATOB @Y", I0, 0xbd)
Insn("ADDTOB @Y", I0, 0xcd)
Insn("ADDCTOB @Y", I0, 0xdd)
Insn("SUBTOB @Y", I0, 0xed)
Insn("SUBCTOB @Y", I0, 0xfd)
Insn("ORTOB @Y", I0, 0x8d80)
Insn("XORTOB @Y", I0, 0x9d80)
Insn("ANDTOB @Y", I0, 0xad80)
Insn("STATOB @Y", I0, 0xbd80)
Insn("ADDTOB @Y", I0, 0xcd80)
Insn("ADDCTOB @Y", I0, 0xdd80)
Insn("SUBTOB @Y", I0, 0xed80)
Insn("SUBCTOB @Y", I0, 0xfd00)
# iiii 1101 oooo oooo INDIRECT INSTRUCTIONS
Insn("ORTOB @Y,*", I7, 0x8d)
Insn("XORTOB @Y,*", I7, 0x9d)
Insn("ANDTOB @Y,*", I7, 0xad)
Insn("STATOB @Y,*", I7, 0xbd)
Insn("ADDTOB @Y,*", I7, 0xcd)
Insn("ADDCTOB @Y,*", I7, 0xdd)
Insn("SUBTOB @Y,*", I7, 0xed)
Insn("SUBCTOB @Y,*", I7, 0xfd)
Insn("ORTOB @Y,*", I7, 0x8d80)
Insn("XORTOB @Y,*", I7, 0x9d80)
Insn("ANDTOB @Y,*", I7, 0xad80)
Insn("STATOB @Y,*", I7, 0xbd80)
Insn("ADDTOB @Y,*", I7, 0xcd80)
Insn("ADDCTOB @Y,*", I7, 0xdd80)
Insn("SUBTOB @Y,*", I7, 0xed80)
Insn("SUBCTOB @Y,*", I7, 0xfd80)
# iiii 0110 0000 0000 INDIRECT INSTRUCTIONS
Insn("LDAB @Z", I0, 0x76)
Insn("ORB @Z", I0, 0x86)
Insn("XORB @Z", I0, 0x96)
Insn("ANDB @Z", I0, 0xa6)
Insn("STAB @Z", I0, 0xb6)
Insn("ADDB @Z", I0, 0xc6)
Insn("ADDCB @Z", I0, 0xd6)
Insn("SUBB @Z", I0, 0xe6)
Insn("SUBCB @Z", I0, 0xf6)
Insn("LDAB @Z", I0, 0x7600)
Insn("ORB @Z", I0, 0x8600)
Insn("XORB @Z", I0, 0x9600)
Insn("ANDB @Z", I0, 0xa600)
Insn("STAB @Z", I0, 0xb600)
Insn("ADDB @Z", I0, 0xc600)
Insn("ADDCB @Z", I0, 0xd600)
Insn("SUBB @Z", I0, 0xe600)
Insn("SUBCB @Z", I0, 0xf600)
# iiii 0110 oooo oooo INDIRECT INSTRUCTIONS
Insn("LDAB @Z,*", I7, 0x76)
Insn("ORB @Z,*", I7, 0x86)
Insn("XORB @Z,*", I7, 0x96)
Insn("ANDB @Z,*", I7, 0xa6)
Insn("STAB @Z,*", I7, 0xb6)
Insn("ADDB @Z,*", I7, 0xc6)
Insn("ADDCB @Z,*", I7, 0xd6)
Insn("SUBB @Z,*", I7, 0xe6)
Insn("SUBCB @Z,*", I7, 0xf6)
Insn("LDAB @Z,*", I7, 0x7600)
Insn("ORB @Z,*", I7, 0x8600)
Insn("XORB @Z,*", I7, 0x9600)
Insn("ANDB @Z,*", I7, 0xa600)
Insn("STAB @Z,*", I7, 0xb600)
Insn("ADDB @Z,*", I7, 0xc600)
Insn("ADDCB @Z,*", I7, 0xd600)
Insn("SUBB @Z,*", I7, 0xe600)
Insn("SUBCB @Z,*", I7, 0xf600)
# iiii 1110 0000 0000 INDIRECT INSTRUCTIONS
Insn("ORTOB @Z", I0, 0x8e)
Insn("XORTOB @Z", I0, 0x9e)
Insn("ANDTOB @Z", I0, 0xae)
Insn("STATOB @Z", I0, 0xbe)
Insn("ADDTOB @Z", I0, 0xce)
Insn("ADDCTOB @Z", I0, 0xde)
Insn("SUBTOB @Z", I0, 0xee)
Insn("SUBCTOB @Z", I0, 0xfe)
Insn("ORTOB @Z", I0, 0x8e00)
Insn("XORTOB @Z", I0, 0x9e00)
Insn("ANDTOB @Z", I0, 0xae00)
Insn("STATOB @Z", I0, 0xbe00)
Insn("ADDTOB @Z", I0, 0xce00)
Insn("ADDCTOB @Z", I0, 0xde00)
Insn("SUBTOB @Z", I0, 0xee00)
Insn("SUBCTOB @Z", I0, 0xfe00)
# iiii 1110 oooo oooo INDIRECT INSTRUCTIONS
Insn("ORTOB @Z,*", I7, 0x8e)
Insn("XORTOB @Z,*", I7, 0x9e)
Insn("ANDTOB @Z,*", I7, 0xae)
Insn("STATOB @Z,*", I7, 0xbe)
Insn("ADDTOB @Z,*", I7, 0xce)
Insn("ADDCTOB @Z,*", I7, 0xde)
Insn("SUBTOB @Z,*", I7, 0xee)
Insn("SUBCTOB @Z,*", I7, 0xfe)
Insn("ORTOB @Z,*", I7, 0x8e00)
Insn("XORTOB @Z,*", I7, 0x9e00)
Insn("ANDTOB @Z,*", I7, 0xae00)
Insn("STATOB @Z,*", I7, 0xbe00)
Insn("ADDTOB @Z,*", I7, 0xce00)
Insn("ADDCTOB @Z,*", I7, 0xde00)
Insn("SUBTOB @Z,*", I7, 0xee00)
Insn("SUBCTOB @Z,*", I7, 0xfe00)
# iiii 0111 0000 0000 INDIRECT INSTRUCTIONS
Insn("LDAB @T", I0, 0x77)
Insn("ORB @T", I0, 0x87)
Insn("XORB @T", I0, 0x97)
Insn("ANDB @T", I0, 0xa7)
Insn("STAB @T", I0, 0xb7)
Insn("ADDB @T", I0, 0xc7)
Insn("ADDCB @T", I0, 0xd7)
Insn("SUBB @T", I0, 0xe7)
Insn("SUBCB @T", I0, 0xf7)
Insn("LDAB @T", I0, 0x7700)
Insn("ORB @T", I0, 0x8700)
Insn("XORB @T", I0, 0x9700)
Insn("ANDB @T", I0, 0xa700)
Insn("STAB @T", I0, 0xb700)
Insn("ADDB @T", I0, 0xc700)
Insn("ADDCB @T", I0, 0xd700)
Insn("SUBB @T", I0, 0xe700)
Insn("SUBCB @T", I0, 0xf700)
# iiii 0111 oooo oooo INDIRECT INSTRUCTIONS
Insn("LDAB @T,*", I7, 0x77)
Insn("ORB @T,*", I7, 0x87)
Insn("XORB @T,*", I7, 0x97)
Insn("ANDB @T,*", I7, 0xa7)
Insn("STAB @T,*", I7, 0xb7)
Insn("ADDB @T,*", I7, 0xc7)
Insn("ADDCB @T,*", I7, 0xd7)
Insn("SUBB @T,*", I7, 0xe7)
Insn("SUBCB @T,*", I7, 0xf7)
Insn("LDAB @T,*", I7, 0x7700)
Insn("ORB @T,*", I7, 0x8700)
Insn("XORB @T,*", I7, 0x9700)
Insn("ANDB @T,*", I7, 0xa700)
Insn("STAB @T,*", I7, 0xb700)
Insn("ADDB @T,*", I7, 0xc700)
Insn("ADDCB @T,*", I7, 0xd700)
Insn("SUBB @T,*", I7, 0xe700)
Insn("SUBCB @T,*", I7, 0xf700)
# iiii 1111 0000 0000 INDIRECT INSTRUCTIONS
Insn("ORTOB @T", I0, 0x8f)
Insn("XORTOB @T", I0, 0x9f)
Insn("ANDTOB @T", I0, 0xaf)
Insn("STATOB @T", I0, 0xbf)
Insn("ADDTOB @T", I0, 0xcf)
Insn("ADDCTOB @T", I0, 0xdf)
Insn("SUBTOB @T", I0, 0xef)
Insn("SUBCTOB @T", I0, 0xff)
Insn("ORTOB @T", I0, 0x8f00)
Insn("XORTOB @T", I0, 0x9f00)
Insn("ANDTOB @T", I0, 0xaf00)
Insn("STATOB @T", I0, 0xbf00)
Insn("ADDTOB @T", I0, 0xcf00)
Insn("ADDCTOB @T", I0, 0xdf00)
Insn("SUBTOB @T", I0, 0xef00)
Insn("SUBCTOB @T", I0, 0xff00)
# iiii 1111 oooo oooo INDIRECT INSTRUCTIONS
Insn("ORTOB @T,*", I7, 0x8f)
Insn("XORTOB @T,*", I7, 0x9f)
Insn("ANDTOB @T,*", I7, 0xaf)
Insn("STATOB @T,*", I7, 0xbf)
Insn("ADDTOB @T,*", I7, 0xcf)
Insn("ADDCTOB @T,*", I7, 0xdf)
Insn("SUBTOB @T,*", I7, 0xef)
Insn("SUBCTOB @T,*", I7, 0xff)
Insn("ORTOB @T,*", I7, 0x8f00)
Insn("XORTOB @T,*", I7, 0x9f00)
Insn("ANDTOB @T,*", I7, 0xaf00)
Insn("STATOB @T,*", I7, 0xbf00)
Insn("ADDTOB @T,*", I7, 0xcf00)
Insn("ADDCTOB @T,*", I7, 0xdf00)
Insn("SUBTOB @T,*", I7, 0xef00)
Insn("SUBCTOB @T,*", I7, 0xff00)
# BIT return addresses
# iiii 1aaa aaaa aaaa DIRECT INSTRUCTIONS
Insn("RET", I0, 0x18)
Insn("RETNZ", I0, 0x28)
Insn("RETZ", I0, 0x38)
Insn("RETNC", I0, 0x48)
Insn("RETC", I0, 0x58)
Insn("RET@", I0, 0x68)
Insn("RET", I0, 0x1800)
Insn("RETNZ", I0, 0x2800)
Insn("RETZ", I0, 0x3800)
Insn("RETNC", I0, 0x4800)
Insn("RETC", I0, 0x5800)
Insn("RET@", I0, 0x6800)
# REF INST 10 BIT OPERAND ADDRESS
# iiii 00nn nnnn nnnn DIRECT INSTRUCTIONS
Insn("LDAB *", I10, 0x70)
Insn("ORB *", I10, 0x80)
Insn("XORB *", I10, 0x90)
Insn("ANDB *", I10, 0xa0)
Insn("STAB *", I10, 0xb0)
Insn("ADDB *", I10, 0xc0)
Insn("ADDCB *", I10, 0xd0)
Insn("SUBB *", I10, 0xe0)
Insn("SUBCB *", I10, 0xf0)
Insn("LDAB *", I10, 0x7000)
Insn("ORB *", I10, 0x8000)
Insn("XORB *", I10, 0x9000)
Insn("ANDB *", I10, 0xa000)
Insn("STAB *", I10, 0xb000)
Insn("ADDB *", I10, 0xc000)
Insn("ADDCB *", I10, 0xd000)
Insn("SUBB *", I10, 0xe000)
Insn("SUBCB *", I10, 0xf000)
# REF TO INST 10 BIT OPERAND ADDRESS
# iiii 10nn nnnn nnnn DIRECT INSTRUCTIONS
Insn("ORTOB *", I10, 0x88)
Insn("XORTOB *", I10, 0x98)
Insn("ANDTOB *", I10, 0xa8)
Insn("STATOB *", I10, 0xb8)
Insn("ADDTOB *", I10, 0xc8)
Insn("ADDCTOB *", I10, 0xd8)
Insn("SUBTOB *", I10, 0xe8)
Insn("SUBCTOB *", I10, 0xf8)
Insn("ORTOB *", I10, 0x8800)
Insn("XORTOB *", I10, 0x9800)
Insn("ANDTOB *", I10, 0xa800)
Insn("STATOB *", I10, 0xb800)
Insn("ADDTOB *", I10, 0xc800)
Insn("ADDCTOB *", I10, 0xd800)
Insn("SUBTOB *", I10, 0xe800)
Insn("SUBCTOB *", I10, 0xf800)

View file

@ -74,8 +74,8 @@ def unbits(b, v):
return v
class BasicInstruction:
def __init__(self, hi8, _, arg=0):
self.hi8 = hi8
def __init__(self, insn, _, arg=0):
self.insn = insn
self.arg = arg
@property
@ -83,7 +83,7 @@ class BasicInstruction:
def assemble(self, assembler):
v = assembler.symval(self.arg)
return [(self.hi8 << 8) | nbits(self.argwidth, v)]
return [self.insn | nbits(self.argwidth, v)]
class I0(BasicInstruction): argwidth=0
class I7(BasicInstruction): argwidth=7

View file

@ -22,5 +22,5 @@ function mask2count(mask) {
arg = sprintf("\"%s\",", insn);
else
arg = sprintf("\"%s %s\",", insn, pattern);
printf("Insn(%-20s %3s, 0x%02x)\n", arg, check, bits / 256 );
printf("Insn(%-20s %3s, 0x%04x)\n", arg, check, bits );
}' "$@"