Set FP_OFF (), FP_SEG() for the callback function at interrupt setting in WonderWitch
Adjust appropriately according to the setting method. (Fit to wwterm)
UNIXTimer.c: UNIXTimer_Unpause()
((unix_timer -> pause == 1) && (unix_timer -> interrupt_in_pause == 0))
Fixed a bug that was not unix_timer-> pause--; when it was.
(It was not unposted when interrupt was not applied during pause)
Serial receive interrupt, keyboard interrupt added. (corresponding to wwterm, operation confirmed)
Added UNIXSerialPort class.
With this, at WonderWitch,
com_intvector.callback = (void (near *) ()) FP_OFF (com_handler);
com_intvector.cs = _ asm_inline ("\tmov \tax, cs");
com_intvector.ds = _ asm_inline ("\tmov \tax, ds");
sys_interrupt_set_hook (SYS_INT_RECEIVEREADY,
& com_intvector, & com_last_intvector);
Interrupt setting like that shown in Fig.
For warning, add WonX_Warning ().
Move WonX_Error () to WonX.c.
comm_send_string (), text_put_string (), text_put_substring () When executed
Fix output message.
Implement cursor display function. (Add WWCursor class) (Do not blink. Display only)
When displaying the cursor, text information inside WWDisplay_DrawLCDPanel ()
Since we need to be able to read it, we will discontinue the WonXText class and add the WWText class
I moved to a member of the WWDisplay class.
In palette_get_color (), transparent color is displayed when executing WWPalette_GetMappedColors ()
Since it was not considered to be returned as -1, palette_get_color ()
Fixed a bug where return value was wrong value.
Character color palette, LCD color palette initial value, with WonderWitch
It was made to coincide with the initial value.
As a sample, add wwterm - b 05. (Add wwterm target to Makefile)
Version 1.1 - from wonx-1.1.tar.gz
83 lines
4.3 KiB
C
83 lines
4.3 KiB
C
#ifndef _WONX_SYS_SERVICE_H_
|
|
#define _WONX_SYS_SERVICE_H_
|
|
|
|
#include "types.h"
|
|
|
|
#define MK_WORD(high,low) (((unsigned short int)(high) << 8) | ((unsigned short int)(low)))
|
|
#define MK_DWORD(high,low) (((unsigned long int)(high) << 16) | ((unsigned long int)(low)))
|
|
#define MK_FP(seg,off) ((void *)MK_DWORD(seg,off))
|
|
|
|
#if 0
|
|
#define FP_OFF(p) ((unsigned short int)((unsigned long int)(p) & 0xffff))
|
|
#define FP_SEG(p) ((unsigned short int)((unsigned long int)(p) >> 16))
|
|
#else
|
|
#define FP_OFF(p) (p)
|
|
#define FP_SEG(p) (0)
|
|
#endif
|
|
|
|
int _asm_inline(char * code);
|
|
int _asm_int(char * code, int ax);
|
|
int _asm_intb(char * code, int ax, unsigned char bl);
|
|
int _asm_intbb(char * code, int ax, unsigned char bl, unsigned char cl);
|
|
int _asm_intw(char * code, int ax, int bx);
|
|
int _asm_intww(char * code, int ax, int bx, int cx);
|
|
int _asm_intwww(char * code, int ax, int bx, int cx, int dx);
|
|
int _asm_intwwww(char * code, int ax, int bx, int cx, int dx, int si);
|
|
int _asm_intwp(char * code, int ax, int bx, int (*dummy)(void), void * dx);
|
|
int _asm_intwwp(char * code, int ax, int bx, int cx, void * dx);
|
|
int _asm_intwwwp(char * code, int ax, int bx, int cx, int dx, void * si);
|
|
int _asm_intwfp(char * code, int ax, int bx, void * dsdx);
|
|
int _asm_intfp(char * code, int ax, void * bxdx);
|
|
|
|
long int _asm_intl(char * code, int ax);
|
|
long int _asm_intlw(char * code, int ax, int bx);
|
|
long int _asm_intlww(char * code, int ax, int bx, int cx);
|
|
long int _asm_intlwww(char * code, int ax, int bx, int cx, int dx);
|
|
long int _asm_intlwwww(char * code, int ax, int bx, int cx, int dx, int si);
|
|
long int _asm_intlwp(char * code, int ax, int bx, int (*dummy)(void), void * dx);
|
|
long int _asm_intlwwp(char * code, int ax, int bx, int cx, void * dx);
|
|
long int _asm_intlwwwp(char * code, int ax, int bx, int cx, int dx, void * si);
|
|
long int _asm_intlwfp(char * code, int ax, int bx, void * dsdx);
|
|
|
|
#define service(vec, ah) _asm_int(NULL,0)
|
|
#define serviceb(vec, ah, bl) _asm_intb(NULL,0,0)
|
|
#define servicebb(vec, ah, bl, cl) _asm_intbb(NULL,0,0,0)
|
|
#define servicew(vec, ah, bx) _asm_intw(NULL,0,0)
|
|
#define serviceww(vec, ah, bx, cx) _asm_intww(NULL,0,0,0)
|
|
#define servicewww(vec, ah, bx, cx, dx) _asm_intwww(NULL,0,0,0,0)
|
|
#define servicew_w(vec, ah, bx, dx) _asm_intwww(NULL,0,0,0,0)
|
|
#define servicewwww(vec, ah, bx, cx, dx, si) _asm_intwwww(NULL,0,0,0,0,0)
|
|
#define servicewp(vec, ah, bx, dx) _asm_intwp(NULL,0,0,0,0)
|
|
#define servicewwp(vec, ah, bx, cx, dx) _asm_intwwp(NULL,0,0,0,0)
|
|
#define servicewwwp(vec, ah, bx, cx, dx, si) _asm_intwwwp(NULL,0,0,0,0,0)
|
|
#define servicewfp(vec, ah, bx, dsdx) _asm_intwfp(NULL,0,0,0)
|
|
#define servicewwfp(vec, ah, bx, cx, dsdx) _asm_intwfp(NULL,0,0,0)
|
|
#define servicefp(vec, ah, bxdx) _asm_intwfp(NULL,0,0,0)
|
|
|
|
#define servicex(vec, ah, al) _asm_int(NULL,0)
|
|
#define servicexw(vec, ah, al, bx) _asm_intw(NULL,0,0)
|
|
#define servicexww(vec, ah, al, bx, cx) _asm_intww(NULL,0,0,0)
|
|
#define servicexwww(vec, ah, al, bx, cx, dx) _asm_intwww(NULL,0,0,0,0)
|
|
#define servicexwwww(vec, ah, al, bx, cx, dx, si) _asm_intwwww(NULL,0,0,0,0,0)
|
|
#define servicexwp(vec, ah, al, bx, dx) _asm_intwp(NULL,0,0,0,0)
|
|
#define servicexwwp(vec, ah, al, bx, cx, dx) _asm_intwwp(NULL,0,0,0,0)
|
|
#define servicexwfp(vec, ah, al, bx, dsdx) _asm_intwfp(NULL,0,0,0)
|
|
|
|
#define servicel(vec, ah) _asm_intl(NULL,0)
|
|
#define servicelw(vec, ah, bx) _asm_intlw(NULL,0,0)
|
|
#define servicelww(vec, ah, bx, cx) _asm_intlww(NULL,0,0,0)
|
|
#define servicelwww(vec, ah, bx, cx, dx) _asm_intlwww(NULL,0,0,0,0)
|
|
#define servicelwp(vec, ah, bx, dx) _asm_intlwp(NULL,0,0,0,0)
|
|
#define servicelwfp(vec, ah, bx, dsdx) _asm_intlwfp(NULL,0,0,0)
|
|
|
|
#define servicelx(vec, ah, al) _asm_intl(NULL ,0)
|
|
#define servicelxw(vec, ah, al, bx) _asm_intlw(NULL,0,0)
|
|
#define servicelxww(vec, ah, al, bx, cx) _asm_intlww(NULL,0,0,0)
|
|
#define servicelxwww(vec, ah, al, bx, cx, dx) _asm_intlwww(NULL,0,0,0,0)
|
|
#define servicelxwp(vec, ah, al, bx, dx) _asm_intlwp(NULL,0,0,0,0)
|
|
#define servicelxwfp(vec, ah, al, bx, dsdx) _asm_intlwfp(NULL,0,0,0)
|
|
|
|
void bios_exit();
|
|
|
|
#endif
|