mirror of
https://github.com/digarok/gsplus.git
synced 2024-11-28 04:49:18 +00:00
97 lines
4.1 KiB
Plaintext
97 lines
4.1 KiB
Plaintext
|
|
||
|
KEGS Internals
|
||
|
--------------
|
||
|
|
||
|
The INTERNALS* files describe the internal structure of KEGS and how
|
||
|
it works. It is meant to be useful to those who would attempt to
|
||
|
port KEGS to non-Unix platforms, or just want to know how KEGS works.
|
||
|
|
||
|
Documentation files:
|
||
|
--------------------
|
||
|
|
||
|
INTERNALS.overview: Provides overview of KEGS's file structure
|
||
|
|
||
|
|
||
|
KEGS SOURCE FILES:
|
||
|
-----------------
|
||
|
|
||
|
adb.c: ADB emulation routines. This includes keyboard, mouse, and
|
||
|
joystick.
|
||
|
adb.h: Defines for ADB routines.
|
||
|
clock.c: Clock, BRAM, and some timing routines.
|
||
|
compile_time.c: Trick file to put the time you compiled in g_compile_time[].
|
||
|
defc.h: Global defines included by all .c files. Useful trick
|
||
|
to avoid complex multi-level include problems.
|
||
|
defs.h: Global defines included by all .s files (assembly language).
|
||
|
defcomm.h: Global defines included by all files (must be assembly and
|
||
|
C safe, such as #defines).
|
||
|
defs_instr.h: C and assembly definitions for various addressing modes
|
||
|
and for some repeated instructions (like LDA, STA, etc).
|
||
|
dis.c: Disassembler and debugger interface. The debugger interface
|
||
|
is similar to the Apple // monitor, but has many
|
||
|
more commands.
|
||
|
disas.h: Tables for disassembling 65816 instructions. Not very
|
||
|
efficient, but it works.
|
||
|
engine_c.c: C main instruction dispatch loop.
|
||
|
engine_s.s: Assembly main instruction dispatch loop.
|
||
|
instable.h: Instruction table. It is C and assembly-safe through
|
||
|
the make_inst script. make_inst turns instable.h into
|
||
|
8inst_c and 16inst_c, which are both valid C code.
|
||
|
iwm.c: IWM routines for 5.25" and 3.5" disks. See INTERNALS.iwm
|
||
|
iwm.h: IWM defines
|
||
|
iwm_35_525.h: File for reading and writing a disk byte, which is included
|
||
|
in iwm.c twice, once for 5.25" and again for 3.5".
|
||
|
Forcing out compile-time constants this way makes it
|
||
|
faster.
|
||
|
moremem.c: Awful name--this file contains the page table change
|
||
|
routines (fixup_*) and io_read() and io_write() to
|
||
|
emulate all $C000 I/O accesses.
|
||
|
op_routs.h: More macros for 65816 emulation.
|
||
|
protos.h: Prototypes for all C functions. Auto-generated through
|
||
|
the "cproto" program (not included).
|
||
|
protos_xdriver.h: Prototypes for functions in xdriver.c.
|
||
|
scc.c: Serial chip emulation.
|
||
|
scc_driver.h: Unix-specific socket routines, stubbed out if you're not
|
||
|
on Linux or HP-UX.
|
||
|
scc.h: Defines for scc.c.
|
||
|
sim65816.c: main() is here along with many other housekeeping
|
||
|
functions, such as events, and interrupts.
|
||
|
The main loop of KEGS is run_prog().
|
||
|
size_tab.h: Used by assembly for a jump table (make_size script
|
||
|
turns it into 8size_s and 16size_s) and by both C and
|
||
|
assembly to get the size of instructions.
|
||
|
smartport.c: Smartport emulation, emulates s7dx devices.
|
||
|
sound.c: Sound emulation. Builds sound samples, but does not
|
||
|
send sound to output device.
|
||
|
sound.h: Header file for sound.c.
|
||
|
sound_driver.c: Sound driver routines. Takes samples generated by sound.c
|
||
|
and sends them to the correct output device. Supports
|
||
|
HP Alib, HP /dev/audio, and Linux /dev/dsp currently.
|
||
|
superhires.h: "macro" routine used by video.c so that I could write
|
||
|
one generic superhires routine, but then include it
|
||
|
multiple times to get optimized 320 vs 640 mode routines.
|
||
|
video.c: Display routines. Builds 8 bit video buffers in a
|
||
|
device independent way. Functions here know nothing
|
||
|
about X windows.
|
||
|
xdriver.c: X windows driver routines. Takes buffers from video.c
|
||
|
and sends them on to X windows. Get keypresses from
|
||
|
X and sends them to adb.c.
|
||
|
|
||
|
Porting Advice:
|
||
|
--------------
|
||
|
|
||
|
To a non-unix platform, disabling scc emulation would be a good start.
|
||
|
Just make sure you get the dummy stub routines in scc_driver.h.
|
||
|
|
||
|
If you don't have gettimeofday(), clock.c will need to modified with
|
||
|
whatever timer facilities are available. A high-resolution clock works
|
||
|
best, but even a low-resolution clock will work.
|
||
|
|
||
|
Modify sound_driver.c to get it to compile, if necessary. Always run with
|
||
|
"-audio 0" to turn audio off. No routines in sound_driver.c will get
|
||
|
called if you run with -audio 0.
|
||
|
|
||
|
Replace xdriver.c with new routines for whatever platform you are porting to.
|
||
|
See INTERNALS.xdriver for more information.
|
||
|
|