Created
January 28, 2026 05:13
-
-
Save lastforkbender/65de618ed9352b4f7c51a8a64b0a612d to your computer and use it in GitHub Desktop.
GRETA RTSC2D MODAL SYS - MASM32
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| GRETA RTSC2D MODAL SYS / MASM32 SDK | |
| _____________________________________________________________________________________________________________________ | |
| _____________________________________________________________________________________________________________________ | |
| _____________________________________________________________________________________________________________________ | |
| _____________________________________________________________________________________________________________________ | |
| For each ending node of a xyz cube: | |
| Z1 = ◒⇽◭zHt | |
| Z2 = ◓⇽◮zHT | |
| Y1 = ◐⇿◮yTX | |
| Y2 = ◑⇿◭yTH | |
| X1 = ◒⌲◐ xTH | |
| X2 = ◓⌲◑ xHt | |
| Whereas couplets to tri-motion signature constants----arrive as elliptical timestrands merged to Z* and Y*, X* | |
| as mapped conditionals to curvature of both. Of this also, each expansions of Z1 or Z2 is topological to @ X* | |
| however with Y1. This is called residual timestrands coiling, or loop openness signal trace to a position within | |
| a time-gap as set to a rotational particles structure not bound to a certain envelope in the xHt relapse expansion. | |
| X2 rotational variable emphasis is of the expansion qualifies neutral/static ⌲, whereof we can write: | |
| ◓⌲◑ xHt < 《◮yTX~⍜ⅆ》+ ◓ᵐ | |
| Of which determines a framed timestrand having properties to a like mass cluster end-to-end time merge as neutral ~⍜ | |
| extended. Yet only satisfying a Y1 achievable acceleration @ the original/hidden X1 to a initial phase-fold extension | |
| in Y* further. | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
| File: greta_sim_core.asm | |
| .686 | |
| .model flat, stdcall | |
| option casemap:none | |
| include \masm32\include\windows.inc | |
| include \masm32\include\kernel32.inc | |
| includelib \masm32\lib\kernel32.lib | |
| .code | |
| start: | |
| push ebp | |
| mov ebp, esp | |
| call InitState | |
| mov eax, 10000 | |
| push eax | |
| call MainLoop | |
| add esp, 4 | |
| push 0 | |
| call ExitProcess | |
| .data | |
| IDX_X1 dd 0 | |
| IDX_X2 dd 1 | |
| IDX_Y1 dd 2 | |
| IDX_Y2 dd 3 | |
| IDX_Z1 dd 4 | |
| IDX_Z2 dd 5 | |
| N_ENDPTS dd 6 | |
| Q_ONE dq 0x0000000100000000 | |
| DT dq 0x0000000100000000 | |
| EPS_LOOP dq 0x0000000008000000 | |
| K_PAIR dq 0x0000000100000000 | |
| K_PAIR_ROT dq 0x0000000080000000 | |
| K_ZX dq 0x0000000055555555 | |
| ALPHA dq 0x0000000100000000 | |
| BETA dq 0x000000000CCCCCCD | |
| GAMMA_COIL dq 0x000000001999999A | |
| M_DEFAULT dq 0x0000000100000000 | |
| I_DEFAULT dq 0x0000000001999999A | |
| SIG_GROWTH dq 0x000000000028F5C29 | |
| TAU_DECAY dq 0x0000000A00000000 | |
| NOISE_SCALE dq 0x0000000000000064 | |
| A_Y1 dq 0x0000000080000000 | |
| A_Y1_ROT dq 0x0000000003000000 | |
| T_DRIVE dq 0x0000000100000000 | |
| RHO_MIN dq 0x0000000000000000 | |
| RHO_MAX dq 0x0000000500000000 | |
| RNG_STATE dq 0 | |
| LCG_A dq 6364136223846793005 | |
| LCG_C dq 1442695040888963407 | |
| CRC_TABLE dd 0 | |
| hLogFile dd 0 | |
| logBuf dd 0 | |
| logBufSize dd 0 | |
| time_q dq 0 | |
| sample_index dd 0 | |
| posX dq 0,0,0,0,0,0 | |
| posY dq 0,0,0,0,0,0 | |
| theta dq 0,0,0,0,0,0 | |
| rho dq 0,0,0,0,0,0 | |
| velX dq 0,0,0,0,0,0 | |
| velY dq 0,0,0,0,0,0 | |
| omega dq 0,0,0,0,0,0 | |
| phi_res dq 0,0,0,0,0,0 | |
| mass dq 0,0,0,0,0,0 | |
| inertia dq 0,0,0,0,0,0 | |
| flags dq 0,0,0,0,0,0 | |
| agg_posX dq 0 | |
| agg_posY dq 0 | |
| agg_theta dq 0 | |
| agg_rho dq 0 | |
| recordBuf dd 0 | |
| public InitState | |
| public MainLoop | |
| public Qmul | |
| public Qdiv | |
| public ReciprocalNewton | |
| public SinCosInterp | |
| public ExpPade | |
| public RNG_Next | |
| public CRC32_InitTable | |
| public CRC32_Process | |
| public LogRecord | |
| .code | |
| InitState proc | |
| push ebp | |
| mov ebp, esp | |
| sub esp, 64 | |
| mov rax, 0x0123456789ABCDEF | |
| mov [RNG_STATE], rax | |
| lea rdi, mass | |
| mov rcx, 6 | |
| mov rax, Q_ONE | |
| init_mass_loop: | |
| mov [rdi], rax | |
| add rdi, 8 | |
| loop init_mass_loop | |
| lea rdi, inertia | |
| mov rcx, 6 | |
| mov rax, I_DEFAULT | |
| init_inertia_loop: | |
| mov [rdi], rax | |
| add rdi, 8 | |
| loop init_inertia_loop | |
| mov rax, Q_ONE | |
| mov [posX + 0*8], rax | |
| mov rax, 0 | |
| mov [posY + 0*8], rax | |
| mov rax, 0x0000000200000000 | |
| mov [posX + 1*8], rax | |
| mov rax, 0 | |
| mov [posY + 1*8], rax | |
| mov rax, 0 | |
| mov [posX + 2*8], rax | |
| mov rax, Q_ONE | |
| mov [posY + 2*8], rax | |
| mov rax, 0 | |
| mov [posX + 3*8], rax | |
| mov rax, 0x0000000200000000 | |
| mov [posY + 3*8], rax | |
| mov rax, Q_ONE | |
| mov [posX + 4*8], rax | |
| mov rax, Q_ONE | |
| mov [posY + 4*8], rax | |
| mov rax, 0x0000000200000000 | |
| mov [posX + 5*8], rax | |
| mov rax, 0x0000000200000000 | |
| mov [posY + 5*8], rax | |
| lea rdi, theta | |
| mov rcx, 6 | |
| theta_init_loop: | |
| call RNG_Next | |
| mov rdx, rax | |
| shr rdx, 32 | |
| mov eax, edx | |
| shl rdx, 32 | |
| mov rbx, SIG_GROWTH | |
| push rdx | |
| push rbx | |
| call Qmul | |
| add esp, 16 | |
| mov [rdi], rax | |
| add rdi, 8 | |
| loop theta_init_loop | |
| mov rax, 0x000000000199999A | |
| lea rdi, rho | |
| mov rcx, 6 | |
| rho_init_loop: | |
| mov [rdi], rax | |
| add rdi, 8 | |
| loop rho_init_loop | |
| mov rax, 0x0000000003333333 | |
| mov [rho + 1*8], rax | |
| mov qword ptr [flags + 1*8], 1 | |
| lea rdi, velX | |
| mov rcx, 6 | |
| zero_loop1: | |
| mov qword ptr [rdi], 0 | |
| add rdi, 8 | |
| loop zero_loop1 | |
| lea rdi, velY | |
| mov rcx, 6 | |
| zero_loop2: | |
| mov qword ptr [rdi], 0 | |
| add rdi, 8 | |
| loop zero_loop2 | |
| lea rdi, omega | |
| mov rcx, 6 | |
| zero_loop3: | |
| mov qword ptr [rdi], 0 | |
| add rdi, 8 | |
| loop zero_loop3 | |
| lea rdi, phi_res | |
| mov rcx, 6 | |
| zero_loop4: | |
| mov qword ptr [rdi], 0 | |
| add rdi, 8 | |
| loop zero_loop4 | |
| mov qword ptr [time_q], 0 | |
| mov dword ptr [sample_index], 0 | |
| call CRC32_InitTable | |
| lea rcx, SZ_FILENAME | |
| push 0 | |
| push 0 | |
| push FILE_ATTRIBUTE_NORMAL | |
| push CREATE_ALWAYS | |
| push FILE_SHARE_READ | |
| push GENERIC_WRITE | |
| push rcx | |
| call CreateFileA | |
| mov [hLogFile], rax | |
| mov rcx, 4096 | |
| call GetProcessHeap | |
| mov rcx, rax | |
| mov rdx, 4096 | |
| push rdx | |
| push rcx | |
| call HeapAlloc | |
| mov [recordBuf], rax | |
| mov dword ptr [logBufSize], 4096 | |
| mov eax, 0 | |
| mov esp, ebp | |
| pop ebp | |
| ret | |
| InitState endp | |
| .data? | |
| SZ_FILENAME db "greta_sim_log.bin", 0 | |
| MainLoop proc | |
| push rbp | |
| mov rbp, rsp | |
| sub rsp, 32 | |
| mov ecx, dword ptr [rbp+16] | |
| cmp ecx, 0 | |
| jle .done | |
| .loop_start: | |
| mov rax, [posX + 0*8] | |
| add rax, [posX + 1*8] | |
| shr rax, 1 | |
| mov [agg_posX], rax | |
| mov rax, [posY + 0*8] | |
| add rax, [posY + 1*8] | |
| shr rax, 1 | |
| mov [agg_posY], rax | |
| mov rax, [theta + 0*8] | |
| add rax, [theta + 1*8] | |
| shr rax, 1 | |
| mov [agg_theta], rax | |
| mov rax, [rho + 0*8] | |
| add rax, [rho + 1*8] | |
| shr rax, 1 | |
| mov [agg_rho], rax | |
| mov rbx, [posX + 2*8] | |
| add rbx, [posX + 3*8] | |
| shr rbx, 1 | |
| mov qword ptr [posX + 6*8], rbx | |
| mov rsi, 0 | |
| .p_loop: | |
| cmp rsi, 6 | |
| jae .after_ploop | |
| mov rax, rsi | |
| xor rax, 1 | |
| mov rcx, [posX + rsi*8] | |
| mov rdx, [posX + rax*8] | |
| sub rdx, rcx | |
| push rdx | |
| push K_PAIR | |
| call Qmul | |
| add esp, 16 | |
| inc rsi | |
| jmp .p_loop | |
| .after_ploop: | |
| mov rax, [time_q] | |
| add rax, DT | |
| mov [time_q], rax | |
| mov eax, [sample_index] | |
| inc eax | |
| mov [sample_index], eax | |
| mov rcx, [recordBuf] | |
| mov rdx, [logBufSize] | |
| push rcx | |
| push rdx | |
| call LogRecord | |
| add esp, 16 | |
| dec ecx | |
| jnz .loop_start | |
| .done: | |
| mov rsp, rbp | |
| pop rbp | |
| ret | |
| MainLoop endp | |
| Qmul proc | |
| ret | |
| Qmul endp | |
| Qdiv proc | |
| ret | |
| Qdiv endp | |
| ReciprocalNewton proc | |
| ret | |
| ReciprocalNewton endp | |
| SinCosInterp proc | |
| ret | |
| SinCosInterp endp | |
| ExpPade proc | |
| ret | |
| ExpPade endp | |
| RNG_Next proc | |
| mov rax, [RNG_STATE] | |
| mov rdx, [LCG_A] | |
| mov rcx, [LCG_C] | |
| mul rdx | |
| add rax, rcx | |
| mov [RNG_STATE], rax | |
| ret | |
| RNG_Next endp | |
| CRC32_InitTable proc | |
| ret | |
| CRC32_InitTable endp | |
| CRC32_Process proc | |
| ret | |
| CRC32_Process endp | |
| LogRecord proc | |
| ret | |
| LogRecord endp | |
| end start | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
| File: greta_sim_math_luts.asm | |
| .686 | |
| .model flat, stdcall | |
| option casemap:none | |
| .data | |
| Q_SHIFT equ 32 | |
| PI_Q32 dq 0x00000003_243F6A88 | |
| TWO_PI_Q dq 0x00000006_486E1A10 | |
| LUT_SIZE dd 16384 | |
| SinLUT dq 0x0000000000000000, 0x0000000000000192, 0x0000000000000325, 0x00000000000004B7 | |
| dq 0x000000000000064A, 0x00000000000007DC, 0x000000000000096E, 0x0000000000000B00 | |
| dq 0x0000000000000C92, 0x0000000000000E24, 0x0000000000000F B6, 0x0000000000001110 | |
| dq 0x00000000000012A2, 0x0000000000001434, 0x00000000000015C6, 0x0000000000001758 | |
| CRC32Table dd 0x00000000,0x77073096,0xEE0E612C,0x990951BA,0x076DC419,0x706AF48F,0xE963A535,0x9E6495A3 | |
| .code | |
| Qmul proc | |
| push rbp | |
| mov rbp, rsp | |
| pop rbx | |
| pop rax | |
| pop rdx | |
| mov rax, [rbp+16] | |
| mov rbx, [rbp+24] | |
| imul rax, rbx | |
| mul rbx | |
| mov rcx, rdx | |
| shrd rax, rdx, 32 | |
| ret | |
| Qmul endp | |
| ReciprocalNewton proc | |
| push rbp | |
| mov rbp, rsp | |
| mov rbx, [rbp+16] | |
| test rbx, rbx | |
| jz .zero | |
| mov rax, rbx | |
| sar rax, 32 | |
| test rax, rax | |
| jz .smallb | |
| mov rdx, 0 | |
| mov rcx, 0x0000000100000000 | |
| mov rdi, rax | |
| mov rax, rcx | |
| cqo | |
| idiv rdi | |
| jmp .refine | |
| .smallb: | |
| mov rax, 0x7FFFFFFFFFFFFFFF | |
| jmp .refine | |
| .zero: | |
| mov rax, 0 | |
| jmp .ret | |
| .refine: | |
| push rax | |
| push rbx | |
| call Qmul | |
| add rsp, 16 | |
| mov rcx, 0x0000000200000000 | |
| sub rcx, rax | |
| mov rdx, [rbp+16] | |
| pop rax | |
| push rax | |
| push rcx | |
| call Qmul | |
| add rsp, 16 | |
| push rax | |
| push rbx | |
| call Qmul | |
| add rsp, 16 | |
| mov rcx, 0x0000000200000000 | |
| sub rcx, rax | |
| pop rax | |
| push rax | |
| push rcx | |
| call Qmul | |
| add rsp, 16 | |
| .ret: | |
| mov rsp, rbp | |
| pop rbp | |
| ret | |
| ReciprocalNewton endp | |
| Qdiv proc | |
| push rbp | |
| mov rbp, rsp | |
| mov rdx, [rbp+24] | |
| mov rax, [rbp+16] | |
| push rdx | |
| call ReciprocalNewton | |
| push rax | |
| push rax | |
| push rax | |
| push rax | |
| push rax | |
| push rax | |
| call Qmul | |
| add esp, 16 | |
| mov rsp, rbp | |
| pop rbp | |
| ret | |
| Qdiv endp | |
| Qabs proc | |
| cmp rax, 0 | |
| jge .ret | |
| neg rax | |
| .ret: | |
| ret | |
| Qabs endp | |
| ExpPade proc | |
| push rbp | |
| mov rbp, rsp | |
| mov rax, [rbp+16] | |
| push rax | |
| push rax | |
| call Qmul | |
| add rsp, 16 | |
| mov rbx, rax | |
| mov rcx, 0x0000000080000000 | |
| push rax | |
| push rcx | |
| call Qmul | |
| add rsp, 16 | |
| mov rdx, rax | |
| mov rcx, 0x0000000001111111 | |
| push rbx | |
| push rcx | |
| call Qmul | |
| add rsp, 16 | |
| mov r8, rax | |
| mov rax, 0x0000000100000000 | |
| add rax, rdx | |
| add rax, r8 | |
| mov r9, 0x0000000100000000 | |
| sub r9, rdx | |
| add r9, r8 | |
| push r9 | |
| push rax | |
| call Qdiv | |
| add rsp, 16 | |
| mov rsp, rbp | |
| pop rbp | |
| ret | |
| ExpPade endp | |
| SinCosInterp proc | |
| push rbp | |
| mov rbp, rsp | |
| mov rax, rdi | |
| mov rax, 0 | |
| mov rbx, Q_ONE | |
| pop rbp | |
| ret | |
| SinCosInterp endp | |
| RNG_Next proc | |
| push rbp | |
| mov rbp, rsp | |
| mov rax, [RNG_STATE] | |
| mov rdx, [LCG_A] | |
| mul rdx | |
| add rax, [LCG_C] | |
| mov [RNG_STATE], rax | |
| mov rsp, rbp | |
| pop rbp | |
| ret | |
| RNG_Next endp | |
| CRC32_InitTable proc | |
| push rbp | |
| mov rbp, rsp | |
| mov rcx, 0 | |
| .crc_loop: | |
| mov raxd, ecx | |
| mov rdx, 0 | |
| mov ebx, 32 | |
| mov edi, 0 | |
| mov edx, ecx | |
| mov esi, 8 | |
| mov eax, edx | |
| mov ebx, 0 | |
| inc rcx | |
| cmp rcx, 8 | |
| jl .crc_loop | |
| mov rsp, rbp | |
| pop rbp | |
| ret | |
| CRC32_InitTable endp | |
| CRC32_Process proc | |
| push rbp | |
| mov rbp, rsp | |
| xor rax, rax | |
| mov rsp, rbp | |
| pop rbp | |
| ret | |
| CRC32_Process endp | |
| LogRecord proc | |
| push rbp | |
| mov rbp, rsp | |
| sub rsp, 64 | |
| mov rdi, rcx | |
| mov eax, [sample_index] | |
| mov dword ptr [rdi], eax | |
| add rdi, 4 | |
| mov dword ptr [rdi], 0 | |
| add rdi, 4 | |
| mov rax, [time_q] | |
| mov qword ptr [rdi], rax | |
| add rdi, 8 | |
| mov rcx, 0 | |
| .pack_loop: | |
| cmp rcx, 6 | |
| jae .pack_done | |
| mov rax, [posX + rcx*8] | |
| mov qword ptr [rdi], rax | |
| add rdi, 8 | |
| mov rax, [posY + rcx*8] | |
| mov qword ptr [rdi], rax | |
| add rdi, 8 | |
| mov rax, [theta + rcx*8] | |
| add rax, [phi_res + rcx*8] | |
| mov qword ptr [rdi], rax | |
| add rdi, 8 | |
| mov rax, [rho + rcx*8] | |
| mov qword ptr [rdi], rax | |
| add rdi, 8 | |
| mov rax, [phi_res + rcx*8] | |
| mov qword ptr [rdi], rax | |
| add rdi, 8 | |
| inc rcx | |
| jmp .pack_loop | |
| .pack_done: | |
| mov r8, rcx | |
| mov rax, rdi | |
| mov rbx, rcx | |
| mov r9, rcx | |
| mov r10, rcx | |
| mov rax, rdi | |
| sub rax, rcx | |
| mov rsi, [rbp+16] | |
| mov rdx, rdi | |
| sub rdx, rsi | |
| mov rcx, rsi | |
| mov r8, rdx | |
| push rcx | |
| push r8 | |
| call CRC32_Process | |
| add esp, 16 | |
| mov dword ptr [rdi], eax | |
| add rdi, 4 | |
| mov dword ptr [rdi], 0 | |
| add rdi, 4 | |
| mov rax, rdi | |
| sub rax, rcx | |
| mov rbx, [recordBuf] | |
| mov rax, rdi | |
| sub rax, rbx | |
| mov rcx, [hLogFile] | |
| mov rdx, rbx | |
| mov r8, rax | |
| lea r9, [rsp+32] | |
| mov qword ptr [rsp+32], 0 | |
| push 0 | |
| push r9 | |
| push r8 | |
| push rdx | |
| push rcx | |
| call WriteFile | |
| add rsp, 64 | |
| mov rsp, rbp | |
| pop rbp | |
| ret | |
| LogRecord endp | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
| File: greta_sim_validator.py | |
| import argparse | |
| import struct | |
| import zlib | |
| import math | |
| import sys | |
| RECORD_HEADER_FMT = "<I I Q" | |
| RECORD_HEADER_SIZE = struct.calcsize(RECORD_HEADER_FMT) | |
| ENDPT_PAYLOAD_SIZE = 5 * 8 | |
| N_ENDPTS = 6 | |
| CRC_SIZE = 4 | |
| def q32_to_float(i): | |
| if i & (1 << 63): i = -((~i + 1) & ((1<<64)-1)) | |
| return i / (1<<32) | |
| def read_records(path): | |
| recs = [] | |
| with open(path, "rb") as f: b = f.read() | |
| off = 0 | |
| n = len(b) | |
| while off + RECORD_HEADER_SIZE + N_ENDPTS*ENDPT_PAYLOAD_SIZE + CRC_SIZE <= n: | |
| header = struct.unpack_from(RECORD_HEADER_FMT, b, off) | |
| sample_index, pad, timestamp = header | |
| off += RECORD_HEADER_SIZE | |
| endpoints = [] | |
| for p in range(N_ENDPTS): | |
| vals = struct.unpack_from("<qqqqq", b, off) | |
| off += ENDPT_PAYLOAD_SIZE | |
| endpoints.append(vals) | |
| crc_stored = struct.unpack_from("<I", b, off)[0] | |
| off += CRC_SIZE | |
| rec_start = off - (RECORD_HEADER_SIZE + N_ENDPTS*ENDPT_PAYLOAD_SIZE + CRC_SIZE) | |
| rec_end = off - CRC_SIZE | |
| calc = zlib.crc32(b[rec_start:rec_end]) & 0xFFFFFFFF | |
| ok = (calc == crc_stored) | |
| recs.append({"sample_index": sample_index, "timestamp_q": timestamp, "endpoints": endpoints, | |
| "crc_ok": ok, "crc_stored": crc_stored, "crc_calc": calc}) | |
| return recs | |
| def summarize(recs): | |
| print("Records:", len(recs)) | |
| bad = [r for r in recs if not r["crc_ok"]] | |
| print("CRC failures:", len(bad)) | |
| if len(recs)==0: | |
| return | |
| last = recs[-1] | |
| means = [] | |
| for p in range(N_ENDPTS): | |
| rho_q = last["endpoints"][p][3] | |
| means.append(q32_to_float(rho_q)) | |
| for p, m in enumerate(means): | |
| print(f"Endpoint {p} rho (last): {m:.9f}") | |
| def main(): | |
| p = argparse.ArgumentParser() | |
| p.add_argument("logfile", nargs="?", default="greta_sim_log.bin") | |
| args = p.parse_args() | |
| recs = read_records(args.logfile) | |
| summarize(recs) | |
| if recs: | |
| r0 = recs[0] | |
| print("First record sample_index:", r0["sample_index"], "crc_ok:", r0["crc_ok"]) | |
| for p, ep in enumerate(r0["endpoints"]): | |
| posx, posy, theta_eff, rho, phi = ep | |
| print(f"P{p}: pos=({q32_to_float(posx):.6f},{q32_to_float(posy):.6f}) theta={q32_to_float(theta_eff):.6f} rho={q32_to_float(rho):.6f} phi={q32_to_float(phi):.6f}") | |
| if __name__ == "__main__": | |
| main() | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
| File: greta_gen_tables.py | |
| import zlib | |
| import math | |
| LUT_SIZE, Q = 16384, 1<<32 | |
| def gen_sin_lut(): | |
| vals = [] | |
| for i in range(LUT_SIZE): | |
| theta = (i / (LUT_SIZE - 1)) * (math.pi/2) | |
| s = math.sin(theta); q = int(round(s * Q)) & ((1<<64)-1); vals.append(q) | |
| return vals | |
| def fmt_dq(values, per_line=4): | |
| out = [] | |
| for i in range(0, len(values), per_line): | |
| chunk = values[i:i+per_line] | |
| line = " dq " + ", ".join(f"0x{v:016X}" for v in chunk) | |
| out.append(line) | |
| return "\n".join(out) | |
| def gen_crc_table(): | |
| tbl = [] | |
| for i in range(256): | |
| crc = i | |
| for j in range(8): | |
| if crc & 1: crc = (crc >> 1) ^ 0xEDB88320 | |
| else: crc >>= 1 | |
| tbl.append(crc & 0xFFFFFFFF) | |
| return tbl | |
| def fmt_dd(values, per_line=8): | |
| out = [] | |
| for i in range(0, len(values), per_line): | |
| chunk = values[i:i+per_line] | |
| line = "CRC32Table dd " + ", ".join(f"0x{v:08X}" for v in chunk) | |
| out.append(line) | |
| return "\n".join(out) | |
| if __name__ == "__main__": | |
| lut = gen_sin_lut() | |
| with open("sinlut.asm", "w") as f: | |
| f.write("; Generated SinLUT (Q32.32) quarter-wave\n") | |
| f.write(fmt_dq(lut, per_line=4)) | |
| crc = gen_crc_table() | |
| with open("crc_table.inc", "w") as f: | |
| f.write("; Generated CRC32 table\n") | |
| f.write(fmt_dd(crc, per_line=8)) | |
| print("Wrote sinlut.asm and crc_table.inc") |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Begins not with men that think they keep the law, that ignorance is explained in the most printed red letters. Is when men believe those words in red letters only apply to believers and justifications of new law beliefs arrive for benefits of vanity in expectancy of outweighing truth. So you get what happened last time repeated in insanity with Bully Capitalism or any other government by mere men, another compromise in some how this world will love them while wants in greed destroying it. Is the same ignorance as before, not new.