//sved/tags/2023.0/mdr/history.txt |
---|
0,0 → 1,28 |
version xxxx (xx xxx xxxx) |
- new mdr_dos_selfexe() |
- new mdr_dos_truename() |
- new mdr_coutraw_str() and mdr_coutraw_crlf() |
- new mdr_dos_ctrlc_inhibit(), mdr_dos_ctrlc_enable(), mdr_dos_ctrlc_disable() |
- renamed keyb_getkey() to mdr_dos_getkey() |
- renamed keyb_flush() to mdr_dos_flushkeyb() |
- new mdr_dos_getkey2(), same as mdr_dos_getkey() but immune to CTRL+C |
- new mdr_dos_keypending() |
- removed keyb_getkey_ifany(): use mdr_dos_keypending + mdr_dos_getkey instead |
version 2023 (29 Jul 2023) |
- all routines are built as a library now |
- advertising MDR version (MDR_VER_MAJOR and MDR_VER_MINOR in VER.H) |
- added the SBDIGI driver (SoundBlaster Digitized sound) |
- added the COUT module (text-mode console output) |
- added the DOS module (mdr_dos_* functions) |
- added the UNZIP module for iteration over ZIP archives |
- added the BIOS module (with the mdr_bios_tickswait() function) |
- vid12: fast VRAM copy (vid12_vramcpy_* functions) |
- vid12: vid12_clrline() |
- vid12: fixed color mapping in vid12_setpalette() |
- vid12: added functions vid12_hline() and vid12_linepat() |
- vid12: fixed reverting the previous video mode at vid12_close() |
- vid12: optimized vid12_putpixel() - 17% faster |
version 2022 (09 Oct 2022) |
- initial public release |
//sved/tags/2023.0/mdr/inc/mdr/bios.h |
---|
0,0 → 1,35 |
/* |
* BIOS functions |
* |
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io |
* Published under the terms of the MIT License, as stated below. |
* |
* Copyright (C) 2014-2023 Mateusz Viste |
* |
* Permission is hereby granted, free of charge, to any person obtaining a copy |
* of this software and associated documentation files (the "Software"), to |
* deal in the Software without restriction, including without limitation the |
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
* sell copies of the Software, and to permit persons to whom the Software is |
* furnished to do so, subject to the following conditions: |
* |
* The above copyright notice and this permission notice shall be included in |
* all copies or substantial portions of the Software. |
* |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
* IN THE SOFTWARE. |
*/ |
#ifndef MDR_BIOS_H |
#define MDR_BIOS_H |
/* waits for ticks time (1 tick is roughly 55ms, an hour has 65543 ticks) |
* works on IBM PC, XT, AT - ie. it's always safe */ |
void mdr_bios_tickswait(unsigned short ticks); |
#endif |
//sved/tags/2023.0/mdr/inc/mdr/cout.h |
---|
0,0 → 1,83 |
/* |
* Console output |
* |
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io |
* Published under the terms of the MIT License, as stated below. |
* |
* Copyright (C) 2014-2023 Mateusz Viste |
* |
* Permission is hereby granted, free of charge, to any person obtaining a copy |
* of this software and associated documentation files (the "Software"), to |
* deal in the Software without restriction, including without limitation the |
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
* sell copies of the Software, and to permit persons to whom the Software is |
* furnished to do so, subject to the following conditions: |
* |
* The above copyright notice and this permission notice shall be included in |
* all copies or substantial portions of the Software. |
* |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
* IN THE SOFTWARE. |
*/ |
#ifndef MDR_COUT |
#define MDR_COUT |
/* inits the subsystem, fills arguments with: |
* w = screen width |
* h = screen height |
* Any of these arguments may be passed as NULL |
* Returns a color flag (0=mono, non-zero=color) */ |
unsigned char mdr_cout_init(unsigned char *w, unsigned char *h); |
/* get current attribute value under cursor and returns it */ |
int mdr_cout_getcurattr(void); |
void mdr_cout_close(void); |
void mdr_cout_cursor_hide(void); |
void mdr_cout_cursor_show(void); |
/* gets cursor's position on screen (row, column) and shape */ |
void mdr_cursor_getinfo(unsigned char *column, unsigned char *row, unsigned short *shape); |
void mdr_cout_locate(unsigned char row, unsigned char column); |
/* print a single character on screen */ |
void mdr_cout_char(unsigned char y, unsigned char x, char c, unsigned char attr); |
/* print a single character on screen, repeated count times */ |
void mdr_cout_char_rep(unsigned char y, unsigned char x, char c, unsigned char attr, unsigned char count); |
/* print a nul-terminated string on screen, up to maxlen characters |
* returns the number of characters actually displayed */ |
unsigned char mdr_cout_str(unsigned char y, unsigned char x, const char *s, unsigned char attr, unsigned char maxlen); |
/* clears screen, filling it with a single color attribute */ |
void mdr_cout_cls(unsigned char colattr); |
void mdr_cout_getconprops(unsigned char *termwidth, unsigned char *termheight, unsigned char *colorflag); |
/***************************************************************************** |
* functions below do not need mdr_cout_init() initialization, they can be * |
* used to output data to console right away, as they use DOS services. * |
*****************************************************************************/ |
/* output a single character to console */ |
void mdr_coutraw_char(char c); |
/* output a nul-terminated string */ |
void mdr_coutraw_str(const char *s); |
/* same as above, but followed with a CR/LF line terminator */ |
void mdr_coutraw_puts(const char *s); |
/* outputs a DOS-style (CR/LF) newline to console */ |
void mdr_coutraw_crlf(void); |
#endif |
//sved/tags/2023.0/mdr/inc/mdr/dos.h |
---|
0,0 → 1,113 |
/* |
* Functions interacting with DOS |
* |
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io |
* Published under the terms of the MIT License, as stated below. |
* |
* Copyright (C) 2014-2023 Mateusz Viste |
* |
* Permission is hereby granted, free of charge, to any person obtaining a copy |
* of this software and associated documentation files (the "Software"), to |
* deal in the Software without restriction, including without limitation the |
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
* sell copies of the Software, and to permit persons to whom the Software is |
* furnished to do so, subject to the following conditions: |
* |
* The above copyright notice and this permission notice shall be included in |
* all copies or substantial portions of the Software. |
* |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
* IN THE SOFTWARE. |
*/ |
#ifndef MDR_DOS_H |
#define MDR_DOS_H |
#include <time.h> /* time_t */ |
/* returns a far pointer to the current process PSP structure */ |
void far *mdr_dos_psp(void); |
/* returns a far pointer to the environment block of the current process */ |
char far *mdr_dos_env(void); |
/* looks for varname in the DOS environment and fills result with its value if |
* found. returns NULL if not found or if value is too big to fit in result |
* (reslimit exceeded). returns result on success. |
* NOTE: this function performs case-sensitive matches */ |
char *mdr_dos_getenv(char *result, const char *varname, unsigned short reslimit); |
/* fetches directory where the program was loaded from and return its length. |
* path string is never longer than 128 (incl. the null terminator) and it is |
* always terminated with a backslash separator, unless it is an empty string */ |
unsigned char mdr_dos_exepath(char *path); |
/* returns a far pointer to the full path and filename of the running program. |
* returns NULL on error. */ |
const char far *mdr_dos_selfexe(void); |
/* waits for a keypress and returns it |
* extended keys are returned ORed with 0x100 (example: PGUP is 0x149) */ |
int mdr_dos_getkey(void); |
/* Same as mdr_dos_getkey(), but this call cannot be aborted by CTRL+C */ |
int mdr_dos_getkey2(void); |
/* flush the keyboard buffer */ |
void mdr_dos_flushkeyb(void); |
/* poll stdin status, returns 0 if no character is pending in the keyboard |
* buffer, non-zero otherwise */ |
int mdr_dos_keypending(void); |
/* sets up the CTRL+C handler for the running program to a no-op - in other |
* words, after this call DOS will no longer abort the program on CTRL+C. |
* this is only valid for the duration of the program because DOS will restore |
* the original handler after the program exits. |
* |
* an alternative is mdr_dos_ctrlc_off(), but this does not inhibit the |
* handler, it sets DOS to not react to CTRL+C in the first place, and this |
* setting stays active after the program quits so the program should remember |
* to restore the original setting before quitting. */ |
void mdr_dos_ctrlc_inhibit(void); |
/* sets the DOS BREAK control OFF, ie. instructs DOS not to check for CTRL+C |
* during most input operations. returns the previous state of the break |
* control flag (0=disabled 1=enabled). this changes a global DOS flag that can |
* be checked on command line with the "BREAK" command, so the program should |
* take care to restore the initial setting before quitting. */ |
unsigned char mdr_dos_ctrlc_disable(void); |
/* sets the DOS BREAK control ON. see mdr_dos_ctrlc_disable() for details. */ |
void mdr_dos_ctrlc_enable(void); |
/* converts a "DOS format" 16-bit packed date into a standard (time_t) |
* unix timestamp. A DOS date is a 16-bit value: |
* YYYYYYYM MMMDDDDD |
* |
* day of month is always within 1-31 range; |
* month is always within 1-12 range; |
* year starts at 1980 and continues for 127 years */ |
time_t mdr_dos_date2unix(unsigned short d); |
/* converts a "DOS format" 16-bit packed time into hours, minutes and seconds |
* |
* A DOS time is a 16-bit value: |
* HHHHHMMM MMMSSSSS |
* |
* HHHHH = hours, always within 0-23 range |
* MMMMMM = minutes, always within 0-59 range |
* SSSSS = seconds/2 (always within 0-29 range) */ |
void mdr_dos_time2hms(unsigned char *h, unsigned char *m, unsigned char *s, unsigned short t); |
/* Determine the canonical name of the specified filename or path and writes |
* the result into result. The input path does not need to actually exist. |
* result is zeroed to an empty string on error. */ |
void mdr_dos_truename(char *result, const char *name); |
#endif |
//sved/tags/2023.0/mdr/inc/mdr/mouse.h |
---|
0,0 → 1,48 |
/* |
* Mouse routines |
* |
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io |
* Published under the terms of the MIT License, as stated below. |
* |
* Copyright (C) 2014-2022 Mateusz Viste |
* |
* Permission is hereby granted, free of charge, to any person obtaining a copy |
* of this software and associated documentation files (the "Software"), to |
* deal in the Software without restriction, including without limitation the |
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
* sell copies of the Software, and to permit persons to whom the Software is |
* furnished to do so, subject to the following conditions: |
* |
* The above copyright notice and this permission notice shall be included in |
* all copies or substantial portions of the Software. |
* |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
* IN THE SOFTWARE. |
*/ |
#ifndef MDR_MOUSE_H |
#define MDR_MOUSE_H |
/* init the mouse driver (and checks for presence of mouse support at same time) |
* returns 0 if no mouse is present, and the number of buttons otherwise */ |
int mouse_init(void); |
/* shows the mouse pointer */ |
void mouse_show(void); |
/* hides the mouse pointer */ |
void mouse_hide(void); |
/* get x/y coordinates of the mouse, and returns a bitfield with state of buttons */ |
int mouse_getstate(int *x, int *y); |
/* get x/y coordinates of the mouse when the last button release occured since last check. |
returns the id of the button pressed (1 or 2), or 0 if no event occured. */ |
int mouse_fetchrelease(int *x, int *y); |
#endif |
//sved/tags/2023.0/mdr/inc/mdr/pcx.h |
---|
0,0 → 1,50 |
/* |
* PCX-loading routines |
* |
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io |
* Published under the terms of the MIT License, as stated below. |
* |
* Copyright (C) 2022 Mateusz Viste |
* |
* Permission is hereby granted, free of charge, to any person obtaining a copy |
* of this software and associated documentation files (the "Software"), to |
* deal in the Software without restriction, including without limitation the |
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
* sell copies of the Software, and to permit persons to whom the Software is |
* furnished to do so, subject to the following conditions: |
* |
* The above copyright notice and this permission notice shall be included in |
* all copies or substantial portions of the Software. |
* |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
* IN THE SOFTWARE. |
*/ |
#ifndef MDR_PCX_H |
#define MDR_PCX_H |
struct pcx_hdr { |
unsigned char rle; |
unsigned char bpp; |
unsigned short max_x; |
unsigned short max_y; |
unsigned short bytes_per_scanline; |
struct { |
unsigned char r; |
unsigned char g; |
unsigned char b; |
} pal[256]; |
}; |
int pcx_anal(struct pcx_hdr *h, FILE *fd, unsigned long offset, unsigned short len); |
int pcx_load(void *ptr, size_t ptrsz, const struct pcx_hdr *h, FILE *fd, unsigned long offset); |
/* convert img to 8bpp if needed (ie unpack 2 and 4bpp data to 8bpp) */ |
int pcx_convto8bpp(void *img, const struct pcx_hdr *h); |
#endif |
//sved/tags/2023.0/mdr/inc/mdr/rs232.h |
---|
0,0 → 1,47 |
/* |
* Reading from and writing to an RS-232 port |
* |
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io |
* Published under the terms of the MIT License, as stated below. |
* |
* Copyright (C) 2015-2022 Mateusz Viste |
* |
* Permission is hereby granted, free of charge, to any person obtaining a copy |
* of this software and associated documentation files (the "Software"), to |
* deal in the Software without restriction, including without limitation the |
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
* sell copies of the Software, and to permit persons to whom the Software is |
* furnished to do so, subject to the following conditions: |
* |
* The above copyright notice and this permission notice shall be included in |
* all copies or substantial portions of the Software. |
* |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
* IN THE SOFTWARE. |
*/ |
#ifndef MDR_RS232_H |
#define MDR_RS232_H |
/* get the I/O port for COMx (1..4) */ |
unsigned short rs232_getport(int x); |
/* check if the COM port is ready for write. loops for some time waiting. |
* returns 0 if port seems ready eventually, non-zero otherwise. can be used |
* to verify the rs232 presence */ |
int rs232_check(unsigned short port); |
/* write a byte to the COM port at 'port'. this function will block if the |
* UART is not ready to transmit yet. */ |
void rs232_write(unsigned short port, int data); |
/* read a byte from COM port at 'port'. returns the read byte, or -1 if |
* nothing was available to read. */ |
int rs232_read(unsigned short port); |
#endif |
//sved/tags/2023.0/mdr/inc/mdr/sbdigi.h |
---|
0,0 → 1,57 |
/* |
* SoundBlaster routines for DSP driving |
* |
* Copyright (C) 2022 Mateusz Viste |
* |
* Permission is hereby granted, free of charge, to any person obtaining a copy |
* of this software and associated documentation files (the "Software"), to |
* deal in the Software without restriction, including without limitation the |
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
* sell copies of the Software, and to permit persons to whom the Software is |
* furnished to do so, subject to the following conditions: |
* |
* The above copyright notice and this permission notice shall be included in |
* all copies or substantial portions of the Software. |
* |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
* IN THE SOFTWARE. |
*/ |
#ifndef MDR_SBDIGI_H |
#define MDR_SBDIGI_H |
struct sbdigi_ctx; |
/* initializes the SoundBlaster DSP chip |
* blaster must point to a BLASTER environment string (like "A220 I5 D1") |
* returns a pointer to a context, NULL on error |
* NOTE: DSP's state after initialization may or may not be muted, depending |
* on the exact hardware revision. use sbdigi_spkoff() to make sure it is |
* unmuted */ |
struct sbdigi_ctx *sbdigi_init(const char *blaster); |
/* unmutes the SoundBlaster DSP */ |
void sbdigi_spkon(struct sbdigi_ctx *ctx); |
/* mutes the SoundBlaster DSP */ |
void sbdigi_spkoff(struct sbdigi_ctx *ctx); |
/* plays a short sample |
* ctx - DSP context, as returned by sbdigi_init() |
* buf - pointer to sample data (must be PCM, 8000 Hz, mono, 8-bit unsigned |
* len - length of the sample, in bytes |
* NOTES: this routine uses DMA to transfer memory. This has two implications: |
* 1. the routine will return almost immediately, while the sound is playing |
* 2. sample data must be contained in a buffer that does NOT cross a 64K page |
* because DMA transfers are unable to cross 64K boundaries */ |
void sbdigi_playsample(struct sbdigi_ctx *ctx, void *buf, unsigned short len); |
/* shuts down the DSP and frees context memory */ |
void sbdigi_quit(struct sbdigi_ctx *ctx); |
#endif |
//sved/tags/2023.0/mdr/inc/mdr/timer.h |
---|
0,0 → 1,52 |
/* |
* High-resolution timing routines (PIT reprogramming) |
* |
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io |
* Published under the terms of the MIT License, as stated below. |
* |
* Copyright (C) 2014-2022 Mateusz Viste |
* |
* Permission is hereby granted, free of charge, to any person obtaining a copy |
* of this software and associated documentation files (the "Software"), to |
* deal in the Software without restriction, including without limitation the |
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
* sell copies of the Software, and to permit persons to whom the Software is |
* furnished to do so, subject to the following conditions: |
* |
* The above copyright notice and this permission notice shall be included in |
* all copies or substantial portions of the Software. |
* |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
* IN THE SOFTWARE. |
*/ |
#ifndef MDR_TIMER_H |
#define MDR_TIMER_H |
/* reset the timer value, this can be used by the application to make sure |
* no timer wrap occurs during critical parts of the code flow */ |
void timer_reset(void); |
/* This routine will stop the fast clock if it is going. It has void return |
* value so that it can be an exit procedure. */ |
void timer_stop(void); |
/* This routine will start the fast clock rate by installing the |
* handle_clock routine as the interrupt service routine for the clock |
* interrupt and then setting the interrupt rate up to its higher speed |
* by programming the 8253 timer chip. |
* This routine does nothing if the clock rate is already set to |
* its higher rate, but then it returns -1 to indicate the error. */ |
void timer_init(void); |
/* This routine will return the present value of the time, which is |
* read from the nowtime structure. Interrupts are disabled during this |
* time to prevent the clock from changing while it is being read. */ |
void timer_read(unsigned long *res); |
#endif |
//sved/tags/2023.0/mdr/inc/mdr/trigint.h |
---|
0,0 → 1,46 |
/* |
* Routines for computation of basic transcendental functions sin and cos. |
* These routines use only integers, hence they do not require an FPU nor any |
* kind of FPU emulation. Works reasonably fast even on an 8086 CPU. |
* |
* The results are computed using polynomial approximations. Their precision |
* is not expected to be ideal, but "good enough" for common usage. |
* |
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io |
* Published under the terms of the MIT License, as stated below. |
* |
* Copyright (C) 2022 Mateusz Viste |
* |
* Permission is hereby granted, free of charge, to any person obtaining a copy |
* of this software and associated documentation files (the "Software"), to |
* deal in the Software without restriction, including without limitation the |
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
* sell copies of the Software, and to permit persons to whom the Software is |
* furnished to do so, subject to the following conditions: |
* |
* The above copyright notice and this permission notice shall be included in |
* all copies or substantial portions of the Software. |
* |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
* IN THE SOFTWARE. |
*/ |
#ifndef MDR_TRIGINT_H |
#define MDR_TRIGINT_H |
/* Computes the cosine value for the given radian. |
* The radian argument must be provided multiplied by 1000. |
* Returns the cosine value multiplied by 1000. */ |
short trigint_cos(short rad1000); |
/* Computes the sine value for the given radian angle. |
* The radian argument must be provided multiplied by 1000. |
* Returns the cosine value multiplied by 1000. */ |
short trigint_sin(short rad1000); |
#endif |
//sved/tags/2023.0/mdr/inc/mdr/unzip.h |
---|
0,0 → 1,58 |
/* |
* Function to iterate through files in a ZIP archive. |
* |
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io |
* Published under the terms of the MIT License, as stated below. |
* |
* Copyright (C) 2012-2022 Mateusz Viste |
* |
* Permission is hereby granted, free of charge, to any person obtaining a copy |
* of this software and associated documentation files (the "Software"), to |
* deal in the Software without restriction, including without limitation the |
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
* sell copies of the Software, and to permit persons to whom the Software is |
* furnished to do so, subject to the following conditions: |
* |
* The above copyright notice and this permission notice shall be included in |
* all copies or substantial portions of the Software. |
* |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
* IN THE SOFTWARE. |
*/ |
#ifndef MDR_UNZIP |
#define MDR_UNZIP |
#include <stdio.h> /* FILE * */ |
#define ZIP_FLAG_ISADIR 1 |
#define ZIP_FLAG_ENCRYPTED 2 |
#define ZIP_METH_STORE 0 |
#define ZIP_METH_DEFLATE 8 |
struct mdr_zip_item { |
unsigned long filelen; |
unsigned long compressedfilelen; |
unsigned long crc32; |
unsigned long dataoffset; /* offset in the file where compressed data starts */ |
unsigned long nextidxoffset; /* offset in the file of the next zip record, used by mdr_zip_iter() */ |
unsigned short dosdate; /* datestamp of the file (DOS packed format) */ |
unsigned short dostime; /* timestamp of the file (DOS packed format) */ |
unsigned short compmethod; /* compression method (ZIP_METH_xxx) */ |
unsigned char flags; /* see ZIP_FLAG_xxx above */ |
char fname[256]; /* filename */ |
}; |
/* returns next item found in zip file. this is supposed to be called |
* iteratively, passing the previous mdr_zipitem struct each time (z must be |
* all zeroed out on first call). |
* returns 0 on success, neg on error, 1 on end of archive */ |
int mdr_zip_iter(struct mdr_zip_item *z, FILE *fd); |
#endif |
//sved/tags/2023.0/mdr/inc/mdr/ver.h |
---|
0,0 → 1,33 |
/* |
* MDR version |
* |
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io |
* Published under the terms of the MIT License, as stated below. |
* |
* Copyright (C) 2014-2023 Mateusz Viste |
* |
* Permission is hereby granted, free of charge, to any person obtaining a copy |
* of this software and associated documentation files (the "Software"), to |
* deal in the Software without restriction, including without limitation the |
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
* sell copies of the Software, and to permit persons to whom the Software is |
* furnished to do so, subject to the following conditions: |
* |
* The above copyright notice and this permission notice shall be included in |
* all copies or substantial portions of the Software. |
* |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
* IN THE SOFTWARE. |
*/ |
#ifndef MDR_VER_H |
#define MDR_VER_MAJOR 2023 |
#define MDR_VER_MINOR 0 |
#endif |
//sved/tags/2023.0/mdr/inc/mdr/vid12.h |
---|
0,0 → 1,72 |
/* |
* a few functions for mode 12h programming (640x480 4bpp) |
* |
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io |
* Published under the terms of the MIT License, as stated below. |
* |
* Copyright (C) 2022 Mateusz Viste |
* |
* Permission is hereby granted, free of charge, to any person obtaining a copy |
* of this software and associated documentation files (the "Software"), to |
* deal in the Software without restriction, including without limitation the |
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
* sell copies of the Software, and to permit persons to whom the Software is |
* furnished to do so, subject to the following conditions: |
* |
* The above copyright notice and this permission notice shall be included in |
* all copies or substantial portions of the Software. |
* |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
* IN THE SOFTWARE. |
*/ |
#ifndef MDR_VID12_H |
#define MDR_VID12_H |
/* init video mode 12h (640x480x16c) */ |
void vid12_init(void); |
/* Wait until VBLANK */ |
void vid12_waitvblank(void); |
/* clear screen using color |
* this function is fastest when color is 0 or 15 */ |
void vid12_cls(unsigned char color); |
/* clear a single scanline (0..479) with a solid color (0..15) |
* this function is fastest when color is 0 or 15 */ |
void vid12_clrline(unsigned short line, unsigned char color); |
/* fill lines from linefirst to linelast with an 8 pixels pattern |
* linelast must be equal to or greater than linelast |
* pattern must be 8 bytes long */ |
void vid12_linepat(unsigned short linefirst, unsigned short linelast, const unsigned char *pattern); |
void vid12_close(void); |
void vid12_putpixel(unsigned short x, unsigned short y, unsigned char col); |
/* draws a horizonatal line from [x1,y] to [x2,y] */ |
void vid12_hline(unsigned short y, unsigned short x1, unsigned short x2, unsigned char color); |
void vid12_putscanline(unsigned short scanline, const unsigned char *pixels); |
/* prepares VGA for a VRAM-to-VRAM copy operation */ |
void vid12_vramcpy_prep(void); |
/* fast (VRAM-to-VRAM) copy of a scanline (0..479) to another scanline. |
* vid12_vramcpy_prep() must be called before and vid12_vramcpy_done must be |
* called after one or more vid12_vramcpy_scanline() calls. */ |
void vid12_vramcpy_scanline(unsigned short dst, unsigned short src); |
/* sets VGA back to its normal state after VRAM-to-VRAM operations */ |
void vid12_vramcpy_done(void); |
void vid12_setpalette(unsigned char index, unsigned char r, unsigned char g, unsigned char b); |
#endif |
//sved/tags/2023.0/mdr/inc/mdr/video.h |
---|
0,0 → 1,94 |
/* |
* video library - provides a few functions for mode 4 and 13h programming. |
* |
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io |
* Published under the terms of the MIT License, as stated below. |
* |
* Copyright (C) 2014-2023 Mateusz Viste |
* |
* Permission is hereby granted, free of charge, to any person obtaining a copy |
* of this software and associated documentation files (the "Software"), to |
* deal in the Software without restriction, including without limitation the |
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
* sell copies of the Software, and to permit persons to whom the Software is |
* furnished to do so, subject to the following conditions: |
* |
* The above copyright notice and this permission notice shall be included in |
* all copies or substantial portions of the Software. |
* |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
* IN THE SOFTWARE. |
*/ |
#ifndef MDR_VIDEO_H |
#define MDR_VIDEO_H |
#define VIDEO_DBUF 1 |
struct video_handler { |
unsigned char far *dbuf; |
int flags; |
int mode; |
unsigned char lastmode; |
}; |
/* returns 0 if no VGA has been detected, non-zero otherwise */ |
int video_detectvga(void); |
/* returns 0 if no EGA has been detected, non-zero otherwise */ |
int video_detectega(void); |
/* init video mode. either 0x04 for CGA or 0x13 for VGA */ |
struct video_handler *video_open(int mode, int flags); |
/* reads a screen dump from file and puts it to the screen buffer */ |
void video_file2screen(struct video_handler *handler, char *file); |
/* load count colors of palette from array of rgb triplets */ |
void video_loadpal(const unsigned char *pal, int count, int offset); |
/* Wait until VBLANK */ |
void video_waitvblank(void); |
void video_flip(struct video_handler *handler); |
/* copies line ysrc over ydst in CGA mode memory */ |
void video_cgalinecopy(struct video_handler *handler, int ydst, int ysrc); |
/* clear screen using color */ |
void video_cls(struct video_handler *handler, unsigned char color); |
/* renders a sprite of width and height dimensions onscreen, starting at specified x/y location |
coloffset is an offset to add to color indexes, while transp is the index of the transparent color (set to -1 if none) */ |
void video_putsprite(struct video_handler *handler, unsigned char *sprite, int x, int y, int width, int height, int coloffset, int transp, int maxcol); |
/* same as video_putsprite(), but reads the sprite from a file */ |
void video_putspritefromfile(struct video_handler *handler, char *file, long foffset, int x, int y, int width, int height, int coloffset, int transp, int maxcol); |
void video_close(struct video_handler *handler); |
void video_rputpixel(struct video_handler *handler, int x, int y, unsigned char col, int repeat); |
/* render a horizontal line of length len starting at x/y */ |
void video_hline(struct video_handler *handler, int x, int y, int len, unsigned char color); |
/* render a vertical line of length len starting at x/y */ |
void video_vline(struct video_handler *handler, int x, int y, int len, unsigned char color); |
void video_line(struct video_handler *handler, int x1, int y1, int x2, int y2, unsigned char color); |
void video_rect(struct video_handler *handler, int x, int y, int width, int height, unsigned char color); |
/* renders a rectangle on screen, at position x/y, filled with color */ |
void video_rectfill(struct video_handler *handler, int x, int y, int width, int height, unsigned char color); |
void video_setpalette(unsigned char index, unsigned char r, unsigned char g, unsigned char b); |
void video_getpalette(unsigned char index, unsigned char *r, unsigned char *g, unsigned char *b); |
#endif |
//sved/tags/2023.0/mdr/inc/mdr/wave.h |
---|
0,0 → 1,42 |
/* |
* WAVE-loading routines |
* |
* Copyright (C) 2022 Mateusz Viste |
* |
* Permission is hereby granted, free of charge, to any person obtaining a copy |
* of this software and associated documentation files (the "Software"), to |
* deal in the Software without restriction, including without limitation the |
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
* sell copies of the Software, and to permit persons to whom the Software is |
* furnished to do so, subject to the following conditions: |
* |
* The above copyright notice and this permission notice shall be included in |
* all copies or substantial portions of the Software. |
* |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
* IN THE SOFTWARE. |
*/ |
#ifndef MDR_WAVE_H |
#define MDR_WAVE_H |
struct wave_t { |
unsigned short format; |
unsigned short channels; |
unsigned short rate; |
unsigned short bitdepth; |
unsigned long dataoffset; |
unsigned long len; |
}; |
/* looks at an open WAVE file and fills the wav structure with related |
* information (format, number of channels, bit depth, data rate, etc) |
* returns 0 on success */ |
int wave_anal(struct wave_t *wav, FILE *fd); |
#endif |
//sved/tags/2023.0/mdr/inc/mdr/xms.h |
---|
0,0 → 1,51 |
/* |
* XMS driver |
* |
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io |
* Published under the terms of the MIT License, as stated below. |
* |
* Copyright (C) 2014-2022 Mateusz Viste |
* |
* Permission is hereby granted, free of charge, to any person obtaining a copy |
* of this software and associated documentation files (the "Software"), to |
* deal in the Software without restriction, including without limitation the |
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
* sell copies of the Software, and to permit persons to whom the Software is |
* furnished to do so, subject to the following conditions: |
* |
* The above copyright notice and this permission notice shall be included in |
* all copies or substantial portions of the Software. |
* |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
* IN THE SOFTWARE. |
*/ |
#ifndef MDR_XMS_H |
#define MDR_XMS_H |
struct xms_struct { |
unsigned int handle; |
long memsize; /* allocated memory size, in bytes */ |
}; |
/* checks if a XMS driver is installed, inits it and allocates a memory block of memsize K-bytes. |
* if memsize is 0, then the maximum possible block will be allocated. |
* returns the amount of allocated memory (in K-bytes) on success, 0 otherwise. */ |
unsigned int xms_init(struct xms_struct *xms, unsigned int memsize); |
/* free XMS memory */ |
void xms_close(struct xms_struct *xms); |
/* copies a chunk of memory from conventional memory into the XMS block. |
returns 0 on sucess, non-zero otherwise. */ |
int xms_push(struct xms_struct *xms, void far *src, unsigned int len, long xmsoffset); |
/* copies a chunk of memory from the XMS block into conventional memory */ |
int xms_pull(struct xms_struct *xms, long xmsoffset, void far *dst, unsigned int len); |
#endif |
//sved/tags/2023.0/mdr/mdrs2023.lib |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
//sved/tags/2023.0/mdr/readme.txt |
---|
0,0 → 1,77 |
Mateusz' DOS Routines |
http://mdr.osdn.io |
Mateusz' DOS Routines (MDR) is a collection of C library that contain a variety |
of routines to ease the development of real mode DOS applications. |
These routines are mostly targeted at the Open Watcom compiler, but might work |
with other C compilers as well. |
All the routines have been created by Mateusz Viste and are published under the |
terms of the MIT license. |
List of available modules: |
BIOS BIOS-based functions |
COUT console output (writing to text-mode display) |
DOS functions interacting with DOS |
KEYB basic functions to interact with the keyboard |
MOUSE mouse routines |
PCX parsing, loading and uncompressing PCX images |
RS232 writing to and reading from an RS-232 ("COM") port |
SBDIGI playing digitized sounds with a SoundBlaster-compatible card |
TIMER high-resolution timer, relies on PIT reprogramming |
TRIGINT sin and cos functions using integers only (8086-compatible) |
UNZIP iteration over ZIP archives (no decompression code) |
VID12 driver for mode 12h VGA graphic (640x480, 16 colors) |
VIDEO drivers for 320x200 video modes (256 colors on VGA, 16 colors on CGA) |
WAVE parsing and loading WAVE sound files |
XMS detecting and using XMS memory to store data |
Documentation is contained within header (*.H) files. |
+============================================================================+ |
| USAGE | |
+============================================================================+ |
Using MDR is no different than using any other library: you need to include |
the header file(s) you wish to rely on and pass the lib file that matches your |
memory model (small/compact/medium/large) to your linker. |
Example program, KBTEST.C: |
#include <mdr\keyb.h> |
int main(void) { |
keyb_getkey(); |
return(0); |
} |
How to compile with the Watcom C Compile and Link Utility: |
wcl -ms kbtest.c mdrs2023.lib |
+============================================================================+ |
| COMPILATION FROM SOURCES | |
+============================================================================+ |
Should you wish to compile MDR from souces instead of relying on precompiled |
LIB binaries, you will need the Watcom (or Open Watcom) C compiler and use its |
wmake utility as follows: |
wmake clean |
wmake model=<MEMORY MODEL> |
valid options are: |
wmake model=s |
wmake model=c |
wmake model=m |
wmake model=l |
============================================================================== |