// Path: src/main/java/com/amanvishnani/sim8085/domain/Impl/Flags.java
// public class Flags implements IFlags {
//     Map<Flag, Integer> store;
// 
//     public Flags() {
//         store = new HashMap<>();
//     }
// 
//     public static Flags newInstance() {
//         return new Flags();
//     }
// 
//     @Override
//     public void setFlag(Flag flagName, Integer value) {
//         store.put(flagName, value);
//     }
// 
//     @Override
//     public Integer getFlag(Flag flagName) {
//         return store.get(flagName);
//     }
// 
//     @Override
//     public Set<Flag> getKeys() {
//         return store.keySet();
//     }
// }
// 
// Path: src/main/java/com/amanvishnani/sim8085/domain/Impl/InstructionExecuted.java
// public class InstructionExecuted {
//     IData instruction;
//     IAddress nextAddress;
// 
//     public IData getInstruction() {
//         return instruction;
//     }
// 
//     public void setInstruction(IData instruction) {
//         this.instruction = instruction;
//     }
// 
//     public IAddress getNextAddress() {
//         return nextAddress;
//     }
// 
//     public void setNextAddress(IAddress nextAddress) {
//         this.nextAddress = nextAddress;
//     }
// }
// 
// Path: src/main/java/com/amanvishnani/sim8085/domain/Impl/InstructionRow.java
// public class InstructionRow {
//     private String label;
//     private String instruction;
//     private IData data;
//     private IAddress address;
//     private boolean hasLabelOperand;
//     private String labelOperand;
// 
// 
//     private InstructionRow(Integer address) {
//         this.address = Address.from(address);
//         setLabel("");
//         setInstruction("");
//     }
// 
//     public static InstructionRow createInstructionRow(Integer address) {
//         return new InstructionRow(address);
//     }
// 
//     public String getLabel() {
//         return label;
//     }
// 
//     public void setLabel(String label) {
//         this.label = label;
//     }
// 
//     public String getInstruction() {
//         return instruction;
//     }
// 
//     public void setInstruction(String instruction) {
//         this.instruction = instruction;
//     }
// 
//     public IData getData() {
//         return data;
//     }
// 
//     public void setData(IData data) {
//         this.data = data;
//     }
// 
//     public IAddress getAddress() {
//         return address;
//     }
// 
//     public void setAddress(IAddress address) {
//         this.address = address;
//     }
// 
//     public void setHasOperandLabel(boolean hasLabelOperand) {
//         this.hasLabelOperand = hasLabelOperand;
//     }
// 
//     public boolean getHasLabelOperand() {
//         return hasLabelOperand;
//     }
// 
//     public void setOperandLabel(String labelOperand) {
//         this.labelOperand = labelOperand;
//     }
// 
//     public String getLabelOperand() {
//         return labelOperand;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
//         InstructionRow that = (InstructionRow) o;
//         return Objects.equals(label, that.label) && Objects.equals(instruction, that.instruction) && Objects.equals(data, that.data) && Objects.equals(address, that.address);
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hash(label, instruction, data, address);
//     }
// 
//     @Override
//     public String toString() {
//         return "InstructionRow{" +
//                 "label='" + label + '\'' +
//                 ", instruction='" + instruction + '\'' +
//                 ", data=" + data +
//                 ", address=" + address +
//                 ", hasLabelOperand=" + hasLabelOperand +
//                 ", labelOperand='" + labelOperand + '\'' +
//                 '}';
//     }
// }


import com.amanvishnani.sim8085.domain.Impl.Flags;
import com.amanvishnani.sim8085.domain.Impl.InstructionExecuted;
import com.amanvishnani.sim8085.domain.Impl.InstructionRow;
import io.reactivex.rxjava3.subjects.PublishSubject;
import java.util.ArrayList;
package com.amanvishnani.sim8085.domain;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */



/**
 *
 * @author Aman Vishnani
 */
public interface I8085 {
    void nextInstructionPointer();

    IRegister getA();
    IRegister getB();
    IRegister getC();
    IRegister getD();
    IRegister getE();
    IRegister getH();
    IRegister getL();
    IData getM();
// Path: src/main/java/com/amanvishnani/sim8085/domain/Impl/Flags.java
// public class Flags implements IFlags {
//     Map<Flag, Integer> store;
// 
//     public Flags() {
//         store = new HashMap<>();
//     }
// 
//     public static Flags newInstance() {
//         return new Flags();
//     }
// 
//     @Override
//     public void setFlag(Flag flagName, Integer value) {
//         store.put(flagName, value);
//     }
// 
//     @Override
//     public Integer getFlag(Flag flagName) {
//         return store.get(flagName);
//     }
// 
//     @Override
//     public Set<Flag> getKeys() {
//         return store.keySet();
//     }
// }
// 
// Path: src/main/java/com/amanvishnani/sim8085/domain/Impl/InstructionExecuted.java
// public class InstructionExecuted {
//     IData instruction;
//     IAddress nextAddress;
// 
//     public IData getInstruction() {
//         return instruction;
//     }
// 
//     public void setInstruction(IData instruction) {
//         this.instruction = instruction;
//     }
// 
//     public IAddress getNextAddress() {
//         return nextAddress;
//     }
// 
//     public void setNextAddress(IAddress nextAddress) {
//         this.nextAddress = nextAddress;
//     }
// }
// 
// Path: src/main/java/com/amanvishnani/sim8085/domain/Impl/InstructionRow.java
// public class InstructionRow {
//     private String label;
//     private String instruction;
//     private IData data;
//     private IAddress address;
//     private boolean hasLabelOperand;
//     private String labelOperand;
// 
// 
//     private InstructionRow(Integer address) {
//         this.address = Address.from(address);
//         setLabel("");
//         setInstruction("");
//     }
// 
//     public static InstructionRow createInstructionRow(Integer address) {
//         return new InstructionRow(address);
//     }
// 
//     public String getLabel() {
//         return label;
//     }
// 
//     public void setLabel(String label) {
//         this.label = label;
//     }
// 
//     public String getInstruction() {
//         return instruction;
//     }
// 
//     public void setInstruction(String instruction) {
//         this.instruction = instruction;
//     }
// 
//     public IData getData() {
//         return data;
//     }
// 
//     public void setData(IData data) {
//         this.data = data;
//     }
// 
//     public IAddress getAddress() {
//         return address;
//     }
// 
//     public void setAddress(IAddress address) {
//         this.address = address;
//     }
// 
//     public void setHasOperandLabel(boolean hasLabelOperand) {
//         this.hasLabelOperand = hasLabelOperand;
//     }
// 
//     public boolean getHasLabelOperand() {
//         return hasLabelOperand;
//     }
// 
//     public void setOperandLabel(String labelOperand) {
//         this.labelOperand = labelOperand;
//     }
// 
//     public String getLabelOperand() {
//         return labelOperand;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
//         InstructionRow that = (InstructionRow) o;
//         return Objects.equals(label, that.label) && Objects.equals(instruction, that.instruction) && Objects.equals(data, that.data) && Objects.equals(address, that.address);
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hash(label, instruction, data, address);
//     }
// 
//     @Override
//     public String toString() {
//         return "InstructionRow{" +
//                 "label='" + label + '\'' +
//                 ", instruction='" + instruction + '\'' +
//                 ", data=" + data +
//                 ", address=" + address +
//                 ", hasLabelOperand=" + hasLabelOperand +
//                 ", labelOperand='" + labelOperand + '\'' +
//                 '}';
//     }
// }


// Path: src/main/java/com/amanvishnani/sim8085/domain/I8085.java
import com.amanvishnani.sim8085.domain.Impl.Flags;
import com.amanvishnani.sim8085.domain.Impl.InstructionExecuted;
import com.amanvishnani.sim8085.domain.Impl.InstructionRow;
import io.reactivex.rxjava3.subjects.PublishSubject;
import java.util.ArrayList;

package com.amanvishnani.sim8085.domain;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */



/**
 *
 * @author Aman Vishnani
 */
public interface I8085 {
    void nextInstructionPointer();

    IRegister getA();
    IRegister getB();
    IRegister getC();
    IRegister getD();
    IRegister getE();
    IRegister getH();
    IRegister getL();
    IData getM();
    Flags getFlags();