From 0a656a4a84f920194958d339d61ed567eba9c03c Mon Sep 17 00:00:00 2001 From: Javier Date: Tue, 29 Sep 2026 23:40:31 +0200 Subject: initial import --- utils.h | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 utils.h (limited to 'utils.h') diff --git a/utils.h b/utils.h new file mode 100644 index 0000000..138a774 --- /dev/null +++ b/utils.h @@ -0,0 +1,60 @@ +/* + * CHU - driver for CH375 in disk mode + * Copyright (C) 2024 Javier S. Pedro + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#ifndef UTILS_H +#define UTILS_H + +#include + +static inline __segment get_cs(void); +#pragma aux get_cs = "mov ax, cs" value [ax] modify exact [] nomemory + +static inline __segment get_ds(void); +#pragma aux get_ds = "mov ax, ds" value [ax] modify exact [] nomemory + +static void load_ds_from_cs(void); +#pragma aux load_ds_from_cs = \ + "push cs" \ + "pop ds" \ + __modify __exact [] + +#define SWAPNC_32(w) (\ + (((w) & 0x000000FFUL) << 24) |\ + (((w) & 0x0000FF00UL) << 8) |\ + (((w) & 0x00FF0000UL) >> 8) |\ + (((w) & 0xFF000000UL) >> 24)\ + ) + +static inline uint16_t div(uint32_t dividend, uint16_t divisor); +#pragma aux div = \ + "div bx" \ + __parm [dx ax] [bx] \ + __value [ax] \ + __modify __exact [dx ax] + +static inline uint32_t mul(uint16_t a, uint16_t b); +#pragma aux mul = \ + "mul dx" \ + __parm [ax] [dx] \ + __value [dx ax] \ + __modify __exact [dx ax] + + + +#endif // UTILS_H -- cgit v1.2.3