Make write via waiting buf

This commit is contained in:
2026-04-12 16:33:57 +03:00
parent d039b9a5b8
commit 65e7b45861
3 changed files with 12 additions and 46 deletions

View File

@@ -5,6 +5,7 @@
#include "runner.h"
#include "addrs.h"
#include "mem.h"
#include "instr.h"
#include <libhmmmm/config.h>
#include <libhmmmm/device.h>
#include <libhmmmm/mem.h>
@@ -28,7 +29,9 @@ typedef struct
} device_specs_t;
typedef struct
{
{
prog_counter_t* pc;
instr_h_func* instr;
device_mem_t* deviceMem;
device_specs_t* specs;
} device_info_t;
@@ -42,6 +45,11 @@ uint8_t makeDeviceTick(device_public_context_t* devContext);
device_mem_t* genDevMem(device_specs_t* devSpec, char* errbuf);
size_t pubExtractPcounter(device_public_context_t* devContext);
size_t pubExtractOpcode(device_mem_t* devMem, size_t _programCounter);
void* pubExtractPcounterPtr(device_public_context_t* devContext);
uint8_t pubExtractPcounterSizeWords();
device_specs_t* parseSpecsFromConfig(const conf_dev_t* devConf, char* errbuf);
void fillSmartReadSpecs(device_specs_t* specs, smart_read_spec_t* smartReadSpecs, uint64_t smartReadSpecsCount);
void fillSmartWriteSpecs(device_specs_t* specs, smart_write_spec_t* smartWriteSpecs, uint64_t smartWriteSpecsCount);

View File

@@ -57,38 +57,4 @@ opcode_t extractOpcode(device_mem_t* devMem, prog_counter_t programCounter);
#define READ_MEM(__tgt, __mem, __segno, __addr, __cell_t) \
{\
uint64_t __globalAddr = __mem->memsegShifts[__segno] + __addr; \
if (__mem->smartAddrReadHandlers[__globalAddr].func != NULL) \
{ \
__tgt = *(__cell_t*)__mem->smartAddrReadHandlers[__globalAddr].func(__mem->smartAddrReadHandlers[__globalAddr].ident, __addr, __mem->rawCells + __mem->memsegShifts[__segno]); \
} \
else \
{ \
__tgt = ((__cell_t*)__mem->cells[__segno])[__addr]; \
} \
__mem->memreadCellAddrs[__mem->memreadLen] = __globalAddr; \
__mem->memreadLen += 1; \
}
#define WRITE_MEM(__mem, __segno, __addr, __cell_t, __val) \
{ \
uint64_t __globalAddr = __mem->memsegShifts[__segno] + __addr; \
if (__mem->smartAddrWriteHandlers[__globalAddr].func != NULL) \
{ \
__cell_t __dat = (__cell_t)(__val); \
__mem->smartAddrWriteHandlers[__globalAddr].func(__mem->smartAddrWriteHandlers[__globalAddr].ident, __addr, __mem->rawCells + __mem->memsegShifts[__segno], (void*)&__dat); \
} \
else \
{ \
((__cell_t*)__mem->cells[__segno])[__addr] = (__cell_t)(__val); \
} \
__mem->memwriteCellAddrs[__mem->memwriteLen] = __globalAddr; \
__mem->memwriteLen += 1; \
}
#endif // ifndef __INSTR_H__