Новые книги на моей полке
Mar. 15th, 2026 02:26 pmC-Cxx-Programmers-Guide-to-Using-PC-BIOS



И вторая книжка, удобный справочник по биосу.







Happy Saturday!
I'm going to be doing a little maintenance today. It will likely cause a tiny interruption of service (specifically for www.dreamwidth.org) on the order of 2-3 minutes while some settings propagate. If you're on a journal page, that should still work throughout!
If it doesn't work, the rollback plan is pretty quick, I'm just toggling a setting on how traffic gets to the site. I'll update this post if something goes wrong, but don't anticipate any interruption to be longer than 10 minutes even in a rollback situation.
...Я оказался на службе у великой корпорации UAC, чьи станции раскинулись на двух лунах Марса — на Фобосе и на его сестре Деймос. И скажу тебе, о терпеливый слушатель, что места эти были холодны и безжизненны, словно забытые стоянки караванов посреди каменной пустыни. Там не росла трава, не пели птицы, и лишь звёзды смотрели на нас с небес, как молчаливые свидетели человеческой дерзости. На этих лунах учёные — люди с глазами красными от бессонницы и умами острыми, как дамасские клинки — занимались делами столь странными, что даже старые мудрецы Самарканда покачали бы головами.Они строили врата без дверей. И называли их телепортами.
— Пространство, — говорили они, — лишь ткань мироздания. Стоит проколоть её иглой науки — и можно пройти из одного места в другое быстрее, чем стрела, выпущенная из лука хана. Через эти врата они отправляли ящики, машины, животных… и иногда людей.Но, как говорят мудрецы Бухары: кто открывает слишком много дверей, однажды откроет ту, за которой прячется беда.
Сначала беда пришла тихо, словно ночной вор. Люди, возвращавшиеся из телепорта, смотрели вокруг глазами пустыми, как высохшие колодцы в заброшенном кишлаке. Некоторые начинали шептать слова, которых не знал ни один земной язык. Другие сходили с ума, словно путники, потерявшие дорогу в песчаной буре. А потом пришли существа.Учёные говорили:
— Это ошибка координат.Офицеры говорили:
Но даже самый простой техник, человек без учёных степеней, понимал то, что иногда понимают только дети и старики: ворота открылись не туда.
— Всё под контролем.
Они открылись туда, куда не следует смотреть даже во сне. В ад.
И вот однажды мне приказали остаться снаружи базы на Фобосе.
— Стой на периметре, — сказали они. — Обычная тревога.
Отряд вошёл внутрь. Я слышал по рации их шаги — тяжёлые, уверенные. Слышал короткие команды офицера. Потом раздалась стрельба. Сначала редкая, как первые капли дождя над степью. Но вскоре она превратилась в бурю. Автоматы гремели так, словно гроза разразилась внутри металлических стен станции. Потом послышались крики. Крики людей, которые встретили нечто, чего не должно существовать под милосердным небом. А потом наступила тишина. Такая тишина, что даже сердце в груди начинает биться осторожно, словно боится разбудить спящую беду.Я сидел долго. Холод Фобоса пробирался сквозь броню, как зимний ветер через щели старого караван-сарая. И тогда я понял: если я не войду внутрь, никто уже не войдёт.
Я поднялся. Взял свой пистолет — единственного товарища в ту ночь. И подошёл к шлюзу базы.
Дверь открылась. О слушатель мой, клянусь пылью пустынь и холодом далёких звёзд: лучше бы она не открывалась. В коридорах лежали мёртвые солдаты. Кровь их текла по полу тёмными ручьями, словно арыки в ночном саду. Лампы под потолком мерцали, как свечи в заброшенной мечети. А из глубины станции доносились шаги. Шаги существ, которых не рождала ни земля, ни небо.Так началась моя дорога — дорога через станции Фобоса, через исчезнувший Деймос, и дальше, туда, где ворота мира распахиваются в бездну.
И если ты спросишь меня, о внимательный слушатель, чем закончится эта история, я отвечу так: история ещё не закончена. Потому что в ту ночь, под холодными звёздами Марса, я сделал первый шаг — шаг прямо в ад.
The Ultimate DOOM/DOOM.WAD
Final DOOM/Plutonia/PLUTONIA.WAD
Final DOOM/TNT/TNT.WAD




circt/lib/Dialect/Sim/Transforms/ProceduralizeSim.cpp: In member function ‘llvm::LogicalResult {anonymous}::ProceduralizeSimPass::proceduralizePrintOps(mlir::Value, llvm::ArrayRef)’:
circt/lib/Dialect/Sim/Transforms/ProceduralizeSim.cpp:213:33: error: no matching function for call to ‘circt::sim::PrintFormattedProcOp::create(mlir::OpBuilder&, mlir::Location, mlir::Value&)’
213 | PrintFormattedProcOp::create(builder, printOp.getLoc(), procPrintInput);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Искусство по прежнему в большом долгу...
module counter (
input logic clk,
input logic reset,
output logic [7:0] count
);
always_ff @(posedge clk or posedge reset) begin
if (reset)
count <= 8'b0;
else
count <= count + 9'd1;
end
endmodule
Превратим Верилог в промежуточное представление:
$ circt-verilog counter.sv
module {
llvm.func @__moore_signal_event_in_slot(i32, !llvm.ptr) -> i1
llvm.func @__moore_wait_event(i32, !llvm.ptr)
hw.module @counter(in %clk : !hw.struct<value: i1, unknown: i1>, in %reset : !hw.struct<value: i1, unknown: i1>, out count : !hw.struct<value: i8, unknown: i8>) attributes {circt.default_time_units = -9 : i32, vpi.all_vars = {clk = 1 : i32, count = 8 : i32, reset = 1 : i32}} {
%0 = llhd.constant_time <0ns, 0d, 1e>
%c-1_i8 = hw.constant -1 : i8
%c0_i8 = hw.constant 0 : i8
%c1_i8 = hw.constant 1 : i8
%1 = hw.aggregate_constant [0 : i8, -1 : i8] : !hw.struct<value: i8, unknown: i8>
%true = hw.constant true
%2 = hw.aggregate_constant [0 : i8, 0 : i8] : !hw.struct<value: i8, unknown: i8>
%value = hw.struct_extract %clk["value"] : !hw.struct<value: i1, unknown: i1>
%unknown = hw.struct_extract %clk["unknown"] : !hw.struct<value: i1, unknown: i1>
%3 = comb.xor %unknown, %true : i1
%4 = comb.and bin %value, %3 : i1
%value_0 = hw.struct_extract %reset["value"] : !hw.struct<value: i1, unknown: i1>
%unknown_1 = hw.struct_extract %reset["unknown"] : !hw.struct<value: i1, unknown: i1>
%5 = comb.xor %unknown_1, %true : i1
%6 = comb.and bin %value_0, %5 : i1
%count = llhd.sig %1 : !hw.struct<value: i8, unknown: i8>
%7:2 = llhd.combinational -> !hw.struct<value: i8, unknown: i8>, i1 {
%10 = llhd.prb %count : !hw.struct<value: i8, unknown: i8>
%value_3 = hw.struct_extract %10["value"] : !hw.struct<value: i8, unknown: i8>
%unknown_4 = hw.struct_extract %10["unknown"] : !hw.struct<value: i8, unknown: i8>
%11 = comb.add %value_3, %c1_i8 : i8
%12 = comb.icmp ne %unknown_4, %c0_i8 : i8
%13 = comb.replicate %12 : (i1) -> i8
%14 = comb.xor %13, %c-1_i8 : i8
%15 = comb.and %11, %14 : i8
%16 = hw.struct_create (%15, %13) : !hw.struct<value: i8, unknown: i8>
llhd.yield %16, %true : !hw.struct<value: i8, unknown: i8>, i1
}
%8 = seq.to_clock %4
%count_2 = seq.firreg %7#0 clock %8 reset async %6, %2 preset 255 {name = "count"} : !hw.struct<value: i8, unknown: i8>
llhd.drv %count, %count_2 after %0 : !hw.struct<value: i8, unknown: i8>
%9 = llhd.prb %count : !hw.struct<value: i8, unknown: i8>
hw.output %9 : !hw.struct<value: i8, unknown: i8>
}
}
Ничо так вроде, годно на первый взгляд.