home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Archive Magazine 1997
/
ARCHIVE_97.iso
/
discs
/
mag_discs
/
volume_08
/
issue_06
/
risc_os
/
Emulate65
< prev
next >
Wrap
Text File
|
1988-10-04
|
9KB
|
165 lines
This is a brief guide on the 6502 emulators for RISC OS/Archimedes.
There are at present three types of 6502 emulator for RISC OS; all are
relocatable modules. Depending on an assmebly time option, they can each be
made in two variants - ones which claim the emulated 6502 space as part of
their module workspace and those which use application space at &8000 upwards
for the emulated 6502 space.
(i) 65Tube (used to be known as 65Arthur)
Emulates a 6502 second processor environment,
so that calls to WrCh,OSByte etc. are in general not trapped locally, but
are passed to the Host machine, in this case RISC OS. Two 6502 code
images are strapped onto the end of the ARM code at assembly time - a Tube
OS lookalike that traps a few OSBytes (a la real second processor TOS) etc.
but passes most calls on to the ARM code via unused single byte 6502 opcodes
(typically &x3), and a copy of HIBASIC 4.31, which is copied into RAM
whenever *basic is executed in emulated code. It executes code as if the
6502 processor were being clocked at about 1.36 MHz (deduced from BASIC
benchmark programs).
This emulator can be used to run many 6502 language ROM images; often enhancing the
facilities provided by these packages - for instance View and ViewSheet can
be used in the RISC OS 132 column modes, and due to the speed of WrCh being greater than on the BBC micro
their screen update is actually much faster than when running on the old BBC.
Double ROM systems such as Acornsoft Logo and ISO-Pascal which use sideways ROM OSByte calls to page
each other across the Tube do not work.
MASM (part of the 6502 Development package)
does not work as no hardware trapping is done, so that peeking/poking Tube hardware does not work; also
there is not I/O processor to communicate with!
Star commands are passed to RISC OS OS_CLI, and you can use whatever filing system you want.
Use *EmulateTube to start the emulator.
Use *Quit to exit the emulator.
Deviant versions of the above can be made containing any language ROM, for instance View.
(ii) 65Turbo
Emulates an extended (Turbo) 6502 second processor environment, similar to
65Tube, but understands the difference between normal and Turbo 6502 code if
they have a standard image header (normally associated with sideways ROM
code, but it's actually more general). Normal 6502 code images have type bytes of
the form 2_x1xx0010 (ProcType = 2_000)for a language or 2_01100000 for BASIC
(special case), whereas Turbo code has type bytes of the form 2_x1xx0011
(ProcType = 2_001).
A Turbo second processor has nothing to do with the Master Turbo, which is just a faster
6502 second processor; it is in fact a 256 KByte 6502 second processor which
uses page 03 as extra indirection bytes, so that indirect and indirect,Y
opcodes take an extra cycle to fetch a byte from &0301 + zp_offset to yield
a 24-bit address, of which only the bottom 18 bits is used. The extra memory
cannot be accessed using any other addressing modes than these two.
When not executing code with a Turbo type byte, it behaves just like a normal 64K Byte second processor.
This emulator is useful for running TurMasm and TurMasm816 which are needed
to build BBC OS'es, 6502 emulator code, File Server code, Communicator code etc.
Due to the extra address fetch involved in all xxxI and xxxIY opcodes, it is about 1.5%
slower than the standard emulator on typical BASIC programs. However, it is
probably of little interest to outside punters, as Turbo processors
never really got outside of Acorn.
Use *EmulateTurbo to start the emulator.
Use *Quit to exit the emulator.
Deviant versions of the above can be made containing any language ROM, for instance TurMasm.
(iii) 65Host
Emulates a BBC Model B running OS 1.20 - it does NOT emulate B+, Master 128 or anything else.
It supports paged sideways ROMs, as well as direct screen access.
This emulator is slightly slower (don't know quite how much yet) than 65Tube as it has to trap accesses to
hardware devices and various other memory locations.
It can be used in conjunction with ROM podules; on initialisation it enumerates rom:@ looking for files
of type &BBC ('BBC ROM') and stores these filenames in a table for later use. An image of BASIC 2 is
made available in socket 12 by default.
This emulator actually uses 128K of memory as it fills areas of the 64K address space which are to be
trapped with a trap byte and those trapped areas that correspond to memory and not other hardware devices have
their real contents stored at 64K + memory address.
A trap byte of &FB was chosen as it is less likely to be loaded than most other data bytes.
Accesses to some OSByte variables are trapped in order to access the real RISC OS OS_Byte variables
instead of a local copy.
Writes to screen memory &xx00..&7FFF are trapped in order to update the displayed screen, converting the BBC
style byte into Archimedes style bytes. The Archimedes screen is accessed directly for speed.
FRED (FCxx) and JIM (FDxx) devices:
1MHz bus accesses are trapped and issue OS_Byte calls which are processed by
the BBC I/O Podule software if that podule is present, otherwise reads return &FF, writes ignored.
SHEILA (FExx) devices:
6845 CRTC R0-R7 not implemented. Uses RISC OS VDU 23,0,r,v| to do other functions.
reads from R16,17 (light pen position) return &00.
6850 ACIA not implemented: reads return &00, writes ignored.
Serial ULA reads return &FE, no cassette relay to turn on or off when writing to it. Can set Tx/Rx baud rates.
Video ULA screen cleared on MODE change. Can't set cursor width.
Econet ID reads the Econet station number from CMOS RAM as if set by Molex links on BBC board.
Econet IntOn not implemented: reads return &FE.
74LS161 ROMSEL writes to this copy the corresponding sideways ROM image from cache into &8000..&BFFF. If no ROM
occupying socket then &8000..&800F is written to the ROM number to indicate socket uniqueness
(speeds up initialisation) and invalid ROM (no (C) string).
reads return current value (unlike real BBC, but like Master 128).
6522 VIAA reads from most registers echo current value. reads from IRB depend on I/O Podule to
provide ADVAL for FIRE button state. Handles slow I/O bus accesses for BBC keyboard scanning.
6522 VIAB depends on I/O Podule to provide SHEILA handling, otherwise writes ignored, reads return &00.
8271 FDC not implemented; reads return &FE, writes ignored.
6854 ADLC not implemented: reads return &FE, writes ignored.
u7002 ADC depends on I/O Podule to provide SHEILA handling, otherwise writes ignored, reads return &00.
Tube ULA not implemented: reads return &FE, writes ignored.
Two RISC OS MODE changes are done for each real BBC MODE change due to the way BBC OS 1.20 programs the Video ULA
Flashing colours are not done properly.
Keyboard emulation not quite up to par: can't do OSByte &7A, &79 -ve etc.
MODE 3,6 hardware scroll wrong.
The emulator provides several star commands:
*ListROMs gives a list of all the sideways ROMs that the emulator knows about, and whether they are cached or
not.
*SwapROMs <ROM number> <ROM number> swaps the pointers to the specified cached objects (may be empty)
*CacheROM <ROM number> [<filename>] with no filename argument ensures that the current linked name is cached.
Otherwise it loads the specified BBC ROM file (must be 16K long) into store for use when the emulator is run.
*LinkROM <ROM number> [<filename>] with no filename argument frees the store used for that ROM socket. Otherwise
it takes a copy of the name to cache when the emulator is run.
*EmulateBBC starts up the emulator, first cacheing any linked files.
A BBC ROM file is needed in order to access any filing systems; this is the ARFS file. *CacheROM 0 ARFS is used to load this
for use - this command must be executed before entering the emulator!
NB. Once the emulator is running, star commands do not get passed out to the RISC OS OS_CLI handler as the screen must not be
corrupted.
Use *Quit to exit the emulator.
Where do I get it all from ?
----------------------------
65Tube is available on net#arf(49.254):$.a500.rm.65Tube
65TubeView net#arf(49.254):$.a500.rm.65TubeView
65Turbo net#arf(49.254):$.a500.rm.65Turbo
65TurboMasm net#arf(49.254):$.a500.rm.TurboMasm
65Host net#arf(49.254):$.a500.rm.65Host
ARFS net#arf(49.254):$.a500.arfs
You can log on as Guest to access any of the above files.
Stuart