
|
Datapack ch2 Onbekend, 00-00-00
<< page 5 >>
----------------------------------------------------
CHAPTER 2
System organization
-----------------------------------------------------
In this chapter We want to explain the hardware organization of the MSX Turbo
R to start of with the new R800 CPU.
2.1 standard equipment (shiy(tm) blz 130)
Below we show with the help of a summary the differences between the standards
of msx 2+ and the Turbo R
chart 1.1 outline ofthe standard equipment of the MSX Turbo R and the MSX 2+
-----------------------\------------------------\---------------------------
¡ MSX Turbo R ¡ MSX 2+
----------------------------------------------------------------------------
CPU ¡ R800 of eqv ¡ Z80A or eqv
¡(7.15909 Mhz) ¡ (3.579545 Mhz)
-------\--------------------------------------------------------------------
¡ ROM ¡ 160 KB ¡ 96 KB
¡ ¡(MSX BASIC ver.4) ¡ (MSX BASIC ver.3)
¡ ¡ MAIN ROM 32 KB ¡ MAIN ROM 32 KB
¡ ¡ SUB ROM 16 KB ¡ SUB ROM 16 KB
¡ ¡ KANJI Driver 32 KB ¡ KANJI Driver 32 KB
¡ ¡ MSX DOS1 16 KB ¡ MSX DOS1 16 KB
memory ¡ ¡ MSx DOS2 48 KB ¡ (option)
¡ ¡ MSX MUSIC 16 KB ¡ (option)
¡ ------------------------------------------------------
¡ RAM ¡ At least 256 Kb ¡ At least 64 KB
¡ -------------------------_----------------------------
¡ VRAM ¡ 128 KB
-------_---------------_-----------------------------------------------------
<6 CHAPTER 2 SYSTEM ORGINATZATION>
------------------------\------------------------\----------------------------
¡ MSX TURBO R ¡ MSX 2+
---------\---------------------------------------_----------------------------
¡ VDP ¡ V9958 or EQV
¡ ------------------------------------------------------
¡ resolution ¡ 512x212 (non interlaced)
¡ (max) ¡ 512x424 (interlaced)
¡ ------------------------------------------------------
screen ¡ colors(max) ¡ 19268 colors
¡ ------------------------------------------------------
¡ hardware ¡ vertically and horzontally
¡ scroll ¡
---------_--------------------------------------\-----------------------------
cassette interface ¡ not available ¡ FSK methode 1200 . 2400baud
---------\--------------------------------------_-----------------------------
¡PSG ¡ AY-3-8910 or eqv
¡ ------------------------------------------------------
¡ FM sound ¡ MSX-AUDIO (option)
sound ¡ source ------------------------\-----------------------------
¡ ¡ MX-MUSIC ¡ (option)
¡ ------------------------------------------------------
¡ ¡ MSX-MIDI ¡ not available
¡ ¡ (option) ¡
---------_--------------------------------------------------------------------
Keyboard ¡ English-nummerical, hirigana, katakana, grafic
¡ letter equivalence (????), JIS arrangement, 50??
------------------------------------------------------------------------------
Floppydrive ¡ 3.5 inch 2dd
¡ (1DD read/write possibilitiy)
------------------------------------------------------
Format ¡ MS-DOS 2.11 standard
------------------------------------------------------------------------------
PRINTER ¡ 8 bit parallel
¡ centronicsinterface standard
------------------------------------------------------------------------------
cartridge slot ¡ ??
------------------------------------------------------------------------------
Joystick ¡ 2
---------\--------------------------------------------------------------------
KANIJ ¡ KANJI ROM ¡ 1 Standard
function ¡ ¡ 2 Standard
¡ ------------------------------------------------------
¡ KANJI INPUT ¡ SINGLE KANJI CONVERTOR (MSX JE EQUIVALANCE)
---------_--------------------------------------------------------------------
realtime clock ¡ RP5C01 or eqv
------------------------_-----------------------------------------------------
<2.2 HARDWARE ORGINAZATION 7>
2.2 HARDWARE ORGINAZATION
The hardware orginazation of the msx turbo r is shown here
2.2.1 MAIN LSI
The most important LSI of the Turbo R are shown below here.
CPU R800 or eqv (clock 7.15909 Mhz)
Z80A or eqv (clock 3.57945 Mhz)
VDP V9958 or eqv
PSG AY-3-8910 or eqv
FM soundsource MSX-MUSIC (YM2413 or eqv)
MIDI MSX-MIDI (i8251 or eqv en i8253 or eqv en verder i8254 or eqv)
PPI i8255 or eqv
systemIC S1990 or eqv
2.2.2 MEMMORY
The memory shown below is orginized in the MSX Turbo R.
ROM MSX BASIC ver.4 80 KB
(MAIN ROM 32 KB)
(SUB ROM 16KB)
(KANJI DRIVER 32KB)
MSX-DOS1 16KB
MSX-DOS2 48KB
MSX-MUSIC 16KB
RAM MAIN RAM 256 KB at least (memmory mapper is being
used)
VRAM 128 KB
2.2.3 BLOCK DIAGRAM
The MSX Turbo-R system-equipment is explained with a block diagram.
The MSX Turbo-R has 2 CPU's (Z80 and R800). The type of processor (R800 or
Z80) can be freely changed in the use of program. If one of the processors
is used the other processor will be put on HOLD.
It is not possible to use both the processors at the same time.
<8 CHAPTER 2 SYSTEM ORGINAZATION>
Å--------ã Å--------ã Å---------ã Å------------ã
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
¡ Z80 -------¢ S1990 -------¢ R800 ------¢ DRAM ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
-------- ----\--- --------- ------------
¡
Å-------------------------------------------ã
¡ ¡ ¡
Å---_----ã Å----_----ã Å---------------_-----------ã
¡ ¡ ¡ ¡ ¡ ¡
¡ SLOT ¡ ¡ ROM ¡ ¡ VDP, OPLL, FDC etc ¡
¡ ¡ ¡ ¡ ¡ ¡
-------- --------- ---------------------------
picture 1.1 MSX Turbo R Block scheme
The S1990 is a LSI-systemcontroller as a solution for the switching of the CPU.
The control of the slots and memory, the generation of wait signals as well as
the I/O decoding etc is executed by the S1990.
2.3 SLOT ORGINASATION
In the MSX Turbo R the slot orginazation was standarized. Because the Main Ram
was directlty connected to the R800 or depending to which slot it is connected,
the system performance can change graetly. Furthermore, a purpose is to
simplify the develpment of application software.
DOS contains both MSX DOS1 en MSX DOS2. In page 1 of slot 3-2 there are 4
local banks, the first 3 pages are for MSX-DOS2 and the last page 1 for MSX
DOS1.
In the system the combination of the two DOS versions with the 2 CPU can be
changed freely but it simplifies the system and to avoid disorginazation of the
user, in the standard there are 2 combinatios supported :
Z80 and DOS1 (Z80 Mode)
R800 and DOS2 (R800 Mode)
When starting the system, depending on the
inserted cartridge or disk is the selection between these 2 modes automatically
done.
<2.3 SLOT ORGINAZATION 9>
0-0 0-1 0-2 0-3
FFFFH Å-------ã Å-------ã Å-------ã Å-------ã
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ PAGE 3
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
C000H --------¢ --------¢ --------¢ --------¢
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ PAGE 2
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
8000H --------¢ --------¢ --------¢ --------¢
¡ ¡ ¡ ¡ ¡MSX ¡ ¡ ¡ PAGE 1
¡ MAIN ¡ ¡ ¡ ¡MUSIC ¡ ¡ ¡
4000H ¡ ¡ --------¢ --------¢ --------¢
¡ ROM ¡ ¡ ¡ ¡ ¡ ¡ ¡ PAGE 0
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
0000H ------- ------- ------- -------
1 2
FFFFH Å-------ã Å-------ã
¡ ¡ ¡ ¡
¡ ¡ ¡ ¡
C000H ¡EXT. ¡ ¡EXT. ¡
¡ ¡ ¡ ¡
¡SLOT ¡ ¡SLOT ¡
8000H ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡
¡ ¡ ¡ ¡
4000H ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡
¡ ¡ ¡ ¡
0000H ------- -------
3-0 3-1 3-2 3-3
FFFFH Å-------ã Å-------ã Å-------ã Å-------ã
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ PAGE 3
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
C000H ¡ ¡ --------¢ --------¢--ã --------¢
¡ MAIN ¡ ¡KANJI ¡ ¡ ¡-ã¡ ¡ ¡ PAGE 2
¡ RAM ¡ ¡DRIVER ¡ ¡ ¡ã¡¡ ¡ ¡
8000H ¡ (*1) ¡ ¡ ¡ --------¢¡¡ --------¢
¡ ¡ ¡ ¡ ¡ DOS ¡¡ ¡ ¡ PAGE 1
¡ ¡ ¡ ¡ ¡ ¡(*2)¡ ¡
4000H ¡ ¡ --------¢ --------¢ --------¢
¡ ¡ ¡ SUB ¡ ¡ ¡ ¡ ¡ PAGE 0
¡ ¡ ¡ ROM ¡ ¡ ¡ ¡ ¡
0000H ------- ------- ------- -------
(*1) With the memmory it contains at least 256 Kb.
(*2) Local Bank. The first 3 pages are for MSX DOS2 and the last page is for
MSX DOS1.
Pricture 1.2 Slot orginasation of the MSX Turbo R
<10 CHAPTER 2 SYSTEM ORGINAZATION>
2.4 R800
2.4.1 FEATURES OF THE R800
The R800, develloped CPUused in the Turbo R, has the features shown below.
1. Z80 and object-compatible
With the software written for the Z80 note that the parts dependent on the
timing of the CPU are removed and not-changed can be used.
2. The CPU clock frequency is 7.15909 Mhz
Because compared with the number of clockpulses per instruction in the Z80
sharply lower , the z80 conversion is in fact at the speed on 28.63636Mhz
(If there are no waitstates).
3. multiplication commands
the multiply command that is supported has an accuracy of 8bit x 8bit ->
16 bit and also 16bit x 16bit -> 32 bit
Dependend on this, bigscale progress of mathematical- operation-procedure
speed is possible. (??)
4. LSB/MSB defenition instructions
With the Z80 / The access of the higher and the lower 8 bit of register
IX/IY with the LSB/MSB defenition is properly ensured
In figure 1.2 the [verwerkings]speeds of the most important instructions is
shown. (When the Turbo R has no waitstates. On the MSX 2+ 1 waitstate
occurs on the M1 cycle.??)
2.5 WAIT
In the MSX Turbo R normally no waitstates are generated. In the conditions
below a waitstate is generated.
1. If an external slot is accessed (3 waitstates)
When an external slot is accessed, to support the externale hardware up to
now developed, the Turbo R is designed in the same way the MSX2+, it has
the same accesstime while accessing.
2. If an internal rom is accessed (2 waitstates)
internal ROMS are ROMS like BIOS, BASIC and as well as the internal
DISKROM etc.
In the first stage in the Turbo R because BIOS, BASIC, SUB ROM and the 16KB
of the first part of the KANJI driver (64KB in total) are being copied to
the main RAM, In that case approximately in state 3 waitstates
are generated(????????????????????????)
<2.5 WAIT 11>
picture 1.2 execution-comparison of the MSX Turbo R and MSX2+
-----------------------------------------------------------------------------
INSTRUCTION MSX2+(in u.sec) MSX Turbo R(in u.sec) FACTOR
-----------------------------------------------------------------------------
LD r,s 1.40 0.14 x 10.0
LD r,(HL) 2.23 0.42 x 5.3
LD r,(IX+n) 5.87 0.70 x 8.4
PUSH qq 3.35 0.56 x 6.0
LDIR (BC<>0) 6.43 0.98 x 6.6
ADD A,r 1.40 0.14 x 10.0
INC r 1.40 0.14 x 10.0
ADD HL,ss 3.35 0.14 x 24.0
INC ss 1.96 0.14 x 14.0
JP 3.07 0.42 x 7.3
JR 3.63 0.42 x 8.7
DJNZ (B<>0) 3.91 0.42 x 9.3
CALL 5.03 0.84 x 6.0
RET 3.07 0.56 x 5.5
MULTU A,r 160 1.96 x 82
MULTUW HL,rr 361 5.03 x 71
-----------------------------------------------------------------------------
3. When the internal DRAM is being addressed (1 waitstate)
the pageaccess-mode is supported what means that the R800 uses its own bus
to the DRAM. Therefore it is possible to get the best performance of the
DRAM. In differences with the memmory access the lower 8bit of the adress
is just changed, in the page-address-mode highspeed access is possible.
Except the lower 8 bit that are changed, the rest presents the pagebreak
that is produced.
Because when using the page-break 2 using the DRAM is done 1 about 1 time
practically approximately 0.5 waitstate is generated.
With the pagebreak also a DRAM refresh is generated.
With the R800, different from the Z80, together with the commands in
practice the DRAM refesh are not unsynchonized executed.
In the MSX Turdo R the refresh takes every time 31 u.sec The refresh of 1
time takes 280 n.sec. Furthermore with jump instructions (relative jumps
and absolute jumps) a pagebreak is absolutly generated.
According to this it is better with highspeed access to pay attention to the
things below with important programs.
1. Transmission of programs in RAM
With a program in a ROM cartridge, highspeed can be used if a important part
is moved by highspeed into ram.
A program provided from diskette will inevitable put into RAM for using it
so that will be no problem.
<12 CHAPTER 2 SYSTEM ORGINASATION>
2. Coding where no pagebreak takes place.
In the case of using into RAM when highspeed comes to a necessary loop
/just the register of the CPU ?? /and when coding with few times accessing
of datamemory (this also contains stack) the advantage of the pageacces mode
makes the best use of it.
Furthermore, a loop is most effective when it is programmed between xx00H
and xxFFH.
3. Using the system-timer
In the Turbo R the effect of the above mentioned pagebreak and refreshcycle
like in the MSX 2+ understand exactly the timing of the instructions by
means of the coding steps, is not needed.
In accordance with that, even on the MSX Turbo R to make programs like
making on the MSX 2+, timing with software loops is not recommended.
In the MSx Turbo R becasue the systemclock is increased every 3.91 u.sec,
it is recommended to be used for timing.
<629 >
CHAPTER 4
------------------------------------------------------------------------------
MSX MIDI
<630 >
------------------------------------------------------------------------------
CHAPTER 1
ABOUT MSX MIDI
------------------------------------------------------------------------------
Because MIDI (Musical Instrumental Digital Interface) functions were also
added to MSX MUSIC, MIDI can be used via BASIC instructions.
There is no BIOS used for MSX MUSIC. Except for Basic, programs that use
MSX-MIDI access the I/O ports directly.
MSX-MIDI can be built inside as well as it can be an external cartridge.
MIDI was for the exclusive use of the MSX TURBO R and machines that might be
build hereafter. On a MSX, MSX 2 or MSX 2+ it can't be used.
MSX MIDI was constructed in the following way.
* MIDI INTERFACE
8251 MIDI data communication IC
8253 and 8254 booreeto generator and timer IC
futhermore there are some different IC's for the port access.
* MSX-MIDI ROM (16Kb)
In case it is internal, the ROM is in the same slot (slot 0-2, page1) as
MSX MUSIC.
In case it is in an external cartridge, the rom is fitted in the
cartridge. When basic commands are used, the internal MSX MUSIC can't be
used so the MSX MIDI in the external cartridge will be used that appeared
in the booting process.
<633>
------------------------------------------------------------------------------
CHAPTER 2
HARDWARE
------------------------------------------------------------------------------
The way of accessing and the way of construction of the hardware depends on
the fact if there is an internal or an external MSX MIDI.
Below the hardware construction of MSX MIDI is explained.
Further, the timer IC 8253 and 8254 are being used but below only the 8253 is
shown.
2.1 BLOCK DIAGRAM
The hardware construction of MSX-MIDI.
8251
Å--------ã Å-----ã
MIDI IN ¡ RTS ¡------------------------>¡ ¡
------->¡ RXRDY ¡------------------------>¡ AND ¡ --ã
¡ DSR ¡<------------------ã ¡ ¡ ¡
¡ DTR ¡-----------------ã ¡ ----- ¡
MIDI OUT¡ ¡<--ã ¡ ¡ ¡ Å-----ã
<--------¡ ¡ ¡ ¡ ---------ã ->¡ ¡
-------- ¡ 500 KHz ¡ ¡ ¡ OR ¡ ------> INT
¡ ¡ Å-----ã ¡ Å----->¡ ¡
Å--------ã ¡ ->¡ ¡ ¡ ¡ -----
4Mhz \-->¡ TIMER0 ¡--- ¡AND ¡--_-
¡ ---------¢ Å-----ã Å->¡ ¡
¡ ¡ TIMER1 ¡---\---->¡S ¡ ¡ -----
¡ ---------¢ ¡ ¡ FF ¡-
-->¡ TIMER2 ¡--> Å->¡R ¡
-------- ¡ -----
¡
0EAH Write
DIAGRAM 4.1 BLOCK SCHEME OF THE MSX MIDI
<634 CHAPTER 2 HARDWARE >
2.2 BUILT-IN MIDI INTERFACE
The following I/O ports of the built in MSX-MIDI interface are
accessable.
8251 interface ; portnumber 0E8H, 0E9H
0E8H (READ) b7 b6 b5 b4 b3 b2 b1 b0
Å----\----\----\----\----\----\----\----ã
¡RXD7¡RXD6¡RXD5¡RXD4¡RXD3¡RXD2¡RXD1¡RXD0¡
----_----_----_----_----_----_----_----
Å----\----\----\----\----\----\----\----ã
(WRITE) ¡TXD7¡TXD6¡TXD5¡TXD4¡TXD3¡TXD2¡TXD1¡TXD0¡
----_----_----_----_----_----_----_----
RXD7-RXD0 = 8251 received data
TXD7-TXD0 = 8251 data to send
0E9H (READ) b7 b6 b5 b4 b3 b2 b1 b0
Å----\----\----\----\----\----\----\----ã
¡DSR ¡BRK ¡ FE ¡ OE ¡ PE ¡EMPT¡RDDY¡TRDY¡
----_----_----_----_----_----_----_----
DSR 8253 data set ready (1= ?? detected)
BRK 8251 break detection (1=detected)
FE 8251 frame error flag (1=error detected)
OE 8251 overrun error flag (1=error detected)
PE 8251 parity error flag (1=parity error detected)
EMPT 8251 transmitter buffer empty status (1=buffer is empty)
RRDY 8251 receiver buffer status (1= data is present)
TRDY 8251 transmitter status (1=transmission possible)
(WRITE)
0E9H (Write) b7 b6 b5 b4 b3 b2 b1 b0
Å----\----\----\----\----\----\----\----ã
mode ¡ S2 ¡ S1 ¡ EP ¡ PEN¡ L2 ¡ L1 ¡ B2 ¡ B1 ¡
----_----_----_----_----_----_----_----
Å----\----\----\----\----\----\----\----ã
command ¡ EH ¡ IR ¡RIE ¡ ER ¡SBRK¡ RE ¡TIE ¡TEN ¡
----_----_----_----_----_----_----_----
EH normally set to 0
IR normally set to 0
RIE MIDI IN transmission enablen (1=enable; 0=disable)
ER error reset (1=reset error flags; 0=no operation)
<2.2 INTERNAL MIDI INERFACE 635>
SBRK normally set to 0
PE MIDI IN receive enable (1=enable; 0=disable)
TIE 8253 timer (counter #2) (1=enable; 0=disable)
transmission enable
TEN MIDI OUT transmission enable (1=enable; 0=disable)
When writing to the command mode register of the 8251 it is nessesary to wait
16 clock cycles (3.579545 Mhz) for the result. When writing a sequence of
commands to to command register please wait before writing the data.
After writing 00H, 00H, 00H, 40H to the I/O port 0E9H the 8251 is resetted.
Because when a wrong value to the mode was written the MIDI can't function
properly, it is necessary to write the correct values after a reset.
For details please see the accompanied programsample ([THRU.MAC]).
8253 OUT2 Latch of the signals of the terminal (adress 0EAH,0EBH)
0EAH (WRITE) b7 b6 b5 b4 b3 b2 b1 b0
Å----\----\----\----\----\----\----\----ã
¡ - ¡ - ¡ - ¡ - ¡ - ¡ - ¡ - ¡ - ¡
----_----_----_----_----_----_----_----
0EAH Reading the data from this adres is ineffective
0EBH Is the image of 0EAH
dependent on the optional data written to adress 0EAH, the data read from
counter #2 of the 8253 can be cancelled.
8253 INTERFACE (adres 0ECH-0EFH)
b7 b6 b5 b4 b3 b2 b1 b0
Å----\----\----\----\----\----\----\----ã
0ECH (R/W) ¡CT7 ¡CT6 ¡CT5 ¡CT4 ¡CT3 ¡CT2 ¡CT1 ¡CT0 ¡
----_----_----_----_----_----_----_----
Å----\----\----\----\----\----\----\----ã
0EDH (R/W) ¡CT17¡CT16¡CT15¡CT14¡CT13¡CT12¡CT11¡CT10¡
----_----_----_----_----_----_----_----
Å----\----\----\----\----\----\----\----ã
0EEH (R/W) ¡C727¡CT26¡CT25¡CT24¡CT23¡CT22¡CT21¡CT20¡
----_----_----_----_----_----_----_----
Å----\----\----\----\----\----\----\----ã
0EFH (READ) ¡ - ¡ - ¡ - ¡ - ¡ - ¡ - ¡ - ¡ - ¡
----_----_----_----_----_----_----_----
Å----\----\----\----\----\----\----\----ã
(WRITE)¡SC1 ¡SC0 ¡RW1 ¡RW0 ¡M2 ¡M1 ¡M0 ¡BCD ¡
----_----_----_----_----_----_----_----
<636 CHAPTER 2 HARDWARE >
CT7-CT0 counter 0
CT17-CT10 counter 1
CT27-CT20 counter 2
SC1, SC0 select counter, select counter
RW1,RW0 counter read/write mode
M2,M1,M0 counter mode
BCD binairy counting/ BCD counting select
every counter has the following features:
- counter #0
The ?? generator of the 8251 is used. A clock unit gives a clockpulse of
4 Mhz. In contrast to the 8251 the ?? generator must give a clock pulse of
500 Khz (division by 8). Mode 3 is used ( 2^N = division -> 2^3 = 8)
- counter #1
Can be used as a timer for any kind of use. By the clock unit the output of
timer #2 is going to timer #1. (?????)
- counter #2
Is used for writing ?? cycle to the CPU
Normally mode 2 is used (N is the divsion factor). When OUT2 gets low, the
latch data is transmitted and the ?? to the CPU is developped. The CLK unit
gives a clockpulse of 4 MHz.
2.3 EXTERNAL MIDI INTERFACE
The external MSX MIDI interface uses I/O port that is can be found in port
0E2H, the I/O port can be changed.
* MIDI interface selections (adres 0E2H, 0EAH)
0E2H (WRITE) B7 B6 B5 B4 B3 B2 B1 B0
Å----\----\----\----\----\----\----\----ã
¡ EN ¡ - ¡ - ¡ - ¡ - ¡ - ¡ - ¡ E8 ¡
----_----_----_----_----_----_----_----
EN MIDI interface enable (0=enable, 1=disable)
With the initialization set to 1
E8 MIDI interface adres select (0=0E8H/0E9H)
(1=0E0H/0E1H)
If bit E8 is set to 0, I/O port of the external MIDI interface is changed
from 0E2H to 0EAH, the internal MIDI interface is compatible with this.
Further, the 8251 I/O adres becomes 0E8H and 0E9H.
<2.3 EXTERNAL MIDI INTERFACE 637>
If bit E8 is set to 1, the I/O port of the 8251 interface is 0E0H and 0E1H ,
the access of 0ECH to 0EFH as I/O of the cartridge is invalid. Further, the
8253 timer is also invalid.
* 8251 INTERFACE (adres 0E0H and 0E1H)
0E0H b7 b6 b5 b4 b3 b2 b1 b0
Å----\----\----\----\----\----\----\----ã
(read) ¡RXD7¡RXD6¡RXD5¡RXD4¡RXD3¡RXD2¡RXD1¡RXD0¡
----_----_----_----_----_----_----_----
Å----\----\----\----\----\----\----\----ã
(write) ¡TXD7¡TXD6¡TXD5¡TXD4¡TXD3¡TXD2¡TXD1¡TXD0¡
----_----_----_----_----_----_----_----
RXD7-RXD0 = 8251 received data
TXD7-TXD0 = 8251 data to send
0E1H b7 b6 b5 b4 b3 b2 b1 b0
Å----\----\----\----\----\----\----\----ã
(read) ¡DSR ¡BRK ¡ FE ¡ OE ¡ PE ¡EMPT¡RDDY¡TRDY¡
----_----_----_----_----_----_----_----
DSR 8253 data set ready (1= ?? detected)
BRK 8251 break detection (1=detected)
FE 8251 frame error flag (1=error detected)
OE 8251 overrun error flag (1=error detected)
PE 8251 parity error flag (1=parity error detected)
EMPT 8251 transmitter buffer empty status (1=buffer is empty)
RRDY 8251 receiver buffer status (1= data is present)
TRDY 8251 transmitter status (1=transmission possible)
(WRITE)
0E9H (Write) b7 b6 b5 b4 b3 b2 b1 b0
Å----\----\----\----\----\----\----\----ã
mode ¡ S2 ¡ S1 ¡ EP ¡ PEN¡ L2 ¡ L1 ¡ B2 ¡ B1 ¡
----_----_----_----_----_----_----_----
Å----\----\----\----\----\----\----\----ã
command ¡ EH ¡ IR ¡RIE ¡ ER ¡SBRK¡ RE ¡TIE ¡TEN ¡
----_----_----_----_----_----_----_----
<638 CHAPTER 2 HARDWARE >
EH normally set to 0
IR normally set to 0
RIE MIDI IN transmission enablen (1=enable; 0=disable)
ER error reset (1=reset error flags; 0=no operation)
SBRK normally set to 0
PE MIDI IN receive enable (1=enable; 0=disable)
TIE 8253 timer (counter #2) (1=enable; 0=disable)
transmission enable
TEN MIDI OUT transmission enable (1=enable; 0=disable)
2.4
CHECK MIDI
In case of bit 0 of adres 002EH of the MAIN ROM being 1 MSX MIDI is built in.
The versionnumber ([002DH) is 3 or more the built-in MSX MIDI can be used.
The internal type and the external type have another hook. The difference is
because of the application. In chapter 4- 3.2 the hooks are shown.
The difference between an internal type and an external type can be seen at
the adres 4018 beginning data.
chart 4.1 data differences of the MSX MIDI
------------------------------------------------------------------
ADRES INTERNAL EXTERNAL
------------------------------------------------------------------
4018H 41H(A) ??H(?)
4019H 50H(P) ??H(?)
401AH 52H(R) ??H(?)
401BH 4CH(L) ??H(?)
401CH 4FH(O) 4DH(M)
401DH 50H(P) 49H(I)
401EH 4CH(L) 44H(D)
401FH 4CH(L) 49H(I)
------------------------------------------------------------------
In the external cartridge starting at adres 4018H 4 bytes makercode that
can change is located. From adres 401CH the data [MIDI] is located.
< way of distinction of presence of the MIDI interface 639>
2.5 way of distinction of presence of the MIDI interface
The presence of the MIDI interface can be detected by the following ways.
1. In case bit 0 of adres 002EH of the MAIN ROM equals 1 the MIDI interface is
present.
2. In case the versionnumber of the MAIN ROM (002DH) is 3 or higher and in a
slot the following can be found.
DB "MIDI"
When that is so, the external cartridge is installed.
3. If the above is not so, because the MIDI interface is not present, the MIDI
functions can't be used.
4. In case the version nummer (002DH) equals 2 or lower, a MIDI interface can't
be used.
<650 >
-----------------------------------------------------------------------------
CHAPTER 3
HOOKS
------------------------------------------------------------------------------
The hook for MSX MUSIC is used 1/60 second (NTSC) or 1/50 second (PAL) but
MIDI from MSX BASIC the 8253 uses the hook every 5 milisecond.
3.2 HOOKS
In the MSX Turbo R the following hooks are present related with the internal
MIDI interface.
diagram 4.2 Hooks of the internal MSX-MIDI
----------------------------------------------------------------------------
adres name old name contents
----------------------------------------------------------------------------
0FF75H H.MDIN H.OKNORM MIDI IN hook
0FF93H H.MDTM H.FRQINT 8253 timer hook
----------------------------------------------------------------------------
In case of using an external cartridge, the hooks above can't be used
therefore we advise you to use the hook H.KEYI.
For the details of the usage please see chapter 4 [development of applications]
diagram 4.3 Hook of the external MSX-MIDI
----------------------------------------------------------------------------
adres name
----------------------------------------------------------------------------
0FD9AH H.KEYI
----------------------------------------------------------------------------
<643 >
----------------------------------------------------------------------------
CHAPTER 4
development of applications
----------------------------------------------------------------------------
4.1 advice details for development of applications.
If you will make MSX MIDI compatible programs please take care of the
following things.
1. The hook of the internal MIDI interface is different than the external MIDI
interface. When using interrupt hooks, verify if the type, if it is
internal or external.
2. After the initialization of the MIDI interface the interrupt hooks are
allowed, because of the mobility of the interrupt flags that can set,
interrupt flags must be resetted.
The interrupt flags that are available are below
diagram 4.4 interrupt flags of the MIDI interface
-------------------------------------------------------------------------
kind of hook hook direction way of handling
-------------------------------------------------------------------------
timer bit 7 (DSR) of 0E9H or 0E1H write the option to 0EAH
MIDI IN bit 1 (RRDY)of 0E9H or 0E1H read with an IN-instruction 0E8H
-------------------------------------------------------------------------
3. With an external MIDI interface external hooks MIDI IN and 8253 timer come
also to H.KEYI.
The hooks must be written from this adres. To detect if there is MIDI IN
interrupt or not you have to verify bit 1 of I/O port 0E9H.
To verify if there is an interrupt from the 8253 timer you will have to
verify bit 7 of I/O port 0E9H.
<644 CHAPTER 4 DEVELOPMENT OF APPLICATIONS>
4. The generation of MIDI IN interrupt signals is done every 320 u.sec.
when a RST 30H instruction is used when a hook is read by a routine, it
takes time to make an interslot call ,therefore there is not enough time
for the interrupt signals handling.
Therefore we advise to create the following handling routine
* place the procudure routine in page 3
* Jump with a JP instruction to the handling routine
4.2 Sample program
For more details about the MIDI interface and the flags please see the sample
program (THRU.MAC).
<645 >
------------------------------------------------------------------------------
CHAPTER 5
BASIC EXPANSIONS
------------------------------------------------------------------------------
5.1 OUTLINE OF THE BASIC EXPANSIONS.
The names of the commands for using MSX MIDI have been simplified and have
been included in basic commands. The MSX-MIDI basic commands have been
supported in the expansion of commands like CALL MUSIC. CALL an be substituted
by '_' (underscore). With the MIDI interface external MIDI deveices can be
used. Therefore, commands have been modificated and supplemented. Further,
because both MML and MIDI must be corresponding, commands have been changed.
5.2 Explanation of the BASIC expansions
CALL MUSIC
------------------------------------------------------------------------
Å-----------ã
¡Funktion ¡ Initialize MSX MIDI System
-----------
Å-----------ã
¡ Form ¡ CALL MUSIC[([<MODE>],[,[0][,<single channel used for PLAY 1>
----------- [,<single channel used for PLAY2>[,...[,<single channel used
for PLAY 9>]]]]]]]]]])]
Å-----------ã
¡Explanation¡ When the built in sound chip LSI is designated how much
----------- FM channels per voice, the MIDI interface is also designated.
After the initialisation after the CALL MUSIC, it is not
possible to use other expansion BASIC statements.
* <MODE>
<646 CHAPTER 5 BASIC EXPANSION>
-------------------------------------------------------------------------
designation meaning
-------------------------------------------------------------------------
0 No use of rythme
1 Use of rythme
-------------------------------------------------------------------------
* channel
in each mode the channels to be used are shown below.
-------------------------------------------------------------------------
mode rythme maximum per channel
-------------------------------------------------------------------------
0 no 9
1 yes 6 fm channels + 1 rythme
8 MIDI channels + 1 rythme
-------------------------------------------------------------------------
With mode 1 when using midi the number of voices used per channel can be
increased up to 8.
For the play command the number of OPLL channels used by built-in FM
soundprocessor have to be designated. To use 0 voices is not possible.
With the OPLL only channels 9 voices can be used. With mode 1 3 channels
are used for rythme. In mode 0 9 channels can be used as maximum. In Mode 1 6
channels can be used as maximum.
In case of using MIDI, a play line is assigned to 1 MIDI channel.
A value of 2 or more is designated the meaning doesn't change.
With the channels of the FM processor the number of channels can be changed.
Because with MIDI 1 play line is assigned to 1 MIDI channel, in this occasion
it can be designated as 1, 2, 3, .... .
To change this is possible using the MML command @Hn.
In case this parameter was set to 1 or more, the other value of this parameter
can be 0. It is not possible to leave 0 out int the CALL MUSIC command.
Please look at the following commands.
CALL MUSIC (0,0,0,5,0)
¡ ¡
It is not possible to designate 0.(Illegal function call will be generated.)
CALL MUSIC (0,0,1,,2)
¡
It is not possible to leave the parameter out.(Syntax error will be
generated.)
<5.3 explanations of the BASIC expansions 647>
CALL MUSIC (1,0,1,1,1,1,1,1,0,0)
¡ ¡
In mode 1 channel 7 and 8 must be designated.
In case of PLAY #1
Channel 1-8 are assigned for MIDI
Channel 9 is assigned for MIDI rythme
Channel 10 - 12 are assigned for the PSG
In case of PLAY #2
Channel 1-6 are assigned for the FM soundprocessor
Channel 7 and 8 can't be used
Channel 9 is assigned for rythme sounds
Channel 10-12 are assigned for the PSG.
When it is used without parameters it is the same as CALL MUSIC (1,0,1,1,1).
If CALL MUSIC is used because the systemhook is linked to the MSX MIDI
software, the access of the handling routine is increased and the
suruuputo(??) of the system decreases. Because of the workarea space of a
CLEAR must be given, HIMEN ( 2 byte parameter of the CLEAR instruction) will
be 807 bytes lower.
Å-------ã
¡example¡ CALL MUSIC
------- Default setting.
CALL MUSIC (0,0,1,1,1,1,1,1,1,1,10
One channel per PLAY line is assigned.
CALL MDR
-----------------------------------------------------------------------------
Å-----------ã
¡Funktion ¡ Designation of the MIDI note numbers for the rytme sounds in MML
-----------
Å-----------ã
¡ Form ¡ CALL MDR (<MIDI note number of B>,<MIDI note number of S>,<MIDI
----------- note number of M>,<MIDI note number of C>,<MIDI note
number of H>)
Å-----------ã
¡Explanation¡ The in MML used rythme B,S,M,C,H commands can be designated to
----------- MIDI note numbers.
<648 CHAPTER 5 BASIC EXPANSION>
Because there are a lot of MIDI sounds, with 1 channel the rythme sounds can be
assigned to the deveice (exclusive use of 1 track). In the PLAY line one
channel can be assigned. In the same time multipal sounds of rythme in the
exclusive rythme track is not allowed.
This to the rythme assigned track is different per MIDI deveice. For the
handling of the MIDI deveice please see for details in it's manual.
The parameter must be between 0 and 127. It may not be left out. Initial value
is 0.
Å--------ã
¡example ¡ CALL MDR(35,38,45,49,42)
--------
PLAY
------------------------------------------------------------------------------
Å-----------ã
¡Funktion ¡ Plays the in MML complied music.
-----------
Å-----------ã
¡ Form ¡ PLAY [#<MODE>,]<line 1>[,>line 2>],<line 3> .. [,<line 12>]
-----------
Å-----------ã
¡Explanation¡ With the play command the music is performed. Up to 12 tones can
----------- be produced, 9 from the built-in soundprocessor + 3 PSG and
furthermore 9 from the MIDI deveice + 3 PSG.
The in <line n> written MML data is performed. A call or other
instruction is not needed.
<mode> must be a value between 0 and 3. The play command and the
mode give the following possibility.
* When 0 or no data is given it is equal a the normal play
commando in basic. Up to 3 PSG channels can be used.
* When it is 1, the MIDI deveice and the PSG can be used.
The relations between the playlines is the following :
<MIDI deveice play line 1>, ... <MIDI deveice play line n>,
<MIDI deveice rythme line>,
<PSG play line 1>,<PSG play line 2>,<PSG play line 3>
* When it is 2 or 3, the FM soundprocessor and PSG can be used.
(the use of 2 or 3 is exactly the same.)
The relations between the play lines is the following.
<FM play line 1>,...<fm play line n>
<FM rythme line>,
<PSG play line 1>,<PSG play line 2>,<PSG play line 3>
n is the number of MML playlines designated with CALL MUSIC.
In case a mode is designated with no use of rythme wtih the CALL
MUSIC the rythme play line as well as the komma (,) must be left
out.
Å--------ã
¡example ¡ PLAY #1,"CD","EF","GA"
--------
USAGE OF MML FOR MIDI DEVEICES
Here we explain the supplied and changed MML for the usage of MIDI deveices.
figure 4.5 supplemented MML for the use of MIDI deveices.
------------------------------------------------------------------------
Character Meaning Value
------------------------------------------------------------------------
@Hn Designates the used MIDI channel number. 1 ó n ó 16
@Cm,n Send a control change.
m = control change, n = value of the 1 ó m ó 127
control number to be changed. 1 ó n ó 127
@Sn Instruction related to the MIDI realtime clock
n=0 Sends FCH(STOP) out, stop the clock
n=1 Sends FAH(START) out, starts the clock
n=2 Sends FBH(CONTINUE) out, continues the clock
The tempo of the clock will be the same as defined in playline 1.
------------------------------------------------------------------------
figure 4.6 changed MML for the use of MIDI deveices.
------------------------------------------------------------------------
Character Meaning Value
------------------------------------------------------------------------
Ln Designates the length 1 ó n ó 96
Rn Designates the rest length 1 ó n ó 96
@Wn Continue the length with n 1 ó n ó 96
Vn This differss with the MIDI deveices, 1 ó n ó 15
8 times the values of the velocity is
send out.
@Vn Volume (Control change #7) is send out. 1 ó n ó 127
@n With the built in FM soundprocessor the
color of the sound is changed but 1 ó n ó 63
with MIDI deveices it is different , a
program change is send out. 1 ó n ó 127
Zn 1 byte MIDI data is send out. 1 ó n ó 255
------------------------------------------------------------------------
<650 CHAPTER 5 BASIC EXPANSION >
USAGE of rythme MML data
Below here the supplied and changed MML for MIDI deveices are shown.
figure 4.7 supplied MML for rythme data
------------------------------------------------------------------------
Character Meaning
------------------------------------------------------------------------
@n Different with MIDI deveices is that a program change is
send out. For the built-in FM soundprocessor this is ignored.
-------------------------------------------------------------------------
figure 4.8 changed MML for rythme data
------------------------------------------------------------------------
Character Meaning
------------------------------------------------------------------------
@An This is different for MIDI deveices, it is the same as Vn,
the velocity is designated.
------------------------------------------------------------------------
<5.2 explanation of BASIC expansions 651>
figure 4.9 ???????
------------------------------------------------------------------------
Character MIDI FM PSG
------------------------------------------------------------------------
Mn - - O
Sn - - O
Vn O [0~15] O O
Ln O O O
Qn O O -
On O O O
< O O O
> O O O
Tn O O O
Nn *1 O O O
Rn O O O
A~G O O O
+ O O O
- O O O
# O O O
. O O O
=x; O O O
Xx; O O O
& O O O
{}n O O x
@n O [0~127] O[0~63] -
@Vn O [0~127] O[0~127] -
@Wn O O the same as Rn
* @Hn O [1~16] - -
* @Cm, n O [0~127] - -
Yr,d - O -
Zn O [0~255] - (x) -
* @Sn O [0~2] - -
------------------------------------------------------------------------
*1 The value of n is not the MIDI note number. It is the musical scale
according that is existing.(???)
* Changed commands for MSX MIDI
x Creates an error
- Can't be used
[] Range of the parameter
() The equivalence of the old MSX MUSIC
<652 CHAPTER 5 BASIC EXPANSIONS>
figure 4.10 Rythme sounds MML
-------------------------------------------------------------------------
Command MIDI FM
-------------------------------------------------------------------------
B *1 O O
S *1 O O
M *1 O O
C *1 O O
H *1 O O
n O O
! O O
Vn O O
@An O O
@Vn O [0~127] O
Tn O O
Rn O O
=x; O O
Xx; O O
Yr,d - O
* @Hn O [1~16] -
* @Cm,n O [0~127] -
* @n O [0~127] - (x)
Zd O - (x)
------------------------------------------------------------------------
1 In case of using MIDI deveices, the note number must be changed with
CALL MDR.
* Changed command in MSX MIDI
x Generates an error
- Can't be used
[] Range of the parameter
() The equivalence of the old MSX MUSIC
5.3 STATEMENTS THAT DON'T EFFECT MIDI DEVEICES
The following statements have no meaning for the MIDI deveices.
CALL AUDREG
CALL PITCH
CALL TEMPER
CALL TRANSPOSE
CALL VOICE
CALL VOICE can't be used in combination with MIDI deveices, please use the MML
command @n.
<5.4 MIDI DATA FORMAT >
5.4 MIDI DATA FORMAT
Below here the MIDI data format from the MSX MIDI BASIC expansion is shown.
5.4.1 transmission data
1. note data
* note on
status 1001nnnn (9nH) n = 0 ~ 15 MIDI channel number
note number 0kkkkkkk k = 24 (C0) &¬ 119 (B7)
velocity 0vvvvvvv v = 8 * i : i= 0 ~ 15
The velocity value, 8 times the value designated in @An, is send out.
* note off
status 1001nnnn (9nH) n = 0 ~ 15 MIDI channel number
note number 0kkkkkkk k = 24 (C0) &¬ 119 (B7)
velocity 00000000 (v=0) velocity off
when if the rythme is used at the same time, both the music and
rythme is stopped, the running-status is send out.
2. control changes
* @Vv (volume)
status 1011nnnn (BnH) n = 0 ~ 15 MIDI channel number
control number 00000111 c = 7
control value 0vvvvvvv v = 0 ~ 127
* @Cc, v (control change)
status 1011nnnn (BnH) n = 0 ~ 15 MIDI channel number
control number 0ccccccc c = 0 ~ 127
control value 0vvvvvvv v = 0 ~ 127
3. program changes
* @p (program changes)
status 1100nnnn (CnH) n = 0 ~ 15 MIDI channel number
program number 0ppppppp p = 0 ~ 127
4. system-realtime-message
* timingclock
status 11111000(F8H)
The timingclock can be started with @S1 and @S2, used in a play line.
When a playline has ended, the clock is stopped then STOP (FCH) has not
to be used.
* @S1 start
status 11111010 (FAH)
The starting of the clock is send out.
* @S2 continue
status 11111011 (FBH)
The starting of the clock is send out.
* @S0 stop
status 11111100 (FCH)
The stopping of the clock is send out.
5.4.2 Receiving data
With the BASIC expansion receiving data is not posible.
<5.4 MIDI DATA FORMAT 655>
figure 4.11 MSX MIDI BASIC EXPANSION MML MIDI IMPLIMENTATION CHART
Å-------------------------------\---------------\----------------------ã
¡ Function ¡ send signal ¡ Remarks ¡
-----------------------------------------------------------------------¢
¡ BASIC channels on ¡ 1 - 9 ¡ ¡
¡ CHANNELS available ¡ 1 - 16 ¡ @Hn ¡
-----------------------------------------------------------------------¢
¡ channels on ¡ 3 ¡ ¡
¡ MODE message ¡ x ¡ ¡
¡ substitution ¡ ********* ¡ ¡
-----------------------------------------------------------------------¢
¡ NOTE NUMBER ¡ O 24 - 119 ¡ 01C - 08B ¡
¡ voice range ¡ ********* ¡ ¡
-----------------------------------------------------------------------¢
¡ velocity note on ¡ O 9nH, v=8xn ¡ Vn, @An(n=0-15) ¡
¡ ¡ ¡ @An is rythme only ¡
¡ note off ¡ x 9nH, v=0 ¡ ¡
-----------------------------------------------------------------------¢
¡ Aftertouch key ¡ x ¡ ¡
¡ channel ¡ x ¡ ¡
-----------------------------------------------------------------------¢
¡ Pitch handle ¡ x ¡ ¡
-----------------------------------------------------------------------¢
¡ ¡ O (7) ¡ @Vn ¡
¡ ¡ O (0-127) ¡ @Cm, n ¡
¡ Control change ¡ ¡ ¡
-----------------------------------------------------------------------¢
¡ program change ¡ O ¡ @n ¡
¡ other posibility ¡ ********* ¡ ¡
-----------------------------------------------------------------------¢
¡ access kuruushibu(??) ¡ x ¡ ¡
-----------------------------------------------------------------------¢
¡ song portion ¡ x ¡ ¡
¡ common song select ¡ x ¡ ¡
¡ chain ¡ x ¡ ¡
-----------------------------------------------------------------------¢
¡ Real time clock ¡ O ¡ ¡
¡ command ¡ O ¡ @Sn ¡
-----------------------------------------------------------------------¢
¡ local on/off ¡ x ¡ ¡
¡ all note off ¡ O ¡ [CTRL] + [STOP] ¡
¡ rest active sensing ¡ x ¡ ¡
¡ reset ¡ x ¡ ¡
------------------------------------------------_----------------------¢
¡ remarks ¡ Zn : send 1 byte MIDI data ¡
¡ ¡ ¡
-------------------------------_--------------------------------------
O = Available
x = Not available
MODE 1 : OMNI ON,POLY MODE 2 : OMNI ON,MONO
MODE 3 : MONI OFF,POLY MODE 4 : OMNI OFF,MONO
************** means that the output data has no meaning.
<656 >
<657 >
APPENDIX
------------------------------------------------------------------------
<658 >
<659 >
------------------------------------------------------------------------
A
R800 INSTRUCTION CHARTS
------------------------------------------------------------------------
In these charts instructions of the R800, grouped in kind of instructions
are collected. Of the mnemonics in these charts the name of the instruction,
usage of this instruction are smplified showed.
In the column of the usage of an instruction when there is an <- symbol The
details of the left side are shown on the rightside
The KAKKO (??) means the details of the memory by the shown belonging
register. (???)
For example if there is :
r <- [.hl]
the details of the memory of the shown HL register is is going to 8 bit (???)
The in/out-put instructions [n] and [.c] are the equivalence of the in/out-put
ports.
In the flag column the flags used are shown. OPcode column the machinecode of
every different instruction is written down in HEX and BIN format.
The B stands for the length of the code in bytes, the C stands for the length
of the code in clock cycles.The shown mnemonics that have changed for the R800
can't be guaranteed to work properly on the Z80 because they are not the same
as the z80 instructions. (??)
<660 APPENDIX A R800 INSTRUCTION CHART>
remarks
Å-------\---------------------------------------------------------------ã
¡.a{7} ¡The highest bit of register .a ¡
¡.{4..7}¡Bit 4-7 of register .a ¡
¡; ¡Punctuation of the usage ¡
¡.de:.hl¡.de is the upper 16bit and .hl is the lower 16 bit and 32 bit ¡ ¡ ¡
¡ ¡ formed. ¡
¡[.ix+d]¡adres is formed when the 8bit of d is added to .ix ¡
¡C ¡carry flag ¡
¡Z ¡zero flag ¡
¡P/v ¡parity overflow ¡
¡S ¡sign flag ¡
¡N ¡substraction flag ¡
¡H ¡half clear flag ¡
¡
¡flag don't change ¡
¡- ¡flag changed in commando used ¡
¡0 ¡flag is set to 0 ¡
¡1 ¡flag is set to 1 ¡
¡? ¡becomes uncertain ¡
¡V ¡uses the overflow flag ¡
¡P ¡uses the parity flag ¡
¡i(iff) ¡value of the interrupt flipflop is attained ¡
¡r,r' ¡8 bit register, .a,.b,.c,.d,.e,.h,.l ¡
¡u,u' ¡8 bit register, .a,.b,.c,.d,.e,.ixh,.ixl ¡
¡v,v' ¡8 bit register, .a,.b,.c,.d,.e,.iyh,.iyl ¡
¡p ¡8 bit register, .ixh,.ixl ¡
¡q ¡8 bit register, .iyh,.iyl ¡
¡ss ¡16 bit register,.bc,.de,.hl,.sp ¡
¡pp ¡16 bit register,.bc,.de,.ix,.sp ¡
¡rr ¡16 bit register,.bc,.de,.iy,.sp ¡
¡qq ¡16 bit register,.bc,.de,.hl,.af ¡
¡e ¡8 bit value of short branch (+127~128) ¡
¡k ¡adres of the brk comando, 00h,08h,10h,18h,20h,28h,30h,38h ¡
¡nn ¡direct value of 16 bit, positive adres ¡
¡n ¡direct value of 8 bit ¡
¡b ¡value shown number of bits for the bits of the mathematical ¡
¡ ¡ operation?? ¡
¡NOT ¡bit rotation (??) ¡
¡\/ ¡taking the OR of the bits ¡
¡\-/ ¡taking the XOR of the bits ¡
¡/\ ¡taking the AND of the bits ¡
¡tmp ¡temporary value (??) ¡
¡B ¡number of bytes of the instruction ¡
¡C ¡number of clock cycles of the instruction ¡
-------_---------------------------------------------------------------
???
<A1 8 bit transfer instructions 661>
A.1 8 BIT TRANSFER INSTRUCTIONS
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡ld r,r' ¡ r <- r' ¡
¡01 r r'¡ ¡1¡1¡
-------------------------------------------------------------------------¢
¡ld r,n ¡ r <- n ¡
¡00 r 110¡ ¡2¡2¡
¡ ¡ ¡ ¡<- n ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld r,[.hl] ¡ r <- [.hl] ¡
¡01 r 110¡ ¡1¡2¡
-------------------------------------------------------------------------¢
¡ld r,[.ix+d]¡ r <- [.ix+d] ¡
¡11011101¡DD ¡3¡5¡
¡ ¡ ¡ ¡01 r 110¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld r,[.iy+d]¡ r <- [.iy+d] ¡
¡11111101¡FD ¡3¡5¡
¡ ¡ ¡ ¡01 r 110¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld [.hl],r ¡[.hl] <- r ¡
¡10110 r ¡ ¡1¡2¡
-------------------------------------------------------------------------¢
¡ld [.ix+d],r¡ [.ix+d] <- r ¡
¡11011101¡DD ¡3¡5¡
¡ ¡ ¡ ¡01110 r ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld [.iy+d],r¡ [.iy+d] <- r ¡
¡11111101¡FD ¡3¡5¡
¡ ¡ ¡ ¡01110 r ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld u,u' ¡ u <- u' ¡
¡11011101¡DD ¡2¡2¡
¡ ¡ ¡ ¡01 u u'¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld v,v' ¡ v <- v' ¡
¡11111101¡FD ¡2¡2¡
¡ ¡ ¡ ¡01 v v'¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld u,n ¡ u <- n ¡
¡11011101¡DD ¡3¡3¡
¡ ¡ ¡ ¡00 u 110¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<- n ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld v,n ¡ v <- n ¡
¡11111101¡FD ¡3¡3¡
¡ ¡ ¡ ¡00 v 110¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<- n ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld [.hl],n ¡ [.hl] <- n ¡
¡00110110¡36 ¡2¡3¡
¡ ¡ ¡ ¡<- n ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld [.ix+d],n¡ [.ix+d] <- n ¡
¡11011101¡DD ¡4¡5¡
¡ ¡ ¡ ¡00110110¡36 ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<- n ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld [.iy+d],n¡ [.iy+d] <- n ¡
¡11111101¡FD ¡4¡5¡
¡ ¡ ¡ ¡00110110¡36 ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<- n ->¡ ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
<662 APPENDIX A R800 instruction chart>
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡ld .a,.i ¡ .a <- .i ¡- - 0 i 0
¡11101101¡ED ¡2¡2¡
¡ ¡ ¡ ¡01010111¡57 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld .a,.r ¡ .a <- .r ¡- - 0 i 0
¡11101101¡ED ¡2¡2¡
¡ ¡ ¡ ¡01011111¡5F ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld .i,.a ¡ .i <- .ax+d] ¡
¡11101101¡ED ¡2¡2¡
¡ ¡ ¡ ¡01000111¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld .r,.a ¡ .r <- .a ¡
¡11101101¡ED ¡2¡2¡
¡ ¡ ¡ ¡01001111¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld .a,[.bc] ¡ .a <- [.bc] ¡
¡00001010¡0A ¡1¡2¡
-------------------------------------------------------------------------¢
¡ld .a,[.de] ¡ .a <- [.de] ¡
¡00011010¡1A ¡1¡2¡
-------------------------------------------------------------------------¢
¡ld .a,[nn] ¡ .a <- [nn] ¡
¡00111010¡3A ¡3¡4¡
¡ ¡ ¡ ¡<- NNl->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<- NNh->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld [.bc],.a ¡ [.bc] <- .a ¡
¡00000010¡02 ¡1¡2¡
-------------------------------------------------------------------------¢
¡ld [.de],.a ¡ [.de] <- .a ¡
¡00010010¡12 ¡1¡2¡
-------------------------------------------------------------------------¢
¡ld [nn],.a ¡ [nn] <- .a ¡
¡00110010¡32 ¡3¡4¡
¡ ¡ ¡ ¡<- NNl->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<- NNh->¡ ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
Å-\----\----\----\----\----\----\----\----ã
¡ ¡000 ¡001 ¡010 ¡011 ¡100 ¡101 ¡110 ¡111 ¡
------------------------------------------¢
¡r¡ .b ¡ .c ¡ .d ¡ .e ¡ .h ¡ .l ¡ ¡ .a ¡
------------------------------------------¢
¡u¡ .b ¡ .c ¡ .d ¡ .e ¡.ixh¡.ixl¡ ¡ .a ¡
------------------------------------------¢
¡v¡ .b ¡ .c ¡ .d ¡ .e ¡.iyh¡.iyl¡ ¡ .a ¡
-_----_----_----_----_----_----_----_----
A.2 16 bit TRANSFER INSTRUCTIONS
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡ld ss,nn ¡ ss <- nn ¡
¡00ss0001¡ ¡3¡3¡
¡ ¡ ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld .ix,nn ¡ .ix <- nn ¡
¡11011101¡DD ¡4¡4¡
¡ ¡ ¡ ¡00100001¡21 ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld .iy,nn ¡ .iy <- nn ¡
¡11111101¡FD ¡4¡4¡
¡ ¡ ¡ ¡00100001¡21 ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld .sp,.hl ¡ .sp <- .hl ¡
¡11111001¡F9 ¡1¡1¡
-------------------------------------------------------------------------¢
¡ld .sp,.ix ¡ .sp <- .ix ¡
¡11011101¡DD ¡2¡2¡
¡ ¡ ¡ ¡11111001¡F9 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld .sp,.iy ¡ .sp <- .iy ¡
¡11111101¡FD ¡2¡2¡
¡ ¡ ¡ ¡11111001¡F9 ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
<A.2 16 bit transfer instructions 663>
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡ld ss,[nn] ¡ ssh <- [nn+1] ¡
¡11101101¡ED ¡4¡6¡
¡ ¡ ssl <- [nn] ¡ ¡01ss1011¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld .hl,[nn] ¡ .h <- [nn+1] ¡
¡00101010¡2A ¡3¡5¡
¡ ¡ .l <- [nn] ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld .ix,[nn] ¡.ixh <- [nn+1] ¡
¡11011101¡DD ¡4¡6¡
¡ ¡.ixl <- [nn] ¡ ¡00101010¡2A ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld .iy,[nn] ¡.iyh <- [nn+1] ¡
¡11111101¡FD ¡4¡6¡
¡ ¡.iyl <- [nn] ¡ ¡00101010¡2A ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld [nn],ss ¡[nn+1] <- ssh ¡
¡11101101¡ED ¡4¡6¡
¡ ¡[nn] <- ssl ¡ ¡01ss0011¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld [nn],.hl ¡[nn+1] <- .h ¡
¡00100010¡22 ¡3¡5¡
¡ ¡[nn] <- .l ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld [nn],.ix ¡[nn+1] <- .ixh ¡
¡11011101¡DD ¡4¡6¡
¡ ¡[nn] <- .ixl ¡ ¡00100010¡22 ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ld [nn],.iy ¡[nn+1] <- .iyh ¡
¡11111101¡FD ¡4¡6¡
¡ ¡[nn] <- .iyl ¡ ¡00100010¡22 ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
Å--\---\---\---\---ã
¡ ¡00 ¡01 ¡10 ¡11 ¡
-------------------¢
¡ss¡.bc¡.de¡.hl¡.sp¡
--_---_---_---_---
<664 appendix A r800 instruction chart >
A.3 EXCHANGE INSTRUCTIONS
Å-------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
--------------------------------------------------------------------------¢
¡xch .de,.hl ¡.de <-> .hl ¡
¡11101011¡EB ¡1¡1¡
--------------------------------------------------------------------------¢
¡xch .af,.af' ¡.af <-> .af' ¡- - - - - -¡00001000¡08 ¡1¡1¡
--------------------------------------------------------------------------¢
¡xch [.sp],.hl¡.l <-> [.sp];.h <-> [sp+1] ¡
¡11100011¡E3 ¡1¡5¡
----------- --------------------------------------------------------------¢
¡xch [.sp],.ix¡.ixl <-> [.sp] ¡
¡11011101¡DD ¡2¡6¡
¡ ¡.ixh <-> [.sp+1] ¡ ¡11100011¡E3 ¡ ¡ ¡
--------------------------------------------------------------------------¢
¡xch [.sp],.iy¡.iyl <-> [.sp] ¡
¡11111101¡FD ¡2¡6¡
¡ ¡.iyh <-> [.sp] ¡ ¡11100011¡E3 ¡ ¡ ¡
--------------------------------------------------------------------------¢
¡xchx ¡.bc <-> .bc';.de <-> de'; ¡
¡11011001¡D9 ¡1¡1¡
¡ ¡.hl <-> .hl' ¡ ¡ ¡ ¡ ¡ ¡
-------------_----------------------------_-------------_--------_---_-_-
A.4 STACK OPERATION INSTRUCTIONS
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡push qq ¡[.sp-2]<-qql;[sp-1]<-qqh ¡
¡11qq0101¡ ¡1¡4¡
¡ ¡.sp <- .sp-2 ¡ ¡ ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡push .ix ¡[.sp-2]<-.ixl;[.sp-1]<-.ixh ¡
¡11011101¡DD ¡2¡5¡
¡ ¡.sp <- .sp-2 ¡ ¡11100101¡E5 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡push .iy ¡[.sp-2]<-.iyl;[.sp-1]<-.iyh ¡
¡11111101¡FD ¡2¡5¡
¡ ¡.sp <- .sp-2 ¡ ¡11100101¡E5 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡pop qq ¡qql<-[.sp];qqh<-[.sp+1] ¡
¡11qq0001¡ ¡1¡3¡
¡ ¡.sp <- .sp+2 ¡ ¡ ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡pop .ix ¡.ixl<-[.sp];.ixh<-[.sp+1] ¡
¡11011101¡DD ¡2¡4¡
¡ ¡.sp <- .sp+2 ¡ ¡11100001¡E1 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡pop .iy ¡.iyl<-[.sp];.iyh<-[.sp+1] ¡
¡11111101¡FD ¡2¡4¡
¡ ¡.sp <- .sp+2 ¡ ¡11100001¡E1 ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
Å--\---\---\---\---ã
¡ ¡00 ¡01 ¡10 ¡11 ¡
-------------------¢
¡qq¡.bc¡.de¡.hl¡.af¡
--_---_---_---_---
In case of pop .af, all flags are changed
<A.5 block move instructions 665>
A.5 BLOCK MOVE INSTRUCTIONS
Å------------\------------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
---------------------------------------------------------------------------¢
¡move[.hl++],¡[.de]<-[.hl];.de<-.de+1 ¡
0 - 0
¡11101101¡ED ¡2¡4¡
¡[.de++], ¡.hl<-.hl+1;.bc<-.bc-1 ¡ *1 ¡10100000¡A0 ¡ ¡ ¡
---------------------------------------------------------------------------¢
¡move[.hl--],¡[.de]<-[.hl];.de+.de-1 ¡
0 - 0
¡11101101¡ED ¡2¡4¡
¡[.de--] ¡.hl<-.hl-1;.bc<-.bc-1 ¡ *1 ¡10101000¡A8 ¡ ¡ ¡
---------------------------------------------------------------------------¢
¡movem [.hl++¡repeat;[.de]<-[.hl];.de<-.de+1¡
0 0 0
¡11101101¡ED ¡2¡4¡
¡ ],[.de++] ¡.hl<-.hl+1;.bc<-.bc-1;until.bc=0¡ ¡10110000¡B0 ¡ ¡ ¡
--------------------------------------------\-_----------------------------¢
¡movem [.hl--¡repeat;[.de]<-[.hl];.de<-.de-1¡
0 0 0
¡11101101¡ED ¡2¡4¡
¡ ],[.de--] ¡.hl<-.hl-1;.bc<-.bc-1;until.bc=0¡ ¡10111000¡B8 ¡ ¡ ¡
------------_--------------------------------_-----------_--------_---_-_-
*1 when .bc-1 = 0 it will be set to 0 else it will be set to 1
A.6 BLOCK SEARCH INSTRUCTION
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡cmp ¡.a-[.hl];.hl<-.hl+1 ¡- - - - 1
¡11101101¡ED ¡2¡4¡
¡ .a,[.hl++]¡.bc<-.bc-1 ¡ *2 *1 ¡10100001¡A1 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡cmp ¡.a-[.hl];.hl<-.hl-1 ¡- - - - 1
¡11101101¡ED ¡2¡4¡
¡ .a,[.hl--]¡.bc<-.bc-1 ¡ *2 *1 ¡10101001¡A9 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡cmpm ¡repeat;.a-[.hl];.hl<-.hl+1 ¡- - - - 1
¡11101101¡ED ¡2¡5¡
¡ .a,[hl++]¡.bc<-.bc-1;until .bc=0 ¡ *2 *1 ¡10110001¡B1 ¡ ¡ ¡
¡ ¡ or .a=[.hl] ¡ ¡ ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡cmpm ¡repeat;.a-[.hl];.hl<-.hl-1 ¡- - - - 1
¡11101101¡ED ¡2¡5¡
¡ .a,[hl--]¡.bc<-.bc-1;until .bc=0 ¡ *2 *1 ¡10111001¡B9 ¡ ¡ ¡
¡ ¡ or .a=[.hl] ¡ ¡ ¡ ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
*1 when bc-1=0 it will be set to 0 else it will be set to 1
*2 when .a=[.hl] it will be set to 1 else it will be set to 0
A.7 MULTIPLICATION INSTRUCTIONS
Å------------\----------------------------\-------------\------------\-\--ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C ¡
--------------------------------------------------------------------------¢
¡mulub .a,r ¡.hl<-.a*r ¡0 -
0
-¡11101101¡ED ¡2¡14¡
¡ ¡ ¡ ¡11 r 001¡ ¡ ¡ ¡
--------------------------------------------------------------------------¢
¡muluw .hl,ss¡.de:.hl<-.hl*ss ¡0 -
0
-¡11101101¡ED ¡2¡36¡
¡ ¡ ¡ ¡11ss0011¡ ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_--
With the mulub function when .b,.c,.d,.e are excluded of r the usage can't be
guaranteed. (???)
With the muluw function then .bc,.sp are excluded of ss the usage can't be
guaranteed. (???)
<666 appendix a r800 instruction chart>
A.8 ADD INSTRUCTIONS
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡add .a,r ¡.a<-.a+r ¡- - - v 0 -¡10000 r ¡ ¡1¡1¡
-------------------------------------------------------------------------¢
¡add .a,p ¡.a<-.a+p ¡- - - V 0 -¡11011101¡DD ¡2¡2¡
¡ ¡ ¡ ¡10000 p ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡add .a,q ¡.a<-.a+q ¡- - - V 0 -¡11111101¡FD ¡2¡2¡
¡ ¡ ¡ ¡10000 q ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡add .a,[.hl]¡.a<-.a+[.hl] ¡- - - V 0 -¡10000110¡86 ¡1¡2¡
-------------------------------------------------------------------------¢
¡add ¡.a<-.a+[.ix+d] ¡- - - V 0 -¡11011101¡DD ¡3¡5¡
¡ .a,[.ix+d] ¡ ¡ ¡10000110¡86 ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡add ¡.a<-.a+[.iy+d] ¡- - - V 0 -¡11111101¡FD ¡3¡5¡
¡ .a,[.iy+d] ¡ ¡ ¡10000110¡86 ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡add a,n ¡.a<-.a+n ¡- - - V 0 -¡11000110¡C6 ¡2¡2¡
¡ ¡ ¡ ¡<- n ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡addc .a.r ¡.a<-.a+r+C ¡- - - V 0 -¡10001 r ¡ ¡1¡1¡
-------------------------------------------------------------------------¢
¡addc .a,p ¡.a<-.a+p+C ¡- - - V 0 -¡11011101¡DD ¡2¡2¡
¡ ¡ ¡ ¡10001 p ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡addc .a,q ¡.a<-.a+q+C ¡- - - V 0 -¡11111101¡FD ¡2¡2¡
¡ ¡ ¡ ¡10001 q ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡addc.a,[.hl]¡.a<-.a+[.hl]+C ¡- - - V 0 -¡10001110¡8E ¡1¡2¡
-------------------------------------------------------------------------¢
¡addc ¡.a<-.a+[.ix+d]+C ¡- - - V 0 -¡11011101¡DD ¡3¡5¡
¡ .a,[.ix+d] ¡ ¡ ¡10001110¡8E ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡addc ¡.a<-.a+[.iy+d]+C ¡- - - V 0 -¡11111101¡FD ¡3¡5¡
¡ .a,[.iy+d] ¡ ¡ ¡10001110¡8E ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡addc .a,n ¡.a<-.a+n+C ¡- - - V 0 -¡11001110¡CE ¡2¡2¡
¡ ¡ ¡ ¡<- n ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡addc .hl,ss ¡.hl<-.hl+ss+C ¡- - ? V 0 -¡11101101¡ED ¡2¡2¡
¡ ¡ ¡ ¡01ss1010¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡add .hl,ss ¡.hl<-.hl+ss ¡
?
0 -¡00ss1001¡ ¡1¡1¡
-------------------------------------------------------------------------¢
¡add .ix,pp ¡.ix<-.ix+pp ¡
?
0 -¡11011101¡DD ¡2¡2¡
¡ ¡ ¡ ¡00pp1001¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡add .iy,rr ¡.iy<-.iy+rr ¡
?
0 -¡11111101¡FD ¡2¡2¡
¡ ¡ ¡ ¡00rr1001¡ ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
<A.8 ADD INSTRUCTIONS 667>
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡inc r ¡r<-r+1 ¡- - - V 0
¡00 r 100¡ ¡1¡1¡
-------------------------------------------------------------------------¢
¡inc p ¡p<-p+1 ¡- - - V 0
¡11011101¡DD ¡2¡2¡
¡ ¡ ¡ ¡00 p 100¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡inc q ¡q<-q+1 ¡- - - V 0
¡11111101¡FD ¡2¡2¡
¡ ¡ ¡ ¡00 q 100¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡inc [.hl] ¡[.hl]<-[.hl]+1 ¡- - - V 0
¡00110100¡34 ¡1¡4¡
-------------------------------------------------------------------------¢
¡inc [.ix+d] ¡[.ix+d]<-[.ix+d]+1 ¡- - - V 0
¡11011101¡DD ¡3¡7¡
¡ ¡ ¡ ¡00110100¡34 ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡inc [.iy+d] ¡[.iy+d]<-[.iy+d]+1 ¡- - - V 0
¡11111101¡FD ¡3¡7¡
¡ ¡ ¡ ¡00110100¡34 ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡inc ss ¡ss<-ss+1 ¡
¡00ss0011¡ ¡1¡1¡
-------------------------------------------------------------------------¢
¡inc .ix ¡.ix<-.ix+1 ¡
¡11011101¡DD ¡2¡2¡
¡ ¡ ¡ ¡00100011¡23 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡inc .iy ¡.iy<-.iy+1 ¡
¡11111101¡FD ¡2¡2¡
¡ ¡ ¡ ¡00100011¡23 ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
Å--\---\---\---\---ã
¡ ¡00 ¡01 ¡10 ¡11 ¡
-------------------¢
¡ss¡.bc¡.de¡.hl¡.sp¡
-------------------¢
¡pp¡.bc¡.de¡.ix¡.sp¡
-------------------¢
¡rr¡.bc¡.de¡.iy¡.sp¡
--_---_---_---_---
Å-\----\----\----\----\----\-----\----\----ã
¡ ¡000 ¡001 ¡010 ¡011 ¡100 ¡101 ¡110 ¡111 ¡
-------------------------------------------¢
¡p¡ ¡ ¡ ¡ ¡.ixh¡.ixl ¡ ¡ ¡
-------------------------------------------¢
¡q¡ ¡ ¡ ¡ ¡.iyh¡.iyl ¡ ¡ ¡
-_----_----_----_----_----_-----_----_----
<668 APPENDIX A R800 INSTRUCTION CHART>
A.9 DECREASE INSTRUCTION
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡sub .a,r ¡.a<.a-r ¡- - - V 1 -¡10010 r ¡ ¡1¡1¡
-------------------------------------------------------------------------¢
¡sub .a,p ¡.a<-.a-p ¡- - - V 1 -¡11011101¡DD ¡2¡2¡
¡ ¡ ¡ ¡10010 p ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡sub .a,q ¡.a<-.a-q ¡- - - V 1 -¡11111101¡FD ¡2¡2¡
¡ ¡ ¡ ¡10010 q ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡sub .a,[.hl]¡.a<-.a-[.hl] ¡- - - V 1 -¡10010110¡96 ¡1¡2¡
-------------------------------------------------------------------------¢
¡sub .a, ¡.a<-.a-[.ix+d] ¡- - - V 1 -¡11011101¡DD ¡3¡5¡
¡ [.ix+d] ¡ ¡ ¡10010110¡96 ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡sub .a, ¡.a<-.a-[.iy+d] ¡- - - V 1 -¡11111101¡FD ¡3¡5¡
¡ [.iy+d] ¡ ¡ ¡10010110¡96 ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡sub .a,n ¡.a<-.a-n ¡- - - V 1 -¡11010110¡D6 ¡2¡2¡
¡ ¡ ¡ ¡<- n ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡subc .a,r ¡.a<-.a-r-C ¡- - - V 1 -¡10011 r ¡ ¡1¡1¡
-------------------------------------------------------------------------¢
¡subc .a,p ¡.a<-.a-p-C ¡- - - V 1 -¡11011101¡DD ¡2¡2¡
¡ ¡ ¡ ¡10011 p ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡subc .a,q ¡.a<-.a-q-C ¡- - - V 1 -¡11111101¡FD ¡2¡2¡
¡ ¡ ¡ ¡10011 q ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡subc .a, ¡.a<-.a-[.hl]-C ¡- - - V 1 -¡10011110¡9E ¡1¡2¡
¡ [.hl] ¡ ¡ ¡ ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡subc .a, ¡.A<-.A-[.IX+D]+c ¡- - - V 1 -¡11011101¡DD ¡3¡5¡
¡ [.ix+d] ¡ ¡ ¡10011110¡9E ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡subc .a, ¡.a<-.a-[.iy+d]+c ¡- - - V 1 -¡11111101¡FD ¡3¡5¡
¡ [.iy+d] ¡ ¡ ¡10011110¡9E ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡subc a,n ¡.a<-.a-n-C ¡- - - V 1 -¡11011110¡DE ¡2¡2¡
¡ ¡ ¡ ¡<- n ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡subc .hl,ss ¡.hl<-.hl-ss-C ¡- - ? V 1 -¡11101101¡ED ¡2¡2¡
¡ ¡ ¡ ¡01ss0010¡ ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
<A.10 DECREASE INSTRUCTION 669>
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡dec r ¡r<-r-1 ¡- - - V 1
¡00 r 101¡ ¡1¡1¡
-------------------------------------------------------------------------¢
¡dec p ¡p<-p-1 ¡- - - V 1
¡11011101¡DD ¡2¡2¡
¡ ¡ ¡ ¡00 p 101¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡dec q ¡q<-q-1 ¡- - - V 1
¡11111101¡FD ¡2¡2¡
¡ ¡ ¡ ¡00 q 101¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡dec [.hl] ¡[.hl]<-[.hl]-1 ¡- - - V 1
¡00110101¡35 ¡1¡4¡
-------------------------------------------------------------------------¢
¡dec [.ix+d] ¡[.ix+d]<-[.ix+d]-1 ¡- - - V 1
¡11011101¡DD ¡3¡7¡
¡ ¡ ¡ ¡00110101¡35 ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡dec [.iy+d] ¡[.iy+d]<-[.iy+d]-1 ¡- - - V 1
¡11111101¡FD ¡3¡7¡
¡ ¡ ¡ ¡00110101¡35 ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡dec ss ¡ss<-ss-1 ¡
¡00ss1011¡ ¡1¡1¡
-------------------------------------------------------------------------¢
¡dec .ix ¡.ix<-.ix-1 ¡
¡11011101¡DD ¡2¡2¡
¡ ¡ ¡ ¡00101011¡2B ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡dec .iy ¡.iy<-.iy-1 ¡
¡11111101¡FD ¡2¡2¡
¡ ¡ ¡ ¡00101011¡2B ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
A.10 COMPARISON INSTRUCTIONS
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡cmp .a,r ¡.a-r ¡- - - V 1 -¡10111 r ¡ ¡1¡1¡
-------------------------------------------------------------------------¢
¡cmp .a,r ¡.a-p ¡- - - V 1 -¡11011101¡DD ¡2¡2¡
¡ ¡ ¡ ¡10111 p ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡cmp .a,q ¡.a-q ¡- - - V 1 -¡11111101¡FD ¡2¡2¡
¡ ¡ ¡ ¡10111 q ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡cmp .a,[.hl]¡.a-[.hl] ¡- - - V 1 -¡10111110¡BE ¡1¡2¡
-------------------------------------------------------------------------¢
¡cmp .a, ¡.a-[.ix+d] ¡- - - V 1 -¡11011101¡DD ¡3¡5¡
¡ [.ix+d] ¡ ¡ ¡10111110¡BE ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡cmp .a, ¡.a-[.iy+d] ¡- - - V 1 -¡11111101¡FD ¡3¡5¡
¡ [.iy+d] ¡ ¡ ¡10111110¡BE ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡cmp .a,n ¡.a-n ¡- - - V 1 -¡11111110¡FE ¡2¡2¡
¡ ¡ ¡ ¡<- n ->¡ ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
< 670 APPENDIX A R800 INSTRUCTION CHART>
A.11 LOGIC OPERATION INSTRUCTION
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡and .a,r ¡.a<-.a/\r ¡- - 1 P 0 0¡10100 r ¡ ¡1¡1¡
-------------------------------------------------------------------------¢
¡and .a,p ¡.a<-.a/\p ¡- - 1 P 0 0¡11011101¡DD ¡2¡2¡
¡ ¡ ¡ ¡10100 p ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡and .a,q ¡.a<-.a/\q ¡- - 1 P 0 0¡11111101¡FD ¡2¡2¡
¡ ¡ ¡ ¡10100 q ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡and .a,[.hl]¡.a<-.a/\[.hl] ¡- - 1 P 0 0¡10100110¡A6 ¡1¡2¡
-------------------------------------------------------------------------¢
¡and .a, ¡.a<-.a/\[.ix+d] ¡- - 1 P 0 0¡11011101¡DD ¡3¡5¡
¡ [.ix+d] ¡ ¡ ¡10100110¡A6 ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡and .a, ¡.a<-.a/\[.iy+d] ¡- - 1 P 0 0¡11111101¡FD ¡3¡5¡
¡ [.iy+d] ¡ ¡ ¡10100110¡A6 ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡and .a,n ¡.a<-.a/\n ¡- - 1 P 0 0¡11100110¡E6 ¡2¡2¡
¡ ¡ ¡ ¡<- n ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡or .a,r ¡.a<-.a\/r ¡- - 0 P 0 0¡10110 r ¡ ¡1¡1¡
-------------------------------------------------------------------------¢
¡or .a,p ¡.a<-.a\/p ¡- - 0 P 0 0¡11011101¡DD ¡2¡2¡
¡ ¡ ¡ ¡10110 p ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡or .a,q ¡.a<-.a\/q ¡- - 0 P 0 0¡11111101¡FD ¡2¡2¡
¡ ¡ ¡ ¡10110 q ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡or .a,[.hl] ¡.a<-.a\/[.hl] ¡- - 0 P 0 0¡10110110¡B6 ¡1¡2¡
-------------------------------------------------------------------------¢
¡or .a, ¡.a<-.a\/[.ix+d] ¡- - 0 P 0 0¡11011101¡DD ¡3¡5¡
¡ [.ix+d] ¡ ¡ ¡10110110¡B6 ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡or .a, ¡.a<-.a\/[.iy+d] ¡- - 0 P 0 0¡11111101¡FD ¡3¡5¡
¡ [.iy+d] ¡ ¡ ¡10110110¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡or .a,n ¡.a<-.a\/n ¡- - 0 P 0 0¡11110110¡F6 ¡2¡2¡
¡ ¡ ¡ ¡<- n > ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡xor .a,r ¡.a<-.a\-/r ¡- - 0 P 0 0¡10101 r ¡ ¡1¡1¡
-------------------------------------------------------------------------¢
¡xor .a,p ¡.a<-.a\-/p ¡- - 0 P 0 0¡11011101¡DD ¡2¡2¡
¡ ¡ ¡ ¡10101 p ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡xor .a,q ¡.a<-.a\-/q ¡- - 0 P 0 0¡11111101¡FD ¡2¡2¡
¡ ¡ ¡ ¡10101 q ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡xor .a,[.hl]¡.a<-.a\-/[.hl] ¡- - 0 P 0 0¡10101110¡AE ¡1¡2¡
-------------------------------------------------------------------------¢
¡xor .a, ¡.a<-.a\-/[.ix+d] ¡- - 0 P 0 0¡11011101¡DD ¡3¡5¡
¡ [.ix+d] ¡ ¡ ¡10101110¡AE ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡xor .a, ¡.a<-.a\-/[.iy+d] ¡- - 0 P 0 0¡11111101¡FD ¡3¡5¡
¡ [.iy+d] ¡ ¡ ¡10101110¡AE ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡xor .a,n ¡.a<-.a\-/n ¡- - 0 P 0 0¡11101110¡EE ¡2¡2¡
¡ ¡ ¡ ¡<- n ->¡ ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
<A.12 BIT OPERATION INSTRUCTION 671>
A.12 BIT OPERATION INSTRUCTION
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡bit b,r ¡z<-NOT r{b} ¡? - 1 ? 0
¡11001011¡CB ¡2¡2¡
¡ ¡ ¡ ¡01 b r ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡bit b,[.hl] ¡z<-NOT [.hl]{b} ¡? - 1 ? 0
¡11001011¡CB ¡2¡2¡
¡ ¡ ¡ ¡01 b 110¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡bit b, ¡z<-NOT [.ix+d]{b} ¡? - 1 ? 0
¡11011101¡DD ¡4¡5¡
¡ [.ix+d] ¡ ¡ ¡11001011¡CB ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡01 b 110¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡bit b, ¡z<-NOT [.iy+d]{b} ¡? - 1 ? 0
¡11111101¡FD ¡4¡5¡
¡ [.iy+d] ¡ ¡ ¡11001011¡CB ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡01 b 110¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡set b,r ¡r{b}<-1 ¡
¡11001011¡CB ¡2¡2¡
¡ ¡ ¡ ¡11 b r ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡set b,[.hl] ¡[.hl]{b}<-1 ¡
¡11001011¡CB ¡2¡5¡
¡ ¡ ¡ ¡11 b 110¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡set b, ¡[.ix+d]{b}<-1 ¡
¡11011101¡DD ¡4¡7¡
¡ [.ix+d] ¡ ¡ ¡11001011¡CB ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡11 b 110¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡set b, ¡[.iy+d]{b}<-1 ¡
¡11111101¡FD ¡4¡7¡
¡ [.iy+d] ¡ ¡ ¡11001011¡CB ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡11 b 110¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡clr b,r ¡r{b}<-0 ¡
¡11001011¡CB ¡2¡2¡
¡ ¡ ¡ ¡10 b r ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡clr b,[.hl] ¡[.hl]{b}<-0 ¡
¡11001011¡CB ¡2¡5¡
¡ ¡ ¡ ¡10 b 110¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡clr b, ¡[.ix+d]{b}<-0 ¡
¡11011101¡DD ¡4¡7¡
¡ [.ix+d] ¡ ¡ ¡11001011¡CB ¡ ¡ ¡
¡ ¡ ¡ ¡<= d ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡10 b 110¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡clr b, ¡[.iy+d]{b}<-0 ¡
¡11111101¡FD ¡4¡7¡
¡ [.iy+d] ¡ ¡ ¡11001011¡CB ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡10 b 110¡ ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
<672 APPENDIX A R800 INSTRUCTION CHART>
A.13 ROTATE INSTRUCTIONS
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡rol a ¡C<-.a{7};.a<-.a*2;a{0}<-C ¡
0
0 -¡00000111¡07 ¡1¡1¡
-------------------------------------------------------------------------¢
¡ror a ¡C<-.a{0};.a<-.a/2;a{7}<-C ¡
0
0 -¡00001111¡0F ¡1¡1¡
-------------------------------------------------------------------------¢
¡rolc a ¡tmp<-C;C<-.a{7};.a<-.a*2; ¡
0
0 -¡00010111¡17 ¡1¡1¡
¡ ¡ .a{0}<-tmp ¡ ¡ ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡rorc a ¡tmp<-C;C<-.a{0};.a<-.a/2; ¡
0
0 -¡00011111¡1F ¡1¡1¡
¡ ¡ .a{7}<-tmp ¡ ¡ ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡rol r ¡C<-r{7} ¡- - 0 P 0 -¡11001011¡CB ¡2¡2¡
¡ ¡r<r*2;r{0}<-c ¡ ¡00000 r ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡rol [.hl] ¡C<-[.hl]{7} ¡- - 0 P 0 -¡11001011¡CB ¡2¡5¡
¡ ¡[.hl]<-[.hl]*2;[.hl]{0}<-C ¡ ¡00000110¡06 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡rol [.ix+d] ¡C<-[.ix+d]{7} ¡- - 0 P 0 -¡11011101¡DD ¡4¡7¡
¡ ¡[.ix+d]<-[.ix+d]*2 ¡ ¡ ¡CB ¡ ¡ ¡
¡ ¡[.ix+d]{0}<-C ¡ ¡<- d ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡00000110¡06 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡rol [.iy+d] ¡C<-[.iy+d]{7} ¡- - 0 P 0 -¡11111101¡FD ¡4¡7¡
¡ ¡[.iy+d]<-[.iy+d]*2 ¡ ¡ ¡CB ¡ ¡ ¡
¡ ¡[.iy+d]{0}<-C ¡ ¡<- d ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡00000110¡06 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ror r ¡C<-r{0} ¡- - 0 P 0 -¡11001011¡CB ¡2¡2¡
¡ ¡r<-r/2;r{7}<-C ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ror [.hl] ¡C<-[.hl]{0} ¡- - 0 P 0 -¡11001011¡CB ¡2¡5¡
¡ ¡[.hl]<-[.hl]/2;[.hl]{7}<-C ¡ ¡00001110¡0E ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ror [.ix+d] ¡C<-[.ix+d]{0} ¡- - 0 P 0 -¡11011101¡DD ¡4¡7¡
¡ ¡[.ix+d]<-[.ix+d]/2 ¡ ¡ ¡CB ¡ ¡ ¡
¡ ¡[.ix+d]{7}<-C ¡ ¡<- d ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡00001110¡06 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡rol [.iy+d] ¡C<-[.iy+d]{0} ¡- - 0 P 0 -¡11111101¡FD ¡4¡7¡
¡ ¡[.iy+d]<-[.iy+d]/2 ¡ ¡ ¡CB ¡ ¡ ¡
¡ ¡[.iy+d]{7}<-C ¡ ¡<- d ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡00001110¡06 ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
<A.13 ROTATE INSTRUCTIONS 673>
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡rolc r ¡tmp<-C;C<-r{7} ¡- - 0 P 0 -¡11001011¡CB ¡2¡2¡
¡ ¡r<-r*2;r{0}<-tmp ¡ ¡00010 r ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡rolc [.hl] ¡tmp<-C;C<-[.hl]{7} ¡- - 0 P 0 -¡11001011¡CB ¡2¡5¡
¡ ¡[.hl]<-[.hl]*2;[.hl]{0}<-tmp¡ ¡00010110¡16 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡rolc [.ix+d]¡tmp<-C ¡- - 0 P 0 -¡11011101¡DD ¡4¡7¡
¡ ¡C<-[.ix+d]{7} ¡ ¡11001011¡CB ¡ ¡ ¡
¡ ¡[.ix+d]<-[.ix+d]*2 ¡ ¡<- b ->¡ ¡ ¡ ¡
¡ ¡[.ix+d]{0}<-tmp ¡ ¡00010110¡16 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡rolc [.iy+d]¡tmp<-C ¡- - 0 P 0 -¡11111101¡FD ¡4¡7¡
¡ ¡C<-[.iy+d]{7} ¡ ¡11001011¡CB ¡ ¡ ¡
¡ ¡[.iy+d]<-[.iy+d]*2 ¡ ¡<- b ->¡ ¡ ¡ ¡
¡ ¡[.iy+d]{0}<-tmp ¡ ¡00010110¡16 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡rorc r ¡tmp<-C;C<-r{0} ¡- - 0 P 0 -¡11001011¡CB ¡2¡2¡
¡ ¡r<-r/2;r{7}<-tmp ¡ ¡00011 r ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡rorc [.hl] ¡tmp<-C;C<-[.hl]{0} ¡- - 0 P 0 -¡11001011¡CB ¡2¡5¡
¡ ¡[.hl]<-[.hl]/2;[.hl]{7}<-tmp¡ ¡00011110¡1E ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡rorc [.ix+d]¡tmp<-C ¡- - 0 P 0 -¡11011101¡DD ¡4¡7¡
¡ ¡C<-[.ix+d]{0} ¡ ¡11001011¡CB ¡ ¡ ¡
¡ ¡[.ix+d]<-[.ix+d]/2 ¡ ¡<- b ->¡ ¡ ¡ ¡
¡ ¡[.ix+d]{7}<-tmp ¡ ¡00011110¡16 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡rorc [.iy+d]¡tmp<-C ¡- - 0 P 0 -¡11111101¡FD ¡4¡7¡
¡ ¡C<-[.iy+d]{0} ¡ ¡11001011¡CB ¡ ¡ ¡
¡ ¡[.iy+d]<-[.iy+d]/2 ¡ ¡<- b ->¡ ¡ ¡ ¡
¡ ¡[.iy+d]{7}<-tmp ¡ ¡00011110¡1E ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡rol4 [.hl] ¡tmp<-.a{0..3} ¡- - 0 P 0
¡11101101¡ED ¡2¡5¡
¡ ¡.a{0..3}<-[.hl]{4..7} ¡ ¡11101111¡6F ¡ ¡ ¡
¡ ¡[.hl]{4..7}<-[.hl]{0..3} ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡[.hl]{0..3}<-tmp ¡ ¡ ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡rol4 [.hl] ¡tmp<-.a{0..3} ¡- - 0 P 0
¡11101101¡ED ¡2¡5¡
¡ ¡.a{0..3}<-[.hl]{4..7} ¡ ¡11100111¡67 ¡ ¡ ¡
¡ ¡[.hl]{4..7}<-[.hl]{0..3} ¡ ¡ ¡ ¡ ¡ ¡
¡ ¡[.hl]{0..3}<-tmp ¡ ¡ ¡ ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
<674 APPENDIX A R800 INSTRUCTION CHART
A.14 SHIFT INSTRUCTIONS
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡shl r ¡C<-r{7} ¡- - 0 P 0 -¡11001011¡CB ¡2¡2¡
¡shla ¡r<-r*2 ¡ ¡00100 r ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡shl [.hl] ¡C<-[.hl]{7} ¡- - 0 P 0 -¡11001011¡CB ¡2¡5¡
¡shla ¡[.hl]<-[.hl]*2 ¡ ¡00100110¡26 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡shl [,ix+d] ¡C<-[.ix+d]{7} ¡- - 0 P 0 -¡11011101¡DD ¡4¡7¡
¡shla ¡[.ix+d]<-[.ix+d]*2 ¡ ¡11001011¡CB ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡00100110¡26 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡shl [,iy+d] ¡C<-[.iy+d]{7} ¡- - 0 P 0 -¡11111101¡DD ¡4¡7¡
¡shla ¡[.iy+d]<-[.iy+d]*2 ¡ ¡11001011¡CB ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡00100110¡26 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡shr r ¡C<-r{0} ¡- - 0 P 0 -¡11001011¡CB ¡2¡2¡
¡ ¡r<-r/2 ¡ ¡00111 r ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡shr [.hl] ¡C<-[.hl]{0} ¡- - 0 P 0 -¡11001011¡CB ¡2¡5¡
¡ ¡[.hl]<-[.hl]/2 ¡ ¡00111110¡3E ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡shr [,ix+d] ¡C<-[.ix+d]{0} ¡- - 0 P 0 -¡11011101¡DD ¡4¡7¡
¡ ¡[.ix+d]<-[.ix+d]/2 ¡ ¡11001011¡CB ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡00111110¡3E ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡shr [,iy+d] ¡C<-[.iy+d]{0} ¡- - 0 P 0 -¡11111101¡DD ¡4¡7¡
¡ ¡[.iy+d]<-[.iy+d]/2 ¡ ¡11001011¡CB ¡ ¡ ¡
¡ ¡ ¡ ¡<- d ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡00111110¡3E ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡shra r ¡tmp<-r{7};C<-r{0} ¡- - 0 P 0 -¡11001011¡CB ¡2¡2¡
¡ ¡r<-r/2;r{7}<-tmp ¡ ¡00101 r ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡shra [.hl] ¡tmp<-[.hl]{7};C<-[.hl]{0} ¡- - 0 P 0 -¡11001011¡CB ¡2¡2¡
¡ ¡[.hl]<-[.hl]/2;[.hl]{7}<-tmp¡ ¡00101110¡2E ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡shra [.ix+d]¡tmp<-[.ix+d]{7} ¡- - 0 P 0 -¡11011101¡DD ¡4¡7¡
¡ ¡C<-[.ix+d]{0} ¡ ¡11001011¡CB ¡ ¡ ¡
¡ ¡[.ix+d]<-[.ix+d]/2 ¡ ¡<- d ->¡ ¡ ¡ ¡
¡ ¡[.ix+d]{7}<-tmp ¡ ¡00101110¡2E ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡shra [.iy+d]¡tmp<-[.iy+d]{7} ¡- - 0 P 0 -¡11111101¡FD ¡4¡7¡
¡ ¡C<-[.iy+d]{0} ¡ ¡11001011¡CB ¡ ¡ ¡
¡ ¡[.iy+d]<-[.iy+d]/2 ¡ ¡<- d ->¡ ¡ ¡ ¡
¡ ¡[.iy+d]{7}<-tmp ¡ ¡00101110¡2E ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
The shl instruction and the shla instruction are exectly the same and use the
same operand.
<A.15 BRANCH INSTRUCTIONS 675>
A.15 BRANCH INSTRUCTIONS
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡br nn ¡.pc<-nn ¡
¡11000011¡C3 ¡3¡3¡
¡ ¡ ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡bnz nn ¡if z=0 ¡
¡11000010¡C2 ¡3¡3¡
¡ ¡.pc<-nn ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡bz nn ¡if z=1 ¡
¡11001010¡CA ¡3¡3¡
¡ ¡.pc<-nn ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡bnc nn ¡if c=0 ¡
¡11010010¡D2 ¡3¡3¡
¡ ¡.pc<-nn ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡bc nn ¡if c=1 ¡
¡11011010¡DA ¡3¡3¡
¡ ¡.pc<-nn ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡bpo nn ¡if P/v=0 ¡
¡11100010¡E2 ¡3¡3¡
¡ ¡.pc<-nn ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡bpe nn ¡if P/v=1 ¡
¡11101010¡EA ¡3¡3¡
¡ ¡.pc<-nn ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡bp nn ¡if s=0 ¡
¡11110010¡F2 ¡3¡3¡
¡ ¡.pc<-nn ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡bm nn ¡if s=1 ¡
¡11111010¡FA ¡3¡3¡
¡ ¡ ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡br [.hl] ¡.pc<-.hl ¡
¡11101001¡E9 ¡1¡1¡
-------------------------------------------------------------------------¢
¡br [.ix] ¡.pc<-.ix ¡
¡11011101¡DD ¡2¡2¡
¡ ¡ ¡ ¡11101001¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡br [.iy] ¡.pc<-.iy ¡
¡11111101¡FD ¡2¡2¡
¡ ¡ ¡ ¡11101001¡ ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
<676 APPENDIX A R800 INSTRUCTION CHART>
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡short ¡.pc<-.pc+e ¡
¡00011000¡18 ¡2¡3¡
¡br e ¡ ¡ ¡<- e-2->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡short ¡if z=0 ¡
¡00100000¡20 ¡2¡2¡
¡bnz e ¡.pc<-.pc+e ¡ ¡<- e-2->¡ ¡ ¡3¡
-------------------------------------------------------------------------¢
¡short ¡if z=1 ¡
¡00101000¡28 ¡2¡2¡
¡bz e ¡.pc<-.pc+e ¡ ¡<- e-2->¡ ¡ ¡3¡
-------------------------------------------------------------------------¢
¡short ¡if c=0 ¡
¡00110000¡30 ¡2¡2¡
¡bnc e ¡.pc<-.pc+e ¡ ¡<- e-2->¡ ¡ ¡3¡
-------------------------------------------------------------------------¢
¡short ¡if c=1 ¡
¡00111000¡38 ¡2¡2¡
¡bc e ¡.pc<-.pc+e ¡ ¡<- e-2->¡ ¡ ¡3¡
-------------------------------------------------------------------------¢
¡dbnz e ¡.b<-.b-1;if .b<>0 ¡
¡00010000¡10 ¡2¡2¡
¡ ¡.pc<-.pc+e ¡ ¡<- e-2->¡ ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
A.16 CALL INSTRUCTIONS
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡call nn ¡[.sp-2]<-.spl;[.sp-1]<-.sph ¡
¡11001101¡CD ¡3¡5¡
¡ ¡.sp<-.sp-2;.pc<-nn ¡ ¡<-nnl ->¡ ¡ ¡ ¡
¡ ¡ ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡call nz,nn ¡if z=0 ¡
¡11000100¡C4 ¡3¡3¡
¡ ¡[.sp-2]<-.pcl;[.sp-1]<-.pch ¡ ¡<-nnl ->¡ ¡ ¡5¡
¡ ¡.sp<-.sp-2;.pc<-nn ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡call z,nn ¡if z=1 ¡
¡11001100¡CC ¡3¡3¡
¡ ¡[.sp-2]<-.pcl;[.sp-1]<-.pch ¡ ¡<-nnl ->¡ ¡ ¡5¡
¡ ¡.sp<-.sp-2;.pc<-nn ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡call nc,nn ¡if c=0 ¡
¡11010100¡D4 ¡3¡3¡
¡ ¡[.sp-2]<-.pcl;[.sp-1]<-.pch ¡ ¡<-nnl ->¡ ¡ ¡5¡
¡ ¡.sp<-.sp-2;.pc<-nn ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡call c,nn ¡if c=1 ¡
¡11011100¡DC ¡3¡3¡
¡ ¡[.sp-2]<-.pcl;[.sp-1]<-.pch ¡ ¡<-nnl ->¡ ¡ ¡5¡
¡ ¡.sp<-.sp-2;.pc<-nn ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡call po,nn ¡if P/v=0 ¡
¡11100100¡E4 ¡3¡3¡
¡ ¡[.sp-2]<-.pcl;[.sp-1]<-.pch ¡ ¡<-nnl ->¡ ¡ ¡5¡
¡ ¡.sp<-.sp-2;.pc<-nn ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡call pe,nn ¡if P/v=1 ¡
¡11101100¡EC ¡3¡3¡
¡ ¡[.sp-2]<-.pcl;[.sp-1]<-.pch ¡ ¡<-nnl ->¡ ¡ ¡5¡
¡ ¡.sp<-.sp-2;.pc<-nn ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡call p,nn ¡if s=0 ¡
¡11110100¡F4 ¡3¡3¡
¡ ¡[.sp-2]<-.pcl;[.sp-1]<-.pch ¡ ¡<-nnl ->¡ ¡ ¡5¡
¡ ¡.sp<-.sp-2;.pc<-nn ¡ ¡<-nnh ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡call m,nn ¡if s=1 ¡
¡11111100¡FC ¡3¡3¡
¡ ¡[.sp-2]<-.pcl;[.sp-1]<-.pch ¡ ¡<-nnl ->¡ ¡ ¡5¡
¡ ¡.sp<-.sp-2;.pc<-nn ¡ ¡<-nnh ->¡ ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
<A.16 CALL INSTRUCTIONS 677
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡ret ¡.pcl<-[.sp];.pch<-[.sp+1] ¡
¡11001001¡C9 ¡1¡3¡
¡ ¡.sp<-.sp+2 ¡ ¡ ¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ret nz ¡if z=0 ; .pcl<-[.sp] ¡
¡11000000¡C0 ¡1¡1¡
¡ ¡.pch<-.[.sp+1];.sp<-.sp+2 ¡ ¡ ¡ ¡ ¡3¡
-------------------------------------------------------------------------¢
¡ret z ¡if z=1 ; .pcl<-[.sp] ¡
¡11001000¡C8 ¡1¡1¡
¡ ¡.pch<-.[.sp+1];.sp<-.sp+2 ¡ ¡ ¡ ¡ ¡3¡
-------------------------------------------------------------------------¢
¡ret nc ¡if c=0 ; .pcl<-[.sp] ¡
¡11010000¡D0 ¡1¡1¡
¡ ¡.pch<-.[.sp+1];.sp<-.sp+2 ¡ ¡ ¡ ¡ ¡3¡
-------------------------------------------------------------------------¢
¡ret c ¡if c=1 ; .pcl<-[.sp] ¡
¡11011000¡D8 ¡1¡1¡
¡ ¡.pch<-.[.sp+1];.sp<-.sp+2 ¡ ¡ ¡ ¡ ¡3¡
-------------------------------------------------------------------------¢
¡ret po ¡if P/v=0 ; .pcl<-[.sp] ¡
¡11100000¡E0 ¡1¡1¡
¡ ¡.pch<-.[.sp+1];.sp<-.sp+2 ¡ ¡ ¡ ¡ ¡3¡
-------------------------------------------------------------------------¢
¡ret pe ¡if P/v=1 ; .pcl<-[.sp] ¡
¡11101000¡E8 ¡1¡1¡
¡ ¡.pch<-.[.sp+1];.sp<-.sp+2 ¡ ¡ ¡ ¡ ¡3¡
-------------------------------------------------------------------------¢
¡ret p ¡if s=0 ; .pcl<-[.sp] ¡
¡11110000¡F0 ¡1¡1¡
¡ ¡.pch<-.[.sp+1];.sp<-.sp+2 ¡ ¡ ¡ ¡ ¡3¡
-------------------------------------------------------------------------¢
¡ret m ¡if s=1 ; .pcl<-[.sp] ¡
¡11111000¡F8 ¡1¡1¡
¡ ¡.pch<-.[.sp+1];.sp<-.sp+2 ¡ ¡ ¡ ¡ ¡3¡
-------------------------------------------------------------------------¢
¡ret i ¡interrupt return ¡
¡11101101¡ED ¡2¡5¡
¡ ¡ ¡ ¡01001101¡4D ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡ret n ¡Non Maskable Interrupt ¡
¡11101101¡ED ¡2¡5¡
¡ ¡ return ¡ ¡01000101¡45 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡brk k ¡[.sp-2]<-.pcl;[.sp-1]<-.pch ¡
¡11 111¡C0 ¡1¡4¡
¡ ¡.sp<-.sp-2;.pcl<-k;pch<-0 ¡ ¡ k/8 ¡ ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
<678 APPENDIX A R800 INSTRUCTION CHART>
A.17 INOUT/OUTPUT INSTRUCTIONS
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡in .a,[n] ¡.a<-[n] ¡
¡11011011¡DB ¡2¡3¡
¡ ¡ ¡ ¡<- n ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡in r,[.c] ¡r<-[.c] ¡- - 0 P 0
¡11101101¡ED ¡2¡3¡
¡ ¡ ¡ ¡01 r 000¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡in .f,[.c] ¡.f<-[.c] ¡- - 0 P 0
¡11101101¡ED ¡2¡3¡
¡ ¡ ¡ ¡01110000¡70 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡in ¡[.hl]<-[.c];.b<-.b-1 ¡? - ? ? 1
¡11101101¡ED ¡2¡4¡
¡[.hl++],[.c]¡.hl<-.hl+1 ¡ *1 ¡10100010¡A2 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡in ¡[.hl]<-[.c];.b<-.b-1 ¡? - ? ? 1
¡11101101¡ED ¡2¡4¡
¡[.hl--],[.c]¡.hl<-.hl-1 ¡ *1 ¡10101010¡AA ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡inm ¡repeat;[.hl]<-[.c];.b<-.b-1 ¡? 1 ? ? 1
¡11101101¡ED ¡2¡4¡
¡[.hl++],[.c]¡.hl<-.hl+1;until .b=0 ¡ ¡10110010¡B2 ¡ ¡3¡
-------------------------------------------------------------------------¢
¡inm ¡repeat;[.hl]<-[.c];.b<-.b-1 ¡? 1 ? ? 1
¡11101101¡ED ¡2¡4¡
¡[.hl--],[.c]¡.hl<-.hl-1;until .b=0 ¡ ¡10111010¡BA ¡ ¡3¡
-------------------------------------------------------------------------¢
¡out [n],.a ¡[n]<-.a ¡
¡11010011¡D3 ¡2¡3¡
¡ ¡ ¡ ¡<- n ->¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡out [.c],r ¡[.c]<-r ¡
¡11101101¡ED ¡2¡3¡
¡ ¡ ¡ ¡01 r 001¡ ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡out ¡[.c]<-[.hl];.b<-.b-1 ¡? - ? ? 1
¡11101101¡ED ¡2¡4¡
¡[.c],[.hl++]¡.hl<-.hl+1 ¡ *1 ¡10100011¡A3 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡out ¡[.c]<-[.hl];.b<-.b-1 ¡? - ? ? 1
¡11101101¡ED ¡2¡4¡
¡[.c],[.hl--]¡.hl<-.hl-1 ¡ *1 ¡10101011¡AB ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡outm ¡repeat;[.c]<-[.hl];.b<-.b-1 ¡? 1 ? ? 1
¡11101101¡ED ¡2¡4¡
¡[.c],[.hl++]¡.hl<-.hl+1;until .b=0 ¡ ¡10110011¡B3 ¡ ¡3¡
-------------------------------------------------------------------------¢
¡outm ¡repeat;[.c]<-[.hl];.b<-.b-1 ¡? 1 ? ? 1
¡11101101¡ED ¡2¡4¡
¡[.c],[.hl--]¡.hl<-.hl-1;until .b=0 ¡ ¡10111011¡BB ¡ ¡3¡
------------_----------------------------_-------------_--------_---_-_-
*1 als .b-1=0 it is set to 1 else it is 0
dependent of the external port which the .c register of in.f,[.c] desginates,
flags will be changed. It doesn't matter where the external port is.(???)
<A.18 CPU CONTROL INSTRUCTIONS 679>
A.18 CPU CONTROL INSTRUCTIONS
Å------------\----------------------------\-------------\------------\-\-ã
¡MNEMONIC ¡ INSTRUCTION ACTION ¡ FLAGS ¡ OPCODE ¡ ¡ ¡
¡ ¡ ¡ ---------\---¢ ¡ ¡
¡ ¡ ¡S Z H P/v N C¡76543210¡HEX¡B¡C¡
-------------------------------------------------------------------------¢
¡adj .a ¡adjust to decimal ¡- - - P
-¡00100111¡27 ¡1¡1¡
-------------------------------------------------------------------------¢
¡not .a ¡.a<-NOT .a ¡
1
1
¡00101111¡2F ¡1¡1¡
-------------------------------------------------------------------------¢
¡neg .a ¡.a<-NOT .a+1 ¡- - - V 1 -¡11101101¡ED ¡2¡2¡
¡ ¡ ¡ ¡01000100¡44 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡not c ¡C<-NOT C ¡
?
0 -¡00111111¡3F ¡1¡1¡
-------------------------------------------------------------------------¢
¡set c ¡C<-1 ¡
0
0 1¡00110111¡37 ¡1¡1¡
-------------------------------------------------------------------------¢
¡nop ¡NO operation ¡
¡00000000¡00 ¡1¡1¡
-------------------------------------------------------------------------¢
¡halt ¡HALT ¡
¡01110110¡76 ¡1¡2¡
-------------------------------------------------------------------------¢
¡di ¡IFF<-0 ¡
¡11110011¡F3 ¡1¡2¡
-------------------------------------------------------------------------¢
¡ei ¡IFF<-1 ¡
¡11111011¡FB ¡1¡1¡
-------------------------------------------------------------------------¢
¡im 0 ¡interrupt mode 0 ¡
¡11101101¡ED ¡2¡3¡
¡ ¡ ¡ ¡01000110¡46 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡im 1 ¡interrupt mode 1 ¡
¡11101101¡ED ¡2¡3¡
¡ ¡ ¡ ¡01010110¡56 ¡ ¡ ¡
-------------------------------------------------------------------------¢
¡im 2 ¡interrupt mode 2 ¡
¡11101101¡ED ¡2¡3¡
¡ ¡ ¡ ¡01011110¡5E ¡ ¡ ¡
------------_----------------------------_-------------_--------_---_-_-
<680 >
<681 >
------------------------------------------------------------------------
B
R800 MULTIPLICATION MACRO
------------------------------------------------------------------------
B.1 MULTIPLICATION INSTRUCTIONS OF THE R800
The following multiplication instructions are available.
B.1.1 8 bit MULTIPLICATIONS
Two of the same kind 8 bit registers are filled and the result appears in
register HL. The multiplication is performed with an instruction.
The instruction are shown below.
----------------------------------------------------------------------------
operation instruction clock cycles
----------------------------------------------------------------------------
HL<-A*B ED C1 14
HL<-A*C ED C9 14
HL<-A*D ED D1 14
HL<-A*E ED D9 14
---------------------------------------------------------------------------
B.1.2 16 bit MULTIPLICATIONS
Two of the same kind 16 bit registers are filled and the result appears in
registers DE:HL. The multiplication is performed with an instruction.
The instruction are shown below.
----------------------------------------------------------------------------
operation instruction clock cycles
----------------------------------------------------------------------------
DE:HL<-HL*BC ED C3 36
DE:HL<-HL*SP ED F3 36
----------------------------------------------------------------------------
<682 APPENDIX A R800 INSTRCUCTION CHART>
B.2 MULTIPLICATION MACRO FOR M80
When using multiplications in M80, this macro can be used.
mult8 macro reg
ifidn <reg>,<b>
defb 0edh,0c1h
else
ifidn <reg>,<B>
defb 0edh,0c1h
else
ifidn <reg>,<c>
defb 0edh,0c9h
else
ifidn <reg>,<C>
defb 0edh,0c9h
else
ifidn <reg>,<d>
defb 0edh,0d1h
else
ifidn <reg>,<D>
defb 0edh,0d1h
else
ifidn <reg>,<e>
defb 0edh,0d9h
else
ifidn <reg>,<E>
defb 0edh,0d9h
else
if1
.printx *MULT8: illegal argument*
defb 00h,00h
err
endif
endif
endif
endif
endif
endif
endif
endif
endif
endm
mult16 macro reg
ifidn <reg>,<bc>
defb 0edh, 0c3h
else
ifidn <reg>,<BC>
defb 0edh,0c3h
else
<B.2 MULTIPLICATION MACRO FOR M80 683>
ifidn <reg>,<sp>
defb 0edh, 0f3h
else
ifidn <reg>,<SP>
defb 0edh,0f3h
else
if1
.printx *MULT16: illegal argument*
defb 00h, 00h
err
end if
end if
end if
end if
end if
endm
<684 >
< 685>
|