Симулятор логических схем с программируемыми гейтами на Lua
nik2510 только что Симулятор логических схем с программируемыми гейтами на Lua Простой 3 мин 0 C++ * Lua * Программирование * Процессоры Логические игры Обзор Из песочницы Всем привет, недавно я написал симулятор...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. nik2510 только что Симулятор логических схем с программируемыми гейтами на Lua Простой 3 мин 0 C++ * Lua * Программирование * Процессоры Логические игры Обзор Из песочницы Всем привет, недавно я написал симулятор логических гейтов или вентилей на С++ (sfml для графики + sol2 для интеграции луа скриптов), которые можно программировать на луа таким образом: ```local gate = {} gate. outputCount = 1 function gate. update(inputs) local a = inputs or false local b = inputs or false local result = a and b end return gateЭтот код отвечает за гейт и (Когда 2 входа активны выход равняется true, если хоть один не активен то равен false.
И так-же бинды гейтов к клавишам: ```local binds = { = "scripts/gates/and. lua", = "scripts/gates/or. lua", = "scripts/gates/xor.
Технические детали
lua", = "scripts/gates/not. lua", = "scripts/gates/halfadder. lua" } return bindsДля бинда клавиш вам лишь нужно указать цифру на клавиатуре, и путь к реализации гейта на луа.
Так-же мне стало интересно, смогу ли я на одном гейте запустить что-то на подобии процессора, и у меня получилось. Вот скрипт на луа:```local gate = {} gate. outputCount = 8 local PC = 0 local REG_A = 0 local REG_B = 0 local ZERO_F = false local lastClk = false local memory = {} for i = 0, 255 do memory = 0 end local OP = { NOP = 0x00, LDA = 0x01, LDB = 0x02, ADD = 0x03, SUB = 0x04, ANA = 0x05, ORA = 0x06, STA = 0x07, LDA_M= 0x08, JMP = 0x09, JZ = 0x0A, } local program = { OP.
JMP, 8, } for i = 0, #program - 1 do memory = program end function gate. update(inputs) local clk = inputs if clk and not lastClk then local opcode = memory if opcode == OP. NOP then PC = (PC + 1) % 256 elseif opcode == OP.
Отраслевые последствия
LDA then REG_A = memory PC = (PC + 2) % 256 elseif opcode == OP. LDB then REG_B = memory PC = (PC + 2) % 256 elseif opcode == OP. ADD then REG_A = (REG_A + REG_B) % 256 ZERO_F = (REG_A == 0) PC = (PC + 1) % 256 elseif opcode == OP.
SUB then REG_A = (REG_A - REG_B) % 256 if REG_A < 0 then REG_A = REG_A + 256 end ZERO_F = (REG_A == 0) PC = (PC + 1) % 256 elseif opcode == OP. ANA then local res = 0 local a, b = REG_A, REG_B for bit = 0, 7 do if (a % 2 == 1) and (b % 2 == 1) then res = res + 2^bit end a, b = math. floor(b / 2) end REG_A = res ZERO_F = (REG_A == 0) PC = (PC + 1) % 256 elseif opcode == OP.
STA then local addr = memory memory = REG_A PC = (PC + 2) % 256 elseif opcode == OP. LDA_M then local addr = memory REG_A = memory ZERO_F = (REG_A == 0) PC = (PC + 2) % 256 elseif opcode == OP. JMP then PC = memory elseif opcode == OP.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





