kegs/src/INTERNALS.overview

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.