//
// Created by william on 10/01/24.
//

#ifndef NESEMULATOR_PROGRAM_VIEW_H
#define NESEMULATOR_PROGRAM_VIEW_H

#include <panel.h>
#include "../include/types.h"
#include "../cpu/decoding.h"
#include "cursor.h"
#include "window.h"
#include "components/linked_list.h"

#define PROGRAM_VIEW_HEIGHT 19
#define PROGRAM_VIEW_WIDTH 42
#define PROGRAM_VIEW_BASE_ADDR 0x0000

typedef struct debug_operand {
    address addr;
    byte op_code;
    AddressingMode addr_mode;
    word value;
} DebugOperand;

typedef struct program_view {
    InteractWindow *window;
    address *pc;
    LinkedList operands;
    LinkedListNode *first_operand_node;
    LinkedListNode *last_operand_node;
} ProgramView;

void pv_init(InteractWindow *interact, int x, int y);

#endif //NESEMULATOR_PROGRAM_VIEW_H