|
CREATE TABLE msgout (msg TEXT, channel TEXT); |
|
|
|
|
|
CREATE TABLE signal( |
|
exe BOOLEAN, |
|
is_running BOOLEAN, |
|
instr INT |
|
); |
|
|
|
INSERT INTO signal VALUES ( |
|
FALSE, |
|
FALSE, |
|
0 |
|
); |
|
|
|
|
|
CREATE TABLE register( |
|
id INT PRIMARY KEY, |
|
value INT |
|
); |
|
|
|
INSERT INTO register VALUES |
|
(0, 0), -- R0 |
|
(1, 0), -- R1 |
|
(2, 0), -- R2 |
|
(3, 0), -- R3 |
|
(4, 0), -- R4 |
|
(5, 0), -- R5 |
|
(6, 0), -- R6 |
|
(7, 0), -- R7 |
|
(32, 0), -- PC |
|
(64, 0); |
|
-- COND |
|
|
|
CREATE TABLE memory( |
|
address INT UNIQUE, |
|
value INT |
|
); |
|
|
|
|
|
CREATE TABLE clkt( |
|
value INT |
|
); |
|
; |
|
|
|
pragma recursive_triggers = 1; |
|
|
|
|
|
|
|
-- ################################ |
|
-- CLK Falling edge detection |
|
-- ################################ |
|
DROP TRIGGER IF EXISTS clk_trigger; |
|
|
|
CREATE TRIGGER clk_trigger |
|
AFTER INSERT ON clkt |
|
BEGIN |
|
UPDATE signal |
|
SET instr = ( |
|
(SELECT value FROM memory WHERE address = (SELECT value FROM register WHERE id = 32)) |
|
); |
|
END; |
|
|
|
|
|
-- ################################ |
|
-- ## Instruction Handlers |
|
-- ################################ |
|
|
|
-- ## Catchall |
|
DROP TRIGGER IF EXISTS instr_trigger; |
|
|
|
CREATE TRIGGER instr_trigger |
|
BEFORE UPDATE OF instr ON signal |
|
BEGIN |
|
UPDATE register |
|
SET value = value + 1 |
|
WHERE id = 32; |
|
END; |
|
|
|
|
|
-- ## HLT ## |
|
DROP TRIGGER IF EXISTS instr_hlt_trigger; |
|
|
|
CREATE TRIGGER instr_hlt_trigger |
|
AFTER UPDATE OF instr ON signal |
|
WHEN NEW.instr = 0xF025 |
|
BEGIN |
|
UPDATE signal SET is_running = 0; |
|
SELECT RAISE(FAIL, 'HALT encountered'); |
|
END; |
|
|
|
|
|
-- ## TRAP x25 (PUTS) ## |
|
DROP TRIGGER IF EXISTS instr_puts_trigger; |
|
|
|
CREATE TRIGGER instr_puts_trigger |
|
AFTER UPDATE OF instr ON signal |
|
WHEN NEW.instr = 0xF022 |
|
BEGIN |
|
|
|
-- PUTS implementation: read characters until null terminator |
|
INSERT INTO msgout |
|
SELECT group_concat(char(value), ''), 'output' |
|
FROM ( |
|
SELECT value |
|
FROM memory |
|
WHERE address >= (SELECT value FROM register WHERE id = 0) |
|
AND address < COALESCE( |
|
(SELECT MIN(address) FROM memory |
|
WHERE address >= (SELECT value FROM register WHERE id = 0) |
|
AND value = 0), |
|
0x10000) -- if no null terminator, go all the way! |
|
ORDER BY address |
|
); |
|
END; |
|
|
|
|
|
-- ## TRAP x21 (OUT) |
|
DROP TRIGGER IF EXISTS instr_trap_out_trigger; |
|
|
|
CREATE TRIGGER instr_trap_out_trigger |
|
AFTER UPDATE OF instr ON signal |
|
WHEN NEW.instr = 0xF021 |
|
BEGIN |
|
INSERT INTO msgout (msg, channel) |
|
VALUES ( |
|
char((SELECT value FROM register WHERE id = 0) & 0xFF), |
|
'output' |
|
); |
|
END; |
|
|
|
|
|
-- ## TRAP - All -- triggers are LIFO, so this runs BEFORE SPECIFIC## |
|
DROP TRIGGER IF EXISTS instr_trap_trigger; |
|
|
|
CREATE TRIGGER instr_trap_trigger |
|
AFTER UPDATE OF instr ON signal |
|
WHEN NEW.instr & 0xFF00 = 0xF000 |
|
BEGIN |
|
UPDATE register |
|
SET value = (SELECT value FROM register WHERE id = 32) + 1 |
|
WHERE id = 7; -- R7 gets the return address (next instruction after TRAP) |
|
END; |
|
|
|
|
|
|
|
-- ## ADD ## |
|
DROP TRIGGER IF EXISTS instr_add_trigger; |
|
|
|
CREATE TRIGGER instr_add_trigger |
|
AFTER UPDATE OF instr ON signal |
|
WHEN NEW.instr & 0xF000 = 0x1000 |
|
BEGIN |
|
UPDATE register |
|
SET value = ((SELECT value FROM register WHERE id = (NEW.instr >> 6) & 0x7) -- SR1 |
|
+ (CASE |
|
WHEN (NEW.instr & 0x0020) != 0 THEN -- immediate mode (bit 5 set) |
|
CASE |
|
WHEN (NEW.instr & 0x0010) != 0 THEN -- sign extend negative imm5 |
|
(NEW.instr & 0x001F) | 0xFFE0 |
|
ELSE |
|
(NEW.instr & 0x001F) -- positive imm5 unchanged |
|
END |
|
ELSE -- register mode (bit 5 clear) |
|
(SELECT value FROM register WHERE id = NEW.instr & 0x7) -- SR2 |
|
END)) & 0xFFFF -- wrap at 16-bit |
|
WHERE id = (NEW.instr >> 9) & 0x7; -- destination register DR |
|
|
|
UPDATE register |
|
SET value = (CASE |
|
WHEN (SELECT value FROM register WHERE id = (NEW.instr >> 9) & 0x7) = 0 THEN 2 -- Z |
|
WHEN (SELECT value FROM register WHERE id = (NEW.instr >> 9) & 0x7) >> 15 == 0 THEN 1 -- P |
|
ELSE 4 -- N |
|
END) |
|
WHERE id = 64; |
|
END; |
|
|
|
|
|
|
|
-- ## AND ## |
|
DROP TRIGGER IF EXISTS instr_and_trigger; |
|
|
|
CREATE TRIGGER instr_and_trigger |
|
AFTER UPDATE OF instr ON signal |
|
WHEN NEW.instr & 0xF000 = 0x5000 |
|
BEGIN |
|
UPDATE register |
|
SET value = ((SELECT value FROM register WHERE id = (NEW.instr >> 6) & 0x7) -- SR1 |
|
& (CASE |
|
WHEN (NEW.instr & 0x0020) != 0 THEN -- immediate mode (bit 5 set) |
|
CASE |
|
WHEN (NEW.instr & 0x0010) != 0 THEN -- sign extend negative imm5 |
|
(NEW.instr & 0x001F) | 0xFFE0 |
|
ELSE |
|
(NEW.instr & 0x001F) -- positive imm5 unchanged |
|
END |
|
ELSE -- register mode (bit 5 clear) |
|
(SELECT value FROM register WHERE id = NEW.instr & 0x7) -- SR2 |
|
END)) & 0xFFFF -- wrap at 16-bit |
|
WHERE id = (NEW.instr >> 9) & 0x7; -- destination register DR |
|
|
|
UPDATE register |
|
SET value = (CASE |
|
WHEN (SELECT value FROM register WHERE id = (NEW.instr >> 9) & 0x7) = 0 THEN 2 -- Z |
|
WHEN (SELECT value FROM register WHERE id = (NEW.instr >> 9) & 0x7) >> 15 == 0 THEN 1 -- P |
|
ELSE 4 -- N |
|
END) |
|
WHERE id = 64; |
|
END; |
|
|
|
|
|
|
|
-- ## NOT ## |
|
DROP TRIGGER IF EXISTS instr_not_trigger; |
|
|
|
CREATE TRIGGER instr_not_trigger |
|
AFTER UPDATE OF instr ON signal |
|
WHEN NEW.instr & 0xF000 = 0x9000 |
|
BEGIN |
|
UPDATE register |
|
SET value = (0xFFFF - (SELECT value FROM register WHERE id = (NEW.instr >> 6) & 0x7)) & 0xFFFF |
|
WHERE id = (NEW.instr >> 9) & 0x7; |
|
|
|
UPDATE register |
|
SET value = (CASE |
|
WHEN (SELECT value FROM register WHERE id = (NEW.instr >> 9) & 0x7) = 0 THEN 2 -- Z |
|
WHEN (SELECT value FROM register WHERE id = (NEW.instr >> 9) & 0x7) >> 15 == 0 THEN 1 -- P |
|
ELSE 4 -- N |
|
END) |
|
WHERE id = 64; |
|
END; |
|
|
|
|
|
|
|
-- ## BR ## |
|
DROP TRIGGER IF EXISTS instr_br_trigger; |
|
|
|
CREATE TRIGGER instr_br_trigger |
|
AFTER UPDATE OF instr ON signal |
|
WHEN NEW.instr & 0xF000 = 0x0000 |
|
BEGIN |
|
UPDATE register |
|
SET value = (SELECT value FROM register WHERE id = 32) + |
|
(CASE |
|
WHEN ((NEW.instr & 0x0800) != 0 AND (SELECT value FROM register WHERE id = 64) = 4) OR -- n AND N |
|
((NEW.instr & 0x0400) != 0 AND (SELECT value FROM register WHERE id = 64) = 2) OR -- z AND Z |
|
((NEW.instr & 0x0200) != 0 AND (SELECT value FROM register WHERE id = 64) = 1) -- p AND P |
|
THEN |
|
CASE |
|
WHEN (NEW.instr & 0x0100) != 0 THEN -- sign extend negative offset |
|
(NEW.instr & 0x01FF) | 0xFE00 |
|
ELSE |
|
(NEW.instr & 0x01FF) -- positive offset unchanged |
|
END |
|
ELSE |
|
0 -- no branch, PC already incremented |
|
END) & 0xFFFF |
|
WHERE id = 32; |
|
END; |
|
|
|
|
|
|
|
-- ## JSR / JSRR ## |
|
DROP TRIGGER IF EXISTS instr_jsr_trigger; |
|
|
|
CREATE TRIGGER instr_jsr_trigger |
|
AFTER UPDATE OF instr ON signal |
|
WHEN NEW.instr & 0xF000 = 0x4000 |
|
BEGIN |
|
|
|
-- Capture the incremented PC as the return address |
|
UPDATE register |
|
SET value = (SELECT value FROM register WHERE id = 32) |
|
WHERE id = 7; |
|
|
|
-- Dispatch based on addressing mode |
|
UPDATE register |
|
SET value = ( |
|
CASE |
|
WHEN (NEW.instr & 0x0800) != 0 THEN -- JSR, PC-relative |
|
((SELECT value FROM register WHERE id = 7) + |
|
(CASE |
|
WHEN (NEW.instr & 0x0400) != 0 THEN -- sign extend negative offset11 |
|
(NEW.instr & 0x07FF) | 0xF800 |
|
ELSE |
|
(NEW.instr & 0x07FF) |
|
END)) & 0xFFFF |
|
ELSE -- JSRR, register indirect |
|
(SELECT value FROM register WHERE id = (NEW.instr >> 6) & 0x7) |
|
END) |
|
WHERE id = 32; |
|
END; |
|
|
|
|
|
|
|
-- ## JMP / RET ## |
|
DROP TRIGGER IF EXISTS instr_jmp_trigger; |
|
|
|
CREATE TRIGGER instr_jmp_trigger |
|
AFTER UPDATE OF instr ON signal |
|
WHEN NEW.instr & 0xF000 = 0xC000 |
|
BEGIN |
|
|
|
UPDATE register |
|
SET value = (SELECT value FROM register WHERE id = (NEW.instr >> 6) & 0x7) |
|
WHERE id = 32; |
|
END; |
|
|
|
|
|
|
|
-- ## LD ## |
|
DROP TRIGGER IF EXISTS instr_ld_trigger; |
|
|
|
CREATE TRIGGER instr_ld_trigger |
|
AFTER UPDATE OF instr ON signal |
|
WHEN NEW.instr & 0xF000 = 0x2000 |
|
BEGIN |
|
UPDATE register |
|
SET value = (SELECT COALESCE(value, 0) FROM memory |
|
WHERE address = ((CASE |
|
WHEN (NEW.instr & 0x0100) != 0 THEN |
|
(NEW.instr & 0x01FF) | 0xFE00 -- sign extend negative offset |
|
ELSE |
|
(NEW.instr & 0x01FF) -- positive offset unchanged |
|
END) |
|
+ (SELECT value FROM register WHERE id = 32)) & 0xFFFF) -- PC + offset, wrap at 16-bit |
|
WHERE id = (NEW.instr >> 9) & 0x7; -- destination register DR |
|
|
|
UPDATE register |
|
SET value = (CASE |
|
WHEN (SELECT value FROM register WHERE id = (NEW.instr >> 9) & 0x7) = 0 THEN 2 -- Z |
|
WHEN (SELECT value FROM register WHERE id = (NEW.instr >> 9) & 0x7) >> 15 == 0 THEN 1 -- P |
|
ELSE 4 -- N |
|
END) |
|
WHERE id = 64; |
|
END; |
|
|
|
|
|
|
|
-- ## LDI ## |
|
DROP TRIGGER IF EXISTS instr_ldi_trigger; |
|
|
|
CREATE TRIGGER instr_ldi_trigger |
|
AFTER UPDATE OF instr ON signal |
|
WHEN NEW.instr & 0xF000 = 0xA000 |
|
BEGIN |
|
UPDATE register |
|
SET value = ( |
|
SELECT COALESCE(value, 0) FROM memory |
|
WHERE address = ( |
|
SELECT COALESCE(value, 0) FROM memory |
|
WHERE address = ((CASE |
|
WHEN (NEW.instr & 0x0100) != 0 THEN |
|
(NEW.instr & 0x01FF) | 0xFE00 -- sign extend negative offset |
|
ELSE |
|
(NEW.instr & 0x01FF) -- positive offset unchanged |
|
END) |
|
+ (SELECT value FROM register WHERE id = 32)) & 0xFFFF) |
|
) |
|
WHERE id = (NEW.instr >> 9) & 0x7; |
|
|
|
UPDATE register |
|
SET value = (CASE |
|
WHEN (SELECT value FROM register WHERE id = (NEW.instr >> 9) & 0x7) = 0 THEN 2 -- Z |
|
WHEN (SELECT value FROM register WHERE id = (NEW.instr >> 9) & 0x7) >> 15 == 0 THEN 1 -- P |
|
ELSE 4 -- N |
|
END) |
|
WHERE id = 64; |
|
END; |
|
|
|
|
|
|
|
-- ## LDR ## |
|
DROP TRIGGER IF EXISTS instr_ldr_trigger; |
|
|
|
CREATE TRIGGER instr_ldr_trigger |
|
AFTER UPDATE OF instr ON signal |
|
WHEN NEW.instr & 0xF000 = 0x6000 |
|
BEGIN |
|
UPDATE register |
|
SET value = (SELECT COALESCE(value, 0) FROM memory |
|
WHERE address = ((SELECT value FROM register WHERE id = (NEW.instr >> 6) & 0x7) |
|
+ CASE |
|
WHEN (NEW.instr & 0x0020) != 0 THEN |
|
(NEW.instr & 0x003F) | 0xFFC0 |
|
ELSE |
|
(NEW.instr & 0x003F) |
|
END) & 0xFFFF) |
|
WHERE id = (NEW.instr >> 9) & 0x7; |
|
|
|
UPDATE register |
|
SET value = (CASE |
|
WHEN (SELECT value FROM register WHERE id = (NEW.instr >> 9) & 0x7) = 0 THEN 2 -- Z |
|
WHEN (SELECT value FROM register WHERE id = (NEW.instr >> 9) & 0x7) >> 15 == 0 THEN 1 -- P |
|
ELSE 4 -- N |
|
END) |
|
WHERE id = 64; |
|
END; |
|
|
|
|
|
|
|
-- ## LEA ## |
|
DROP TRIGGER IF EXISTS instr_lea_trigger; |
|
|
|
CREATE TRIGGER instr_lea_trigger |
|
AFTER UPDATE OF instr ON signal |
|
WHEN NEW.instr & 0xF000 = 0xE000 |
|
BEGIN |
|
UPDATE register |
|
SET value = ((CASE |
|
WHEN (NEW.instr & 0x0100) != 0 THEN |
|
(NEW.instr & 0x01FF) | 0xFE00 |
|
ELSE |
|
(NEW.instr & 0x01FF) |
|
END) |
|
+ (SELECT value FROM register WHERE id = 32)) & 0xFFFF |
|
WHERE id = (NEW.instr >> 9) & 0x7; |
|
|
|
UPDATE register |
|
SET value = (CASE |
|
WHEN (SELECT value FROM register WHERE id = (NEW.instr >> 9) & 0x7) = 0 THEN 2 -- Z |
|
WHEN (SELECT value FROM register WHERE id = (NEW.instr >> 9) & 0x7) >> 15 == 0 THEN 1 -- P |
|
ELSE 4 -- N |
|
END) |
|
WHERE id = 64; |
|
END; |
|
|
|
|
|
|
|
-- ## ST ## |
|
DROP TRIGGER IF EXISTS instr_st_trigger; |
|
|
|
CREATE TRIGGER instr_st_trigger |
|
AFTER UPDATE OF instr ON signal |
|
WHEN NEW.instr & 0xF000 = 0x3000 |
|
BEGIN |
|
INSERT OR REPLACE INTO memory (address, value) |
|
VALUES ( |
|
((CASE |
|
WHEN (NEW.instr & 0x0100) != 0 THEN |
|
(NEW.instr & 0x01FF) | 0xFE00 -- sign extend negative offset |
|
ELSE |
|
(NEW.instr & 0x01FF) -- positive offset unchanged |
|
END) |
|
+ (SELECT value FROM register WHERE id = 32)) & 0xFFFF, -- PC + offset, wrap at 16-bit |
|
(SELECT value FROM register WHERE id = (NEW.instr >> 9) & 0x7) -- source register SR |
|
); |
|
END; |
|
|
|
|
|
|
|
-- ## STI ## |
|
DROP TRIGGER IF EXISTS instr_sti_trigger; |
|
|
|
CREATE TRIGGER instr_sti_trigger |
|
AFTER UPDATE OF instr ON signal |
|
WHEN NEW.instr & 0xF000 = 0xB000 |
|
BEGIN |
|
INSERT OR REPLACE INTO memory (address, value) |
|
VALUES ( |
|
( |
|
SELECT COALESCE(value, 0) |
|
FROM memory |
|
WHERE address = ( |
|
((CASE |
|
WHEN (NEW.instr & 0x0100) != 0 THEN |
|
(NEW.instr & 0x01FF) | 0xFE00 |
|
ELSE |
|
(NEW.instr & 0x01FF) |
|
END) |
|
+ (SELECT value FROM register WHERE id = 32)) & 0xFFFF |
|
) |
|
) & 0xFFFF, |
|
(SELECT value FROM register WHERE id = (NEW.instr >> 9) & 0x7) |
|
); |
|
END; |
|
|
|
|
|
|
|
-- ## STR ## |
|
DROP TRIGGER IF EXISTS instr_str_trigger; |
|
|
|
CREATE TRIGGER instr_str_trigger |
|
AFTER UPDATE OF instr ON signal |
|
WHEN NEW.instr & 0xF000 = 0x7000 |
|
BEGIN |
|
INSERT OR REPLACE INTO memory (address, value) |
|
VALUES ( |
|
((SELECT value FROM register WHERE id = (NEW.instr >> 6) & 0x7) |
|
+ CASE |
|
WHEN (NEW.instr & 0x0020) != 0 THEN |
|
(NEW.instr & 0x003F) | 0xFFC0 |
|
ELSE |
|
(NEW.instr & 0x003F) |
|
END) & 0xFFFF, |
|
(SELECT value FROM register WHERE id = (NEW.instr >> 9) & 0x7) |
|
); |
|
END; |
|
|
|
BEGIN; |
|
INSERT INTO memory (address, value) VALUES (12288, 20512); |
|
INSERT INTO memory (address, value) VALUES (12289, 4130); |
|
INSERT INTO memory (address, value) VALUES (12290, 57976); |
|
INSERT INTO memory (address, value) VALUES (12291, 9327); |
|
INSERT INTO memory (address, value) VALUES (12292, 28736); |
|
INSERT INTO memory (address, value) VALUES (12293, 4705); |
|
INSERT INTO memory (address, value) VALUES (12294, 5311); |
|
INSERT INTO memory (address, value) VALUES (12295, 1020); |
|
INSERT INTO memory (address, value) VALUES (12296, 57970); |
|
INSERT INTO memory (address, value) VALUES (12297, 9321); |
|
INSERT INTO memory (address, value) VALUES (12298, 24640); |
|
INSERT INTO memory (address, value) VALUES (12299, 5632); |
|
INSERT INTO memory (address, value) VALUES (12300, 6339); |
|
INSERT INTO memory (address, value) VALUES (12301, 6404); |
|
INSERT INTO memory (address, value) VALUES (12302, 5828); |
|
INSERT INTO memory (address, value) VALUES (12303, 30272); |
|
INSERT INTO memory (address, value) VALUES (12304, 4705); |
|
INSERT INTO memory (address, value) VALUES (12305, 5311); |
|
INSERT INTO memory (address, value) VALUES (12306, 1015); |
|
INSERT INTO memory (address, value) VALUES (12307, 57959); |
|
INSERT INTO memory (address, value) VALUES (12308, 9311); |
|
INSERT INTO memory (address, value) VALUES (12309, 4674); |
|
INSERT INTO memory (address, value) VALUES (12310, 9308); |
|
INSERT INTO memory (address, value) VALUES (12311, 22240); |
|
INSERT INTO memory (address, value) VALUES (12312, 24640); |
|
INSERT INTO memory (address, value) VALUES (12313, 23392); |
|
INSERT INTO memory (address, value) VALUES (12314, 7328); |
|
INSERT INTO memory (address, value) VALUES (12315, 1027); |
|
INSERT INTO memory (address, value) VALUES (12316, 6979); |
|
INSERT INTO memory (address, value) VALUES (12317, 7615); |
|
INSERT INTO memory (address, value) VALUES (12318, 4092); |
|
INSERT INTO memory (address, value) VALUES (12319, 4101); |
|
INSERT INTO memory (address, value) VALUES (12320, 6274); |
|
INSERT INTO memory (address, value) VALUES (12321, 6463); |
|
INSERT INTO memory (address, value) VALUES (12322, 23968); |
|
INSERT INTO memory (address, value) VALUES (12323, 40767); |
|
INSERT INTO memory (address, value) VALUES (12324, 8161); |
|
INSERT INTO memory (address, value) VALUES (12325, 6663); |
|
INSERT INTO memory (address, value) VALUES (12326, 2051); |
|
INSERT INTO memory (address, value) VALUES (12327, 4103); |
|
INSERT INTO memory (address, value) VALUES (12328, 7585); |
|
INSERT INTO memory (address, value) VALUES (12329, 4091); |
|
INSERT INTO memory (address, value) VALUES (12330, 28736); |
|
INSERT INTO memory (address, value) VALUES (12331, 6048); |
|
INSERT INTO memory (address, value) VALUES (12332, 4735); |
|
INSERT INTO memory (address, value) VALUES (12333, 5311); |
|
INSERT INTO memory (address, value) VALUES (12334, 1001); |
|
INSERT INTO memory (address, value) VALUES (12335, 13898); |
|
INSERT INTO memory (address, value) VALUES (12336, 8265); |
|
INSERT INTO memory (address, value) VALUES (12337, 57929); |
|
INSERT INTO memory (address, value) VALUES (12338, 21664); |
|
INSERT INTO memory (address, value) VALUES (12339, 22240); |
|
INSERT INTO memory (address, value) VALUES (12340, 5878); |
|
INSERT INTO memory (address, value) VALUES (12341, 6147); |
|
INSERT INTO memory (address, value) VALUES (12342, 2051); |
|
INSERT INTO memory (address, value) VALUES (12343, 4099); |
|
INSERT INTO memory (address, value) VALUES (12344, 5281); |
|
INSERT INTO memory (address, value) VALUES (12345, 4091); |
|
INSERT INTO memory (address, value) VALUES (12346, 28736); |
|
INSERT INTO memory (address, value) VALUES (12347, 13373); |
|
INSERT INTO memory (address, value) VALUES (12348, 8764); |
|
INSERT INTO memory (address, value) VALUES (12349, 9273); |
|
INSERT INTO memory (address, value) VALUES (12350, 8249); |
|
INSERT INTO memory (address, value) VALUES (12351, 5751); |
|
INSERT INTO memory (address, value) VALUES (12352, 2563); |
|
INSERT INTO memory (address, value) VALUES (12353, 5281); |
|
INSERT INTO memory (address, value) VALUES (12354, 13364); |
|
INSERT INTO memory (address, value) VALUES (12355, 3618); |
|
INSERT INTO memory (address, value) VALUES (12356, 5750); |
|
INSERT INTO memory (address, value) VALUES (12357, 2574); |
|
INSERT INTO memory (address, value) VALUES (12358, 4129); |
|
INSERT INTO memory (address, value) VALUES (12359, 10793); |
|
INSERT INTO memory (address, value) VALUES (12360, 4101); |
|
INSERT INTO memory (address, value) VALUES (12361, 61473); |
|
INSERT INTO memory (address, value) VALUES (12362, 6304); |
|
INSERT INTO memory (address, value) VALUES (12363, 1028); |
|
INSERT INTO memory (address, value) VALUES (12364, 8228); |
|
INSERT INTO memory (address, value) VALUES (12365, 61473); |
|
INSERT INTO memory (address, value) VALUES (12366, 6463); |
|
INSERT INTO memory (address, value) VALUES (12367, 4091); |
|
INSERT INTO memory (address, value) VALUES (12368, 20512); |
|
INSERT INTO memory (address, value) VALUES (12369, 12326); |
|
INSERT INTO memory (address, value) VALUES (12370, 12324); |
|
INSERT INTO memory (address, value) VALUES (12371, 3602); |
|
INSERT INTO memory (address, value) VALUES (12372, 9761); |
|
INSERT INTO memory (address, value) VALUES (12373, 1028); |
|
INSERT INTO memory (address, value) VALUES (12374, 22240); |
|
INSERT INTO memory (address, value) VALUES (12375, 13854); |
|
INSERT INTO memory (address, value) VALUES (12376, 12831); |
|
INSERT INTO memory (address, value) VALUES (12377, 3596); |
|
INSERT INTO memory (address, value) VALUES (12378, 10774); |
|
INSERT INTO memory (address, value) VALUES (12379, 4101); |
|
INSERT INTO memory (address, value) VALUES (12380, 61473); |
|
INSERT INTO memory (address, value) VALUES (12381, 6304); |
|
INSERT INTO memory (address, value) VALUES (12382, 1028); |
|
INSERT INTO memory (address, value) VALUES (12383, 8210); |
|
INSERT INTO memory (address, value) VALUES (12384, 61473); |
|
INSERT INTO memory (address, value) VALUES (12385, 6463); |
|
INSERT INTO memory (address, value) VALUES (12386, 4091); |
|
INSERT INTO memory (address, value) VALUES (12387, 12820); |
|
INSERT INTO memory (address, value) VALUES (12388, 20512); |
|
INSERT INTO memory (address, value) VALUES (12389, 12305); |
|
INSERT INTO memory (address, value) VALUES (12390, 8206); |
|
INSERT INTO memory (address, value) VALUES (12391, 4159); |
|
INSERT INTO memory (address, value) VALUES (12392, 12300); |
|
INSERT INTO memory (address, value) VALUES (12393, 513); |
|
INSERT INTO memory (address, value) VALUES (12394, 3585); |
|
INSERT INTO memory (address, value) VALUES (12395, 3996); |
|
INSERT INTO memory (address, value) VALUES (12396, 8203); |
|
INSERT INTO memory (address, value) VALUES (12397, 10755); |
|
INSERT INTO memory (address, value) VALUES (12398, 4101); |
|
INSERT INTO memory (address, value) VALUES (12399, 61473); |
|
INSERT INTO memory (address, value) VALUES (12400, 61477); |
|
INSERT INTO memory (address, value) VALUES (12401, 48); |
|
INSERT INTO memory (address, value) VALUES (12402, 57); |
|
INSERT INTO memory (address, value) VALUES (12403, 230); |
|
INSERT INTO memory (address, value) VALUES (12404, 229); |
|
INSERT INTO memory (address, value) VALUES (12405, 69); |
|
INSERT INTO memory (address, value) VALUES (12406, 1); |
|
INSERT INTO memory (address, value) VALUES (12407, 0); |
|
INSERT INTO memory (address, value) VALUES (12408, 0); |
|
INSERT INTO memory (address, value) VALUES (12409, 0); |
|
INSERT INTO memory (address, value) VALUES (12410, 0); |
|
INSERT INTO memory (address, value) VALUES (12411, 0); |
|
INSERT INTO memory (address, value) VALUES (12412, 0); |
|
INSERT INTO memory (address, value) VALUES (12413, 0); |
|
INSERT INTO memory (address, value) VALUES (12414, 0); |
|
INSERT INTO memory (address, value) VALUES (12415, 0); |
|
INSERT INTO memory (address, value) VALUES (12416, 0); |
|
INSERT INTO memory (address, value) VALUES (12417, 0); |
|
INSERT INTO memory (address, value) VALUES (12418, 0); |
|
INSERT INTO memory (address, value) VALUES (12419, 0); |
|
INSERT INTO memory (address, value) VALUES (12420, 0); |
|
INSERT INTO memory (address, value) VALUES (12421, 0); |
|
INSERT INTO memory (address, value) VALUES (12422, 0); |
|
INSERT INTO memory (address, value) VALUES (12423, 0); |
|
INSERT INTO memory (address, value) VALUES (12424, 0); |
|
INSERT INTO memory (address, value) VALUES (12425, 0); |
|
INSERT INTO memory (address, value) VALUES (12426, 0); |
|
INSERT INTO memory (address, value) VALUES (12427, 0); |
|
INSERT INTO memory (address, value) VALUES (12428, 0); |
|
INSERT INTO memory (address, value) VALUES (12429, 0); |
|
INSERT INTO memory (address, value) VALUES (12430, 0); |
|
INSERT INTO memory (address, value) VALUES (12431, 0); |
|
INSERT INTO memory (address, value) VALUES (12432, 0); |
|
INSERT INTO memory (address, value) VALUES (12433, 0); |
|
INSERT INTO memory (address, value) VALUES (12434, 0); |
|
INSERT INTO memory (address, value) VALUES (12435, 0); |
|
INSERT INTO memory (address, value) VALUES (12436, 0); |
|
INSERT INTO memory (address, value) VALUES (12437, 0); |
|
INSERT INTO memory (address, value) VALUES (12438, 0); |
|
INSERT INTO memory (address, value) VALUES (12439, 0); |
|
INSERT INTO memory (address, value) VALUES (12440, 0); |
|
INSERT INTO memory (address, value) VALUES (12441, 0); |
|
INSERT INTO memory (address, value) VALUES (12442, 0); |
|
INSERT INTO memory (address, value) VALUES (12443, 0); |
|
INSERT INTO memory (address, value) VALUES (12444, 0); |
|
INSERT INTO memory (address, value) VALUES (12445, 0); |
|
INSERT INTO memory (address, value) VALUES (12446, 0); |
|
INSERT INTO memory (address, value) VALUES (12447, 0); |
|
INSERT INTO memory (address, value) VALUES (12448, 0); |
|
INSERT INTO memory (address, value) VALUES (12449, 0); |
|
INSERT INTO memory (address, value) VALUES (12450, 0); |
|
INSERT INTO memory (address, value) VALUES (12451, 0); |
|
INSERT INTO memory (address, value) VALUES (12452, 0); |
|
INSERT INTO memory (address, value) VALUES (12453, 0); |
|
INSERT INTO memory (address, value) VALUES (12454, 0); |
|
INSERT INTO memory (address, value) VALUES (12455, 0); |
|
INSERT INTO memory (address, value) VALUES (12456, 0); |
|
INSERT INTO memory (address, value) VALUES (12457, 0); |
|
INSERT INTO memory (address, value) VALUES (12458, 0); |
|
INSERT INTO memory (address, value) VALUES (12459, 0); |
|
INSERT INTO memory (address, value) VALUES (12460, 0); |
|
INSERT INTO memory (address, value) VALUES (12461, 0); |
|
INSERT INTO memory (address, value) VALUES (12462, 0); |
|
INSERT INTO memory (address, value) VALUES (12463, 0); |
|
INSERT INTO memory (address, value) VALUES (12464, 0); |
|
INSERT INTO memory (address, value) VALUES (12465, 0); |
|
INSERT INTO memory (address, value) VALUES (12466, 0); |
|
INSERT INTO memory (address, value) VALUES (12467, 0); |
|
INSERT INTO memory (address, value) VALUES (12468, 0); |
|
INSERT INTO memory (address, value) VALUES (12469, 0); |
|
INSERT INTO memory (address, value) VALUES (12470, 0); |
|
INSERT INTO memory (address, value) VALUES (12471, 0); |
|
INSERT INTO memory (address, value) VALUES (12472, 0); |
|
INSERT INTO memory (address, value) VALUES (12473, 0); |
|
INSERT INTO memory (address, value) VALUES (12474, 0); |
|
INSERT INTO memory (address, value) VALUES (12475, 0); |
|
INSERT INTO memory (address, value) VALUES (12476, 0); |
|
INSERT INTO memory (address, value) VALUES (12477, 0); |
|
INSERT INTO memory (address, value) VALUES (12478, 0); |
|
INSERT INTO memory (address, value) VALUES (12479, 0); |
|
INSERT INTO memory (address, value) VALUES (12480, 0); |
|
INSERT INTO memory (address, value) VALUES (12481, 0); |
|
INSERT INTO memory (address, value) VALUES (12482, 0); |
|
INSERT INTO memory (address, value) VALUES (12483, 0); |
|
INSERT INTO memory (address, value) VALUES (12484, 0); |
|
INSERT INTO memory (address, value) VALUES (12485, 0); |
|
INSERT INTO memory (address, value) VALUES (12486, 0); |
|
INSERT INTO memory (address, value) VALUES (12487, 0); |
|
INSERT INTO memory (address, value) VALUES (12488, 0); |
|
INSERT INTO memory (address, value) VALUES (12489, 0); |
|
INSERT INTO memory (address, value) VALUES (12490, 0); |
|
INSERT INTO memory (address, value) VALUES (12491, 0); |
|
INSERT INTO memory (address, value) VALUES (12492, 0); |
|
INSERT INTO memory (address, value) VALUES (12493, 0); |
|
INSERT INTO memory (address, value) VALUES (12494, 0); |
|
INSERT INTO memory (address, value) VALUES (12495, 0); |
|
INSERT INTO memory (address, value) VALUES (12496, 0); |
|
INSERT INTO memory (address, value) VALUES (12497, 0); |
|
INSERT INTO memory (address, value) VALUES (12498, 0); |
|
INSERT INTO memory (address, value) VALUES (12499, 0); |
|
INSERT INTO memory (address, value) VALUES (12500, 0); |
|
INSERT INTO memory (address, value) VALUES (12501, 0); |
|
INSERT INTO memory (address, value) VALUES (12502, 0); |
|
INSERT INTO memory (address, value) VALUES (12503, 0); |
|
INSERT INTO memory (address, value) VALUES (12504, 0); |
|
INSERT INTO memory (address, value) VALUES (12505, 0); |
|
INSERT INTO memory (address, value) VALUES (12506, 0); |
|
INSERT INTO memory (address, value) VALUES (12507, 0); |
|
INSERT INTO memory (address, value) VALUES (12508, 0); |
|
INSERT INTO memory (address, value) VALUES (12509, 0); |
|
INSERT INTO memory (address, value) VALUES (12510, 0); |
|
INSERT INTO memory (address, value) VALUES (12511, 0); |
|
INSERT INTO memory (address, value) VALUES (12512, 0); |
|
INSERT INTO memory (address, value) VALUES (12513, 0); |
|
INSERT INTO memory (address, value) VALUES (12514, 0); |
|
INSERT INTO memory (address, value) VALUES (12515, 0); |
|
INSERT INTO memory (address, value) VALUES (12516, 0); |
|
INSERT INTO memory (address, value) VALUES (12517, 0); |
|
INSERT INTO memory (address, value) VALUES (12518, 0); |
|
INSERT INTO memory (address, value) VALUES (12519, 0); |
|
INSERT INTO memory (address, value) VALUES (12520, 0); |
|
INSERT INTO memory (address, value) VALUES (12521, 0); |
|
INSERT INTO memory (address, value) VALUES (12522, 0); |
|
INSERT INTO memory (address, value) VALUES (12523, 0); |
|
INSERT INTO memory (address, value) VALUES (12524, 0); |
|
INSERT INTO memory (address, value) VALUES (12525, 0); |
|
INSERT INTO memory (address, value) VALUES (12526, 0); |
|
INSERT INTO memory (address, value) VALUES (12527, 0); |
|
INSERT INTO memory (address, value) VALUES (12528, 0); |
|
INSERT INTO memory (address, value) VALUES (12529, 0); |
|
INSERT INTO memory (address, value) VALUES (12530, 0); |
|
INSERT INTO memory (address, value) VALUES (12531, 0); |
|
INSERT INTO memory (address, value) VALUES (12532, 0); |
|
INSERT INTO memory (address, value) VALUES (12533, 0); |
|
INSERT INTO memory (address, value) VALUES (12534, 0); |
|
INSERT INTO memory (address, value) VALUES (12535, 0); |
|
INSERT INTO memory (address, value) VALUES (12536, 0); |
|
INSERT INTO memory (address, value) VALUES (12537, 0); |
|
INSERT INTO memory (address, value) VALUES (12538, 0); |
|
INSERT INTO memory (address, value) VALUES (12539, 0); |
|
INSERT INTO memory (address, value) VALUES (12540, 0); |
|
INSERT INTO memory (address, value) VALUES (12541, 0); |
|
INSERT INTO memory (address, value) VALUES (12542, 0); |
|
INSERT INTO memory (address, value) VALUES (12543, 0); |
|
INSERT INTO memory (address, value) VALUES (12544, 0); |
|
INSERT INTO memory (address, value) VALUES (12545, 0); |
|
INSERT INTO memory (address, value) VALUES (12546, 0); |
|
INSERT INTO memory (address, value) VALUES (12547, 0); |
|
INSERT INTO memory (address, value) VALUES (12548, 0); |
|
INSERT INTO memory (address, value) VALUES (12549, 0); |
|
INSERT INTO memory (address, value) VALUES (12550, 0); |
|
INSERT INTO memory (address, value) VALUES (12551, 0); |
|
INSERT INTO memory (address, value) VALUES (12552, 0); |
|
INSERT INTO memory (address, value) VALUES (12553, 0); |
|
INSERT INTO memory (address, value) VALUES (12554, 0); |
|
INSERT INTO memory (address, value) VALUES (12555, 0); |
|
INSERT INTO memory (address, value) VALUES (12556, 0); |
|
INSERT INTO memory (address, value) VALUES (12557, 0); |
|
INSERT INTO memory (address, value) VALUES (12558, 0); |
|
INSERT INTO memory (address, value) VALUES (12559, 0); |
|
INSERT INTO memory (address, value) VALUES (12560, 0); |
|
INSERT INTO memory (address, value) VALUES (12561, 0); |
|
INSERT INTO memory (address, value) VALUES (12562, 0); |
|
INSERT INTO memory (address, value) VALUES (12563, 0); |
|
INSERT INTO memory (address, value) VALUES (12564, 0); |
|
INSERT INTO memory (address, value) VALUES (12565, 0); |
|
INSERT INTO memory (address, value) VALUES (12566, 0); |
|
INSERT INTO memory (address, value) VALUES (12567, 0); |
|
INSERT INTO memory (address, value) VALUES (12568, 0); |
|
INSERT INTO memory (address, value) VALUES (12569, 0); |
|
INSERT INTO memory (address, value) VALUES (12570, 0); |
|
INSERT INTO memory (address, value) VALUES (12571, 0); |
|
INSERT INTO memory (address, value) VALUES (12572, 0); |
|
INSERT INTO memory (address, value) VALUES (12573, 0); |
|
INSERT INTO memory (address, value) VALUES (12574, 0); |
|
INSERT INTO memory (address, value) VALUES (12575, 0); |
|
INSERT INTO memory (address, value) VALUES (12576, 0); |
|
INSERT INTO memory (address, value) VALUES (12577, 0); |
|
INSERT INTO memory (address, value) VALUES (12578, 0); |
|
INSERT INTO memory (address, value) VALUES (12579, 0); |
|
INSERT INTO memory (address, value) VALUES (12580, 0); |
|
INSERT INTO memory (address, value) VALUES (12581, 0); |
|
INSERT INTO memory (address, value) VALUES (12582, 0); |
|
INSERT INTO memory (address, value) VALUES (12583, 0); |
|
INSERT INTO memory (address, value) VALUES (12584, 0); |
|
INSERT INTO memory (address, value) VALUES (12585, 0); |
|
INSERT INTO memory (address, value) VALUES (12586, 0); |
|
INSERT INTO memory (address, value) VALUES (12587, 0); |
|
INSERT INTO memory (address, value) VALUES (12588, 0); |
|
INSERT INTO memory (address, value) VALUES (12589, 0); |
|
INSERT INTO memory (address, value) VALUES (12590, 0); |
|
INSERT INTO memory (address, value) VALUES (12591, 0); |
|
INSERT INTO memory (address, value) VALUES (12592, 0); |
|
INSERT INTO memory (address, value) VALUES (12593, 0); |
|
INSERT INTO memory (address, value) VALUES (12594, 0); |
|
INSERT INTO memory (address, value) VALUES (12595, 0); |
|
INSERT INTO memory (address, value) VALUES (12596, 0); |
|
INSERT INTO memory (address, value) VALUES (12597, 0); |
|
INSERT INTO memory (address, value) VALUES (12598, 0); |
|
INSERT INTO memory (address, value) VALUES (12599, 0); |
|
INSERT INTO memory (address, value) VALUES (12600, 0); |
|
INSERT INTO memory (address, value) VALUES (12601, 0); |
|
INSERT INTO memory (address, value) VALUES (12602, 0); |
|
INSERT INTO memory (address, value) VALUES (12603, 0); |
|
INSERT INTO memory (address, value) VALUES (12604, 0); |
|
INSERT INTO memory (address, value) VALUES (12605, 0); |
|
INSERT INTO memory (address, value) VALUES (12606, 0); |
|
INSERT INTO memory (address, value) VALUES (12607, 0); |
|
INSERT INTO memory (address, value) VALUES (12608, 0); |
|
INSERT INTO memory (address, value) VALUES (12609, 0); |
|
INSERT INTO memory (address, value) VALUES (12610, 0); |
|
INSERT INTO memory (address, value) VALUES (12611, 0); |
|
INSERT INTO memory (address, value) VALUES (12612, 0); |
|
INSERT INTO memory (address, value) VALUES (12613, 0); |
|
INSERT INTO memory (address, value) VALUES (12614, 0); |
|
INSERT INTO memory (address, value) VALUES (12615, 0); |
|
INSERT INTO memory (address, value) VALUES (12616, 0); |
|
INSERT INTO memory (address, value) VALUES (12617, 0); |
|
INSERT INTO memory (address, value) VALUES (12618, 0); |
|
INSERT INTO memory (address, value) VALUES (12619, 0); |
|
INSERT INTO memory (address, value) VALUES (12620, 0); |
|
INSERT INTO memory (address, value) VALUES (12621, 0); |
|
INSERT INTO memory (address, value) VALUES (12622, 0); |
|
INSERT INTO memory (address, value) VALUES (12623, 0); |
|
INSERT INTO memory (address, value) VALUES (12624, 0); |
|
INSERT INTO memory (address, value) VALUES (12625, 0); |
|
INSERT INTO memory (address, value) VALUES (12626, 0); |
|
INSERT INTO memory (address, value) VALUES (12627, 0); |
|
INSERT INTO memory (address, value) VALUES (12628, 0); |
|
INSERT INTO memory (address, value) VALUES (12629, 0); |
|
INSERT INTO memory (address, value) VALUES (12630, 0); |
|
INSERT INTO memory (address, value) VALUES (12631, 0); |
|
INSERT INTO memory (address, value) VALUES (12632, 0); |
|
INSERT INTO memory (address, value) VALUES (12633, 0); |
|
INSERT INTO memory (address, value) VALUES (12634, 0); |
|
INSERT INTO memory (address, value) VALUES (12635, 0); |
|
INSERT INTO memory (address, value) VALUES (12636, 0); |
|
INSERT INTO memory (address, value) VALUES (12637, 0); |
|
INSERT INTO memory (address, value) VALUES (12638, 0); |
|
INSERT INTO memory (address, value) VALUES (12639, 0); |
|
INSERT INTO memory (address, value) VALUES (12640, 0); |
|
COMMIT; |
|
|
|
BEGIN; |
|
UPDATE register SET value = 0; |
|
DELETE FROM msgout WHERE channel = 'output'; |
|
UPDATE signal SET is_running = 1; |
|
COMMIT; |
|
|
|
-- step n instructions |
|
BEGIN; |
|
INSERT INTO clkt(value) |
|
SELECT value |
|
FROM generate_series(1, 8500000); -- Try to pick a number close to the required cycles before halting, unused gernerate_series entires still have a cost. |
|
COMMIT; |
|
|
|
-- run summary |
|
SELECT 'Calculated first ' || count(*) || ' digits of pi: ' || group_concat(msg, '') FROM msgout WHERE channel = 'output'; |
|
SELECT 'Ran for ' || count(*) || ' clock cycles before halting.' FROM clkt; |