From eb75bea6c1151f48257cd5e43605f4c51b3cba98 Mon Sep 17 00:00:00 2001 From: "E. C. Masloch" Date: Tue, 6 Feb 2024 23:51:33 +0100 Subject: [PATCH] boot: display new magic offset in hexadecimal --- boot/boot.asm | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/boot/boot.asm b/boot/boot.asm index a10c244..6b94d48 100644 --- a/boot/boot.asm +++ b/boot/boot.asm @@ -88,6 +88,50 @@ %error Must select one FS %endif + +%macro _appenddigitstrdef 2.nolist +%substr %%ii "0123456789ABCDEF" (%2) + 1 +%strcat _%1 _%1,%%ii +%endmacro + + ; %1 = name of single-line macro to set. will be prefixed by underscore + ; %2 = number to write + ; %3 = minimal number of hexits, 0..8. defaults to 1 + ; (setting it to 0 with a number of 0 defines macro to "") +%macro _autohexitsstrdef 2-3.nolist 1 +%if %3 > 8 + %error Minimal number of hexits 9 or more: %3 +%endif +%define _%1 "" +%if (%2) >= 1_0000_0000h + %error Number has to use 9 or more hexits: %2 +%endif +%if (%2) >= 1000_0000h || %3 >= 8 +_appenddigitstrdef %1, (%2 >> (7 * 4)) & 0Fh +%endif +%if (%2) >= 100_0000h || %3 >= 7 +_appenddigitstrdef %1, (%2 >> (6 * 4)) & 0Fh +%endif +%if (%2) >= 10_0000h || %3 >= 6 +_appenddigitstrdef %1, (%2 >> (5 * 4)) & 0Fh +%endif +%if (%2) >= 1_0000h || %3 >= 5 +_appenddigitstrdef %1, (%2 >> (4 * 4)) & 0Fh +%endif +%if (%2) >= 1000h || %3 >= 4 +_appenddigitstrdef %1, (%2 >> (3 * 4)) & 0Fh +%endif +%if (%2) >= 100h || %3 >= 3 +_appenddigitstrdef %1, (%2 >> (2 * 4)) & 0Fh +%endif +%if (%2) >= 10h || %3 >= 2 +_appenddigitstrdef %1, (%2 >> (1 * 4)) & 0Fh +%endif +%if (%2) >= 1h || %3 >= 1 +_appenddigitstrdef %1, (%2 >> (0 * 4)) & 0Fh +%endif +%endmacro + ; NOTE: sys must be updated if magic offsets change %macro magicoffset 3.nolist %ifdef ISFAT12 @@ -102,6 +146,9 @@ %endif %assign NEWOFFSET $ - Entry %if NEWOFFSET != SYSOFFSET + _autohexitsstrdef NEWOFFSETHEX, NEWOFFSET + %strcat _NEWOFFSETHEX _NEWOFFSETHEX,'h' + %deftok NEWOFFSET _NEWOFFSETHEX %error Magic offset %1 changed for FATFS, old=SYSOFFSET, new=NEWOFFSET %endif %endmacro