diff --git a/src/Makefile b/src/Makefile
index ea7ee87..2a59d77 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,7 +1,7 @@
 CLI=rk65c02cli
 CLI_OBJS=rk65c02cli.o
 
-LIB_OBJS=rk65c02.o bus.o instruction.o emulation.o debug.o device_ram.o device_serial.o
+LIB_OBJS=rk65c02.o bus.o instruction.o emulation.o debug.o device_ram.o device_serial.o jit_lightning.o
 LIB_SO=librk65c02.so
 LIB_STATIC=librk65c02.a
 
diff --git a/src/jit_lightning.c b/src/jit_lightning.c
new file mode 100644
index 0000000..9e98795
--- /dev/null
+++ b/src/jit_lightning.c
@@ -0,0 +1,50 @@
+#include "jit_lightning.h"
+
+
+rkjit_t
+rkjit_init(bus_t *b) 
+{
+	rkjit_t rj;
+
+	rj.b = b;
+
+	init_jit(NULL);
+
+	return rj;
+}
+
+void
+rkjit_finish(rkjit_t *rj)
+{
+	finish_jit();
+}
+
+rkjit_block_t
+rkjit_block_recompile(rkjit_t *rj, uint16_t offset)
+{
+	jit_state_t *_jit;
+	rkjit_block_t jb;
+
+	jb.offset = offset;
+
+	_jit = jit_new_state();
+	jit_prolog();
+	jit_ret();
+	jit_epilog();	
+
+	jb.generated = jit_emit();
+
+	jit_clear_state();
+	jit_disassemble();
+
+	jit_destroy_state();
+
+	return jb;
+}
+
+/*bool
+rkjit_nblock_analyze(rkjit_nblock *, uint16_t offset) 
+{
+
+}*/
+
diff --git a/src/jit_lightning.h b/src/jit_lightning.h
new file mode 100644
index 0000000..46988f4
--- /dev/null
+++ b/src/jit_lightning.h
@@ -0,0 +1,27 @@
+#ifndef _JIT_LIGHTNING_H_
+#define _JIT_LIGHTNING_H_
+
+#include <lightning/lightning.h>
+
+#include "bus.h"
+
+typedef void (*rkjit_native_code)(void);
+
+struct rkjit_tag {
+	bus_t *b;
+};
+
+struct rkjit_block_tag {
+	uint16_t offset;
+	rkjit_native_code generated;
+};
+
+typedef struct rkjit_tag rkjit_t;
+typedef struct rkjit_block_tag rkjit_block_t;
+
+rkjit_t rkjit_init(bus_t *b);
+void rkjit_finish(rkjit_t *rj);
+rkjit_block_t rkjit_block_recompile(rkjit_t *rj, uint16_t offset);
+
+#endif /* _JIT_LIGHTNING_H_ */
+
diff --git a/test/Makefile b/test/Makefile
index 80845f3..b44f143 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -5,7 +5,7 @@ VASM=vasm6502_std
 VASMFLAGS=-Fbin -c02
 UTILS=utils.o
 
-TESTS=test_bus test_emulation test_stepping test_assemble test_interrupt test_debug test_device_serial
+TESTS=test_bus test_emulation test_stepping test_assemble test_interrupt test_debug test_device_serial test_jit
 TESTROMS:=$(addsuffix .rom,$(basename $(wildcard *.s)))
 
 all : $(TESTS) $(TESTROMS)
@@ -31,6 +31,9 @@ test_debug: test_debug.o $(UTILS) $(RK6502LIB)
 test_device_serial: test_device_serial.o $(UTILS) $(RK6502LIB)
 	$(CC) -o $@ $(LDFLAGS) $< $(UTILS) $(RK6502LIB)
 
+test_jit : test_jit.o $(UTILS) $(RK6502LIB)
+	$(CC) -o $@ $(LDFLAGS) -llightning $< $(UTILS) $(RK6502LIB)
+
 %.rom : %.s
 	$(VASM) $(VASMFLAGS) -o $@ $< 
 
diff --git a/test/test_jit.c b/test/test_jit.c
new file mode 100644
index 0000000..d67088a
--- /dev/null
+++ b/test/test_jit.c
@@ -0,0 +1,40 @@
+#include <atf-c.h>
+
+#include <stdio.h>
+
+#include "bus.h"
+#include "rk65c02.h"
+#include "utils.h"
+#include "jit_lightning.h"
+
+ATF_TC_WITHOUT_HEAD(jit_1);
+ATF_TC_BODY(jit_1, tc)
+{
+//	rk65c02emu_t e;
+	bus_t b;
+	rkjit_t rj;
+	rkjit_block_t jb;
+
+	b = bus_init_with_default_devs();
+	rj = rkjit_init(&b);
+//	e = rk65c02_init(&b);
+//	e.regs.PC = ROM_LOAD_ADDR;
+
+	ATF_REQUIRE(bus_load_file(&b, ROM_LOAD_ADDR,
+	    rom_path("test_emulation_inc_a.rom", tc)));
+
+	jb = rkjit_block_recompile(&rj, ROM_LOAD_ADDR);
+
+	jb.generated();
+
+	//rkjit_finish(&rj);
+
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+	ATF_TP_ADD_TC(tp, jit_1);
+
+	return (atf_no_error());
+}
+