V A M  the Virtual Alpha Micro

Configuration

Most of VAM configuration is done using a file of variables specified when VAM is started. The default filename for the wd16 emulator is am100.ini and for the 68000 emulator am1200.ini, but these can be overridden as shown in the Operations section.

It's worth noting that unless otherwise stated parameters can be entered either upper or lower case, and that numbers are decimal by default but may be expressed in octal (leading 0) or hex (leading 0x) per usual 'C' convention.

For the wd16

pause statement

sleeps for a few seconds before the configuration processing continues. Argument is the number of seconds to sleep. No default.

example: pause 2

echo statement

causes following statements in the file to echo to stderr. Argument is on or off. No default.

example: pause 2

am100 statement

defines functions of a am100 dual card cpu.

example: am100 clkfrq=60 autobm

clkfrq parameter of am100 statement

is the number of times per second a 'clock' interrupt is to be raised. It should match the CLKFRQ is the SYSTEM.INI

example: clkfrq=60

autobm parameter of am100 statement

is a flag that causes the loaded DSK driver to be modified to use the logical size and bitmap size for the dsk0-container file. It also applies to the SUB drive (using the sub0-container file).

example: autobm

There are a number of other less commonly used parameters of the am100 statement, to wit:

svcc parameter of am100 statement

is a flag that tell the 'hardware assist' feature whether SVCC to be trapped start at 0 and work up (low) or start at 0x3f and work down (high). Probably the most important is svcc 0/3f which is entry to the system disk driver. The default is high.

amos50c.tgz and earlier used 0, but this precluded any other use of svcc.

amos50d.tgz and above use 0x3f, which means svcc's up to ~ 0x30 can be used.

example: SVCC high

dsk parameter of am100 statement

is a number 0-31 of the disk to load the monitor from. 0 default.

example: DSK 1

mon parameter of am100 statement

is the name of the system monitor to load. "" is the default, which means use "system.mon". Specifying something else is like booting with MONTST. the monitor you ask for will be sought on the drive selected with the dsk parameter above, and in [1,4].

example: MON newsys

ini parameter of am100 statement

is the name of the system ini file to use. "" is the default, which means use whatever is in the loaded monitor (usually "system.ini"). Again, this is like MONTST. Note that regardless of where the monitor (or disk driver) is loaded from (dsk parameter above) the system boot will use dsk0:[1,4] to find the ini file you select.

example: INI simple

dvr parameter of am100 statement

is the name of the system disk driver to use. "" is the default which means use whatever is mongen'd into the loaded monitor. Specifying a driver here is like a dynamic MONGEN, except that it only applies to the loaded monitor, nothing is changed on disk. The driver you ask for will be sought on the drive selected with the dsk parameter above, and in [1,6]

example: DVR vam

am300 statement

defines functions of an AM-300 6 channel serial I/O card

example:

am300 port=0xf8 intlvl=3        \
fnum1=1 fnum2=2 fnum3=3 fnum4=4
port parameter of am300 statement

is the lowest of 5 port addresses that will be used to simulate the serial interface. The address should be divisible by 8, and match the port specified in the assembly of the interface driver used. AM300.IDV as delivered from AlphaMicro is assembled with a value of 0xf0. AM301.IDV as delivered from AlphaMicro is assembled with a value of 0xf8.

example: port 0xf8

intlvl parameter of am300 statement

is the interrupt level, a number 1-8 that matches what is specified in the assembly of the interface driver used. AM300.IDV as delivered from AlphaMicro is assembled with a value of 3. AM301.IDV as delivered from AlphaMicro is assembled with a value of 6.

example: intlvl 5

 


# intlvl is the interrupt level, a number 1-8 that matches what is
# specified in the assembly of the interface driver used.
# AM300.IDV as delivered from AlphaMicro is assembled with a value of 3.
# AM301.IDV as delivered from AlphaMicro is assembled with a value of 6.

# fnum1 is the alt key sequence used to select (make active, bring to front,
# etc) the screen image associated with the first port. 1-9 are available
# (zero being reserved for the "front panel").

# fnum2, fnum3, fnum4, fnum5, and fnum6 are similarly used to associate the
# remaining 5 channels of the board with screen images. Channels are not
# 'active' if they do not have a screen...

# Following configuration shows the first 4 of the 6 channels defined for
# the standard AM300.IDV assembly.

am300 port=0xf8 intlvl=3 \
fnum1=1 fnum2=2 fnum3=3 fnum4=4

# - ps3 defines functions of a Processor Technology 3P+S I/O card.

# port is the lower of four port addresses that will be used to simulate
# the interface. It should be an even address, and it should match the
# port specified on the SYSTEM.INI TRMDEF statement (if any) that uses
# the simulated terminal, ie, TRMDEF ANYTERM,PS3=20,TELTYP,80,80,80

# The port may not be zero. Port zero is the diagnostic LED.

# fnum is the alt key sequence used to select (make active, bring to front,
# etc) the screen image associated with the port. 1-9 are available (zero
# being reserved for the "front panel").

# if fnum is not specified the serial interface will not be connected
# to any screen, but will instead always return "input not ready" and
# "ok to send output" (which will be discarded). This may be useful if
# you want the parrellel port's RDR/PUN interface but will use an AM300
# interface for the terminals.

# Following configuration shows port entered in octal

ps3 port=020

# - telnet defines functions of a telnet terminal server which will be
# connected in parellel to every am300 or ps3 port for which you
# defined an "fnum" - except for the first one! So fnums 2-9 are
# available as you see fit, but fnum = 1 is reserved (will usually be
# assigned to JOB1. Note that since this is in parellel to the
# ALT-fnum access the local user has, he is able to oversee and interact
# with the remote users.

# since most telnet clients provide rollback a local telnet connections
# may be something you want even for fnum=1. If so allow1 is a flag that
# lets youd do that.

# the telnet terminal server is optional. If you don't want it,
# comment it out or delete it from this file!

# port is the internet port you will use to access the server. Values
# may be 1025-3276 but should not conflict with other well know ports.

# Following configuration shows port entered in decimal as usual for
# internet ports...

telnet port=12345 allow1

# - am320 defines functions of an AM-320 line printer controller card.

# port is the lower of two port addresses that will be used to simulate
# the interface. It should be an even address, and it should
# match the port specified in the assembled printer driver DVR:LPR.DVR.
# The driver source is LPR.MAC[10,2] which specifies port C2 (hex).

# Note that if you desire lower case output you must modify and
# reassemble LPR.MAC[10,2] by commenting out the 5 lines above label
# LPIG1 as noted in the source. Be sure to move the assembled driver
# back to [1,6] !

# the port may not be zero. Port zero is the diagnostic LED.

# file is the name of a file, defaulting to the same directory as the
# emulator executable, that will get the printed output. It is usually
# most convenient to point it to a shared printer (cygwin) or print
# server (linux). Piping is allowed (ie, "| lpr") but be sure the exec
# time path is what you want - especially in windows note the paths
# from a cygwin bash prompt and from a windows shortcut may be different!

# the file name can be changed at run time with the ALT-M menu...

# delay (optional) is the number of seconds after activity stops until
# the print file is flushed. Default is 30 seconds. Min is 1, max is 530.

# Some limitations here: if the print file is immediately reopened
# after it's closed ('cause you started another print job at exactly
# the wrong time) the host print spoolr may print garbage. This is
# much more likely with windows but can happen with linux as well.

# Define as few or many of these cards (printers) as you like...

# The first of the following configurations shows default port and file
# pointing to the default (shared) printer on my ms windows xp (cygwin)
# machine. The second shows the file being piped to lpr on my linux box.
# The last shows the file being sent to an external file.

#am320 port=0xC2 file='//lianli/mfc' delay=30
#am320 port=0xC2 file='| lpr' delay=30
am320 port=0xC2 file='am100.lpr' delay=30

# - am600 defines functions of an AM-600 mag tape controller card.

# port is the lower of two port addresses that will be used to simulate
# the interface. It should be an even address, and it should
# match the port specified in the assembled printer driver DVR:MTU.DVR.
# The driver source is MTU.MAC[10,2] which specifies port A0 (hex).

# the port may not be zero. Port zero is the diagnostic LED.

# mtlvl is the dma level assoicate with the board. This is optional and
# unused by the emulator, however if specified it is checked to ensure
# that it is >0 and < 16..
# The driver source MTU.MAC[10,2] specifies mtlvl 13.

# file is the name of a file, defaulting to the same directory as the
# emulator executable, that will be used to simulate the first drive
# (drive 0) attached to the card. It is optional and may be over riden
# using the ALT-M mount dialog. No means other than the mount dialog
# are available to specify files associated with the other 7 drives.

# Define as few or many of these cards as you like (but since you can
# have up to 8 drives per card it probably makes no sense to define
# more than one!) but the mount dialog will only process the first am600
# card defined.

# The following configurations shows default port and dma level but
# does not specify any tape file; the mount dialog must be used before the
# first call to the tape system.

am600 port=0xA0 mtlvl=13

# - rom defines functions on a r/o memory card.

# Port is the bank switch control port for the card. Pinit is a
# value that is 'output' to the port as part of initialization.
# Size is the total memory on the card in k (ie, 8=8k). The
# total memory on the card is evenly divided into 8 banks.
# Base0 thru Base7 specify where in the am100 memory space each
# of the 8 banks begins. Since this is bank switched memory
# these banks may overlap or duplicate each other. Ensuring
# the Hardware (this file) and the software (AMOS SYSTEM.INI)
# are logical and consistent is your responsibility! The 8 banks
# are each controlled by one of the 8 bits that can be written to
# the port, so for example writing 0x88 to the port would turn
# on bank0 and bank4 and turn off the other 6 banks.

# memory 'chunkiness' is 256 bytes, so each bank must be a multiple
# of 256 bytes. Since there are 8 banks on a board this means size
# must be a multiple of 2k.

# image is the name of a file, in the same directory as the
# emulator executable, that will be loaded into the rom memory
# board at initialization. Loading of the rom image is just bank0,
# bank1, bank2, ... and is completely independent of the address
# ranges represented by those banks or their swap in status.

# You can have as many as ROM cards as you want (though ports must
# be unique). The port MAY be specified as zero, which is interpreted
# to mean bank switching will not be used for this board.

# Following configuration represents 1 8k rom card, with its 8 1k
# banks sequentially addressed starting at 0xe000 (end of memory)
# and initially turned on. Very similar to a cromemco bytesaver II.
# If this were a bytesaver each bank would be a 2708 eprom.

#rom port=0x40 pinit=0xff \
# size=8k \
# base0=0xe000 base1=0xe400 base2=0xe800 base3=0xec00 \
# base4=0xf000 base5=0xf400 base6=0xf800 base7=0xfc00 \
# image='perlod.prg'

# - ram defines functions of an r/w memory card.

# Ram is just like rom, except it is writeable and does not offer
# the ability to load an initial image. Other parameters and
# comments under ROM apply.

# Following configuration represents 2 128k ram cards, Very similar to
# a pair of cromemco 128kz's. They are arranged in 16k banks configured
# to support an AMOS 16k monitor / 48k jobs system. Initially the first
# 48k (banks 0, 1, 2 on the first board) is on, the rest off.

ram port=0x43 pinit=0xe0 \
size=128k \
base0=0x0000 base1=0x4000 base2=0x8000 base3=0xc000 \
base4=0x4000 base5=0x4000 base6=0x8000 base7=0xc000

ram port=0x44 pinit=0x00 \
size=128k \
base0=0x8000 base1=0x4000 base2=0x8000 base3=0xc000 \
base4=0xc000 base5=0x4000 base6=0x8000 base7=0xc000

 

 

For the 68000 -

# ---------------------------------------------------------------------

# Configuration parameters for virtual Alpha-Micro 68000-based
# computer system. Not all possible combinations of parameters
# will work!
#
# Numbers in this file are decimal by default, but may be expressed
# in octal (leading 0) or hex (leading 0x) per usual 'C' convention.

# - pause statement sleeps for specified number of seconds before the
# configuration processing continues.

pause 1

# - echo statement caused statements in this file to echo to stderr.
# Note that echo is off by default (until you turn it on).

echo off

# - cpu defines functions of an am1200 cpu.
#
# dsk is a number 0-31 of the disk to load the monitor from. 0 default.
#
# mon is the name of the system monitor to load. "" default, which
# means use "amosl.mon". Specifying something else is like booting
# with MONTST. the monitor you ask for will be sought on the drive
# selected with the dsk parameter above, and in [1,4].
#
# ALSO NOTE that any mon file you specify will be loaded from the host
# host DSK file structure if present there instead of from
# the AMOS file structure if the host based file is present.
# This includes the default even if not specified here.
#
# ini is the name of the amosl ini file to use. "" default, which
# means use whatever is in the loaded monitor (usually "amosl.ini").
# Again, this is like MONTST. Note that regardless of where the
# monitor (or disk driver) is loaded from (dsk parameter above) the
# system boot will use dsk0:[1,4] to find the ini file you select.
#
# ALSO NOTE that any ini file you specify will be loaded from the host
# host DSK file structure if present there instead of from
# the AMOS file structure if the host based file is present.
# This includes the default even if not specified here.
#
# dvr is the name of the system disk driver to use. "" default, which
# means use whatever is mongen'd into the loaded monitor. Specifying
# a driver here is like a dynamic MONGEN, except that it only applies
# to the loaded monitor, nothing is changed on disk. The driver you
# ask for will be sought on the drive selected with the dsk parameter
# above, and in [1,6]
#
# ALSO NOTE that any drv file you load must be no larger than whatever
# was MONGEN'd into the loaded monitor. The language definition
# file immediately follows the driver, so if you try to load
# a larger dvr it will overlay the LDF!
# The VAMFEF.DVR is tiny, so using it here instead of trying
# to MONGEN it into your monitor isn't usually necessary.
#
# ALSO NOTE that any dvr file you specify will be loaded from the host
# host DSK file structure if present there instead of from
# the AMOS file structure if the host based file is present.
# This includes the default even if not specified here.
#
# autobm is a flag that causes the loaded DSK driver to be modified to
# use the logical size and bitmap size for the dsk0-container file. It
# also applies to the SUB drive (using the sub0-container file).
#
# ALSO NOTE that even though the disk driver is modified the BITMAP
# statements in the .ini file are not, so that must still
# be manually edited as necessary.
#
# alt1time & alt2time define the max wait time between ALT key
# sequences, with the default for alt1time being 2000 microseconds
# and the default for alt2time being 15 tenths of a second.
# alt2time probably always OK, but alt1time may need to be changed
# when an ALT key is not available and has to be simulated by
# pressing ESCAPE followed by the second char. In that case
# alt1time may be specified in seconds instead of microseconds by
# prefixing it with a minus sign, so -2 would be 2 seconds.
#
# goslow is a flag the causes the cpu to run at about the same speed
# as a real am1200. noslow is the opposite, and the default.
#
# It is not logical to define more than one cpu, and doing so will
# be flagged as an error.
#
# Following configuration shows automatic configuration of the
# dsk driver(s) using the autobm option.

cpu autobm                \
dvr=vamfef.dvr            \
alt1time=2000 alt2time=15 \
ini=batch.ini
# mon=amosl.mon

# - idv defines functions of a terminal io interface card.

# idv am300 defines functions of a AM-300 6 channel serial I/O card.
# real am1200's don't have am300's (or any other s-100 cards!) but VAM
# supports them as they provide an easy way to get lots of terminals.
# Multiple am300 cards may be defined.

# port is the lowest of 5 port addresses that will be used to simulate
# the serial interface. The address should be divisible by 8, and
# match the port specified in the assembly of the interface driver used.
# AM300.IDV as delivered from AlphaMicro is assembled with a value of
# ^H0FFFFF8.

# port is an optional parameter, if omitted the default will be used.

# amv is the user interrupt level, a number 1-8 that matches what is
# specified in the assembly of the interface driver used.
# AM300.IDV as delivered from AlphaMicro is assembled with an 'AMV'
# value of 3.

# amv is an optional parameter, if omitted the default will be used.

# fnum1 is the alt key sequence used to select (make active, bring to front,
# etc) the screen image associated with the first port. Single digits 0-9;
# double digits are allowed also, but are less convenient. To select such
# first press the alt key for the first digit, they the normal key for the
# second digit. So for an fnunx=53, first press alt-5, then 3.
# Note fnum=09 is not the same as fnum=9 ...
# Also note that if you define an fnum=N you can't then define an fnum=Nm
# and vis-a-versa (no fnum=Nm followed by an fnum=N).

# fnums may optionally be suffixed with a T and/or an L to signify:
# T - telnet connection is allowed for this fnum
# (assuming the telnet port is later specified)
# L - this fnum will have a log file created (or appended) on startup.
# NOTE - regardless of this setting log files may be opened or closed
# at run time using alt-L.
# ALSO NOTE - this is case sensitive:
# L (big L) means log initially open append
# l (little L) means log initially open new

# fnum2, fnum3, fnum4, fnum5, and fnum6 are similarly used to associate the
# remaining 5 channels of the board with screen images (logs, connections).

# am300 channels are not 'active' if they do not have an fnum...

# Following configurations shows the first 5 of the 6 channels defined for
# the normal port and amv interrupt and for the unmodified modified AM300.IDV.
# Note that the port and amv specificaton is unnecessary for the first am300
# (except as documentation) as it calls out default values.
# Channels 1 & 4 have logs opened at startup. Channels 2, 3 & 4 are telnet
# eligible. Channel 5 is not telnet eligible and does not have a log opened
# initially. Channels 1, 2 & 5 are selectable with single digit alt key
# sequences. Channels 3 & 4 use two digit selection. Channels 6 isn't active.

#idv                           \
#am300 port=0x0FFFFF8 amv=3    \
# fnum1=1L fnum2=2T            \
# fnum3=32T fnum4=33LT fnum5=5

idv                            \
ma300                          \
fnum1=1L fnum2=2l fnum3=3l     \
fnum4=4l fnum5=5l fnum6=6l

# - telnet defines functions of a telnet terminal server which will be
# connected in parallel to every serial port for which you defined
# an fnum with a 'T'. If there are no such fnums then telnet will not
# be able to connect.
#
# the telnet terminal server is optional. If you don't want it,
# comment it out or delete it from this file!
#
# port is the internet port you will use to access the server. Values
# may be 1025-3276 but should not conflict with other well know ports.
#
# Following configuration shows port entered in decimal as usual for
# internet ports. You should probably not use a value above 3276, but it's
# OK if it's just for a local connection...

telnet port=12345

# - ram defines functions of an r/w memory card.
#
# You can have as many RAM cards as you want, but must have at
# least one. More than one is uncommon.
#
# You must define at least 128K of RAM at zero. If you define more
# than one memory card (ram and/or rom) they must be defined in
# address (base) sequence. Memory card (ram and/or rom) definitions
# may not overlap.
#
# Some versions of AMOS/L require more than 128k.
#
# base & size are in bytes; you can suffix with 'k' or 'm' to
# specify times 1024 or times 1048576 (1024*1024).
#
# A real am-1200 maxed out at4m, you can define up to 15m here
#
# Following configuration represents one 4096k ram card at zero.

ram base=0 size=8m

# - rom defines functions on a r/o memory card.
#
# Rom is just like ram, except it is not writeable and offers
# the ability to load an initial image. Other parameters and
# comments under RAM apply.
#
# image is the name of a file, in the same directory as the
# emulator executable, that will be loaded into the rom memory
# board at initialization.
#
# You can have as many ROM cards as you want, but one (or none)
# is most common.
#
# Following configuration represents a 16k rom image placed
# just under the 16 meg line (less 512k for i/o operations),
# similar to the real am1200 boot rom.

#rom base=0xFFBE00 size=16k image='am1200-boot.rom'
 


Copyright © Mike Noel, 2002-2026; last updated 10/23/2026