First CVS upload.
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@80
This commit is contained in:
parent
7d1ca9bdd4
commit
42e5d0b779
158 changed files with 42940 additions and 0 deletions
29
include/Makefile.am
Normal file
29
include/Makefile.am
Normal file
|
@ -0,0 +1,29 @@
|
|||
noinst_HEADERS = \
|
||||
bios.h \
|
||||
callback.h \
|
||||
cpu.h \
|
||||
cross.h \
|
||||
debug.h \
|
||||
dma.h \
|
||||
dos_inc.h \
|
||||
dos_system.h \
|
||||
dosbox.h \
|
||||
fpu.h \
|
||||
hardware.h \
|
||||
inout.h \
|
||||
joystick.h \
|
||||
keyboard.h \
|
||||
mem.h \
|
||||
mixer.h \
|
||||
modules.h \
|
||||
mouse.h \
|
||||
pic.h \
|
||||
programs.h \
|
||||
render.h \
|
||||
regs.h \
|
||||
render.h \
|
||||
setup.h \
|
||||
support.h \
|
||||
timer.h \
|
||||
video.h
|
||||
|
120
include/bios.h
Normal file
120
include/bios.h
Normal file
|
@ -0,0 +1,120 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#define BIOS_BASE_ADDRESS_COM1 0x400
|
||||
#define BIOS_BASE_ADDRESS_COM2 0x402
|
||||
#define BIOS_BASE_ADDRESS_COM3 0x404
|
||||
#define BIOS_BASE_ADDRESS_COM4 0x406
|
||||
#define BIOS_ADDRESS_LPT1 0x408
|
||||
#define BIOS_ADDRESS_LPT2 0x40a
|
||||
#define BIOS_ADDRESS_LPT3 0x40c
|
||||
/* 0x40e is reserved */
|
||||
#define BIOS_CONFIGURATION 0x410
|
||||
/* 0x412 is reserved */
|
||||
#define BIOS_MEMORY_SIZE 0x413
|
||||
/* #define bios_expansion_memory_size (*(unsigned int *) 0x415) */
|
||||
#define BIOS_KEYBOARD_STATE 0x417
|
||||
#define BIOS_KEYBOARD_FLAGS1 BIOS_KEYBOARD_STATE
|
||||
#define BIOS_KEYBOARD_FLAGS2 0x418
|
||||
#define BIOS_KEYBOARD_TOKEN 0x419
|
||||
/* used for keyboard input with Alt-Number */
|
||||
#define BIOS_KEYBOARD_BUFFER_HEAD 0x41a
|
||||
#define BIOS_KEYBOARD_BUFFER_TAIL 0x41c
|
||||
#define BIOS_KEYBOARD_BUFFER 0x41e
|
||||
/* #define bios_keyboard_buffer (*(unsigned int *) 0x41e) */
|
||||
#define BIOS_DRIVE_ACTIVE 0x43e
|
||||
#define BIOS_DRIVE_RUNNING 0x43f
|
||||
#define BIOS_MOTOR_NACHLAUFZEIT 0x440
|
||||
#define BIOS_DISK_STATUS 0x441
|
||||
/* #define bios_fdc_result_buffer (*(unsigned short *) 0x442) */
|
||||
#define BIOS_VIDEO_MODE 0x449
|
||||
#define BIOS_SCREEN_COLUMNS 0x44a
|
||||
#define BIOS_VIDEO_MEMORY_USED 0x44c
|
||||
#define BIOS_VIDEO_MEMORY_ADDRESS 0x44e
|
||||
#define BIOS_VIDEO_CURSOR_POS 0x450
|
||||
|
||||
|
||||
#define BIOS_CURSOR_SHAPE 0x460
|
||||
#define BIOS_CURSOR_LAST_LINE 0x460
|
||||
#define BIOS_CURSOR_FIRST_LINE 0x461
|
||||
#define BIOS_CURRENT_SCREEN_PAGE 0x462
|
||||
#define BIOS_VIDEO_PORT 0x463
|
||||
#define BIOS_VDU_CONTROL 0x465
|
||||
#define BIOS_VDU_COLOR_REGISTER 0x466
|
||||
/* 0x467-0x468 is reserved */
|
||||
#define BIOS_TIMER 0x46c
|
||||
#define BIOS_24_HOURS_FLAG 0x470
|
||||
#define BIOS_KEYBOARD_FLAGS 0x471
|
||||
#define BIOS_CTRL_ALT_DEL_FLAG 0x472
|
||||
#define BIOS_HARDDISK_COUNT 0x475
|
||||
/* 0x474, 0x476, 0x477 is reserved */
|
||||
#define BIOS_LPT1_TIMEOUT 0x478
|
||||
#define BIOS_LPT2_TIMEOUT 0x479
|
||||
#define BIOS_LPT3_TIMEOUT 0x47a
|
||||
/* 0x47b is reserved */
|
||||
#define BIOS_COM1_TIMEOUT 0x47c
|
||||
#define BIOS_COM2_TIMEOUT 0x47d
|
||||
/* 0x47e is reserved */
|
||||
/* 0x47f-0x4ff is unknow for me */
|
||||
#define BIOS_KEYBOARD_BUFFER_START 0x480
|
||||
#define BIOS_KEYBOARD_BUFFER_END 0x482
|
||||
|
||||
#define BIOS_ROWS_ON_SCREEN_MINUS_1 0x484
|
||||
#define BIOS_FONT_HEIGHT 0x485
|
||||
|
||||
#define BIOS_VIDEO_INFO_0 0x487
|
||||
#define BIOS_VIDEO_INFO_1 0x488
|
||||
#define BIOS_VIDEO_INFO_2 0x489
|
||||
#define BIOS_VIDEO_COMBO 0x48a
|
||||
|
||||
#define BIOS_KEYBOARD_FLAGS3 0x496
|
||||
#define BIOS_KEYBOARD_LEDS 0x497
|
||||
#define BIOS_PRINT_SCREEN_FLAG 0x500
|
||||
|
||||
#define BIOS_VIDEO_SAVEPTR 0x4a8
|
||||
|
||||
/* The Section handling Bios Disk Access */
|
||||
#define BIOS_MAX_DISK 10
|
||||
|
||||
class BIOS_Disk {
|
||||
public:
|
||||
virtual Bit8u Read_Sector(Bit8u * count,Bit8u head,Bit16u cylinder,Bit16u sector,Bit8u * data)=0;
|
||||
virtual Bit8u Write_Sector(Bit8u * count,Bit8u head,Bit16u cylinder,Bit16u sector,Bit8u * data)=0;
|
||||
};
|
||||
|
||||
class imageDisk : public BIOS_Disk {
|
||||
public:
|
||||
Bit8u Read_Sector(Bit8u * count,Bit8u head,Bit16u cylinder,Bit16u sector,Bit8u * data);
|
||||
Bit8u Write_Sector(Bit8u * count,Bit8u head,Bit16u cylinder,Bit16u sector,Bit8u * data);
|
||||
imageDisk(char * file);
|
||||
private:
|
||||
Bit16u sector_size;
|
||||
Bit16u heads,cylinders,sectors;
|
||||
Bit8u * image;
|
||||
};
|
||||
|
||||
|
||||
void char_out(Bit8u chr,Bit32u att,Bit8u page);
|
||||
void INT10_StartUp(void);
|
||||
void INT16_StartUp(void);
|
||||
void INT2A_StartUp(void);
|
||||
void INT2F_StartUp(void);
|
||||
void INT33_StartUp(void);
|
||||
void INT13_StartUp(void);
|
||||
|
||||
|
56
include/callback.h
Normal file
56
include/callback.h
Normal file
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __CALLBACK_H
|
||||
#define __CALLBACK_H
|
||||
|
||||
#include <mem.h>
|
||||
|
||||
typedef Bitu (*CallBack_Handler)(void);
|
||||
extern CallBack_Handler CallBack_Handlers[];
|
||||
|
||||
enum { CB_RETF,CB_IRET };
|
||||
|
||||
#define CB_MAX 1024
|
||||
#define CB_SEG 0xC800
|
||||
|
||||
enum {
|
||||
CBRET_NONE=0,CBRET_STOP=1
|
||||
};
|
||||
|
||||
extern Bit8u lastint;
|
||||
INLINE RealPt CALLBACK_RealPointer(Bitu callback) {
|
||||
return RealMake(CB_SEG,callback << 4);
|
||||
}
|
||||
|
||||
Bitu CALLBACK_Allocate();
|
||||
|
||||
void CALLBACK_Idle(void);
|
||||
|
||||
|
||||
void CALLBACK_RunRealInt(Bit8u intnum);
|
||||
void CALLBACK_RunRealFar(Bit16u seg,Bit16u off);
|
||||
|
||||
bool CALLBACK_Setup(Bitu callback,CallBack_Handler handler,Bitu type);
|
||||
|
||||
bool CALLBACK_Free(Bitu callback);
|
||||
|
||||
void CALLBACK_SCF(bool val);
|
||||
void CALLBACK_SZF(bool val);
|
||||
#endif
|
||||
|
99
include/cpu.h
Normal file
99
include/cpu.h
Normal file
|
@ -0,0 +1,99 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __CPU_H
|
||||
#define __CPU_H
|
||||
|
||||
#include <dosbox.h>
|
||||
#include <regs.h>
|
||||
#include <mem.h>
|
||||
|
||||
/* Some common Defines */
|
||||
/* A CPU Handler */
|
||||
typedef Bitu (CPU_Decoder)(Bitu count);
|
||||
extern CPU_Decoder * cpudecoder;
|
||||
extern Bit32u cpu_cycles;
|
||||
|
||||
|
||||
extern Bit32u hoever;
|
||||
|
||||
//CPU Stuff
|
||||
void SetCPU16bit();
|
||||
void SetSegment_16(Bit32u seg,Bit16u val);
|
||||
|
||||
|
||||
//Types of Flag changing instructions
|
||||
enum {
|
||||
t_ADDb=0,t_ADDw,t_ADDd,
|
||||
t_ORb,t_ORw,t_ORd,
|
||||
t_ADCb,t_ADCw,t_ADCd,
|
||||
t_SBBb,t_SBBw,t_SBBd,
|
||||
t_ANDb,t_ANDw,t_ANDd,
|
||||
t_SUBb,t_SUBw,t_SUBd,
|
||||
t_XORb,t_XORw,t_XORd,
|
||||
t_CMPb,t_CMPw,t_CMPd,
|
||||
t_INCb,t_INCw,t_INCd,
|
||||
t_DECb,t_DECw,t_DECd,
|
||||
t_TESTb,t_TESTw,t_TESTd,
|
||||
t_SHLb,t_SHLw,t_SHLd,
|
||||
t_SHRb,t_SHRw,t_SHRd,
|
||||
t_SARb,t_SARw,t_SARd,
|
||||
t_ROLb,t_ROLw,t_ROLd,
|
||||
t_RORb,t_RORw,t_RORd,
|
||||
t_RCLb,t_RCLw,t_RCLd,
|
||||
t_RCRb,t_RCRw,t_RCRd,
|
||||
t_NEGb,t_NEGw,t_NEGd,
|
||||
t_CF,t_ZF,
|
||||
|
||||
t_DSHLw,t_DSHLd,
|
||||
t_DSHRw,t_DSHRd,
|
||||
t_MUL,t_DIV,
|
||||
t_UNKNOWN,
|
||||
t_NOTDONE,
|
||||
};
|
||||
|
||||
enum { rep_NONE,rep_Z,rep_NZ };
|
||||
|
||||
|
||||
void Interrupt(Bit8u num);
|
||||
|
||||
//Flag Handling
|
||||
bool get_CF(void);
|
||||
bool get_AF(void);
|
||||
bool get_ZF(void);
|
||||
bool get_SF(void);
|
||||
bool get_OF(void);
|
||||
bool get_PF(void);
|
||||
|
||||
Bit8u get_Flags8(void);
|
||||
|
||||
|
||||
|
||||
|
||||
#define LoadCF flags.cf=get_CF();
|
||||
#define LoadZF flags.zf=get_ZF();
|
||||
#define LoadSF flags.sf=get_SF();
|
||||
#define LoadOF flags.of=get_OF();
|
||||
//The opcode handlers
|
||||
|
||||
|
||||
void FPU_ESC0_Normal(Bitu rm);
|
||||
void FPU_ESC0_EA(Bitu func,PhysPt ea);
|
||||
|
||||
#endif
|
||||
|
54
include/cross.h
Normal file
54
include/cross.h
Normal file
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef _CROSS_H
|
||||
#define _CROSS_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#if defined (_MSC_VER) /* MS Visual C++ */
|
||||
#include <direct.h>
|
||||
#include <io.h>
|
||||
#else /* LINUX */
|
||||
#include <dirent.h>
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#define CROSS_LEN 512 /* Maximum filename size */
|
||||
|
||||
|
||||
#if defined (_MSC_VER) /* MS Visual C++ */
|
||||
#define CROSS_FILENAME(blah)
|
||||
#define CROSS_FILESPLIT '\\'
|
||||
#define F_OK 0
|
||||
#else
|
||||
#define CROSS_FILENAME(blah) strreplace(blah,'\\','/')
|
||||
#define CROSS_FILESPLIT '/'
|
||||
#endif
|
||||
|
||||
#define CROSS_NONE 0
|
||||
#define CROSS_FILE 1
|
||||
#define CROSS_DIR 2
|
||||
|
||||
|
||||
extern const char * dosbox_datadir;
|
||||
|
||||
#endif
|
||||
|
24
include/debug.h
Normal file
24
include/debug.h
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
void DEBUG_DrawScreen(void);
|
||||
bool DEBUG_BreakPoint(void);
|
||||
void DEBUG_Enable(void);
|
||||
|
||||
extern Bitu cycle_count;
|
||||
|
24
include/dma.h
Normal file
24
include/dma.h
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
void DMA_8_Read(Bit32u channel,Bit8u * buffer,Bit16u count);
|
||||
void DMA_8_Write(Bit32u dmachan,Bit8u * buffer,Bit16u count);
|
||||
|
||||
void DMA_16_Read(Bit32u channel,Bit8u * buffer,Bit16u count);
|
||||
void DMA_16_Write(Bit32u dmachan,Bit8u * buffer,Bit16u count);
|
||||
|
275
include/dos_inc.h
Normal file
275
include/dos_inc.h
Normal file
|
@ -0,0 +1,275 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef DOS_H_
|
||||
#define DOS_H_
|
||||
|
||||
#include <dos_system.h>
|
||||
#include <mem.h>
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
struct CommandTail{
|
||||
Bit8u count; /* number of bytes returned */
|
||||
char buffer[127]; /* the buffer itself */
|
||||
};
|
||||
|
||||
struct PSP {
|
||||
Bit8u exit[2]; /* CP/M-like exit poimt */
|
||||
Bit16u mem_size; /* memory size in paragraphs */
|
||||
Bit8u fill_1; /* single char fill */
|
||||
|
||||
/* CPM Stuff dunno what this is*/
|
||||
//TODO Add some checks for people using this i think
|
||||
Bit8u far_call; /* far call opcode */
|
||||
RealPt cpm_entry; /* CPM Service Request address*/
|
||||
RealPt int_22; /* Terminate Address */
|
||||
RealPt int_23; /* Break Address */
|
||||
RealPt int_24; /* Critical Error Address */
|
||||
Bit16u psp_parent; /* Parent PSP Segment */
|
||||
Bit8u files[20]; /* File Table - 0xff is unused */
|
||||
Bit16u environment; /* Segment of evironment table */
|
||||
RealPt stack; /* SS:SP Save point for int 0x21 calls */
|
||||
Bit16u max_files; /* Maximum open files */
|
||||
RealPt file_table; /* Pointer to File Table PSP:0x18 */
|
||||
RealPt prev_psp; /* Pointer to previous PSP */
|
||||
RealPt dta; /* Pointer to current Process DTA */
|
||||
Bit8u fill_2[16]; /* Lot's of unused stuff i can't care aboue */
|
||||
Bit8u service[3]; /* INT 0x21 Service call int 0x21;retf; */
|
||||
Bit8u fill_3[45]; /* This has some blocks with FCB info */
|
||||
|
||||
CommandTail cmdtail;
|
||||
|
||||
};
|
||||
|
||||
struct ParamBlock {
|
||||
union {
|
||||
struct {
|
||||
Bit16u loadseg;
|
||||
Bit16u relocation;
|
||||
} overlay;
|
||||
struct {
|
||||
Bit16u envseg;
|
||||
RealPt cmdtail;
|
||||
RealPt fcb1;
|
||||
RealPt fcb2;
|
||||
RealPt initsssp;
|
||||
RealPt initcsip;
|
||||
} exec;
|
||||
};
|
||||
};
|
||||
|
||||
struct MCB {
|
||||
Bit8u type;
|
||||
Bit16u psp_segment;
|
||||
Bit16u size;
|
||||
Bit8u unused[3];
|
||||
Bit8u filename[8];
|
||||
};
|
||||
|
||||
struct FCB {
|
||||
Bit8u drive; //0 is current drive. when opened 0 is replaced by drivenumber
|
||||
Bit8u filename[8]; //spacepadded to fit
|
||||
Bit8u ext[3]; //spacepadded to fit
|
||||
Bit16u current_block; // set to 0 by open
|
||||
Bit16u record_size; // used by reads Set to 80h by OPEN function
|
||||
Bit32u filesize; //in bytes In this field, the first word is the low-order part of the size
|
||||
Bit16u date;
|
||||
Bit16u time;
|
||||
Bit8u reserved[8];
|
||||
Bit8u current_relative_record_number; //open doesn't set this
|
||||
Bit32u rel_record; //open does not handle this
|
||||
};
|
||||
|
||||
#pragma pack()
|
||||
|
||||
struct DOS_Date {
|
||||
Bit16u year;
|
||||
Bit8u month;
|
||||
Bit8u day;
|
||||
};
|
||||
|
||||
|
||||
struct DOS_Version {
|
||||
Bit8u major,minor,revision;
|
||||
};
|
||||
|
||||
struct DOS_Block {
|
||||
DOS_Date date;
|
||||
DOS_Version version;
|
||||
Bit16u firstMCB;
|
||||
Bit16u errorcode;
|
||||
Bit16u psp;
|
||||
Bit16u env;
|
||||
RealPt cpmentry;
|
||||
RealPt dta;
|
||||
Bit8u return_code,return_mode;
|
||||
|
||||
bool verify;
|
||||
bool breakcheck;
|
||||
struct {
|
||||
RealPt indosflag;
|
||||
} tables;
|
||||
|
||||
};
|
||||
|
||||
enum { MCB_FREE=0x0000,MCB_DOS=0x0008 };
|
||||
enum { RETURN_EXIT=0,RETURN_CTRLC=1,RETURN_ABORT=2,RETURN_TSR=3};
|
||||
|
||||
#define DOS_FILES 50
|
||||
#define DOS_DRIVES 26
|
||||
|
||||
/* internal Dos Tables */
|
||||
extern DOS_Block dos;
|
||||
extern DOS_File * Files[DOS_FILES];
|
||||
extern DOS_Drive * Drives[DOS_DRIVES];
|
||||
|
||||
|
||||
void DOS_SetError(Bit16u code);
|
||||
|
||||
/* File Handling Routines */
|
||||
|
||||
enum { STDIN=0,STDOUT=1,STDERR=2,STDAUX=3,STDNUL=4,STDPRN=5};
|
||||
enum { HAND_NONE=0,HAND_FILE,HAND_DEVICE};
|
||||
|
||||
|
||||
|
||||
/* Routines for File Class */
|
||||
void DOS_SetupFiles (void);
|
||||
|
||||
bool DOS_ReadFile(Bit16u handle,Bit8u * data,Bit16u * amount);
|
||||
bool DOS_WriteFile(Bit16u handle,Bit8u * data,Bit16u * amount);
|
||||
bool DOS_SeekFile(Bit16u handle,Bit32u * pos,Bit32u type);
|
||||
bool DOS_CloseFile(Bit16u handle);
|
||||
bool DOS_DuplicateEntry(Bit16u entry,Bit16u * newentry);
|
||||
/* Routines for Drive Class */
|
||||
bool DOS_OpenFile(char * name,Bit8u flags,Bit16u * entry);
|
||||
bool DOS_CreateFile(char * name,Bit16u attribute,Bit16u * entry);
|
||||
bool DOS_UnlinkFile(char * name);
|
||||
bool DOS_FindFirst(char *search,Bit16u attr);
|
||||
bool DOS_FindNext(void);
|
||||
bool DOS_Canonicalize(char * small,Bit8u * big);
|
||||
bool DOS_CreateTempFile(char * name,Bit16u * entry);
|
||||
bool DOS_FileExists(char * name);
|
||||
/* Drive Handing Routines */
|
||||
Bit8u DOS_GetDefaultDrive(void);
|
||||
void DOS_SetDefaultDrive(Bit8u drive);
|
||||
bool DOS_SetDrive(Bit8u drive);
|
||||
bool DOS_GetCurrentDir(Bit8u drive,Bit8u * buffer);
|
||||
bool DOS_ChangeDir(char * dir);
|
||||
bool DOS_MakeDir(char * dir);
|
||||
bool DOS_RemoveDir(char * dir);
|
||||
bool DOS_Rename(char * oldname,char * newname);
|
||||
bool DOS_GetFreeDiskSpace(Bit8u drive,Bit16u * bytes,Bit16u * sectors,Bit16u * clusters,Bit16u * free);
|
||||
bool DOS_GetFileAttr(char * name,Bit16u * attr);
|
||||
/* IOCTL Stuff */
|
||||
bool DOS_IOCTL(Bit8u call,Bit16u entry);
|
||||
bool DOS_GetSTDINStatus();
|
||||
Bit8u DOS_FindDevice(char * name);
|
||||
void DOS_SetupDevices(void);
|
||||
/* Execute and new process creation */
|
||||
bool DOS_NewPSP(Bit16u pspseg);
|
||||
bool DOS_Execute(char * name,ParamBlock * block,Bit8u flags);
|
||||
bool DOS_Terminate(bool tsr);
|
||||
|
||||
/* Memory Handling Routines */
|
||||
void DOS_SetupMemory(void);
|
||||
bool DOS_AllocateMemory(Bit16u * segment,Bit16u * blocks);
|
||||
bool DOS_ResizeMemory(Bit16u segment,Bit16u * blocks);
|
||||
bool DOS_FreeMemory(Bit16u segment);
|
||||
void DOS_FreeProcessMemory(Bit16u pspseg);
|
||||
Bit16u DOS_GetMemory(Bit16u pages);
|
||||
|
||||
/* Extra DOS Interrupts */
|
||||
void DOS_SetupMisc(void);
|
||||
|
||||
/* The DOS Tables */
|
||||
void DOS_SetupTables(void);
|
||||
/* Internal DOS Setup Programs */
|
||||
void DOS_SetupPrograms(void);
|
||||
|
||||
|
||||
INLINE Bit16u long2para(Bit32u size) {
|
||||
if (size>0xFFFF0) return 0xffff;
|
||||
if (size&0xf) return (Bit16u)((size>>4)+1);
|
||||
else return (Bit16u)(size>>4);
|
||||
};
|
||||
|
||||
INLINE Bit8u RealHandle(Bit16u handle) {
|
||||
PSP * psp=(PSP *)real_off(dos.psp,0);
|
||||
if (handle>=psp->max_files) return DOS_FILES;
|
||||
return mem_readb(Real2Phys(psp->file_table)+handle);
|
||||
};
|
||||
|
||||
/* Dos Error Codes */
|
||||
#define DOSERR_NONE 0
|
||||
#define DOSERR_FUNCTION_NUMBER_INVALID 1
|
||||
#define DOSERR_FILE_NOT_FOUND 2
|
||||
#define DOSERR_PATH_NOT_FOUND 3
|
||||
#define DOSERR_TOO_MANY_OPEN_FILES 4
|
||||
#define DOSERR_ACCESS_DENIED 5
|
||||
#define DOSERR_INVALID_HANDLE 6
|
||||
#define DOSERR_MCB_DESTROYED 7
|
||||
#define DOSERR_INSUFFICIENT_MEMORY 8
|
||||
#define DOSERR_MB_ADDRESS_INVALID 9
|
||||
#define DOSERR_ENVIRONMENT_INVALID 10
|
||||
#define DOSERR_FORMAT_INVALID 11
|
||||
#define DOSERR_ACCESS_CODE_INVALID 12
|
||||
#define DOSERR_DATA_INVALID 13
|
||||
#define DOSERR_RESERVED 14
|
||||
#define DOSERR_FIXUP_OVERFLOW 14
|
||||
#define DOSERR_INVALID_DRIVE 15
|
||||
#define DOSERR_REMOVE_CURRENT_DIRECTORY 16
|
||||
#define DOSERR_NOT_SAME_DEVICE 17
|
||||
#define DOSERR_NO_MORE_FILES 18
|
||||
|
||||
/* Remains some classes used to access certain things */
|
||||
class DOS_FCB {
|
||||
public:
|
||||
DOS_FCB(PhysPt pt){
|
||||
off=pt;
|
||||
}
|
||||
DOS_FCB(Bit16u seg, Bit16u offset){
|
||||
off=Real2Phys(RealMake(seg,offset));
|
||||
}
|
||||
void Set_drive(Bit8u a);
|
||||
void Set_filename(char* a); //writes an the first 8 bytes of a as the filename
|
||||
void Set_ext(char* a);
|
||||
void Set_current_block(Bit16u a);
|
||||
void Set_record_size(Bit16u a);
|
||||
void Set_filesize(Bit32u a);
|
||||
void Set_date(Bit16u a);
|
||||
void Set_time(Bit16u a);
|
||||
// others nog yet handled
|
||||
Bit8u Get_drive(void);
|
||||
void Get_filename(char* a);
|
||||
void Get_ext(char* a);
|
||||
Bit16u Get_current_block(void);
|
||||
Bit16u Get_record_size(void);
|
||||
Bit32u Get_filesize(void);
|
||||
Bit16u Get_date(void);
|
||||
Bit16u Get_time(void);
|
||||
private:
|
||||
PhysPt off;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
105
include/dos_system.h
Normal file
105
include/dos_system.h
Normal file
|
@ -0,0 +1,105 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef DOSSYSTEM_H_
|
||||
#define DOSSYSTEM_H_
|
||||
|
||||
#include <dosbox.h>
|
||||
|
||||
#define DOS_NAMELENGTH 12
|
||||
#define DOS_DIRDEPTH 16
|
||||
#define DOS_PATHLENGTH (DOS_DIRDEPTH+1)*(DOS_NAMELENGTH+2)
|
||||
#define DOS_TEMPSIZE 1024
|
||||
|
||||
enum {
|
||||
DOS_ATTR_READ_ONLY= 0x01,
|
||||
DOS_ATTR_HIDDEN= 0x02,
|
||||
DOS_ATTR_SYSTEM= 0x04,
|
||||
DOS_ATTR_VOLUME= 0x08,
|
||||
DOS_ATTR_DIRECTORY= 0x10,
|
||||
DOS_ATTR_ARCHIVE= 0x20
|
||||
};
|
||||
|
||||
#pragma pack (1)
|
||||
struct DTA_FindBlock {
|
||||
Bit8u sdrive; /* The Drive the search is taking place */
|
||||
Bit16u sattr; /* The attributes that need to be found */
|
||||
Bit8u fill[18];
|
||||
Bit8u attr;
|
||||
Bit16u time;
|
||||
Bit16u date;
|
||||
Bit32u size;
|
||||
char name[DOS_NAMELENGTH];
|
||||
};
|
||||
#pragma pack ()
|
||||
|
||||
class DOS_File {
|
||||
public:
|
||||
virtual bool Read(Bit8u * data,Bit16u * size)=0;
|
||||
virtual bool Write(Bit8u * data,Bit16u * size)=0;
|
||||
virtual bool Seek(Bit32u * pos,Bit32u type)=0;
|
||||
virtual bool Close()=0;
|
||||
virtual Bit16u GetInformation(void)=0;
|
||||
Bit8u type;Bit32u flags;
|
||||
/* Some Device Specific Stuff */
|
||||
};
|
||||
|
||||
class DOS_Device : public DOS_File {
|
||||
public:
|
||||
/* Some Device Specific Stuff */
|
||||
char * name;
|
||||
Bit8u fhandle;
|
||||
};
|
||||
|
||||
|
||||
|
||||
class DOS_Drive {
|
||||
public:
|
||||
DOS_Drive();
|
||||
virtual bool FileOpen(DOS_File * * file,char * name,Bit32u flags)=0;
|
||||
virtual bool FileCreate(DOS_File * * file,char * name,Bit16u attributes)=0;
|
||||
virtual bool FileUnlink(char * name)=0;
|
||||
virtual bool RemoveDir(char * dir)=0;
|
||||
virtual bool MakeDir(char * dir)=0;
|
||||
virtual bool TestDir(char * dir)=0;
|
||||
virtual bool FindFirst(char * search,DTA_FindBlock * dta)=0;
|
||||
virtual bool FindNext(DTA_FindBlock * dta)=0;
|
||||
virtual bool GetFileAttr(char * name,Bit16u * attr)=0;
|
||||
virtual bool Rename(char * oldname,char * newname)=0;
|
||||
virtual bool FreeSpace(Bit16u * bytes,Bit16u * sectors,Bit16u * clusters,Bit16u * free)=0;
|
||||
char * GetInfo(void);
|
||||
char curdir[DOS_PATHLENGTH];
|
||||
char info[256];
|
||||
};
|
||||
|
||||
enum { OPEN_READ=0,OPEN_WRITE=1,OPEN_READWRITE=2 };
|
||||
enum { DOS_SEEK_SET=0,DOS_SEEK_CUR=1,DOS_SEEK_END=2};
|
||||
|
||||
|
||||
/*
|
||||
A multiplex handler should read the registers to check what function is being called
|
||||
If the handler returns false dos will stop checking other handlers
|
||||
*/
|
||||
|
||||
typedef bool (MultiplexHandler)(void);
|
||||
void DOS_AddMultiplexHandler(MultiplexHandler * handler);
|
||||
|
||||
void DOS_AddDevice(DOS_Device * adddev);
|
||||
void VFILE_Register(char * name,Bit8u * data,Bit32u size);
|
||||
#endif
|
||||
|
63
include/dosbox.h
Normal file
63
include/dosbox.h
Normal file
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#if !defined __DOSBOX_H
|
||||
#define __DOSBOX_H
|
||||
|
||||
typedef unsigned char Bit8u;
|
||||
typedef signed char Bit8s;
|
||||
typedef unsigned short Bit16u;
|
||||
typedef signed short Bit16s;
|
||||
typedef unsigned long Bit32u;
|
||||
typedef signed long Bit32s;
|
||||
#if defined(_MSC_VER)
|
||||
typedef unsigned __int64 Bit64u;
|
||||
typedef signed __int64 Bit64s;
|
||||
#else
|
||||
typedef unsigned long long int Bit64u;
|
||||
typedef signed long long int Bit64s;
|
||||
#endif
|
||||
|
||||
typedef unsigned int Bitu;
|
||||
typedef signed int Bits;
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
void E_Exit(char * message,...);
|
||||
|
||||
void S_Warn(char * message,...);
|
||||
|
||||
|
||||
#include "../settings.h" /* General extra setting */
|
||||
#if defined (_MSC_VER)
|
||||
#include "../src/platform/visualc/config.h"
|
||||
#else
|
||||
#include "../config.h"
|
||||
#define INLINE inline
|
||||
#endif
|
||||
|
||||
|
||||
typedef Bitu (LoopHandler)(void);
|
||||
|
||||
void DOSBOX_RunMachine();
|
||||
void DOSBOX_SetLoop(LoopHandler * handler);
|
||||
|
||||
void DOSBOX_Init(int argc, char* argv[]);
|
||||
void DOSBOX_StartUp(void);
|
||||
#endif
|
||||
|
1
include/fpu.h
Normal file
1
include/fpu.h
Normal file
|
@ -0,0 +1 @@
|
|||
|
44
include/hardware.h
Normal file
44
include/hardware.h
Normal file
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef _HARDWARE_H_
|
||||
#define _HARDWARE_H_
|
||||
|
||||
#include <programs.h>
|
||||
#include <support.h>
|
||||
#include <stdio.h>
|
||||
|
||||
typedef void (* HW_OutputHandler)(char * towrite);
|
||||
typedef void (* HW_InputHandler)(char * line);
|
||||
|
||||
struct HWBlock {
|
||||
char * dev_name; /* 8 characters max dev name */
|
||||
char * full_name; /* 60 characters full name */
|
||||
char * help;
|
||||
HW_InputHandler get_input;
|
||||
HW_OutputHandler show_status; /* Supplied with a string to display 50 chars of status info in */
|
||||
HWBlock * next;
|
||||
};
|
||||
|
||||
|
||||
void HW_Register(HWBlock * block);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
48
include/inout.h
Normal file
48
include/inout.h
Normal file
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
typedef Bit8u (IO_ReadHandler)(Bit32u port);
|
||||
typedef void (IO_WriteHandler)(Bit32u port,Bit8u value);
|
||||
|
||||
#define IO_MAX 1024
|
||||
|
||||
struct IO_ReadBlock{
|
||||
IO_ReadHandler * handler;
|
||||
char * name;
|
||||
};
|
||||
|
||||
struct IO_WriteBlock{
|
||||
IO_WriteHandler * handler;
|
||||
char * name;
|
||||
};
|
||||
|
||||
extern IO_ReadBlock IO_ReadTable[IO_MAX];
|
||||
extern IO_WriteBlock IO_WriteTable[IO_MAX];
|
||||
|
||||
|
||||
|
||||
void IO_Write(Bitu num,Bit8u val);
|
||||
Bit8u IO_Read(Bitu num);
|
||||
|
||||
void IO_RegisterReadHandler(Bit32u port,IO_ReadHandler * handler,char * name);
|
||||
void IO_RegisterWriteHandler(Bit32u port,IO_WriteHandler * handler,char * name);
|
||||
|
||||
void IO_FreeReadHandler(Bit32u port);
|
||||
void IO_FreeWriteHandler(Bit32u port);
|
||||
|
||||
|
25
include/joystick.h
Normal file
25
include/joystick.h
Normal file
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
void JOYSTICK_Enable(Bitu which,bool enabled);
|
||||
|
||||
void JOYSTICK_Button(Bitu which,Bitu num,bool pressed);
|
||||
|
||||
void JOYSTICK_Move_X(Bitu which,float x);
|
||||
|
||||
void JOYSTICK_Move_Y(Bitu which,float y);
|
54
include/keyboard.h
Normal file
54
include/keyboard.h
Normal file
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
typedef void(KEYBOARD_EventHandler)(void);
|
||||
void KEYBOARD_AddCode(Bit8u code);
|
||||
void KEYBOARD_AddKey(Bitu keytype,bool pressed);
|
||||
void KEYBOARD_AddEvent(Bitu keytype,Bitu state,KEYBOARD_EventHandler * handler);
|
||||
|
||||
|
||||
#define ALT_PRESSED 0x1
|
||||
#define CTRL_PRESSED 0x2
|
||||
#define SHIFT_PRESSED 0x4
|
||||
|
||||
enum {
|
||||
KBD_1, KBD_2, KBD_3, KBD_4, KBD_5, KBD_6, KBD_7, KBD_8, KBD_9, KBD_0,
|
||||
KBD_q, KBD_w, KBD_e, KBD_r, KBD_t, KBD_y, KBD_u, KBD_i, KBD_o, KBD_p,
|
||||
KBD_a, KBD_s, KBD_d, KBD_f, KBD_g, KBD_h, KBD_j, KBD_k, KBD_l, KBD_z,
|
||||
KBD_x, KBD_c, KBD_v, KBD_b, KBD_n, KBD_m,
|
||||
KBD_f1, KBD_f2, KBD_f3, KBD_f4, KBD_f5, KBD_f6, KBD_f7, KBD_f8, KBD_f9, KBD_f10,KBD_f11,KBD_f12,
|
||||
|
||||
/*Now the weirder keys */
|
||||
|
||||
KBD_esc,KBD_tab,KBD_backspace,KBD_enter,KBD_space,
|
||||
KBD_leftalt,KBD_rightalt,KBD_leftctrl,KBD_rightctrl,KBD_leftshift,KBD_rightshift,
|
||||
KBD_capslock,KBD_scrolllock,KBD_numlock,
|
||||
|
||||
KBD_grave,KBD_minus,KBD_equals,KBD_backslash,KBD_leftbracket,KBD_rightbracket,
|
||||
KBD_semicolon,KBD_quote,KBD_period,KBD_comma,KBD_slash,
|
||||
|
||||
KBD_insert,KBD_home,KBD_pageup,KBD_delete,KBD_end,KBD_pagedown,
|
||||
KBD_left,KBD_up,KBD_down,KBD_right,
|
||||
|
||||
KBD_kp1,KBD_kp2,KBD_kp3,KBD_kp4,KBD_kp5,KBD_kp6,KBD_kp7,KBD_kp8,KBD_kp9,KBD_kp0,
|
||||
KBD_kpslash,KBD_kpmultiply,KBD_kpminus,KBD_kpplus,KBD_kpenter,KBD_kpperiod,
|
||||
|
||||
KBD_LAST
|
||||
};
|
||||
|
||||
|
206
include/mem.h
Normal file
206
include/mem.h
Normal file
|
@ -0,0 +1,206 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#if !defined __MEM_H
|
||||
#define __MEM_H
|
||||
#include <dosbox.h>
|
||||
|
||||
enum { MEMORY_HANDLER=1,MEMORY_RELOCATE=2};
|
||||
|
||||
#define bmemcpy(mem1,mem2,size) memcpy((void *)mem1,(void *)mem2,size)
|
||||
|
||||
typedef Bit8u (MEMORY_ReadHandler)(Bit32u start);
|
||||
typedef void (MEMORY_WriteHandler)(Bit32u start,Bit8u val);
|
||||
|
||||
typedef Bit32u PhysPt;
|
||||
typedef Bit8u * HostPt;
|
||||
typedef Bit32u RealPt;
|
||||
|
||||
struct PageEntry {
|
||||
Bit8u type;
|
||||
PhysPt base; /* Used to calculate relative offset */
|
||||
struct {
|
||||
MEMORY_WriteHandler * write;
|
||||
MEMORY_ReadHandler * read;
|
||||
} handler;
|
||||
HostPt relocate; /* This points to host machine address */
|
||||
};
|
||||
|
||||
struct EMM_Handle {
|
||||
Bit16u next;
|
||||
Bit16u size; /* Size in pages */
|
||||
PhysPt phys_base;
|
||||
HostPt host_base;
|
||||
bool active;
|
||||
bool free;
|
||||
};
|
||||
|
||||
INLINE Bit16u PAGES(Bit32u bytes) {
|
||||
if ((bytes & 4095) == 0) return (Bit16u)(bytes>>12);
|
||||
return (Bit16u)(1+(bytes>>12));
|
||||
}
|
||||
|
||||
extern Bit8u * memory;
|
||||
extern EMM_Handle EMM_Handles[];
|
||||
extern PageEntry * PageEntries[]; /* Number of pages */
|
||||
|
||||
bool MEMORY_TestSpecial(PhysPt off);
|
||||
void MEMORY_SetupHandler(Bit32u page,Bit32u extra,PageEntry * handler);
|
||||
void MEMORY_ResetHandler(Bit32u page,Bit32u pages);
|
||||
|
||||
|
||||
void EMM_GetFree(Bit16u * maxblock,Bit16u * total);
|
||||
void EMM_Allocate(Bit16u size,Bit16u * handle);
|
||||
void EMM_Free(Bit16u handle);
|
||||
|
||||
|
||||
/*
|
||||
The folowing six functions are used everywhere in the end so these should be changed for
|
||||
Working on big or little endian machines
|
||||
*/
|
||||
|
||||
|
||||
INLINE Bit8u readb(HostPt off) {
|
||||
return *(Bit8u *)off;
|
||||
};
|
||||
INLINE Bit16u readw(HostPt off) {
|
||||
return *(Bit16u *)off;
|
||||
};
|
||||
INLINE Bit32u readd(HostPt off) {
|
||||
return *(Bit32u *)off;
|
||||
};
|
||||
INLINE void writeb(HostPt off,Bit8u val) {
|
||||
*(Bit8u *)(off)=val;
|
||||
};
|
||||
INLINE void writew(HostPt off,Bit16u val) {
|
||||
*(Bit16u *)(off)=val;
|
||||
};
|
||||
INLINE void writed(HostPt off,Bit32u val) {
|
||||
*(Bit32u *)(off)=val;
|
||||
};
|
||||
|
||||
|
||||
/* The Folowing six functions are slower but they recognize the paged memory system */
|
||||
//TODO maybe make em inline to go a bit faster
|
||||
|
||||
Bit8u mem_readb(PhysPt pt);
|
||||
Bit16u mem_readw(PhysPt pt);
|
||||
Bit32u mem_readd(PhysPt pt);
|
||||
|
||||
void mem_writeb(PhysPt pt,Bit8u val);
|
||||
void mem_writew(PhysPt pt,Bit16u val);
|
||||
void mem_writed(PhysPt pt,Bit32u val);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void MEM_BlockWrite(PhysPt pt,void * data,Bitu size);
|
||||
void MEM_BlockRead(PhysPt pt,void * data,Bitu size);
|
||||
void MEM_BlockCopy(PhysPt dest,PhysPt src,Bitu size);
|
||||
void MEM_StrCopy(PhysPt pt,char * data,Bitu size);
|
||||
|
||||
|
||||
|
||||
/* The folowing functions are all shortcuts to the above functions using physical addressing */
|
||||
|
||||
INLINE HostPt real_off(Bit16u seg,Bit32u off) {
|
||||
return memory+(seg<<4)+off;
|
||||
};
|
||||
|
||||
INLINE HostPt real_host(Bit16u seg,Bit32u off) {
|
||||
return memory+(seg<<4)+off;
|
||||
};
|
||||
INLINE PhysPt real_phys(Bit16u seg,Bit32u off) {
|
||||
return (seg<<4)+off;
|
||||
};
|
||||
|
||||
INLINE Bit8u real_readb(Bit16u seg,Bit16u off) {
|
||||
return mem_readb((seg<<4)+off);
|
||||
}
|
||||
INLINE Bit16u real_readw(Bit16u seg,Bit16u off) {
|
||||
return mem_readw((seg<<4)+off);
|
||||
}
|
||||
INLINE Bit32u real_readd(Bit16u seg,Bit16u off) {
|
||||
return mem_readd((seg<<4)+off);
|
||||
}
|
||||
//#define real_readb(seg,off) mem_readb(((seg)<<4)+(off))
|
||||
//#define real_readw(seg,off) mem_readw(((seg)<<4)+(off))
|
||||
//#define real_readd(seg,off) mem_readd(((seg)<<4)+(off))
|
||||
|
||||
INLINE void real_writeb(Bit16u seg,Bit16u off,Bit8u val) {
|
||||
mem_writeb(((seg<<4)+off),val);
|
||||
}
|
||||
INLINE void real_writew(Bit16u seg,Bit16u off,Bit16u val) {
|
||||
mem_writew(((seg<<4)+off),val);
|
||||
}
|
||||
INLINE void real_writed(Bit16u seg,Bit16u off,Bit32u val) {
|
||||
mem_writed(((seg<<4)+off),val);
|
||||
}
|
||||
|
||||
|
||||
//#define real_writeb(seg,off,val) mem_writeb((((seg)<<4)+(off)),val)
|
||||
//#define real_writew(seg,off,val) mem_writew((((seg)<<4)+(off)),val)
|
||||
//#define real_writed(seg,off,val) mem_writed((((seg)<<4)+(off)),val)
|
||||
|
||||
inline Bit32u real_getvec(Bit8u num) {
|
||||
return real_readd(0,(num<<2));
|
||||
}
|
||||
/*
|
||||
inline void real_setvec(Bit8u num,Bit32u addr) {
|
||||
real_writed(0,(num<<2),addr);
|
||||
};
|
||||
|
||||
*/
|
||||
|
||||
INLINE Bit16u RealSeg(RealPt pt) {
|
||||
return (Bit16u)(pt>>16);
|
||||
}
|
||||
|
||||
INLINE Bit16u RealOff(RealPt pt) {
|
||||
return (Bit16u)(pt&0xffff);
|
||||
}
|
||||
|
||||
INLINE PhysPt Real2Phys(RealPt pt) {
|
||||
return (RealSeg(pt)<<4) +RealOff(pt);
|
||||
}
|
||||
|
||||
|
||||
INLINE HostPt Real2Host(RealPt pt) {
|
||||
return memory+(RealSeg(pt)<<4) +RealOff(pt);
|
||||
}
|
||||
|
||||
|
||||
INLINE RealPt RealMake(Bit16u seg,Bit16u off) {
|
||||
return (seg<<16)+off;
|
||||
}
|
||||
|
||||
|
||||
INLINE void RealSetVec(Bit8u vec,RealPt pt) {
|
||||
mem_writed(vec<<2,pt);
|
||||
}
|
||||
|
||||
INLINE RealPt RealGetVec(Bit8u vec) {
|
||||
return mem_readd(vec<<2);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
42
include/mixer.h
Normal file
42
include/mixer.h
Normal file
|
@ -0,0 +1,42 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
typedef void (*MIXER_MixHandler)(Bit8u * sampdate,Bit32u len);
|
||||
|
||||
#define MIXER_8MONO 0
|
||||
#define MIXER_8STEREO 1
|
||||
#define MIXER_16MONO 2
|
||||
#define MIXER_16STEREO 3
|
||||
|
||||
#define MAX_AUDIO ((1<<(16-1))-1)
|
||||
#define MIN_AUDIO -(1<<(16-1))
|
||||
|
||||
|
||||
|
||||
struct MIXER_Channel;
|
||||
|
||||
|
||||
MIXER_Channel * MIXER_AddChannel(MIXER_MixHandler handler,Bit32u freq,char * name);
|
||||
void MIXER_SetVolume(MIXER_Channel * chan,Bit8u vol);
|
||||
void MIXER_SetFreq(MIXER_Channel * chan,Bit32u freq);
|
||||
void MIXER_SetMode(MIXER_Channel * chan,Bit8u mode);
|
||||
void MIXER_Enable(MIXER_Channel * chan,bool enable);
|
||||
|
||||
void PCSPEAKER_Enable(bool enable);
|
||||
void PCSPEAKER_SetFreq(Bit32u freq);
|
||||
|
180
include/modules.h
Normal file
180
include/modules.h
Normal file
|
@ -0,0 +1,180 @@
|
|||
/* Standard data types used */
|
||||
|
||||
typedef unsigned char Bit8u;
|
||||
typedef signed char Bit8s;
|
||||
typedef unsigned short Bit16u;
|
||||
typedef signed short Bit16s;
|
||||
typedef unsigned long Bit32u;
|
||||
typedef signed long Bit32s;
|
||||
#if defined(_MSC_VER)
|
||||
typedef unsigned __int64 Bit64u;
|
||||
typedef signed __int64 Bit64s;
|
||||
#else
|
||||
typedef unsigned long long int Bit64u;
|
||||
typedef signed long long int Bit64s;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Setting up pointers to all subfunctions */
|
||||
#ifdef MODULE_WANT_IO_READ
|
||||
typedef Bit8u (* IO_ReadHandler)(Bit32u port);
|
||||
static void (* IO_RegisterReadHandler)(Bit32u port,IO_ReadHandler handler,char * name);
|
||||
static void (* IO_FreeReadHandler)(Bit32u port);
|
||||
#endif
|
||||
|
||||
#ifdef MODULE_WANT_IO_WRITE
|
||||
typedef void (* IO_WriteHandler)(Bit32u port,Bit8u value);
|
||||
static void (* IO_RegisterWriteHandler)(Bit32u port,IO_WriteHandler handler,char * name);
|
||||
static void (* IO_FreeWriteHandler)(Bit32u port);
|
||||
#endif
|
||||
|
||||
#ifdef MODULE_WANT_IRQ_EOI
|
||||
typedef void (* IRQ_EOIHandler)(void);
|
||||
static void (* IRQ_RegisterEOIHandler)(Bit32u irq,IRQ_EOIHandler handler,char * name);
|
||||
static void (* IRQ_FreeEOIHandler)(Bit32u irq);
|
||||
#endif
|
||||
|
||||
#ifdef MODULE_WANT_IRQ
|
||||
static void (* IRQ_Activate)(Bit32u irq);
|
||||
static void (* IRQ_Deactivate)(Bit32u irq);
|
||||
#endif
|
||||
|
||||
#ifdef MODULE_WANT_TIMER
|
||||
typedef void (* TIMER_MicroHandler)(void);
|
||||
static void (* TIMER_RegisterMicroHandler)(TIMER_MicroHandler handler,Bit32u micro);
|
||||
#endif
|
||||
|
||||
#ifdef MODULE_WANT_TIMER_TICK
|
||||
typedef void (* TIMER_TickHandler)(Bit32u ticks);
|
||||
static void (* TIMER_RegisterTickHandler)(TIMER_TickHandler handler);
|
||||
#endif
|
||||
|
||||
/*
|
||||
4 8-bit and 4 16-bit channels you can read data from
|
||||
16-bit reads are word sized
|
||||
*/
|
||||
|
||||
#ifdef MODULE_WANT_DMA_READ
|
||||
static void (* DMA_8_Read)(Bit32u chan,Bit8u * data,Bit16u size);
|
||||
static void (* DMA_16_Read)(Bit32u chan,Bit8u * data,Bit16u size);
|
||||
#endif
|
||||
|
||||
/*
|
||||
4 8-bit and 4 16-bit channels you can write data from
|
||||
16-bit writes are word sized
|
||||
*/
|
||||
|
||||
#ifdef MODULE_WANT_DMA_READ
|
||||
static void (* DMA_8_Write)(Bit32u chan,Bit8u * data,Bit16u size);
|
||||
static void (* DMA_16_Write)(Bit32u chan,Bit8u * data,Bit16u size);
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef MODULE_WANT_MIXER
|
||||
/* The len here means the amount of samples needed not the buffersize it needed to fill */
|
||||
typedef void (* MIXER_MixHandler)(Bit8u * sampdate,Bit32u len);
|
||||
|
||||
/* Different types if modes a mixer channel can work in */
|
||||
#define MIXER_8MONO 0
|
||||
#define MIXER_8STEREO 1
|
||||
#define MIXER_16MONO 2
|
||||
#define MIXER_16STEREO 3
|
||||
struct MIXER_Channel;
|
||||
|
||||
#define MAX_AUDIO ((1<<(16-1))-1)
|
||||
#define MIN_AUDIO -(1<<(16-1))
|
||||
|
||||
MIXER_Channel *(* MIXER_AddChannel)(MIXER_MixHandler handler,Bit32u freq,char * name);
|
||||
void (* MIXER_SetVolume)(MIXER_Channel * chan,Bit8u vol);
|
||||
void (* MIXER_SetFreq)(MIXER_Channel * chan,Bit32u freq);
|
||||
void (* MIXER_SetMode)(MIXER_Channel * chan,Bit8u mode);
|
||||
void (* MIXER_Enable)(MIXER_Channel * chan,bool enable);
|
||||
#endif
|
||||
|
||||
typedef bool (* MODULE_FindHandler)(char * name,void * * function);
|
||||
typedef char *(* MODULE_StartHandler)(MODULE_FindHandler find_handler);
|
||||
|
||||
#define MODULE_START_PROC "ModuleStart"
|
||||
|
||||
#ifdef MODULE_START_FUNCTION
|
||||
#include <stdio.h>
|
||||
|
||||
#define GET_FUNCTION(a) \
|
||||
if (!find_handler(#a ,(void * *) &a)) { \
|
||||
return "Can't find requested function"; \
|
||||
};
|
||||
|
||||
|
||||
#if defined (WIN32)
|
||||
#include <windows.h>
|
||||
BOOL APIENTRY DllMain( HANDLE hModule,
|
||||
DWORD ul_reason_for_call,
|
||||
LPVOID lpReserved
|
||||
)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
__declspec(dllexport)
|
||||
#endif
|
||||
char * ModuleStart (MODULE_FindHandler find_handler) {
|
||||
|
||||
#ifdef MODULE_WANT_IRQ_EOI
|
||||
GET_FUNCTION(IRQ_RegisterEOIHandler);
|
||||
GET_FUNCTION(IRQ_FreeEOIHandler);
|
||||
#endif
|
||||
|
||||
#ifdef MODULE_WANT_IRQ
|
||||
GET_FUNCTION(IRQ_Activate);
|
||||
GET_FUNCTION(IRQ_Deactivate);
|
||||
#endif
|
||||
|
||||
#ifdef MODULE_WANT_IO_READ
|
||||
GET_FUNCTION(IO_RegisterReadHandler);
|
||||
GET_FUNCTION(IO_FreeReadHandler);
|
||||
#endif
|
||||
|
||||
#ifdef MODULE_WANT_IO_WRITE
|
||||
GET_FUNCTION(IO_RegisterWriteHandler);
|
||||
GET_FUNCTION(IO_FreeWriteHandler);
|
||||
#endif
|
||||
|
||||
#ifdef MODULE_WANT_TIMER
|
||||
GET_FUNCTION(TIMER_RegisterMicroHandler);
|
||||
#endif
|
||||
|
||||
#ifdef MODULE_WANT_TIMER_TICKS
|
||||
GET_FUNCTION(TIMER_RegisterTickHandler);
|
||||
#endif
|
||||
|
||||
#ifdef MODULE_WANT_DMA_READ
|
||||
GET_FUNCTION(DMA_8_Read);
|
||||
GET_FUNCTION(DMA_16_Read);
|
||||
#endif
|
||||
|
||||
#ifdef MODULE_WANT_DMA_WRITE
|
||||
GET_FUNCTION(DMA_8_Write);
|
||||
GET_FUNCTION(DMA_16_Write);
|
||||
#endif
|
||||
|
||||
#ifdef MODULE_WANT_MIXER
|
||||
GET_FUNCTION(MIXER_AddChannel);
|
||||
GET_FUNCTION(MIXER_SetVolume);
|
||||
GET_FUNCTION(MIXER_SetFreq);
|
||||
GET_FUNCTION(MIXER_SetMode);
|
||||
GET_FUNCTION(MIXER_Enable);
|
||||
#endif
|
||||
|
||||
return MODULE_START_FUNCTION;
|
||||
|
||||
}
|
||||
#if defined (WIN32)
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
28
include/mouse.h
Normal file
28
include/mouse.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
void Mouse_ShowCursor(void);
|
||||
void Mouse_HideCursor(void);
|
||||
|
||||
|
||||
void Mouse_CursorMoved(float x,float y);
|
||||
void Mouse_CursorSet(float x,float y);
|
||||
void Mouse_ButtonPressed(Bit8u button);
|
||||
void Mouse_ButtonReleased(Bit8u button);
|
||||
|
||||
|
44
include/pic.h
Normal file
44
include/pic.h
Normal file
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __PIC_H
|
||||
#define __PIC_H
|
||||
|
||||
typedef void (PIC_EOIHandler) (void);
|
||||
typedef void (PIC_Function)(void);
|
||||
|
||||
extern Bit32u PIC_IRQCheck;
|
||||
|
||||
void PIC_ActivateIRQ(Bit32u irq);
|
||||
|
||||
void PIC_DeActivateIRQ(Bit32u irq);
|
||||
|
||||
void PIC_runIRQs(void);
|
||||
|
||||
void PIC_RegisterIRQ(Bit32u irq,PIC_EOIHandler handler,char * name);
|
||||
void PIC_FreeIRQ(Bit32u irq);
|
||||
|
||||
bool PIC_IRQActive(Bit32u irq);
|
||||
|
||||
/* A Queued function should never queue itself again this will go horribly wrong */
|
||||
void PIC_QueueFunction(PIC_Function * function);
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
58
include/programs.h
Normal file
58
include/programs.h
Normal file
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __PROGRAM_H
|
||||
#define __PROGRAM_H
|
||||
#include <dosbox.h>
|
||||
#include <dos_inc.h>
|
||||
|
||||
|
||||
char * MSG_Get(char * msg);
|
||||
|
||||
struct PROGRAM_Info {
|
||||
Bit16u psp_seg;
|
||||
PSP psp_copy;
|
||||
char full_name[32]; //Enough space for programs only on the z:\ drive
|
||||
char * cmd_line;
|
||||
};
|
||||
|
||||
typedef void (PROGRAMS_Main)(PROGRAM_Info * info);
|
||||
void PROGRAMS_MakeFile(char * name,PROGRAMS_Main * main);
|
||||
|
||||
class Program {
|
||||
public:
|
||||
Program(PROGRAM_Info * program_info);
|
||||
virtual void Run(void)=0;
|
||||
char * GetEnvStr(char * env_entry);
|
||||
char * GetEnvNum(Bit32u num);
|
||||
Bit32u GetEnvCount(void);
|
||||
bool SetEnv(char * env_entry,char * new_string);
|
||||
void WriteOut(char * format,...); /* Write to standard output */
|
||||
PROGRAM_Info * prog_info;
|
||||
|
||||
};
|
||||
|
||||
void SHELL_AddAutoexec(char * line,...);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
114
include/regs.h
Normal file
114
include/regs.h
Normal file
|
@ -0,0 +1,114 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#if !defined __REGS_H
|
||||
#define __REGS_H
|
||||
|
||||
#include <mem.h>
|
||||
|
||||
struct Flag_Info {
|
||||
union {
|
||||
Bit8u b;
|
||||
Bit16u w;
|
||||
Bit32u d;
|
||||
} var1,var2,result;
|
||||
Bitu type;
|
||||
Bitu prev_type;
|
||||
bool cf,sf,pf,af,zf,of,df,tf,intf;
|
||||
bool nt;
|
||||
Bit8u io;
|
||||
bool oldcf;
|
||||
};
|
||||
|
||||
|
||||
|
||||
struct Segment {
|
||||
Bit16u value;
|
||||
bool special; /* Signal for pointing to special memory */
|
||||
HostPt host; /* The address of start in host memory */
|
||||
PhysPt phys; /* The phyiscal address start in emulated machine */
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
enum { cs=0,ds,es,fs,gs,ss};
|
||||
|
||||
extern Segment Segs[6];
|
||||
extern Flag_Info flags;
|
||||
//extern Regs regs;
|
||||
|
||||
void SetSegment_16(Bit32u seg,Bit16u val);
|
||||
|
||||
|
||||
struct CPU_Regs {
|
||||
union {
|
||||
Bit32u d;
|
||||
Bit16u w;
|
||||
struct {
|
||||
Bit8u l,h;
|
||||
}b;
|
||||
} ax,bx,cx,dx,si,di,sp,bp,ip;
|
||||
};
|
||||
|
||||
extern CPU_Regs cpu_regs;
|
||||
|
||||
#define reg_al cpu_regs.ax.b.l
|
||||
|
||||
//extern Bit8u & reg_al=cpu_regs.ax.b.l;
|
||||
|
||||
#define reg_ah cpu_regs.ax.b.h
|
||||
#define reg_ax cpu_regs.ax.w
|
||||
#define reg_eax cpu_regs.ax.d
|
||||
|
||||
#define reg_bl cpu_regs.bx.b.l
|
||||
#define reg_bh cpu_regs.bx.b.h
|
||||
#define reg_bx cpu_regs.bx.w
|
||||
#define reg_ebx cpu_regs.bx.d
|
||||
|
||||
#define reg_cl cpu_regs.cx.b.l
|
||||
#define reg_ch cpu_regs.cx.b.h
|
||||
#define reg_cx cpu_regs.cx.w
|
||||
#define reg_ecx cpu_regs.cx.d
|
||||
|
||||
#define reg_dl cpu_regs.dx.b.l
|
||||
#define reg_dh cpu_regs.dx.b.h
|
||||
#define reg_dx cpu_regs.dx.w
|
||||
#define reg_edx cpu_regs.dx.d
|
||||
|
||||
#define reg_si cpu_regs.si.w
|
||||
#define reg_esi cpu_regs.si.d
|
||||
|
||||
#define reg_di cpu_regs.di.w
|
||||
#define reg_edi cpu_regs.di.d
|
||||
|
||||
#define reg_sp cpu_regs.sp.w
|
||||
#define reg_esp cpu_regs.sp.d
|
||||
|
||||
#define reg_bp cpu_regs.bp.w
|
||||
#define reg_ebp cpu_regs.bp.d
|
||||
|
||||
#define reg_ip cpu_regs.ip.w
|
||||
#define reg_eip cpu_regs.ip.d
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
25
include/render.h
Normal file
25
include/render.h
Normal file
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
typedef void RENDER_Handler(Bit8u * * data);
|
||||
|
||||
|
||||
void RENDER_SetSize(Bitu width,Bitu height,Bitu bpp,Bitu pitch,float ratio,Bitu flags, RENDER_Handler * handler);
|
||||
|
||||
void RENDER_SetPal(Bit8u entry,Bit8u red,Bit8u green,Bit8u blue);
|
43
include/setup.h
Normal file
43
include/setup.h
Normal file
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef _SETUP_H_
|
||||
#define _SETUP_H_
|
||||
|
||||
#include <cross.h>
|
||||
enum { S_STRING,S_HEX,S_INT,S_BOOL};
|
||||
|
||||
typedef char *(String_Handler)(char * input);
|
||||
typedef char *(Hex_Handler)(Bitu * input);
|
||||
typedef char *(Int_Handler)(Bits * input);
|
||||
typedef char *(Bool_Handler)(bool input);
|
||||
|
||||
class Setup {
|
||||
|
||||
|
||||
private:
|
||||
int argc;
|
||||
char * * argv;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
extern char dosbox_basedir[CROSS_LEN];
|
||||
|
||||
#endif
|
63
include/support.h
Normal file
63
include/support.h
Normal file
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#if !defined __SUPPORT_H
|
||||
#define __SUPPORT_H
|
||||
|
||||
|
||||
#include <dosbox.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#if defined (_MSC_VER) /* MS Visual C++ */
|
||||
#define strcasecmp(a,b) stricmp(a,b)
|
||||
#define strncasecmp(a,b,n) _strnicmp(a,b,n)
|
||||
// if (stricmp(name,devices[index]->name)==0) return index;
|
||||
#else
|
||||
//if (strcasecmp(name,devices[index]->name)==0) return index;
|
||||
//#define nocasestrcmp(a,b) stricmp(a,b)
|
||||
#endif
|
||||
|
||||
|
||||
void strreplace(char * str,char o,char n);
|
||||
char *ltrim(char *str);
|
||||
void rtrim(char * const str);
|
||||
char *trim(char *str);
|
||||
|
||||
bool wildcmp(char *wild, char *string);
|
||||
|
||||
bool ScanCMDBool(char * cmd,char * check);
|
||||
char * ScanCMDRemain(char * cmd);
|
||||
bool ScanCMDHex(char * cmd,char * check,Bits * result);
|
||||
char * StripWord(char * cmd);
|
||||
|
||||
INLINE char * upcase(char * str) {
|
||||
char * oldstr=str;
|
||||
while (*str) *str++=toupper(*str);
|
||||
return oldstr;
|
||||
}
|
||||
|
||||
INLINE char * lowcase(char * str) {
|
||||
char * oldstr=str;
|
||||
while (*str) *str++=tolower(*str);
|
||||
return oldstr;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
53
include/timer.h
Normal file
53
include/timer.h
Normal file
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef _TIMER_H_
|
||||
#define _TIMER_H_
|
||||
/* underlying clock rate in HZ */
|
||||
#include <SDL/SDL.h>
|
||||
|
||||
extern Bit32u LastTicks;
|
||||
#define GetTicks() SDL_GetTicks()
|
||||
|
||||
typedef void (*TIMER_TickHandler)(Bitu ticks);
|
||||
typedef void (*TIMER_MicroHandler)(void);
|
||||
typedef void (*TIMER_DelayHandler)(void);
|
||||
|
||||
typedef void TIMER_Block;
|
||||
|
||||
|
||||
/* Register a function that gets called everytime if 1 or more ticks pass */
|
||||
TIMER_Block * TIMER_RegisterTickHandler(TIMER_TickHandler handler);
|
||||
/* Register a function to be called every x microseconds */
|
||||
TIMER_Block * TIMER_RegisterMicroHandler(TIMER_MicroHandler handler,Bitu micro);
|
||||
/* Register a function to be called once after x microseconds */
|
||||
TIMER_Block * TIMER_RegisterDelayHandler(TIMER_DelayHandler handler,Bitu delay);
|
||||
|
||||
/* Set the microseconds value to a new value */
|
||||
void TIMER_SetNewMicro(TIMER_Block * block,Bitu micro);
|
||||
|
||||
|
||||
/* This function should be called very often to support very high res timers
|
||||
Although with the new timer code it doesn't matter that much */
|
||||
void TIMER_CheckPIT(void);
|
||||
/* This will add ms ticks to support the timer handlers */
|
||||
void TIMER_AddTicks(Bit32u ticks);
|
||||
|
||||
|
||||
#endif
|
||||
|
50
include/video.h
Normal file
50
include/video.h
Normal file
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright (C) 2002 The DOSBox Team
|
||||
*
|
||||
* 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 2 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 Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __VIDEO_H
|
||||
#define __VIDEO_H
|
||||
|
||||
typedef void (GFX_DrawHandler)(Bit8u * vidstart);
|
||||
/* Used to reply to the renderer what size to set */
|
||||
typedef void (GFX_ResizeHandler)(Bitu * width,Bitu * height);
|
||||
|
||||
struct GFX_PalEntry {
|
||||
Bit8u r;
|
||||
Bit8u g;
|
||||
Bit8u b;
|
||||
Bit8u unused;
|
||||
};
|
||||
|
||||
struct GFX_Info {
|
||||
Bitu width,height,bpp,pitch;
|
||||
};
|
||||
|
||||
extern GFX_Info gfx_info;
|
||||
|
||||
void GFX_Events(void);
|
||||
void GFX_SetPalette(Bitu start,Bitu count,GFX_PalEntry * entries);
|
||||
void GFX_SetDrawHandler(GFX_DrawHandler * handler);
|
||||
void GFX_Resize(Bitu width,Bitu height,Bitu bpp,GFX_ResizeHandler * resize);
|
||||
|
||||
void GFX_Start(void);
|
||||
void GFX_Stop(void);
|
||||
void GFX_SwitchFullScreen(void);
|
||||
|
||||
|
||||
#endif
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue