77 lines
2.0 KiB
Plaintext
77 lines
2.0 KiB
Plaintext
|
|
; Public Domain 2024 by E. C. Masloch
|
|
|
|
%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
|
|
|
|
%macro magicoffset 2-4.nolist ,0
|
|
%if ISFAT1216DUAL
|
|
%ifdef ISFAT12
|
|
%define SYSOFFSET %2
|
|
%elifdef ISFAT16
|
|
%define SYSOFFSET %3
|
|
%else
|
|
%define SYSOFFSET 0
|
|
; Just a placeholder, so the proper error message
|
|
; will be shown when assembling without either
|
|
; of the ISFATx defines.
|
|
%endif
|
|
%else
|
|
%define SYSOFFSET %2
|
|
%ifnempty %3
|
|
%error Not in dual mode
|
|
%endif
|
|
%endif
|
|
%assign NEWOFFSET $ + %4 - Entry
|
|
%if NEWOFFSET != SYSOFFSET
|
|
_autohexitsstrdef NEWOFFSETHEX, NEWOFFSET
|
|
%strcat _NEWOFFSETHEX _NEWOFFSETHEX,'h'
|
|
%deftok NEWOFFSET _NEWOFFSETHEX
|
|
%if ISFAT1216DUAL
|
|
%error Magic offset %1 changed for FATFS, old=SYSOFFSET, new=NEWOFFSET
|
|
%else
|
|
%error Magic offset %1 changed, old=SYSOFFSET, new=NEWOFFSET
|
|
%endif
|
|
%endif
|
|
%endmacro
|