diff -upNr asl-1.42b225/as.c asl-1.42b225-im6100/as.c
--- asl-1.42b225/as.c	2022-07-10 23:09:21.000000000 +0900
+++ asl-1.42b225-im6100/as.c	2022-07-11 18:38:47.783743741 +0900
@@ -150,6 +150,7 @@
 #include "codekenbak.h"
 #include "codecp1600.h"
 #include "codenano.h"
+#include "code6100.h"
 /**          Code21xx};**/
 
 static long StartTime, StopTime;
@@ -4355,6 +4356,7 @@ int main(int argc, char **argv)
     codekenbak_init();
     codecp1600_init();
     codenano_init();
+    code6100_init();
     First = FALSE;
   }
 
diff -upNr asl-1.42b225/code6100.c asl-1.42b225-im6100/code6100.c
--- asl-1.42b225/code6100.c	1970-01-01 09:00:00.000000000 +0900
+++ asl-1.42b225-im6100/code6100.c	2022-07-12 23:48:01.942382529 +0900
@@ -0,0 +1,487 @@
+/* code6100.c */
+/*****************************************************************************/
+/* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only                     */
+/*                                                                           */
+/* AS-Portierung                                                             */
+/*                                                                           */
+/* Codegenerator Intersil IM6100                                             */
+/*                                                                           */
+/*****************************************************************************/
+
+#include "stdinc.h"
+#include <ctype.h>
+#include <string.h>
+
+#include "nls.h"
+#include "strutil.h"
+#include "chunks.h"
+#include "asmdef.h"
+#include "asmsub.h"
+#include "asmpars.h"
+#include "asmitree.h"
+#include "codevars.h"
+#include "codepseudo.h"
+#include "headids.h"
+#include "errmsg.h"
+#include "onoff_common.h"
+
+#include "code6100.h"
+
+/*---------------------------------------------------------------------------*/
+
+static CPUVar CPU6100;
+static CPUVar CPU6120;
+
+static PInstTable InstTableOP1; /* Operate Instruction (Group 1) */
+static PInstTable InstTableOP2; /* Operate Instruction (Group 2) */
+static PInstTable InstTableOP3; /* Operate Instruction (Group 3) */
+
+static Boolean BaseInst;
+
+static const Word Inst6120 =  0x8000;
+static const Word PanelOnly = 0x4000;
+static const Word NormOnly =  0x2000;
+
+/*---------------------------------------------------------------------------*/
+
+static Boolean ChkValidInst(Word Index)
+{
+	if (Index & Inst6120)
+	{
+		if (!ChkMinCPU(CPU6120)) return False;
+	}
+
+	return True;
+}
+
+/*---------------------------------------------------------------------------*/
+
+static void DecodeMR(Word Index)
+{
+	Boolean Indirect = False;
+	Boolean CurrPage = False;
+	Word adrPos = 1;
+	LongInt AdrLInt;
+	tEvalResult EvalResult;
+
+	if (!ChkValidInst(Index)) return;
+	Index &= 07777;
+
+	if (!ChkArgCnt(1,2)) return;
+
+	if (ArgCnt == 2)
+	{
+		if (as_strcasecmp(ArgStr[1].str.p_str, "I"))
+		{
+			WrStrErrorPos(ErrNum_InvAddrMode, &ArgStr[1]);
+			return;
+		}
+		adrPos = 2;
+		Indirect = True;
+	}
+
+	AdrLInt = EvalStrIntExpressionWithResult(&ArgStr[adrPos], UInt12, &EvalResult);
+	if (!EvalResult.OK) return;
+
+	if ((AdrLInt & 07600) == (EProgCounter() & 07600))
+	{
+		CurrPage = True;
+	}
+	else if (AdrLInt & 07600)
+	{
+		WrError(ErrNum_JmpDistTooBig);
+		return;
+	}
+
+	WAsmCode[0] = Index | (Indirect ? 00400 : 0) | (CurrPage ? 00200 : 0) | (AdrLInt & 00177);
+	CodeLen = 1;
+}
+
+static void DecodeOP(PInstTable Table, Word Index)
+{
+	Word i;
+
+	if (!ChkValidInst(Index)) return;
+	Index &= 07777;
+
+	if (BaseInst)
+	{
+		WAsmCode[0] = Index;
+		CodeLen = 1;
+
+		BaseInst = False;
+		for (i = 1; i <= ArgCnt; i++)
+		{
+			if (!LookupInstTable(Table, ArgStr[i].str.p_str))
+			{
+				WrStrErrorPos(ErrNum_UnknownInstruction, &ArgStr[i]);
+				CodeLen = 0;
+				return;
+			}
+		}
+	}
+	else
+	{	/* 2nd, 3rd instruction */
+		Word tmp;
+
+		if (CodeLen > 0)
+		{
+			tmp = WAsmCode[0] | Index;
+			if (tmp == WAsmCode[0] || tmp == Index)
+			{
+				WrError(ErrNum_UnknownInstruction);
+				CodeLen = 0;
+				return;
+			}
+			if ((tmp & 00016) == 00016 )
+			{
+				WrError(ErrNum_UnknownInstruction);
+				CodeLen = 0;
+				return;
+			}
+
+			WAsmCode[0] = tmp;
+		}
+	}
+}
+
+static void DecodeOP1(Word Index)
+{
+	DecodeOP(InstTableOP1, Index);
+}
+
+static void DecodeOP2(Word Index)
+{
+	DecodeOP(InstTableOP2, Index);
+}
+
+static void DecodeOP3(Word Index)
+{
+	DecodeOP(InstTableOP3, Index);
+}
+
+static void DecodeIOT(Word Index)
+{
+	Word dev;
+	Word opr;
+	Boolean OK;
+
+	if (!ChkValidInst(Index)) return;
+	Index &= 07777;
+
+	if (!ChkArgCnt(2,2)) return;
+
+	dev = EvalStrIntExpression(&ArgStr[1], UInt6, &OK);
+	if (!OK) return;
+
+	opr = EvalStrIntExpression(&ArgStr[2], UInt3, &OK);
+	if (!OK) return;
+
+	WAsmCode[0] = Index | (dev << 3) | opr;
+	CodeLen = 1;
+}
+
+static void DecodeFix(Word Index)
+{
+	if (Index & Inst6120)
+	{
+		if (!ChkMinCPU(CPU6120)) return;
+	}
+	Index &= 07777;
+
+	if (!ChkArgCnt(0,0)) return;
+
+	WAsmCode[0] = Index;
+	CodeLen = 1;
+}
+
+static void DecodeMEI(Word Index)
+{
+	int fieldPos = 1;
+	Word field;
+	Boolean OK;
+
+	if (!ChkValidInst(Index)) return;
+	Index &= 07777;
+
+	if (!ChkArgCnt(1,2)) return;
+
+	if (ArgCnt == 2)
+	{
+		if ((!as_strcasecmp(OpPart.str.p_str, "CDF") && !as_strcasecmp(ArgStr[1].str.p_str, "CIF")) ||
+			(!as_strcasecmp(OpPart.str.p_str, "CIF") && !as_strcasecmp(ArgStr[1].str.p_str, "CDF")))
+		{
+			Index = 06203;
+			fieldPos = 2;
+		}
+		else
+		{
+			WrError(ErrNum_UnknownInstruction);
+			return;
+		}
+	}
+
+	field = EvalStrIntExpression(&ArgStr[fieldPos], UInt3, &OK);
+	if (!OK) return;
+
+	WAsmCode[0] = Index | (field << 3);
+	CodeLen = 1;
+}
+
+static Boolean DecodeConst(tStrComp *pStr)
+{
+	TempResult t;
+	int c;
+
+	EvalStrExpression(pStr, &t);
+	switch(t.Typ)
+	{
+	case TempInt:
+		if (ChkRange(t.Contents.Int, -2048, 4095))
+		{
+			WAsmCode[CodeLen++] = t.Contents.Int;
+		}
+		break;
+	case TempString:
+		as_chartrans_xlate_nonz_dynstr(CurrTransTable->Table, &t.Contents.str);
+		for (c = 0; c < (int)t.Contents.str.len; c++)
+		{
+			WAsmCode[CodeLen++] = t.Contents.str.p_str[c] & 07777;
+		}
+		break;
+	default:
+		return False;
+	}
+
+	return True;
+}
+
+static Boolean DecodeDefault(tStrComp *OpStr)
+{
+	Boolean result;
+	int i;
+
+	result = DecodeConst(OpStr);
+
+	for (i = 1; i <=ArgCnt; i++)
+	{
+		if (result)
+		{
+			result = DecodeConst(&ArgStr[i]);
+		}
+	}
+
+	if (!result) CodeLen = 0;
+
+	return result;
+}
+
+/*---------------------------------------------------------------------------*/
+
+static void AddMR(const char *NName, Word NCode)
+{
+	AddInstTable(InstTable, NName, NCode, DecodeMR);
+}
+
+static void AddOP1(const char *NName, Word NCode)
+{
+	AddInstTable(InstTableOP1, NName, NCode, DecodeOP1);
+}
+
+static void AddOP2(const char *NName, Word NCode)
+{
+	AddInstTable(InstTableOP2, NName, NCode, DecodeOP2);
+}
+
+static void AddOP3(const char *NName, Word NCode)
+{
+	AddInstTable(InstTableOP3, NName, NCode, DecodeOP3);
+}
+
+static void AddIOT(const char *NName, Word NCode)
+{
+	AddInstTable(InstTable, NName, NCode, DecodeIOT);
+}
+
+static void AddFix(const char *NName, Word NCode)
+{
+	AddInstTable(InstTable, NName, NCode, DecodeFix);
+}
+
+static void AddMEI(const char *NName, Word NCode)
+{
+	AddInstTable(InstTable, NName, NCode, DecodeMEI);
+}
+
+static void InitFields(void)
+{
+	InstTable = CreateInstTable(48);
+	InstTableOP1 = CreateInstTable(32);
+	InstTableOP2 = CreateInstTable(32);
+	InstTableOP3 = CreateInstTable(32);
+
+	/* Memory Reference Instruction */
+	AddMR("AND", 00000);
+	AddMR("TAD", 01000);
+	AddMR("ISZ", 02000);
+	AddMR("DCA", 03000);
+	AddMR("JMS", 04000);
+	AddMR("JMP", 05000);
+
+	/* Operate Instruction (Group 1) */
+	AddOP1("NOP", 07000);
+	AddOP1("IAC", 07001);
+	AddOP1("RAL", 07004);
+	AddOP1("RTL", 07006);
+	AddOP1("R3L", 07014 | Inst6120);
+	AddOP1("RAR", 07010);
+	AddOP1("RTR", 07012);
+	AddOP1("BSW", 07002);
+	AddOP1("CML", 07020);
+	AddOP1("CMA", 07040);
+	AddOP1("CIA", 07041);
+	AddOP1("CLL", 07100);
+	AddOP1("STL", 07120);
+	AddOP1("CLA", 07200);
+	AddOP1("GLT", 07204);
+	AddOP1("STA", 07240);
+
+	/* Operate Instruction (Group 2) */
+	AddOP2("NOP", 07400);
+	AddOP2("HLT", 07402);
+	AddOP2("STL", 07404);
+	AddOP2("SKP", 07410);
+	AddOP2("SNL", 07420);
+	AddOP2("SZL", 07430);
+	AddOP2("SZA", 07440);
+	AddOP2("SNA", 07450);
+	AddOP2("SMA", 07500);
+	AddOP2("SPA", 07510);
+	AddOP2("CLA", 07600);
+	AddOP2("LAS", 07604);
+
+	/* Operate Instruction (Group 3) */
+	AddOP3("NOP", 07401);
+	AddOP3("MQL", 07421);
+	AddOP3("MQA", 07501);
+	AddOP3("SWP", 07521);
+	AddOP3("CLA", 07601);
+	AddOP3("CAM", 07621);
+	AddOP3("ACL", 07701);
+
+	/* I/O Transfer Instruction */
+	AddIOT("IOT", 06000);
+	AddFix("SKON", 06000);
+	AddFix("ION", 06001);
+	AddFix("IOF", 06002);
+	AddFix("SRQ", 06003);
+	AddFix("GTF", 06004);
+	AddFix("RTF", 06005);
+	AddFix("SGT", 06006);
+	AddFix("CAF", 06007);
+
+	/* Stack Operation Instruction (6120 only) */
+	AddFix("PPC1", 06205 | Inst6120);
+	AddFix("PPC2", 06245 | Inst6120);
+	AddFix("PAC1", 06215 | Inst6120);
+	AddFix("PAC2", 06255 | Inst6120);
+	AddFix("RTN1", 06225 | Inst6120);
+	AddFix("RTN2", 06265 | Inst6120);
+	AddFix("POP1", 06235 | Inst6120);
+	AddFix("POP2", 06275 | Inst6120);
+	AddFix("RSP1", 06207 | Inst6120);
+	AddFix("RSP2", 06227 | Inst6120);
+	AddFix("LSP1", 06217 | Inst6120);
+	AddFix("LSP2", 06237 | Inst6120);
+
+	/* Main Memory Control Instruction (6120 only) */
+	AddFix("PR0", 06206 | Inst6120);
+	AddFix("PR1", 06216 | Inst6120);
+	AddFix("PR2", 06226 | Inst6120);
+	AddFix("PR3", 06236 | Inst6120);
+
+	/* Panel Mode Instruction */
+	AddFix("PRS", 06000 | PanelOnly);
+	AddFix("PG0", 06003 | PanelOnly);
+	AddFix("PEX", 06004 | PanelOnly);
+	AddFix("CPD", 06266 | PanelOnly);
+	AddFix("SPD", 06276 | PanelOnly);
+
+	/* Memory Extension Instruction */
+	AddMEI("CDF", 06201 | Inst6120);
+	AddMEI("CIF", 06202 | Inst6120);
+	AddFix("RDF", 06214 | Inst6120);
+	AddFix("RIF", 06224 | Inst6120);
+	AddFix("RIB", 06234 | Inst6120);
+	AddFix("RMF", 06244 | Inst6120);
+}
+
+static void DeinitFields(void)
+{
+	DestroyInstTable(InstTableOP3);
+	DestroyInstTable(InstTableOP2);
+	DestroyInstTable(InstTableOP1);
+	DestroyInstTable(InstTable);
+}
+
+/*---------------------------------------------------------------------------*/
+
+static void MakeCode_6100(void)
+{
+	CodeLen = 0;
+	DontPrint = False;
+
+	if (Memo("")) return;
+
+	BaseInst = True;
+	if (LookupInstTable(InstTable, OpPart.str.p_str)) return;
+	if (LookupInstTable(InstTableOP1, OpPart.str.p_str)) return;
+	if (LookupInstTable(InstTableOP2, OpPart.str.p_str)) return;
+	if (LookupInstTable(InstTableOP3, OpPart.str.p_str)) return;
+	if (DecodeDefault(&OpPart)) return;
+	WrStrErrorPos(ErrNum_UnknownInstruction, &OpPart);
+}
+
+static Boolean IsDef_6100(void)
+{
+	return False;
+}
+
+static void SwitchFrom_6100(void)
+{
+	DeinitFields();
+}
+
+static void SwitchTo_6100(void)
+{
+	const TFamilyDescr *pDescr;
+
+	TurnWords = True;
+	SetIntConstMode(eIntConstModeC);
+
+	pDescr = FindFamilyByName("IM6100");
+	PCSymbol = ".";
+	HeaderID = pDescr->Id;
+	NOPCode = 0x7000;
+	DivideChars = " \t";
+	HasAttrs = False;
+
+	ValidSegs = (1 << SegCode);
+	Grans[SegCode] = 2;
+	ListGrans[SegCode] = 2;
+	SegInits[SegCode] = 0x0000;
+	SegLimits[SegCode] = 0x0fff;
+
+	MakeCode = MakeCode_6100;
+	IsDef = IsDef_6100;
+	SwitchFrom = SwitchFrom_6100;
+	InitFields();
+}
+
+void code6100_init(void)
+{
+	CPU6100 = AddCPU("6100", SwitchTo_6100);
+	CPU6120 = AddCPU("6120", SwitchTo_6100);
+
+	AddCopyright("Intersil IM6100 Generator (C) 2022 Haruo Asano");
+}
diff -upNr asl-1.42b225/code6100.h asl-1.42b225-im6100/code6100.h
--- asl-1.42b225/code6100.h	1970-01-01 09:00:00.000000000 +0900
+++ asl-1.42b225-im6100/code6100.h	2022-07-11 18:38:46.136606171 +0900
@@ -0,0 +1,14 @@
+#ifndef _CODE6100_H
+#define _CODE6100_H
+/* code6100.h */
+/*****************************************************************************/
+/* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only                     */
+/*                                                                           */
+/* AS-Portierung                                                             */
+/*                                                                           */
+/* Codegenerator Intersil IM6100                                             */
+/*                                                                           */
+/*****************************************************************************/
+
+extern void code6100_init(void);
+#endif /* _CODE6100_H */
diff -upNr asl-1.42b225/headids.c asl-1.42b225-im6100/headids.c
--- asl-1.42b225/headids.c	2022-07-10 23:09:21.000000000 +0900
+++ asl-1.42b225-im6100/headids.c	2022-07-11 18:38:47.778603733 +0900
@@ -124,6 +124,7 @@ static const TFamilyDescr Descrs[] =
   { "1750"         , 0x004f, eHexFormatIntel   },
   { "CP1600"       , 0x000a, eHexFormatIntel   },
   { "NANO"         , 0x000b, eHexFormatIntel   },
+  { "IM6100"       , 0x000c, eHexFormatIntel   },
   { NULL           , 0xffff, eHexFormatDefault }
 };
 
diff -upNr asl-1.42b225/makedefs.src asl-1.42b225-im6100/makedefs.src
--- asl-1.42b225/makedefs.src	2022-07-10 23:11:59.000000000 +0900
+++ asl-1.42b225-im6100/makedefs.src	2022-07-11 18:38:47.782317777 +0900
@@ -108,7 +108,8 @@ CODE_OBJECTS = \
  $(TARG_OBJDIR)code1750$(TARG_OBJEXTENSION) \
  $(TARG_OBJDIR)codekenbak$(TARG_OBJEXTENSION) \
  $(TARG_OBJDIR)codecp1600$(TARG_OBJEXTENSION) \
- $(TARG_OBJDIR)codenano$(TARG_OBJEXTENSION)
+ $(TARG_OBJDIR)codenano$(TARG_OBJEXTENSION) \
+ $(TARG_OBJDIR)code6100$(TARG_OBJEXTENSION)
 
 DECODE_OBJECTS = \
  $(TARG_OBJDIR)deco68$(TARG_OBJEXTENSION) \
@@ -861,6 +862,11 @@ $(TARG_OBJDIR)codenano$(TARG_OBJEXTENSIO
 $(TARG_OBJDIR)codenano.dep: $(MKDEPENDTARGET)
 	$(CURRDIR)$(MKDEPENDTARGET) -r -c $(TARG_OBJEXTENSION) -o $@ $(TARG_OBJDIR)codenano$(TARG_OBJEXTENSION)
 
+$(TARG_OBJDIR)code6100$(TARG_OBJEXTENSION) : code6100.c
+	$(TARG_CC) $(ALLFLAGS) -o$(OBLANK)$@ -c code6100.c
+$(TARG_OBJDIR)code6100.dep: $(MKDEPENDTARGET)
+	$(CURRDIR)$(MKDEPENDTARGET) -r -c $(TARG_OBJEXTENSION) -o $@ $(TARG_OBJDIR)code6100$(TARG_OBJEXTENSION)
+
 $(TARG_OBJDIR)deco68$(TARG_OBJEXTENSION) : deco68.c
 	$(TARG_CC) $(ALLFLAGS) -o$(OBLANK)$@ -c deco68.c
 $(TARG_OBJDIR)deco68.dep: $(MKDEPENDTARGET)
diff -upNr asl-1.42b225/test.asm asl-1.42b225-im6100/test.asm
--- asl-1.42b225/test.asm	1970-01-01 09:00:00.000000000 +0900
+++ asl-1.42b225-im6100/test.asm	2022-07-12 23:49:18.330547468 +0900
@@ -0,0 +1,38 @@
+
+	CPU	6100
+
+LOOP:
+	JMP	LOOP
+	;JMS	FOO
+
+	ORG	00500
+
+L2:
+	JMS	I L2
+	TAD	I (LOOP + 2)
+	AND	LOOP+9
+	AND	.-1
+	ISZ	L2
+	DCA	LOOP
+	ISZ	.
+	
+	
+	SKON
+
+	BSW
+	CLL RAL
+
+	SMA SNL
+
+	CPU	6120
+
+	PPC1
+
+	CDF	4
+	CIF	7
+	CDF CIF 2
+	CIF CDF 3
+
+	0
+	"TEST"
+	"FOO" 0xd 012
