Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
jjachemich committed May 1, 2018
0 parents commit 4eb459e
Show file tree
Hide file tree
Showing 350 changed files with 205,669 additions and 0 deletions.
17 changes: 17 additions & 0 deletions .VLM
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
genera.network: tap1:CHAOS|402;host=777,tap0:INTERNET|192.168.2.2;gateway=192.168.2.1;host=192.168.2.1

genera.virtualMemory: 512
genera.trace: no
genera.worldSearchPath: /home/lispm/snap5/jj-vlm:/home/lispm/snap5/vlods:/var/lib/symbolics
*main.geometry: 1280x1024+0+1024
*coldLoad.geometry: 800x600+1280+0
*coldLoad.iconic: yes
*coldLoad.background: gray85
*coldLoad.foreground: gray15

genera.world: ../vlods/Genera-8-5.vlod
genera.spy: no

genera.debugger: VLM_debugger


21 changes: 21 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/Makefile
/Makefile.in
/aclocal.m4
/autom4te.cache/
/config.*
/VLM_debugger
/m4/
/stamp-h?
.deps/
.dirstamp
*.o
*~
/autoscan.*
/configure.scan
/keyboard.c
/keyboard
/machine
/2machines
/tozeb
/vlm-*.xz

8 changes: 8 additions & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
authors:
vlm on alpha:P.T.Withington, Scott McKay, and Gary Palter at Symbolics Inc.
Paul Robertson at Dynamic Object Language Group
see: http://pt.withy.org/publications/VLM.html

x86_64 port: by bard parker ([email protected])

last modified: Joachim Jachemich ([email protected])
1 change: 1 addition & 0 deletions COPYING
70 changes: 70 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
in 2013 disassembled Brad's genera to locate and fix the integer division
code. Located and binary patched it - integer division works ok.
Oct 2014 eventually located the vlm source code and began to work on it.
in 2014 changed stub/process.lisp to work with clisp
implemented rational division as "asm" operation in
alpha-emulator/imacmath.lisp and stub/process.lisp
implemented double-float trap as "c" code in
alpha-emulator/imactrap.lisp and stub/process.lisp
implemented networking using a tap interface for internet
as well as chaos in life-support/network-tap-linux.c.
floor/ceiling/round produce erroneous results - fixed them by
introducing new "pseudo" alpha-ops and generating code in
stub/process.lisp to make use of the libm-functions
floor, ceil, trunc, and rint functions.
in 2015 implemented check for and workaround for X11 with xcb in
life-support/cold-load.c and life-support/console.c
changed keyboard detection code and key translation for
the cold-load/debugger window in life-support/cold-load.c
changed timing in life-support/signals.c and utilitites.c
implemented nfs version 3 client in LISP.
implemented a server for the "MINI" protocol in LISP,
patched qld and friends to be able to do a cold load
using two OG2 instances. Finally able to do a cold-load.
Still looking for the cold-load generator sources...
Implemented a few additions to the embedded communication
area (cwd, home dir), added block-size setting for FEP-disks,
added unix crypt as a callable routine. Did some changes to
gc routines to be able to gc even more areas. Succeeded in
saving worlds smaller then the original 8-5 world.
Aug 2016 made a version of genera work on the alpha using the
original alpha-assembly generation, fixed some glitches
when shutting down genera (move termination of network in front
of all other termination routines). moved to the x64 version as well
Oct 2016 added alpha assembly instruction in alpha-emulator/imactrap.lisp
to correctly identify double-float traps. Tested on alpha, then
also moved to the x64 version.
Nov 2016 worked on the chaosnet network module for Linux 'til
Nov 2017
Nov 2017 moved the source tree into an autoconf/automake project
fixed a lot of compilation warnings
Feb 2018 cleaned up the sources
reverted useless code changes in emulator/interface.c
04/21/18 added <dev>:MAC|aa:bb:cc:dd:ee:ff to network options on
request from Jean Marangos. This is an additional option for the
interface and is used for CHAOS as well as INTERNET interfaces. By
default the tap interface code will generate a new MAC address for
the OG2 end of the tap tunnel each time genera is started.
04/24/18 developed a LISP patch to use the hosts time at startup instead
of asking around on the network
04/26/18 added "host=address" option to network specifications, so a
network specification could now look like
"tap0:INTERNET|192.168.2.2;gateway=192.168.2.1;host=192.168.2.1",
for example or
"tap0:CHAOS|401;host=777". By default the tap interface code
assumes its host is ".1" on the guests subnet for ip, or "377" on the
guest subnet for chaos. Giving the "host=" option will override
this default, should you ever need it. I you give the host option
the address used should be the same address you've used when you
configured the tap interface.
added some of the LISP patches I use to the OG2-patches directory
04/27/18 removed "while (1);" from vpunt() to allow termination after an
error
04/28/18 use ucontext_t instead of struct ucontext in emulator/interfac.c
and emulator/memory.c as reported by Seth Morabito
added extern definitions for fixtfloat, _ADDS, _SUBS, _MULS, _DIVS
as those caused gcc hickups on Ubuntu reported by Seth Morabito
bumped version to vlm-0.99-1
04/29/18 fixed a bug in life-support/disks.c where passing a negative
blocksize lead to non-logical blocksize settings

240 changes: 240 additions & 0 deletions GNUmakefile.orig
Original file line number Diff line number Diff line change
@@ -0,0 +1,240 @@
#
# Builds the Ivory Emulator (VLM)
#
# The command line to build an emulator is
#
# make {OPTIONS="option1 option2 ..."} {NONSHARED=YES} TARGET
#
# where TARGET is either "genera", "minima", or "iverify". The makefile will
# automatically include the -DGENERA, -DMINIMA, or -DIVERIFY preprocessor option
# when invoking the compiler and assembler.
#
# On the make command line, use OPTIONS="option1 option2 ..." to specify compiler
# and assembler options, notably preprocessor options.
#
# The main preprocessor options used throughout the sources are
# GENERA to build an emulator that is intended to run Genera
# MINIMA to build an emulator that is intended to run Minima
# IVERIFY to build an emulator that is intended to run the instruction test suite
# TRACING to enable instruction tracing and counting
# CACHEMETERING to enable instruction cache metering facilities
# TRAPMETERING to enable trap metering facilities
# STATISTICS to enable other statistics-gathering facilities
# if enabled:
# EXECTIMES : enable execution times statistics
# ends up in "usagedata.lisp" / "usagedata.text" after a vlm run
# DEBUGGING to enable debugging facilities
# DEBUG* to enable other, more specific debugging facilities
# AUTOSTART to immediately start execution of the loaded image without waiting for
# a :Start Interactor command from the Minima Debugger. (This option is defined
# automatically when the TARGET is "genera".)
# USE_CPU_FOR_MICROSECOND_CLOCK to use the process CPU time rather than elapsed time
# as the value of Ivory's microsecond clock
# DISK_SIZE_1536 to enable disks.c to read 1536 bytes sectors
# instead of the default 8192 byte sectors
# DEBUG_DISK
# enable disk read/write verbosity
# DEBUG_NETWORk
# Networking debug verbosity
# if enabled:
# DEBUG_CHAOS
# DEBUG_IP
# DEBUG_ARP
# DEBUG_ICMP
# verbosity of indiv. netwoeking parts
#
# For example, to create an emulator that runs Genera but waits for a :Start Interactor
# command from the Minima Debugger before booting and also has debugging features enabled,
#
# make genera OPTIONS="-DDEBUGGING -UAUTOSTART"
#
# If you specify a target different from your last build, you must remove all object
# files first to ensure that everything is properly compiled. Use the "clean" target.
#
# In fact, if you change any settings between builds, it's a good idea to build from scratch
#
# On the make command line, use PROFILE=YES to build the VLM using the profiling option
# to gather statistics on execution frequencies.
#
# On the make command line, use NONSHARED=YES to build the VLM using the non-shared
# libraries. (The default is to use the shared libraries.)
#


LIFE = ./life-support
EMULATOR = ./emulator
G5EMULATOR = ./g5-emulator
X86EMULATOR = ./x86_64-emulator
OTHER = ./other

CPU = $(X86EMULATOR)
CLISP = /usr/bin/clisp
CCL=/home/lispm/ccl/scripts/ccl64
OPTIMOPT = -Ofast -march=native -fno-strict-aliasing
NOCONAOPTIMOPT = -Ofast -march=nocona -fno-strict-aliasing

genera: MAINOPTIONS = -DGENERA -DAUTOSTART -DUSE_TAP #-DUSE_CPU_FOR_MICROSECOND_CLOCK
minima: MAINOPTIONS = -DMINIMA -DUSE_TAP
iverify: MAINOPTIONS = -DIVERIFY -DUSE_TAP

genera.nocona: MAINOPTIONS = -DGENERA -DAUTOSTART -DUSE_TAP #-DUSE_CPU_FOR_MICROSECOND_

SYMBOLSOPT =
#SYMBOLSOPT = -g

# -foptimize-sibling-calls -fstrength-reduce \
# -fexpensive-optimizations \
# -fsched-interblock -fsched-spec -fpeephole2 \
# -freorder-blocks -freorder-functions \
# -funit-at-a-time \
# -falign-functions -falign-jumps -falign-loops -falign-labels \
# -fcrossjumping \
# -finline-functions -frename-registers -funswitch-loops \
# -fregmove \
# -fcse-follow-jumps \
# -fcse-skip-blocks -frerun-cse-after-loop -frerun-loop-opt -fgcse \
# -fgcse-lm -fgcse-sm -fgcse-las -fdelete-null-pointer-checks \
# -foptimize-sibling-calls -fcaller-saves -Winline \
# -fno-strict-aliasing \
# -fschedule-insns -fschedule-insns2

# broken
#-fstrict-aliasing
#-fschedule-insns -fschedule-insns2

#-fforce-mem -foptimize-sibling-calls -fstrength-reduce -fcse-follow-jumps
#-fcse-skip-blocks -frerun-cse-after-loop -frerun-loop-opt -fgcse
#-fgcse-lm -fgcse-sm -fgcse-las -fdelete-null-pointer-checks
#-fexpensive-optimizations -fregmove -fschedule-insns -fsched-ule-insns2
#-fsched-interblock -fsched-spec -fcaller-saves -fpeep-hole2
#-freorder-blocks -freorder-functions -fstrict-aliasing
#-funit-at-a-time -falign-functions -falign-jumps -falign-loops
#-falign-labels -fcrossjumping

#-finline-functions, -fweb, -frename-registers and -funswitch-loops

CFLAGS = $(OPTIMOPT) $(SYMBOLSOPT) -std=gnu99 -I/usr/X11R6/include -I. -I$(LIFE) -I$(EMULATOR) -I$(X86EMULATOR) $(MAINOPTIONS) $(OPTIONS)
AFLAGS = $(SYMBOLSOPT) -I. -I$(LIFE) -I$(EMULATOR) -I$(X86EMULATOR) $(MAINOPTIONS) $(OPTIONS)

.SUFFIXES:
.SUFFIXES: .o .c .S

.c.o:
$(CC) $(CFLAGS) -o $@ -c $<

.S.o:
$(CC) $(AFLAGS) -o $@ -c $<

SRCS = main.c spy.c world_tools.c utilities.c \
$(LIFE)/cold_load.c $(LIFE)/console.c $(LIFE)/disks.c $(LIFE)/initialization.c \
$(LIFE)/network.c $(LIFE)/message_channels.c $(LIFE)/polling.c $(LIFE)/queues.c \
$(LIFE)/signals.c $(LIFE)/unixcrypt.c \
$(EMULATOR)/interfac.c $(EMULATOR)/interpds.c $(EMULATOR)/externals.c \
$(EMULATOR)/memory.c

NETWORKSOURCES = $(LIFE)/network-osf.c \
$(LIFE)/network-linux.c $(LIFE)/network-tun-linux.c \
$(LIFE)/network-darwin.c $(LIFE)/network-libpcap.c

FAKEEMULATOR=y
ifndef FAKEEMULATOR
ASMS = $(EMULATOR)/emulator.S
EMULATOROBJ = $(EMULATOR)/emulator.o
COMPONENTS = $(CPU)/idispat.s $(CPU)/ifuncom1.s $(CPU)/ifuncom2.s \
$(CPU)/ifungene.s $(CPU)/ifunfcal.s $(CPU)/ifunloop.s \
$(CPU)/ifunlist.s $(CPU)/ifuninst.s $(CPU)/ifunmath.s \
$(CPU)/ifunarra.s $(CPU)/ifunmove.s $(CPU)/ifunpred.s \
$(CPU)/ifunsubp.s $(CPU)/ifunfext.s $(CPU)/ifunlexi.s \
$(CPU)/ifunbits.s $(CPU)/ifunblok.s $(CPU)/ifunbind.s \
$(CPU)/ifunfull.s $(CPU)/ifunbnum.s $(CPU)/ifuntrap.s \
$(CPU)/ihalt.s $(CPU)/idouble.s $(CPU)/ifunjosh.s \
$(CPU)/ifuntran.s
else
# ASMS = $(EMULATOR)/fake_emulator.c
# EMULATOROBJ = $(EMULATOR)/fake_emulator.o
ASMS = stub/stub.c
EMULATOROBJ = stub/stub.o
COMPONENTS =
endif

OBJS = $(LIFE)/cold_load.o $(LIFE)/console.o $(LIFE)/disks.o $(LIFE)/initialization.o \
$(LIFE)/network.o $(LIFE)/message_channels.o $(LIFE)/polling.o $(LIFE)/queues.o \
$(LIFE)/signals.o $(LIFE)/unixcrypt.o \
world_tools.o utilities.o spy.o \
$(EMULATOR)/interfac.o $(EMULATOR)/interpds.o $(EMULATOR)/externals.o \
$(EMULATOR)/memory.o $(EMULATOROBJ)

EMULATORINCLUDES = $(EMULATOR)/aihead.h $(CPU)/aistat.h $(EMULATOR)/ivoryrep.h

OTHEROBJS =

ifdef NONSHARED
OTHEROBJS +=
# LIBRARIES = -lpthread -lc -lX11 -lm -lpcap
LIBRARIES = -lpthread -lc -lX11 -lm
EARLYLIBS = -L/opt/ppc64/X11R6/lib
else
OTHEROBJS +=
# LIBRARIES = -lpthread -lc -lX11 -lm
# EARLYLIBS = -L/opt/ppc64/X11R6/lib
# LIBRARIES = -rdynamic -lpthread -lc -lX11 -lm -ldl -lX11-xcb -lpcap
# LIBRARIES = -rdynamic -lpthread -lc -lX11 -lm -ldl -lX11-xcb
LIBRARIES = -rdynamic -lpthread -lc -lX11 -lm -ldl -lcrypt
EARLYLIBS = -L/usr/X11R6/lib64 -L/usr/X11R6/lib
endif

ifdef PROFILE
override PROFILE = -p
endif

all: clean genera
nocona: clean genera.nocona

$(SRCS): $(EMULATORINCLUDES)

$(LIFE)/network.o: $(NETWORKSOURCES) $(EMULATORINCLUDES)

alpha-emulator/aistat.h: alpha-emulator/aistat.sid
$(CCL) -b -Q -l compile-alpha-emulator.lisp </dev/null

emulator/aihead.h: emulator/aihead.sid
$(CCL) -b -Q -l compile-alpha-emulator.lisp </dev/null

$(CPU)/aistat.h: alpha-emulator/aistat.sid
$(CCL) -b -Q -l compile-alpha-emulator.lisp </dev/null
cp alpha-emulator/aistat.h $(CPU)/aistat.h

stub/stub.o: stub/i*.c stub/float2 stub/dispatch stub/*.c alpha-emulator/*.lisp $(EMULATORINCLUDES)

stub/i*.c: alpha-emulator/*.as alpha-emulator/*lisp alpha-emulator/*.c alpha-emulator/*.h stub/*.lisp $(EMULATORINCLUDES)
cd stub ; $(CLISP) process.lisp

$(EMULATOROBJ): $(ASMS) $(COMPONENTS) $(EMULATORINCLUDES)

$(EMULATOR)/externals.o: $(EMULATOR)/externals.c $(EMULATORINCLUDES)
$(EMULATOR)/interpds.o: $(EMULATOR)/interpds.c $(EMULATORINCLUDES) $(EMULATOR)/asmfuns.h
$(EMULATOR)/interfac.o: $(EMULATOR)/interfac.c $(EMULATORINCLUDES)
spy.o: spy.c $(EMULATORINCLUDES)

genera: CFLAGS = $(OPTIMOPT) $(SYMBOLSOPT) -std=gnu99 -I/usr/X11R6/include -I. -I$(LIFE) -I$(EMULATOR) -I$(X86EMULATOR) $(MAINOPTIONS) $(OPTIONS)

genera: main.o byteswap_world.o $(OBJS) $(OTHEROBJS)
cc $(PROFILE) -o genera $(EARLYLIBS) $(OTHEROBJS) main.o $(OBJS) $(LIBRARIES)
cc $(PROFILE) -o byteswap_world $(EARLYLIBS) $(OTHEROBJS) byteswap_world.o $(OBJS) $(LIBRARIES)

#OPTIMOPT = -Ofast -march=nocona -fno-strict-aliasing
genera.nocona: CFLAGS = $(NOCONAOPTIMOPT) $(SYMBOLSOPT) -std=gnu99 -I/usr/X11R6/include -I. -I$(LIFE) -I$(EMULATOR) -I$(X86EMULATOR) $(MAINOPTIONS) $(OPTIONS)

genera.nocona: main.o byteswap_world.o $(OBJS) $(OTHEROBJS)
cc $(PROFILE) -o genera.nocona $(EARLYLIBS) $(OTHEROBJS) main.o $(OBJS) $(LIBRARIES)
cc $(PROFILE) -o byteswap_world.nocona $(EARLYLIBS) $(OTHEROBJS) byteswap_world.o $(OBJS) $(LIBRARIES)

minima: main.o $(OBJS) $(OTHEROBJS)
cc $(PROFILE) -o minima $(EARLYLIBS) $(OTHEROBJS) main.o $(OBJS) $(LIBRARIES)

iverify: main.o $(OBJS) $(OTHEROBJS)
cc $(PROFILE) -o iverify $(EARLYLIBS) $(OTHEROBJS) main.o $(OBJS) $(LIBRARIES)

clean:
rm -f main.o byteswap_world.o $(OBJS) *~ ./stub/i*.c ./stub/*~ $(LIFE)/*~ $(EMULATOR)/*~ $(CPU)/*~ **/*~

Loading

0 comments on commit 4eb459e

Please sign in to comment.