├── .gitignore ├── README.md ├── docs ├── asm.txt ├── configuration.txt ├── java_on_spec.png └── jni.txt ├── examples ├── ZXSpectrumDemoLib │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── igormaznitsa │ │ │ └── j2z80 │ │ │ └── bootstrap │ │ │ └── java │ │ │ ├── io │ │ │ └── PrintStream.java │ │ │ └── lang │ │ │ └── System.java │ │ └── resources │ │ └── com │ │ └── igormaznitsa │ │ └── j2z80 │ │ └── bootstrap │ │ └── java │ │ └── io │ │ └── PrintStream.a80 └── ZXSpectrumHelloWorld │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── igormaznitsa │ │ └── test │ │ └── helloworld │ │ ├── ZXScreen.java │ │ └── main.java │ └── resources │ └── com │ └── igormaznitsa │ └── test │ └── helloworld │ └── ZXScreen.a80 ├── j2z80-api ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── igormaznitsa │ │ └── j2z80 │ │ ├── ClassContext.java │ │ ├── MethodContext.java │ │ ├── TranslatorContext.java │ │ ├── TranslatorLogger.java │ │ ├── api │ │ └── additional │ │ │ ├── AdditionPath.java │ │ │ ├── J2ZAdditionalBlock.java │ │ │ ├── NeedsATHROWManager.java │ │ │ ├── NeedsBREAKPOINTManager.java │ │ │ ├── NeedsCheckcastManager.java │ │ │ ├── NeedsINTArithmeticManager.java │ │ │ ├── NeedsINVOKEINTERFACEManager.java │ │ │ ├── NeedsINVOKEVIRTUALManager.java │ │ │ ├── NeedsInstanceofManager.java │ │ │ └── NeedsMemoryManager.java │ │ ├── bootstrap │ │ ├── AbstractBootClass.java │ │ ├── BootClassException.java │ │ └── java │ │ │ └── lang │ │ │ └── Object.java │ │ ├── ids │ │ ├── ClassID.java │ │ ├── ClassMethodInfo.java │ │ └── MethodID.java │ │ └── utils │ │ ├── LabelAndFrameUtils.java │ │ ├── MutableObjectContainer.java │ │ └── Utils.java │ └── test │ └── java │ └── com │ └── igormaznitsa │ └── j2z80 │ ├── ids │ └── ClassMethodInfoTest.java │ └── utils │ └── UtilsTest.java ├── j2z80-plugin ├── nbactions.xml ├── pom.xml └── src │ ├── assembly │ └── bundle.xml │ ├── main │ ├── java │ │ └── com │ │ │ └── igormaznitsa │ │ │ ├── j2z80 │ │ │ ├── jvmprocessors │ │ │ │ ├── AbstractFieldProcessor.java │ │ │ │ ├── AbstractInvokeProcessor.java │ │ │ │ ├── AbstractJvmCommandProcessor.java │ │ │ │ ├── Processor_AALOAD.java │ │ │ │ ├── Processor_AASTORE.java │ │ │ │ ├── Processor_ACONST_NULL.java │ │ │ │ ├── Processor_ALOAD.java │ │ │ │ ├── Processor_ANEWARRAY.java │ │ │ │ ├── Processor_ARETURN.java │ │ │ │ ├── Processor_ARRAYLENGTH.java │ │ │ │ ├── Processor_ASTORE.java │ │ │ │ ├── Processor_ATHROW.java │ │ │ │ ├── Processor_BALOAD.java │ │ │ │ ├── Processor_BASTORE.java │ │ │ │ ├── Processor_BIPUSH.java │ │ │ │ ├── Processor_BREAKPOINT.java │ │ │ │ ├── Processor_CALOAD.java │ │ │ │ ├── Processor_CASTORE.java │ │ │ │ ├── Processor_CHECKCAST.java │ │ │ │ ├── Processor_DUP.java │ │ │ │ ├── Processor_DUP2.java │ │ │ │ ├── Processor_DUP2_X1.java │ │ │ │ ├── Processor_DUP2_X2.java │ │ │ │ ├── Processor_DUP_X1.java │ │ │ │ ├── Processor_DUP_X2.java │ │ │ │ ├── Processor_GETFIELD.java │ │ │ │ ├── Processor_GETSTATIC.java │ │ │ │ ├── Processor_GOTO.java │ │ │ │ ├── Processor_GOTO_W.java │ │ │ │ ├── Processor_I2B.java │ │ │ │ ├── Processor_I2C.java │ │ │ │ ├── Processor_I2S.java │ │ │ │ ├── Processor_IADD.java │ │ │ │ ├── Processor_IALOAD.java │ │ │ │ ├── Processor_IAND.java │ │ │ │ ├── Processor_IASTORE.java │ │ │ │ ├── Processor_ICONST.java │ │ │ │ ├── Processor_IDIV.java │ │ │ │ ├── Processor_IFEQ.java │ │ │ │ ├── Processor_IFGE.java │ │ │ │ ├── Processor_IFGT.java │ │ │ │ ├── Processor_IFLE.java │ │ │ │ ├── Processor_IFLT.java │ │ │ │ ├── Processor_IFNE.java │ │ │ │ ├── Processor_IFNONNULL.java │ │ │ │ ├── Processor_IFNULL.java │ │ │ │ ├── Processor_IF_ACMPEQ.java │ │ │ │ ├── Processor_IF_ACMPNE.java │ │ │ │ ├── Processor_IF_ICMPEQ.java │ │ │ │ ├── Processor_IF_ICMPGE.java │ │ │ │ ├── Processor_IF_ICMPGT.java │ │ │ │ ├── Processor_IF_ICMPLE.java │ │ │ │ ├── Processor_IF_ICMPLT.java │ │ │ │ ├── Processor_IF_ICMPNE.java │ │ │ │ ├── Processor_IINC.java │ │ │ │ ├── Processor_ILOAD.java │ │ │ │ ├── Processor_IMUL.java │ │ │ │ ├── Processor_INEG.java │ │ │ │ ├── Processor_INSTANCEOF.java │ │ │ │ ├── Processor_INVOKEINTERFACE.java │ │ │ │ ├── Processor_INVOKESPECIAL.java │ │ │ │ ├── Processor_INVOKESTATIC.java │ │ │ │ ├── Processor_INVOKEVIRTUAL.java │ │ │ │ ├── Processor_IOR.java │ │ │ │ ├── Processor_IREM.java │ │ │ │ ├── Processor_IRETURN.java │ │ │ │ ├── Processor_ISHL.java │ │ │ │ ├── Processor_ISHR.java │ │ │ │ ├── Processor_ISTORE.java │ │ │ │ ├── Processor_ISUB.java │ │ │ │ ├── Processor_IUSHR.java │ │ │ │ ├── Processor_IXOR.java │ │ │ │ ├── Processor_JSR.java │ │ │ │ ├── Processor_JSR_W.java │ │ │ │ ├── Processor_LDC.java │ │ │ │ ├── Processor_LDC_W.java │ │ │ │ ├── Processor_LOOKUPSWITCH.java │ │ │ │ ├── Processor_MONITORENTER.java │ │ │ │ ├── Processor_MONITOREXIT.java │ │ │ │ ├── Processor_MULTIANEWARRAY.java │ │ │ │ ├── Processor_NEW.java │ │ │ │ ├── Processor_NEWARRAY.java │ │ │ │ ├── Processor_NOP.java │ │ │ │ ├── Processor_POP.java │ │ │ │ ├── Processor_POP2.java │ │ │ │ ├── Processor_PUTFIELD.java │ │ │ │ ├── Processor_PUTSTATIC.java │ │ │ │ ├── Processor_RET.java │ │ │ │ ├── Processor_RETURN.java │ │ │ │ ├── Processor_SALOAD.java │ │ │ │ ├── Processor_SASTORE.java │ │ │ │ ├── Processor_SIPUSH.java │ │ │ │ ├── Processor_SWAP.java │ │ │ │ └── Processor_TABLESWITCH.java │ │ │ └── translator │ │ │ │ ├── ClassContextImpl.java │ │ │ │ ├── DefaultTranslatorLogger.java │ │ │ │ ├── InstanceofTable.java │ │ │ │ ├── InvokeinterfaceTable.java │ │ │ │ ├── InvokevirtualTable.java │ │ │ │ ├── MainPrefixPostfixGenerator.java │ │ │ │ ├── MethodContextImpl.java │ │ │ │ ├── MethodTranslator.java │ │ │ │ ├── NativeClassProcessor.java │ │ │ │ ├── TranslatorImpl.java │ │ │ │ ├── jar │ │ │ │ ├── ClassValidator.java │ │ │ │ ├── ZClassPath.java │ │ │ │ └── ZParsedJar.java │ │ │ │ ├── mojos │ │ │ │ └── TranslatorMojo.java │ │ │ │ ├── optimizator │ │ │ │ ├── AsmOptimizer.java │ │ │ │ ├── AsmOptimizerChain.java │ │ │ │ ├── OptimizationChainFactory.java │ │ │ │ ├── OptimizationLevel.java │ │ │ │ └── base │ │ │ │ │ ├── OptimizationConst.java │ │ │ │ │ ├── OptimizationState.java │ │ │ │ │ └── ReplacePatterns.java │ │ │ │ └── utils │ │ │ │ ├── AsmAssertions.java │ │ │ │ ├── ClassUtils.java │ │ │ │ └── MethodUtils.java │ │ │ └── z80asm │ │ │ ├── AsmTranslator.java │ │ │ ├── EquDirectiveContainer.java │ │ │ ├── LabelAddressContainer.java │ │ │ ├── LocalLabelExpectant.java │ │ │ ├── PositioningByteBuffer.java │ │ │ ├── Z80Asm.java │ │ │ ├── asmcommands │ │ │ ├── AbstractAsmCommand.java │ │ │ ├── AsmCommandADC.java │ │ │ ├── AsmCommandADD.java │ │ │ ├── AsmCommandAND.java │ │ │ ├── AsmCommandASSERT.java │ │ │ ├── AsmCommandBIT.java │ │ │ ├── AsmCommandCALL.java │ │ │ ├── AsmCommandCCF.java │ │ │ ├── AsmCommandCLRLOC.java │ │ │ ├── AsmCommandCP.java │ │ │ ├── AsmCommandCPD.java │ │ │ ├── AsmCommandCPDR.java │ │ │ ├── AsmCommandCPI.java │ │ │ ├── AsmCommandCPIR.java │ │ │ ├── AsmCommandCPL.java │ │ │ ├── AsmCommandDAA.java │ │ │ ├── AsmCommandDEC.java │ │ │ ├── AsmCommandDEFB.java │ │ │ ├── AsmCommandDEFM.java │ │ │ ├── AsmCommandDEFS.java │ │ │ ├── AsmCommandDEFW.java │ │ │ ├── AsmCommandDI.java │ │ │ ├── AsmCommandDJNZ.java │ │ │ ├── AsmCommandEI.java │ │ │ ├── AsmCommandEND.java │ │ │ ├── AsmCommandENT.java │ │ │ ├── AsmCommandEQU.java │ │ │ ├── AsmCommandEX.java │ │ │ ├── AsmCommandEXX.java │ │ │ ├── AsmCommandHALT.java │ │ │ ├── AsmCommandIM.java │ │ │ ├── AsmCommandIN.java │ │ │ ├── AsmCommandINC.java │ │ │ ├── AsmCommandIND.java │ │ │ ├── AsmCommandINDR.java │ │ │ ├── AsmCommandINI.java │ │ │ ├── AsmCommandINIR.java │ │ │ ├── AsmCommandJP.java │ │ │ ├── AsmCommandJR.java │ │ │ ├── AsmCommandLD.java │ │ │ ├── AsmCommandLDD.java │ │ │ ├── AsmCommandLDDR.java │ │ │ ├── AsmCommandLDI.java │ │ │ ├── AsmCommandLDIR.java │ │ │ ├── AsmCommandNEG.java │ │ │ ├── AsmCommandNOP.java │ │ │ ├── AsmCommandOR.java │ │ │ ├── AsmCommandORG.java │ │ │ ├── AsmCommandOTDR.java │ │ │ ├── AsmCommandOTIR.java │ │ │ ├── AsmCommandOUT.java │ │ │ ├── AsmCommandOUTD.java │ │ │ ├── AsmCommandOUTI.java │ │ │ ├── AsmCommandPOP.java │ │ │ ├── AsmCommandPUSH.java │ │ │ ├── AsmCommandRES.java │ │ │ ├── AsmCommandRET.java │ │ │ ├── AsmCommandRETI.java │ │ │ ├── AsmCommandRETN.java │ │ │ ├── AsmCommandRL.java │ │ │ ├── AsmCommandRLA.java │ │ │ ├── AsmCommandRLC.java │ │ │ ├── AsmCommandRLCA.java │ │ │ ├── AsmCommandRLD.java │ │ │ ├── AsmCommandRR.java │ │ │ ├── AsmCommandRRA.java │ │ │ ├── AsmCommandRRC.java │ │ │ ├── AsmCommandRRCA.java │ │ │ ├── AsmCommandRRD.java │ │ │ ├── AsmCommandRST.java │ │ │ ├── AsmCommandSBC.java │ │ │ ├── AsmCommandSCF.java │ │ │ ├── AsmCommandSET.java │ │ │ ├── AsmCommandSLA.java │ │ │ ├── AsmCommandSRA.java │ │ │ ├── AsmCommandSRL.java │ │ │ ├── AsmCommandSUB.java │ │ │ ├── AsmCommandXOR.java │ │ │ └── ParsedAsmLine.java │ │ │ ├── exceptions │ │ │ └── AsmTranslationException.java │ │ │ └── expression │ │ │ └── LightExpression.java │ └── resources │ │ └── com │ │ └── igormaznitsa │ │ └── j2z80 │ │ ├── japi │ │ └── java │ │ │ └── io │ │ │ └── java.io.PrintStream.a80 │ │ └── jvmprocessors │ │ ├── AALOAD.a80 │ │ ├── AASTORE.a80 │ │ ├── ACONST_NULL.a80 │ │ ├── ALOAD.a80 │ │ ├── ANEWARRAY.a80 │ │ ├── ARETURN.a80 │ │ ├── ARRAYLENGTH.a80 │ │ ├── ASTORE.a80 │ │ ├── ATHROW.a80 │ │ ├── ATHROW_MANAGER.a80 │ │ ├── BALOAD.a80 │ │ ├── BASTORE.a80 │ │ ├── BIPUSH.a80 │ │ ├── BREAKPOINT.a80 │ │ ├── BREAKPOINT_MANAGER.a80 │ │ ├── CALOAD.a80 │ │ ├── CASTORE.a80 │ │ ├── CHECKCAST.a80 │ │ ├── CHECKCAST_MANAGER.a80 │ │ ├── DUP.a80 │ │ ├── DUP2.a80 │ │ ├── DUP2_X1.a80 │ │ ├── DUP2_X2.a80 │ │ ├── DUP_X1.a80 │ │ ├── DUP_X2.a80 │ │ ├── GETFIELD.a80 │ │ ├── GETSTATIC.a80 │ │ ├── GOTO.a80 │ │ ├── GOTO_W.a80 │ │ ├── I2B.a80 │ │ ├── I2C.a80 │ │ ├── I2S.a80 │ │ ├── IADD.a80 │ │ ├── IALOAD.a80 │ │ ├── IAND.a80 │ │ ├── IASTORE.a80 │ │ ├── ICONST.a80 │ │ ├── IDIV.a80 │ │ ├── IFEQ.a80 │ │ ├── IFGE.a80 │ │ ├── IFGT.a80 │ │ ├── IFLE.a80 │ │ ├── IFLT.a80 │ │ ├── IFNE.a80 │ │ ├── IFNONNULL.a80 │ │ ├── IFNULL.a80 │ │ ├── IF_ACMPEQ.a80 │ │ ├── IF_ACMPNE.a80 │ │ ├── IF_ICMPEQ.a80 │ │ ├── IF_ICMPGE.a80 │ │ ├── IF_ICMPGT.a80 │ │ ├── IF_ICMPLE.a80 │ │ ├── IF_ICMPLT.a80 │ │ ├── IF_ICMPNE.a80 │ │ ├── IINC.a80 │ │ ├── ILOAD.a80 │ │ ├── IMUL.a80 │ │ ├── INEG.a80 │ │ ├── INSTANCEOF.a80 │ │ ├── INSTANCEOF_MANAGER.a80 │ │ ├── INT_ARITHMETIC_MANAGER.a80 │ │ ├── INVOKEINTERFACE.a80 │ │ ├── INVOKEINTERFACE_MANAGER.a80 │ │ ├── INVOKESPECIAL.a80 │ │ ├── INVOKESTATIC.a80 │ │ ├── INVOKEVIRTUAL.a80 │ │ ├── INVOKEVIRTUAL_MANAGER.a80 │ │ ├── IOR.a80 │ │ ├── IREM.a80 │ │ ├── IRETURN.a80 │ │ ├── ISHL.a80 │ │ ├── ISHR.a80 │ │ ├── ISTORE.a80 │ │ ├── ISUB.a80 │ │ ├── IUSHR.a80 │ │ ├── IXOR.a80 │ │ ├── JSR.a80 │ │ ├── JSR_W.a80 │ │ ├── LDC.a80 │ │ ├── LDC_W.a80 │ │ ├── LOOKUPSWITCH.a80 │ │ ├── MEMORY_MANAGER.a80 │ │ ├── MONITORENTER.a80 │ │ ├── MONITOREXIT.a80 │ │ ├── MULTIANEWARRAY.a80 │ │ ├── NEW.a80 │ │ ├── NEWARRAY.a80 │ │ ├── NOP.a80 │ │ ├── POP.a80 │ │ ├── POP2.a80 │ │ ├── PUTFIELD.a80 │ │ ├── PUTSTATIC.a80 │ │ ├── RET.a80 │ │ ├── RETURN.a80 │ │ ├── SALOAD.a80 │ │ ├── SASTORE.a80 │ │ ├── SIPUSH.a80 │ │ ├── SWAP.a80 │ │ ├── TABLESWITCH.a80 │ │ └── processorlist.txt │ └── test │ ├── java │ ├── com │ │ └── igormaznitsa │ │ │ ├── j2z80 │ │ │ ├── jvmprocessors │ │ │ │ ├── AbstractIntMathManagerBasedTest.java │ │ │ │ ├── AbstractInvokeTest.java │ │ │ │ ├── AbstractJVMBranchTest.java │ │ │ │ ├── AbstractJVMSelectTest.java │ │ │ │ ├── AbstractJvmCommandProcessorTest.java │ │ │ │ ├── AbstractTestBasedOnMemoryManager.java │ │ │ │ ├── AdditionPathTest.java │ │ │ │ ├── TestAALOAD.java │ │ │ │ ├── TestAASTORE.java │ │ │ │ ├── TestACONST_NULL.java │ │ │ │ ├── TestALOAD.java │ │ │ │ ├── TestANEWARRAY.java │ │ │ │ ├── TestARETURN.java │ │ │ │ ├── TestARRAYLENGTH.java │ │ │ │ ├── TestASTORE.java │ │ │ │ ├── TestATHROW.java │ │ │ │ ├── TestBALOAD.java │ │ │ │ ├── TestBASTORE.java │ │ │ │ ├── TestBIPUSH.java │ │ │ │ ├── TestBREAK.java │ │ │ │ ├── TestBranches.java │ │ │ │ ├── TestCALOAD.java │ │ │ │ ├── TestCASTORE.java │ │ │ │ ├── TestCHECKCAST.java │ │ │ │ ├── TestDUP.java │ │ │ │ ├── TestDUP2.java │ │ │ │ ├── TestDUP2_X1.java │ │ │ │ ├── TestDUP2_X2.java │ │ │ │ ├── TestDUP_X1.java │ │ │ │ ├── TestDUP_X2.java │ │ │ │ ├── TestGETFIELD.java │ │ │ │ ├── TestGETSTATIC.java │ │ │ │ ├── TestI2B.java │ │ │ │ ├── TestI2C.java │ │ │ │ ├── TestI2S.java │ │ │ │ ├── TestIADD.java │ │ │ │ ├── TestIALOAD.java │ │ │ │ ├── TestIAND.java │ │ │ │ ├── TestIASTORE.java │ │ │ │ ├── TestICONST.java │ │ │ │ ├── TestIDIV.java │ │ │ │ ├── TestIINC.java │ │ │ │ ├── TestILOAD.java │ │ │ │ ├── TestIMUL.java │ │ │ │ ├── TestINEG.java │ │ │ │ ├── TestINSTANCEOF.java │ │ │ │ ├── TestINVOKEINTERFACE.java │ │ │ │ ├── TestINVOKESPECIAL.java │ │ │ │ ├── TestINVOKESTATIC.java │ │ │ │ ├── TestINVOKEVIRTUAL.java │ │ │ │ ├── TestIOR.java │ │ │ │ ├── TestIREM.java │ │ │ │ ├── TestIRETURN.java │ │ │ │ ├── TestISHL.java │ │ │ │ ├── TestISHR.java │ │ │ │ ├── TestISTORE.java │ │ │ │ ├── TestISUB.java │ │ │ │ ├── TestIUSHR.java │ │ │ │ ├── TestIXOR.java │ │ │ │ ├── TestJSR.java │ │ │ │ ├── TestJSR_W.java │ │ │ │ ├── TestLDC.java │ │ │ │ ├── TestLDC_W.java │ │ │ │ ├── TestLOOKUPSWITCH.java │ │ │ │ ├── TestMONITORENTER.java │ │ │ │ ├── TestMONITOREXIT.java │ │ │ │ ├── TestMULTIANEWARRAY.java │ │ │ │ ├── TestNEW.java │ │ │ │ ├── TestNEWARRAY.java │ │ │ │ ├── TestNOP.java │ │ │ │ ├── TestPOP.java │ │ │ │ ├── TestPOP2.java │ │ │ │ ├── TestPUTFIELD.java │ │ │ │ ├── TestPUTSTATIC.java │ │ │ │ ├── TestRET.java │ │ │ │ ├── TestRETURN.java │ │ │ │ ├── TestSALOAD.java │ │ │ │ ├── TestSASTORE.java │ │ │ │ ├── TestSIPUSH.java │ │ │ │ ├── TestSWAP.java │ │ │ │ └── TestTABLESWITCH.java │ │ │ └── translator │ │ │ │ ├── MethodTranslatorTest.java │ │ │ │ ├── optimizator │ │ │ │ └── base │ │ │ │ │ └── ReplacePatternsTest.java │ │ │ │ └── utils │ │ │ │ └── ClassUtilsTest.java │ │ │ └── z80asm │ │ │ ├── PositioningByteBufferTest.java │ │ │ ├── Z80AsmTest.java │ │ │ ├── asmcommands │ │ │ ├── AbstractAsmCommandTest.java │ │ │ ├── AllOperationTest.java │ │ │ ├── AsmCommandDEFBTest.java │ │ │ ├── AsmCommandDEFSTest.java │ │ │ ├── AsmCommandDEFWTest.java │ │ │ ├── AsmCommandENTTest.java │ │ │ ├── AsmCommandLineTest.java │ │ │ ├── AsmCommandORGTest.java │ │ │ ├── ParsedAsmLineTest.java │ │ │ └── expression │ │ │ │ └── LightExpressionTest.java │ │ │ └── expression │ │ │ └── LightExpressionTest.java │ └── j80 │ │ └── cpu │ │ ├── Z80.java │ │ └── Z80debug.java │ └── resources │ └── com │ └── igormaznitsa │ └── z80asm │ ├── asmcommands │ └── all_commands.txt │ ├── equ.asm │ ├── hello_world.asm │ ├── local.asm │ ├── localatend.asm │ ├── multilabeled.asm │ └── only_label.asm ├── j2z80-tests ├── ext-jar │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── igormaznitsa │ │ │ └── memory │ │ │ └── MemoryAccessor.java │ │ └── resources │ │ └── com │ │ └── igormaznitsa │ │ ├── hello.txt │ │ └── memory │ │ └── MemoryAccessor.a80 ├── main-jar │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── igormaznitsa │ │ │ │ ├── impl │ │ │ │ ├── MemoryFiller.java │ │ │ │ ├── MemoryFillerFactory.java │ │ │ │ ├── MemoryFillerJava.java │ │ │ │ └── MemoryFillerNative.java │ │ │ │ ├── j2z80test │ │ │ │ └── Main.java │ │ │ │ └── templategen │ │ │ │ ├── EvenPatternGenerator.java │ │ │ │ └── OddPatternGenerator.java │ │ └── resources │ │ │ └── com │ │ │ └── igormaznitsa │ │ │ └── impl │ │ │ └── MemoryFillerNative#fillArea.asm │ │ └── test │ │ └── java │ │ ├── com │ │ └── igormaznitsa │ │ │ └── j2z80 │ │ │ └── test │ │ │ └── AcceptanceITCase.java │ │ └── j80 │ │ └── cpu │ │ ├── Z80.java │ │ └── Z80debug.java └── pom.xml ├── nbactions.xml ├── pom.xml └── texts ├── gpl-3.0.txt └── readme.txt /.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | *.iml 3 | .idea 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Description 2 | ============ 3 | It is a maven plugin developed for academical purposes, the plugin allows to translate compiled JVM byte codes into Z80 instructions. It works as a pattern compiler with minimal optimization. **Warning! It is not a JVM interpreter because it generates low-level native code for Z80. It doesn't contain any GC!** 4 | 5 | ![Screenshot](https://raw.githubusercontent.com/raydac/j2z80/master/docs/java_on_spec.png) 6 | ```Java 7 | package com.igormaznitsa.test.helloworld; 8 | 9 | import static com.igormaznitsa.test.helloworld.ZXScreen.*; 10 | 11 | public class main { 12 | public static final void mainz(){ 13 | setTextColor(COLOR_RED, COLOR_WHITE); 14 | clearWholeScreen(); 15 | System.out.println("Hello world!"); 16 | setTextColor(COLOR_YELLOW, COLOR_BLUE); 17 | clearServiceScreen(); 18 | System.err.println("Written in Java!!!"); 19 | setBorderColor(COLOR_RED); 20 | } 21 | } 22 | ``` 23 | 24 | As the input it uses JAR files It takes a JAR file and translate all found classes into solid Z80 binary block which can be started on real device or under emulator. 25 | 26 | It is not fully compatible with Java and has a lot of restrictions but it allows to use Java tool-chain and IDEs for Z80 developments. 27 | 28 | License 29 | ======== 30 | The Sources published under [GNU GPL 3](http://www.gnu.org/copyleft/gpl.html) 31 | 32 | Donation 33 | ========= 34 | If you like the software you can make some donation to the author 35 | [![https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=AHWJHJFBAWGL2) 36 | -------------------------------------------------------------------------------- /docs/asm.txt: -------------------------------------------------------------------------------- 1 | The Translator has a small embedded Z80 assembler which is used to translate generated assembler sources into binary representation. The assembler allows only (!) documented Z80 commands and also it has several special commands to manage the translating process and labels. 2 | 3 | Labels 4 | ------- 5 | There are two kinds of labels: 6 | 1. Global labels. There can be only label with such name. 7 | 2. Local labels. Such kind of labels can be redefined. A Local label name starts with '@' symbol. To avoid duplication or wrong behaviour you can 'forget' all known local labes with the CLRLOC special command. 8 | 9 | Special commands 10 | ------------------ 11 | ENT
- it defines the start point of the code 12 | ORG
- it defines the current start address for translation 13 | DEFB ,.. - it allows to place byte values (1 cell per value) into memory cells 14 | DEFW ,.. - it allows to place word values (2 cells per value) into memory cells 15 | DEFM - save a string (8 bit per char) into memory cells 16 | DEFS - to make reservation of memory block with the length in bytes 17 | CLRLOC - the directive resets all met local labels 18 |