
|
SV738 X'press I/O MAP version 1.5 Mayer, 14-05-95
MAYER's SV738 X'press I/O MAP version 1.5
Creation date: 1991.
Last edition: Sunday 14-May-95 11:57:57.
This I/O documentation was written 1991 by MAYER of WC HAKKERS.
It consists of gathered info about the MSX computer SV738 X'Press
(here upgraded to MSX 2 by changing ROM and VRAM - see documentation
about MSX-2 upgrading).
Thanks to Henrik Gilvad (Denmark) for info about the MSX-2 MVDP and
the MSX-2 ROMs, to Pål F Hansen (Norway) for VRAM info and to
Jonas Lindström (Sweden) for some MVDP info.
This documentation is not completed, but it includes the most important
things when dealing with I/O ports on a MSX.
I do not take any responsibility for changes done by anybody else
later in the text. If You change anything I advise You to leave a note
on the last page about the change.
This text may not be sold, included in commercial software/hardware
or firmware packages and it may not be duplicated by any means
without the authors permission.
This text is shareware; You might copy it an spread it as long as You
doesn't sell the copies.
So if You spread this documentation, leaving this page intact and
without changes, You have my permission to duplicate it.
MAYER
-----
How to use this documentation
-----------------------------
The documentation is divided in four parts:
1. Port summary
2. Port descriptions and examples
3. Hardware connections
4. Useful tables
Part 1 - The port summary.
The port summary contains port numbers in hex, R/W if known, Note reference,
chip name and function.
The port number is the hex value of the address bus when accessing the port.
R/W tells if the port is Read only (R), Read/ Write (R/W), Write only (W)
or not connected as far as I know (NC). A "?" tells that I do not know what kind
of port this is.
Chip name is mostly the chip part number and a small description in
pharenthesis or (if for example the port refers to something as simple as a 74LSxx)
only a description.
Function is a short function description. If the description is surrounded by
"?" I am not sure about the function.
Part 2 - Port descriptions and examples.
This part is divided in small blocks to make it easier to search
for information on specific ports. The search pattern is:
****----
Note naN,naN, ... :
PORT.PP,PP,PP, ... (Chip description)
------------------
Port summary:
PP (description)
PP-PP (description)
Note naN:
PORT.PP (port description)
-------
(Information)
Note naN:
PORT.PP,PP (port description)
----------
(Information)
----****
The "****----" marks start of block and the "----****" marks the end of block.
After the first block start mark, there is a EOL and the text "Note " that is followed by
the note references separeted by commas and ended by a ":".
On the next line the text "PORT." is followed by the included ports, separated
by commas.
The port summary of the involved ports is now present on the next lines. It ends
at the first occurance of the text "Note " which denotes the start of a port
description. The port description contains of the heading Note number (naN) and
the text "PORT."+ port number following on the next line.
Thereafter, the port information follows and the information starts at the next line.
At the end of the chip block, the "----****" marks end of block.
In the examples,
the BASIC variable A corresponds to the CPU register [a].
The BASIC variable B corresponds to the CPU register [b].
The BASIC variable HL corresponds to the CPU register pair [hl].
If You are usimg a editor, look at the port summary page and search for a note
by searching for example "1a1:" (this will find the note for port 80, ACIA).
Part 3 - Hardware connections.
The hardware connections contains of a page of semigraphic pictures of different
connectors, followed by pin descriptions of the MSX connectors.
Some other connectors is added for reference.
Part 4 - Useful tables.
A SV738 specification, ASCII table and a VT-52 code table.
Port summary
-------------
I/O R/W: Note: Chip/Name: Function:
port:
00-3F NC *** Unspecified ***
40-7B NC *** Reserved ***
7C ? 0a1 FM-PAK (MSX MUSIC) reg. select
7D ? 0b1 FM-PAK (MSX MUSIC) data I/O
7E-7F NC *** Reserved ***
80 R/W 1a1 I8251 (ACIA) Data RS232
81 R/W 1b1 I8251 (ACIA) Status/Command RS232
82 R 1c2 RS232 Status for CTS,Timer/counter2,RI,CD
82 W 1d2 RS232 Interrupt mask register
83 R 1e2 RS232 ?Clock 0,1,2 read?
83 W 1f2 RS232 ?Receive ready interrupt enable?
84 R/W 1g3 I8253 (Baud gener.) Counter 0 Receive clock
85 R/W 1h3 I8253 (Baud gener.) Counter 1 Transmit clock
86 R/W 1i3 I8253 (Baud gener.) Counter 2 Used by programs
87 W 1j3 I8253 (Baud gener.) Mode register
88 ? 1k2 ? ?Modem enable?
89-8B ? 2a1 Reserved for MSX-1 MVDP 9938 adaptor
8C-8D ? 1m2 Reserved for modem
90 R 3a1 ULA5RA087 Centronic BUSY state (bit 1=1)
90 W 3b1 ULA5RA087 Centronic STROBE output (bit 0=0)
91 W 3c1 ULA5RA087 Centronic Printer Data (characters out ASCII)
92-97 NC *** Reserved ***
98 R 4a1 9918,9929,9938,9958,9978 VRAM data READ
98 W 4b1 9918,9929,9938,9958,9978 VRAM data WRITE
99 R 4c2 9938,9958,9978,9929 VDP status (Interrupt,Spr Conc,5th)
99 W 4d2 9938,9958,9978,9929 VDP address setup/Register write
9A W 5a1 MVDP colour palette registers data write (2 bytes)
9B ? 5b1 MVDP Register data
9C-9F NC *** Reserved ***
A0 W 6a1 I AY-3-8910 PSG Register select
A1 W 6b1 I AY-3-8910 PSG Data write
A2 R 6c1 I AY-3-8910 PSG Data read
A3-A7 NC *** Reserved ***
A8 R 7a1 I 8255A/ULA9RA041 Port A Memory slot reister Read
A8 W 7b1 I 8255A/ULA9RA041 Port A Memory slot reister Write
A9 R 7c2 I 8255A/ULA9RA041 Port B Keyboard column inputs
A9 W 7d2 I 8255A/ULA9RA041 Port B
AA R 7e2 I 8255A/ULA9RA041 Port C Get Kbd Row sel,LED,CASo,CASm
AA W 7f2 I 8255A/ULA9RA041 Port C Set Kbd Row sel,LED,CASo,CASm
AB R 7g3 I 8255A/ULA9RA041 Mode
AB W 7h3 I 8255A/ULA9RA041 Mode select and I/O setup of A,B,C
AC-AF NC *** Reserved ***
B0-B3 ? 8a1 External 8255 (SONY DataRamPack)
B4 W 9a1 RP 5C01 (Not in 738) RTC Register select
B5 R/W 9b1 RP 5C01 (Not in 738) RTC data
B6-B7 NC *** Reserved ***
B8-BB ? 10a1 SANYO Light pen interface
BC-BF ? 11a1 VHD control
C0-C1 ? 12a1 MSX audio (MSX MUSIC again?)
C2-C7 NC *** Reserved ***
C8-CF ? 13a1 MSX Interface (??)
D0-D7 ? 14a1 External Floppy Disk Controller
D8-DB ? 15a1 Kanji ROM for Chinese characters (Not included in European vers)
DC-F4 NC *** Reserved ***
F5 ? 16a1 System control
F6 ? 17a1 colour bus
F7 W 18a1 Audio/Video control
F8-FB NC *** Reserved ***
FC-FF R/W 19a1 Memory mapper
100-FFFF *** Unspecified on SV 738 X'press *** (can be used via reg [bc] only).
Notes
-----
****----
Note 0a1,0b1:
PORT.7C,7D FM-PAK
----------
Port summary:
7C NC 0a FM-PAK (MSX MUSIC) reg. select
7D NC 0b FM-PAK (MSX MUSIC) data I/O
Note 0a1:
PORT.7C Reg. Select
-------
No info
Note 0b1:
PORT.7D Data I/O
-------
No info
----****
****----
Note 1a1,1b1:
PORT.80,81 ACIA (Asynchronous Communication Interface Adapter)
----------
Port summary:
80 R/W 1a1 I8251 (ACIA) Data RS232
81 R/W 1b1 I8251 (ACIA) Status/Command RS232
For RS232 signal levels and null modem example see note 1j3 (port 87).
For initialization example of ACIA (read) see note 1b1 (port 81).
For baudrate initialization example see note 1j3 (port 87).
For read byte example see note 1b1 (port 81).
Note 1a1:
PORT.80 RS232 data
-------
This port holds the byte received from RS232.
This port is also used to send bytes to RS232.
See example at note 1b1 (port 81).
Note 1b1:
PORT.81 RS232 status/ACIA command
-------
Input from this port will give the status of the RS232 interface.
Bit: Function:
0 TxRDY; Transmit Ready
1 RxRDY; Receive Ready (1 when received byte is enable for CPU).
2 TxEMPTY; Transmit buffer Empty
3 PE; Parity Error if 1
4 OE; Overrun Error if 1 (CPU has not received character)
5 FE; Framing Error if 1 (ASYNC only, STOP BIT not valid)
6 SYNDET/BRKDET; SYNC/BREAK found
7 DSR; Data Set Ready
Output to this port will set parameters in the i8251 ACIA.
Directly after a RESET command (see command format below), the
MODE SETUP byte may be written:
; -- MODE SETUP --
word EQU 00001100b ; 8 data bits
; xxxx00xxb = 5 bits
; xxxx01xxb = 6 "
; xxxx10xxb = 7 "
; xxxx11xxb = 8 "
;----
paren EQU 00000000b ; No parity
; xxx0xxxxb = Disable parity
; xxx1xxxxb = Enable "
;----
parity EQU 00000000b ; Odd
; xx0xxxxxb = Odd parity generation/Check
; xx1xxxxxb = Even parity generation/Check
;----
STOP EQU 01000000b ; 1 Stop bit
; 00xxxxxxb = Invalid
; 01xxxxxxb = 1 Bit
; 10xxxxxxb = 1.5 Bit
; 11xxxxxxb = 2 Bit
;----
baudfact EQU 00000010b ; x16
; xxxxxx00b = SYNC MODE
; xxxxxx01b = 1 * CLK
; xxxxxx10b = 1/16 * CLK
; xxxxxx11b = 1/64 * CLK
;----
After the MODE SETUP byte has been written, the COMMAND SETUP BYTE may be
written:
; -- COMMAND SETUP --
tx EQU 00000001b ; Transmit enable/Disable
; xxxxxxx0b ; Transmit disable
; xxxxxxx1b ; Transmit enable
dtr EQU 00000010b ; Set Data Terminal Ready/Not Ready
; xxxxxx0xb ; Data Terminal Not Ready
; xxxxxx1xb ; Data Terminal Ready
rx EQU 00000100b ; Receive enable, 0= Disable
; xxxxx0xxb ; Receive Disable
; xxxxx1xxb ; Receive enable
brk EQU 00001000b ; Break/Normal operation
; xxxx0xxxb ; Normal Operation
; xxxx1xxxb ; Send Break (TxD=Low)
err_reset EQU 00010000b ; Error reset
; xxx0xxxxb ; No operation
; xxx1xxxxb ; Reset error flags PE,OE and FE
rts EQU 00100000b ; Set/reset Request To Send
; xx0xxxxxb ; _RTS = 1 (No Request To Send)
; xx1xxxxxb ; Request to send
reset EQU 01000000b ; Internal reset
; x0xxxxxxb ; No operation
; x1xxxxxxb ; RESET and wait for MODE instr.input
Hunt EQU 10000000b ; Enter Hunt mode
; 0xxxxxxxb ; No operation
; 1xxxxxxxb ; Enable search for SYNC character
An example routine to initialize the i8251A (for write) is shown below:
xor a ; Make sure i8251 is in COMMAND mode
out (081h),a ; Sync mode
out (081h),a ; Dummy sync char
out (081h),a ; Dummy sync char
inc a
out (088h),a ; mdm enable
ld a,reset
out (081h),a ; Set i8251 in MODE state
ld a,word+stop+paren+parity+baudfact
out (081h),a
nop
; Now, i8251 is in COMMAND state
ld a,err_reset ; Reset error flags
out (081h),a
ld a,dtr+rx+tx
out (081h),a
nop
in a,(081h) ; Read status
ret
An example routine to receive a byte to [a] from RS232 is shown below:
; Get RS232 -> [a]
recv: ld a,dtr+rx+err_reset
out (081h),a
rec2:
in a,(081h)
and 00000010b ; Mask in RxRDY
jr z,rec2 ; Jp if no data
in a,(080h)
ret
----****
****----
Note 1c2,1d2,1e2,1f2:
PORT.82,82,83,83 RS232 Status/Int
----------
Port summary:
82 R 1c2 RS232 Status for CTS,Timer/counter2,RI,CD
82 W 1d2 RS232 Interrupt mask register
83 R 1e2 RS232 ?Clock 0,1,2 read?
83 W 1f2 RS232 ?Receive ready interrupt enable?
For RS232 signal levels and null modem example see note 1j3 (port 87).
Note 1c2:
PORT.82 Status for CTS,Timer/counter2,RI,CD
-------
Input from port 82h will get the status of CTS,Timer/counter2, RingIndicator and Carrier detect.
bit Expl.
0 = CD - Carrier detect, 0=Active, 1=Not active
1 = RI - Ring indicator, 0=Active, 1=Not active (*)
6 = Timer/counter2 output from i8253
7 = CTS - Clear to send, 0=Active, 1=Not active
For output to port 82, see note 1d2.
Note 1d2:
PORT.82 Interrupt mask register
-------
Output to port 82h will set the interrupt mask (interrupt
enable/disable, bits: 0=Enable, 1=Disable).
bit Expl.
0 = RxReady Receive data ready
1 = TxReady Transmit data ready (*)
2 = Sync/Break found (*)
3 = Timer interrupt from i8253 channel 2 (*)
(*) = Not connected, see engineering document #STM-738-006
For input from port 82, see note 1c2.
Note 1e2:
PORT.83 ?Clock 0,1,2 read?
-------
Sorry, no info.
Note 1f2:
PORT.83 ?Receive ready interrupt enable?
-------
Sorry, no info.
----****
****----
Note 1g3,1h3,1i3,1j3:
PORT.84,85,86,87 PCI i8253 Baud rate clock generator
----------------
Port summary:
84 R/W 1g3 I8253 (Baud gener.) Counter 0 Receive clock
85 R/W 1h3 I8253 (Baud gener.) Counter 1 Transmit clock
86 R/W 1i3 I8253 (Baud gener.) Counter 2 Used by programs
87 W 1j3 I8253 (Baud gener.) Mode register
For RS232 signal levels and null modem example see note 1j3 (port 87).
For initialization example of ACIA (read) see note 1b1 (port 81).
For baudrate initialization example see note 1j3 (port 87).
For read byte example see note 1b1 (port 81).
Note 1g3:
PORT.84 Counter 0, Receive clock
-------
Output to port 84:
Counter 0; Receive clock
For initialization example see note 1j3 (port 87).
Note 1h3:
PORT.85 Counter 1, Transmit clock
-------
Output to port 85h:
Counter 1; Transmit clock
For initialization example see note 1j3 (port 87).
Note 1i3:
PORT.86 Counter 2, Custom clock
-------
Output to port 86h:
Counter 2; Clock used by different programs (time out counter)
For initialization example see note 1j3 (port 87).
Note 1j3:
PORT.87 Mode register
-------
Output to port 87h:
Mode register.
An example routine to initialise the 3 clocks for use of 19 200 BpS
(the frequency is 1.8432*10^6/6=307,200 Hz) is shown below:
def_baud EQU 6 ; 192000 bps = (1/16)*1.8432*10^6/6
; ^ ^ ^ ^
; | | | |
; Rate BaudFact X-Tal def_baud
timer0_ctrl EQU 00110110b
timer1_ctrl EQU 01110110b
timer2_ctrl EQU 10110000b
; INIT i8253 CLOCK:
ld hl,def_baud
ld a,timer0_ctrl ; Receive clock
out (087h),a
ld a,l
out (084h),a
ld a,h
out (084h),a
;
ld a,timer1_ctrl ; Transmit clock
out (087h),a
ld a,l
out (085h),a
ld a,h
out (085h),a
;
ld a,timer2_ctrl ; Utl clock
out (087h),a
ld a,l
out (086h),a
ld a,h
out (086h),a
ret
Notes on RS232C
Signal levels:
0:>=+3V, +15V max SPACE
1:<=-3V, -15V max MARK
Sending the byte 10100101 (bin), A5 (hex):
START D0 D1 D2 D3 D4 D5 D6 D7 STOP (1 or 2)
>+3V ___ ___ _______ ___
<-3V ... _______| ____| ____| ____| _____________ ....
"MARKING" | | | | | | | | | | | |
1 0 1 0 1 0 0 1 0 1 1 1
D7 might be parity if 7 bit data is set.
Null modem (pin assignments for IBM XT connector type):
With handshaking, modem emulation, pin configuration:
DTE DTE
2-------3
3-------2
8-------4 DCD-RTS
4-------8
20-----|5 (5 and 6 connected in same connector and wired to pin 20
|6 at the other computer)
5|-----20 CTS,DSR-DTR
6|
7-------7
Without handshaking, pin configuration:
DTE DTE
2-------3
3-------2
4| |4 (RTS-CTS, 4-5 connected in same connector)
5| |5
6 | | 6 (DSR-DCD-DTR, 6,8 and 20 connected in same connector)
8 | | 8
20| |20
7-------7
Timing diagram of RS232 signals.
Read the diagram from left top to right bottom.
The diagram illustrates a terminal using a modem to dial up another
modem connected to a computer. Time is increasing downwards in the
diagram. First, the computer is turned on which activates DTR.
Then the user dials the number which affects RI at the computer.
The computer sets RTS and the computer¢s modem sends out a carrier tone
and (after a short delay) sets the CTS signal.
When the terminal modem receives the carrier tone, it activates the CD
signal telling the terminal that the line is ok.
Connection is now established and the user is prompted to press the
"data button" (if terminal has such a button).
The data button sends DTR to the terminal modem which sets the DSR
that lights a indicator.
The computer starts sending (TxD) at the CTS signal.
The data tones is converted by the terminal modem to text which is presentated
on the screen.
When the computer is done, it turns off the RTS signal. The computer modem
responds by turning off CTS and turn off the carrier tone.
The terminal modem detect that the tone is off and turns off the CD signal.
Now the terminal starts a transmission by activating the RTS signal.
The terminal modem responds (after a short delay) by activating CTS which
turns on a indicator. The terminal now starts transmitting via TxD
(computer receives with RxD).
When done, the terminal turns off RTS. Terminal modem turns off CTS which
turns off a CTS indicator and also turns off the tones.
The computer modem detects that there is no carrier and turns off CD.
User now replaces the handset on the phone and the terminal modem then
turns off DSR, telling the terminal that it is not ready for any more data.
DTE DCE PSTN DCE DTE
(terminal) (Modem) (Modem) (Computer)
..................................................................................
( ) <----( DTR on )
(computer turned on)
User dials--(Dial digits)-------\
number \------------------->(RI on )----->(--| )
( | )
( V )
Push <----( CD on )<-------(tone on)----------<----(--+---)-<----( RTS on )
data ( | )
button ( V )
| (short )
V (delay )
DTR on ----->(--| ) ( | )
( | ) (CTS on)----->(---| )
* <------( DSR on ) ( | )
Light ( | )
on ( V )
( | )
( | )
Text <-------(<-RxD---)-<-----(Data tones)--<---------(<-----)<-----(--TxD )
on
screen
.................................................................................
-<-------(CD off)-<-------(Tone off)--<----------(----+---)<-----( RTS off)
| ( | )
| ( CTS off)----->( )
|
RTS on--->(---| )
( | )
( Short)
( delay)
( | )
* <-----(CTS on)
Light
on
|
|------>( TxD )--------->(Data tones)---------->( RxD )----->-( )
.................................................................................
RTS off->(----+---)-------->(Tone off)------------>( CD off)----->-( )
( | )
Light<---(CTS off )
off
User replaces
handset
|
Light<---( DSR off )
off
..................................................................................
----****
****----
Note 1k2,1m2:
PORT.88,8C,8D Modem control
-------------
Port summary:
88 ? 1k2 ? ?Modem enable?
8C-8D ? 1m2 Reserved for modem
For RS232 signal levels and null modem example see note 1j3 (port 87).
For initialization example of ACIA (read) see note 1b1 (port 81).
For baudrate initialization example see note 1j3 (port 87).
For read byte example see note 1b1 (port 81).
Note 1k2:
PORT.88 ?Modem enable?
-------
Sorry, no info
Note 1m2:
PORT.8C,8D Reserved for modem
----------
Sorry, no info
----****
****----
Note 2a1:
PORT.89,8A,8B MSX-1 MVDP 9938 adaptor
-------------
Port summary:
89-8B ? 2a1 Reserved for MSX-1 MVDP 9938 adaptor
Note 2a1:
PORT.89,8A,8B Reserved for MSX-1 MVDP 9938 adaptor
-------------
Reserved for MSX-1 MVDP 9938 adaptor.
Sorry, no info
----****
****----
Note 3a1,3b1,3c1:
PORT.90,90,91 ULA5RA087 Centronic
-------------
Port summary:
90 R 3a1 ULA5RA087 Centronic BUSY state (bit 1=1)
90 W 3b1 ULA5RA087 Centronic STROBE output (bit 0=0)
91 W 3c1 ULA5RA087 Centronic Printer Data (characters out ASCII)
For character print example, see note 3c1 (port 91).
For notes on Centronic standard, see note 3c1 (port 91).
Note 3a1:
PORT.90 ULA5RA087 Centronic BUSY state (bit 1=1)
-------
Input from this port reads the BUSY signal state from the centronics port.
Bit 1=1 if printer is BUSY.
For character print example, see note 3c1 (port 91).
For notes on Centronic standard, see note 3c1 (port 91).
Note 3b1:
PORT.90 ULA5RA087 Centronic STROBE output (bit 0=0)
-------
Output to this port controls the _STROBE signal at the centronics port.
Bit 0=0 to activate centronic _STROBE.
For character print example, see note 3c1 (port 91).
For notes on Centronic standard, see note 3c1 (port 91).
Note 3c1:
PORT.91 ULA5RA087 Centronic Printer Data (characters out ASCII)
-------
Output to this port controls the printer data lines, D0-D7.
A character written to this port is latched on the centronic data lines.
Examples:
This routine will do the same as the BASIC command
LPRINT CHR$(A);
where A is the character ASCII code. There is no check for CTRL-STOP in this routine.
print: push af
prtb: in a,(090h) ; Check if BUSY (0=not BUSY)
rrca
rrca ; Rotate bit 1 to carry
jr c,prtb ; Loop if BUSY
pop af ; Get back ASCII value
push af
out (091h),a ; Put ASCII in [a] to centronic data bus
xor a
out (090h),a ; Send strobe (--_--)
dec a
out (090h),a ; [a]=0ffh
pop af
ret
Notes on Centronic standard:
Level : TTL
Handshaking : BUSY/ACK
Connector (printer) : 57-30360 (AMPHENOL) 36-pin
Cable : Shielded 1.95 meters or less
Timing:
____________
DATA1-8: ______|XXXXXXXXXXXX|_______________________ Data on D1-D8
_________ _____________________________ Strobe set
_STB |___|
_____________________
BUSY _________| |___________ BUSY set
_______________________________ ______ _ACK set
_ACK |____|
Strobe is set 0.5uS (min) after data is present on D1-D8
Strobe length is 1uS (min)
Delay before data is removed from D1-D8 after strobe has
gone high (inactive) is 0.5uS (min)
Acknowledge (_ACK) pulse is set for 5uS (max).
BUSY pulse width is 1ms or less when buffer is not full in printer or
1s or less if buffer is full.
----****
****----
Note 4a1,4b1,4c2,4d2:
PORT.98,98,99,99 VDP (Video Display Processor)
----------------
Port summary:
98 R 4a1 9918,9929,9938,9958,9978 VRAM data READ
98 W 4b1 9918,9929,9938,9958,9978 VRAM data WRITE
99 R 4c2 9938,9958,9978,9929 VDP status (Interrupt,Spr Conc,5th)
99 W 4d2 9938,9958,9978,9929 VDP address setup/Register write
For VPEEK example, see note 4a1 (port 98).
For block VRAM->RAM copy, see note 4a1 (port 98).
For VPOKE example, see note 4b1 (port 98).
For VRAM fill example, see note 4b1 (port 98).
For block RAM->VRAM copy, see note 4b1 (port 98).
For VRAM addresses in different screens, see note 4b1 (port 98).
For VRAM address explanation, see note 4b1 (port 98) subnotes A-I.
For VDP(B)=A example, see note 4d2 (port 99).
For VDP register explanation, see note 4d2 (port 99).
For screen selection, see note 4d2 (port 99).
For palette redefination example, see note 5a1 (port 9A).
Note 4a1:
PORT.98 VRAM data READ
-------
Input from port 98h: Read byte from VRAM.
Example:
This routine will do the same as the BASIC command
A=VPEEK HL
where HL is the VRAM address and A is the byte read from VRAM
vpeek: di
call setup_read_address ; Setup VRAM read start address
in a,(098h) ; Get byte from VRAM to [a]
ret
Setup_read_address:
ld a,l
out (099h),a ; Send Low Byte to VDP
ld a,h ; Note: no special bit is set to indicate READ
out (099h),a ; Send High Byte to VDP
ret
Note that once set, the VRAM READ address will be incremented after each byte
read from the VRAM DATA READ port.
This routine will read the block in the VRAM addresses 100h-300h and copy it
to the RAM address 9000h
get_vram:
di
ld hl,0100h ; Source address in VRAM
ld bc,0200h ; Byte counter
ld de,09000h ; Destination address in RAM
call read_vram
ret
read_vram:
call Setup_read_address ; See routine above
read_loop:
in a,(098h) ; Read byte from VRAM address
ld (de),a ; Save it to RAM
inc de ; Increment RAM counter
; (VRAM counter will be incremented by ; itself)
dec bc ; Decrement number of bytes to read
ld a,b
or c
jr nz,read_loop ; Loop if not ready
ret
Note 4b1:
PORT.98 VRAM data WRITE
-------
Output to port 98h: Write byte to VRAM
Example:
This routine will do the same as the BASIC command
VPOKE HL,A
where HL is the VRAM address and A is the byte to write
vpoke: di
call setup_write_address ; Setup VRAM write start address
out (098h),a ; Write byte in [a] to VRAM
ret
Setup_write_address:
push af ; Save byte in [a]
ld a,l
out (099h),a ; Send LOW byteto VDP
ld a,h
or 01000000b ; Set bit 6 in High byte to
; indicate WRITE
out (099h),a ; Send MSB to VDP
pop af
ret
Note that once set, the VRAM WRITE address will be incremented after each byte send
to the VRAM DATA WRIITE port.
This routine will fill the VRAM 100h-300h with the byte 0fh
fill: di
ld hl,0100h ; Destination
ld bc,0200h ; Number of bytes to fill
ld a,0fh ; Fill byte
call setup_write_address ; See routine above
push af ; Save the byte
fill_loop:
pop af ; Get back the byte to fill
out (098h),a ; Send it to VRAM
push af ; Save fill byte
dec bc ; Decrement counter
ld a,b
or c
jr nz,fill_loop ; Go loop if counter <>0
pop af ; Get back fill byte
ret
Copy a RAM block to an address in VRAM is
demonstrated by this routine, which copies the RAM addresses 9000h-9200h
to the VRAM address 100h
ldir_vram:
di
ld hl,09000h ; Source address in RAM
ld bc,0200h ; Byte counter
ld de,0100h ; Destination address in VRAM
call read_ram
ret
read_ram:
ex de,hl ; Swap [de] with [hl]
call Setup_write_address ; See routine above
ex de,hl ; Swap [de] with [hl]
write_loop:
ld a,(hl) ; Get byte in RAM
out (098h),a ; Send it to VRAM
inc hl ; Increment RAM counter
; (VRAM counter will be incremented by itself)
dec bc ; Decrement number of bytes to read
ld a,b
or c
jr nz,read_loop ; Loop if not ready
ret
The addresses of the VRAM has special functions. Theese can be changed
via the VDP registers 2-6.
VRAM addresses:
The addresses for each of the 8 (MSX2) screen modes is shown below.
"*" = Screen only available on MSX2 or higher.
SCREEN 0 (Text mode, 40 column):
Name table (char positions) 0000-03BF (See note A)
Character patterns (font) 0800-0FFF (See note B)
SCREEN 1 (coloured text mode, 32 column):
Character patterns (font) 0000-07FF (See note B)
Name table (char positions) 1800-1AFF (See note A)
Sprite attribute table 1B00-1B7F (See note C)
Characters colour table (8/byte)2000-201F (See note F)
Sprite character patterns 3800-3FFF (See note D)
SCREEN 2 (256*192 Graphics mode):
Charcter patterns 0000-17FF (See note B)
Name table (char positions) 1800-1AFF
Sprite attribute table 1B00-1B7F (See note C)
PixelByte colour table 2000-37FF (See note E)
Sprite character patterns 3800-3FFF (See note D)
SCREEN 3 (4x4 pixel blocks/Multicolour mode):
Charcter colour patterns 0000-05FF
Name table (char positions) 0800-0AFF
Sprite attribute table 1B00-1B7F (See note C)
Sprite character patterns 3800-3FFF (See note D)
*SCREEN 4 (256*192 Graphics mode with multicolour sprites):
Charcter patterns 0000-17FF (See note B)
Name table (char positions) 1800-1AFF
Sprite colours 1C00-1DFF
Sprite attribute table 1E00-1E7F
Palette 1E80-1E9F
PixelByte colour table 2000-37FF
Sprite character patterns 3800-3FFF
*SCREEN 5 (256*212 Graphic mode, 16 colours):
Matrix 0000-69FF
Sprite colours 7400-75FF
Sprite attribute table 7600-767F
Palette 7680-769F
Sprite character patterns 7800-7FFF
*SCREEN 6 (512*212 Graphic mode, 4 colours):
Matrix 0000-69FF
Sprite colours 7400-75FF
Sprite attribute table 7600-767F
Palette 7680-769F
Sprite character patterns 7800-7FFF
*SCREEN 7 (512*212 Graphic mode, 16 colours):
Matrix 0000-D3FF
Sprite character patterns F000-F7FF
Sprite colours F800-F9FF
Sprite attribute table FA00-FA7F
Palette FA80-FA9F
*SCREEN 8 (256*212 Graphic mode, 256 colours):
RGB Matrix 0000-D3FF (See note H)
Sprite character patterns F000-F7FF
Sprite colours F800-F9FF (See note I)
Sprite attribute table FA00-FA7F
Palette FA80-FA9F
*SCREEN 0 (Text mode, 80 column):
Name table (char positions) 0000-077F (086F) (See note A)
Character attribute (Blink) 0800-08EF (090D) (See note G)
Character patterns (font) 1000-17FF (See note B)
(Addresses in pharentheses is used in 26.5 lines mode. Observe that they are overlapping).
Tables explanation:
Name table (Note A):
Byte: Expl.:
0 Pattern number to be displayed in upper hand left corner of screen
1 Pattern number to be displayed in upper hand left corner of screen+1
2 Pattern number to be displayed in upper hand left corner of screen+2
3 Pattern number to be displayed in upper hand left corner of screen+3
...
Font (Note B):
Byte (+offset): Expl.:
0-7 Pattern number 0 (First character)
0: 00000000
1: 00001000
2: 00010100
3: 00100010 = "A"
4: 00111110
5: 00100010
6: 00100010
7: 00000000
8-F Pattern number 1 (2nd character)
10-17 Pattern number 2 (3rd character)
1F-20 Pattern number 3 (4th character)
...
Sprite attribute (Note C):
Byte (+offset): Expl.:
0-3 Sprite 0 attribute
0: Vertical position
1: Horizontal position
2: Pattern number
3: Bit: Expl.:
0-3 Colour code
4-6 0
7 EC (Early Clock, 1=> Shift sprite 32 pixels
to the left)
4-7 Sprite 1 attribute
8-B Sprite 2 attribute
...
Sprite character patterns (Note D):
Used like the 8*8 pixel Font in screen 0 when using 8*8 pixel sprites.
When using 16*16 pixel sprites, four blocks of 8*8 pixels is organised like:
Byte (+offset): Expl.:
0-7 8 Bytes, Block A
8-F 8 Bytes, Block B
10-17 8 Bytes, Block C
18-1F 8 Bytes, Block D
And the sprite will be assembled on screen like this:
+---------+---------+
| | |
| Block A | Block C |
| | |
+---------+---------+
| | |
| Block B | Block D |
| | |
+---------+---------+
PixelByte colour (Note E):
Byte (+offset): Expl.
0 Colour code for 8 bits in scrn pos X=0-7, Y=0
Bit: Expl.:
0-3 Colour for bit reset ("0") in pattern table
4-7 Colour for bit set ("1") in pattern table
1 Colour code for 8 bits in scrn pos X=0-7, Y=1
2 Colour code for 8 bits in scrn pos X=0-7, Y=2
...
8 Colour code for 8 bits in scrn pos X=8-15, Y=0
9 Colour code for 8 bits in scrn pos X=8-15, Y=1
A Colour code for 8 bits in scrn pos X=8-15, Y=2
...
Characters colour table (Note F):
Byte (+offset): Expl.
0 Colour code for patterns 0-7 in pattern table
Bit: Expl.:
0-3 Colour for bit reset ("0") in pattern table
4-7 Colour for bit set ("1") in pattern table
1 Colour code for patterns 8-F in pattern table
2 Colour code for patterns 10-17 in pattern table
Characters attribute (Note G):
Byte (+offset): Expl.
0 Attribute bits for character patterns 0-7
Bit: Expl.:
7 Char 0, "1" = Blink mode on, "0" = Blink mode off
6 Char 1, "1" = Blink mode on, "0" = Blink mode off
5 Char 2, "1" = Blink mode on, "0" = Blink mode off
4 Char 3, "1" = Blink mode on, "0" = Blink mode off
...
1 Attribute bits for character patterns 8-F
2 Attribute bits for character patterns 10-17
...
RGB Matrix (Note H):
Byte (+offset): Expl.
0 Red, Green and blue combination for first pixel
Bit: Expl.:
0-1 Blue, 0-3
2-4 Red, 0-7
5-7 Green, 0-7
1 Red, Green and blue combination for 2nd pixel
2 Red, Green and blue combination for 3rd pixel
...
(4(Blue)*8(Red)*8(Green)=256 colours totally)
Sprite colours (Note I):
Byte (+offset): Expl.:
0-7 Colour map for sprite 0
Upper left part
(Horizontal lines)
0: Colour for line 0:
Bit: Expl.:
0 Blue on/off (1=on, 0=off)
1 Red on/off (1=on, 0=off)
2 Green on/off (1=on, 0=off)
3 Intensity (1=Light, 0=dark)
4-7 Not used
1-7: Colour for line 1-7
8-F Colour map for sprite 0
Upper right part (if using 16*16pixel sprites).
10-17 Colour map for sprite 1
Upper left part
...
The base registers are the registers 2-6. For further information (about
how the registers are handled to form a 16-bit address), see the MSX RED BOOK by Kuma.
Note 4c2:
PORT.99 VDP status (Interrupt,Spr Conc,5th)
-------
Input from port 99h:
Read the VDP status register (selected via register 0Fh on MSX2).
Status register 0 (default):
bit Name Expl.
0-3 5/9th Number for the 5'th sprite (9'th in screen 4-8) on a line
5 C 1 if overlapping sprites
6 5D 1 if more than 4 sprites on a horizontal line (9 in screen 4-8)
7 F Copy of the CPU interrupt (1=interrupt)
Note 4d2:
PORT.99 address setup/Register write
-------
Output to port 99h:
Setup VRAM address for write or read,
send data to register and select register
Examples:
This routine will do the same as the BASIC command
VDP(B)=A
where A is the byte to be send to the VDP register B
write_register:
out (099h),a ; Send data (note: the data is send FIRST)
ld a,b ; Get the VDP register in [a]
or 10000000b ; Set bit 7 to indicate register WRITE
out (099h),a ; Select register
ret
The VDP register can be (on MSX 1) in the range of 0-7.
On the MSX2 VDP (the one in the SV738 X'Press) it can be in the range of 0-47.
In some of the registers, a bit will be reffered to as M1-M5.
Theese bits are used to set up the VDP screen mode (BASIC screen 0-8).
The relationship between the bits and the screen is:
M1 M2 M3 M4 M5 Screen format
1 0 0 0 0 Text (BASIC SCREEN 0)
0 0 0 0 0 Half text (BASIC SCREEN 1)
0 0 1 0 0 Hi resolution (BASIC SCREEN 2)
0 1 0 0 0 Multicolour (BASIC SCREEN 3)
0 0 0 1 0 Scrn2 with 8 Sprites/Line (BASIC SCREEN 4)
0 0 1 1 0 256*212, 16 colours/pixel (BASIC SCREEN 5)
0 0 0 0 1 512*212, 4 colours/pixel (BASIC SCREEN 6)
0 0 1 0 1 512*212, 16 colours/pixel (BASIC SCREEN 7)
0 0 1 1 1 256*212, 256 colours/pixel (BASIC SCREEN 8)
1 0 0 1 0 80 column text screen (BASIC SCREEN0, WIDTH 80)
Register 0:
Mode register 0
bit Name Expl.
0 D External video input (0=input disable, 1=enable)
1 M3 Mode M3
2 M4 Mode M4 (Not on MSX 1)
3 M5 Mode M5 (Not on MSX 1)
4 IE1 Horizontal Retrace Interrupt Enable
5 IE0 Vertical Retrace Interrupt Enable
6 DG DiGitize mode
7 0 Always 0
Register 1:
Mode register 1
bit Name Expl.
0 MAG Sprite zoom (0=x1, 1=x2)
1 SZ Sprite size (0=8x8, 1=16x16)
2 0 Always 0 on MSX 1
3 M2 Mode M2
4 M1 Mode M1
5 IE2 Interrupt control (50Hz (PAL),
60 Hz (NTSC) and Light pen/mouse on
MVDP colour bus) (0=Disable, 1=Enable)
6 BLK Screen output control (0=Disable, 1=Enable)
7 416 VRAM size control (0=4K, 1=16K)
Register 2:
Name table base address
Bit 7 6 5 4 3 2 1 0
Name 0 A16 A15 A14 A13 A12 A11 A10
Register 3:
colour table base address Low
Bit 7 6 5 4 3 2 1 0
Name A13 A12 A11 A10 A09 A08 A07 A06
Register 4:
Pattern generator base address
Bit 7 6 5 4 3 2 1 0
Name 0 0 A16 A15 A14 A13 A12 A11
Register 5:
Sprite attribute table base address Low
Bit 7 6 5 4 3 2 1 0
Name A14 A13 A12 A11 A10 A09 A08 A07
Register 6:
Sprite pattern generator base address
Bit 7 6 5 4 3 2 1 0
Name 0 0 A16 A15 A14 A13 A12 A11
Register 7:
colour register.
bit Name Expl.
0-3 TC0-3 Background colour in SCREEN 0 (also border colour in SCREEN 1-3)
4-7 BD0-3 Foreground colour in SCREEN 0
The bits 0-3 and 4-7 can hold a number in the range of 0-15.
The corresponding colours are:
0 = Transparent 8 = Medium red
1 = Black 9 = Light red
2 = Medium green 10= Dark yellow
3 = Light green 11= Light yellow
4 = Dark blue 12= Dark green
5 = Light blue 13= Magenta
6 = Dark red 14= Gray
7 = Cyan 15= White
*** MSX1 VDP REGISTERS ENDS HERE! ***
Register 8:
Mode register 2
bit Name Expl.
0 BW 32 Greylevel MVDPmode out trough CompositeVideo output.
(Normally composite video and RGB are not generated from this
output but from another on the MVDP).
1 SP ? Sprite (0=On, 1=Off)
2 VR0 VRAM size and speed
3 VR1 VRAM size and speed
4 CB colour Bus direction (0=Output, 1=Input)
5 TP ?Transparent from palette
6 LCS Lightpen Select (active 1) connected trough colourbus
7 MSE Mouse select (active 1) connected trough colourbus
Register 9:
Mode register 3
bit Name Expl.
0 DC DLCLK Dot Clock Direction (0=Dot clock Input, 1=Output)
1 NT NTSC (0=60Hz, 1=50Hz)
2 E0 Even Odd (0=Normal, 1=Two screen)
3 IL Interlace (1=On, 0=Off)
4 S0 Simultaneus mode
5 S1 Simultaneus mode
6 0 Always 0
7 LN Vertical higth (pixels) (0=192, 1=212)
Simultaneus mode: S0 S1 Expl.
0 0 Normal (Intern)
0 1 Mix
1 x External(Digitize)
Register 0Ah:
colour table base address High
Bit 7 6 5 4 3 2 1 0
Name 0 0 0 0 0 A16 A15 A14
Register 0Bh:
Sprite attribute base address High
Bit 7 6 5 4 3 2 1 0
Name 0 0 0 0 0 0 A16 A15
Register 0Ch
Inverse text colour
bit Name Expl.
0-3 BC0-3 Inverse/blink text background colour
4-7 T20-3 Inverse/Blink text forground colour
The bits 0-3 and 4-7 can hold a number in the range of 0-15.
The corresponding colours are the same as for register 7.
Register 0Dh:
Blinking period
bit Name Expl.
0-3 OF0-3 Off blink time (1/5 sec)
4-7 ON0-3 On blink time (1/5 sec)
Register 0Eh:
VRAM access (VRAM address select, higher address lines)
Bit Name Expl.
0 A14 1 if 4000h and forward
1 A15 1 if 8000h and forward
2 A16 1 if 10 000h and forward
7-3 0 Always 0
A16 A15 A14 Expl.
0 0 0 0 - 3FFFh (VRAM memory)
0 0 1 4000h - 7FFFh
0 1 0 8000h - BFFFh
0 1 1 C000h - FFFFh
1 0 0 10000h -13FFFh
1 0 1 14000h -17FFFh
1 1 0 18000h -1BFFFh
1 1 1 1C000h -1FFFFh
To setup a VRAM address (see note about the BASIC command VPOKE) the first byte
send to the VDP is the low byte. Then the second byte, containing the high byte,
is send with bit 6 set to 1.
So to setup VRAM address 19F18h for write, the first operation to be done is
to setup the higher address lines:
ld a,00000110b ; 18000h -
out (099h),a ; Send data
ld a,0Eh ; Select VDP register 0Eh
or 10000000b ; Bit 7=1 indicates REGISTER
out (099h),a
Then the low address (0-3FFFh) has to be send to the VDP.
Here we send the word 1F18h:
ld a,18h ; Low byte
out (099h),a
ld a,1Fh ; High byte
or 01000000b ; Bit 6=1 indicates ADDRESS
out (099h),a
The byte can then be written to port 098h:
ld a,0Fh ; Byte to write
out (098h),a
The instructions above does the same thing as the BASIC command
VPOKE &h19F18,&h0F
Register 0Fh:
Status register
bit Name Expl.
0-3 S0-3 Status register number (0-9)
4-7 0 Always 0
b6 Shake
Register 010h:
Palette #
bit Name Expl.
0-3 C0-3 colour palette register number (0-15 for colour 0-15)
to receive data from port 09Ah
4-7 0 Always 0
Register 011h:
Register pointer
bit Name Expl.
0-5 R0-5 VDP register number
6 0 Always 0
7 AII Auto increment RP (Register Pointer) (0=on, 1=off)
Register 012h:
Display adjust
bit Name Expl.
0-3 H0-3 Horizontal adjust (0-0Fh, +-8 pixels)
4-7 V0-3 Vertical adjust (0-0Fh, +-8 pixels)
Register 013h:
Interrupt line
bit Name Expl.
0-7 IL0-7 Interrupt line
Register 014h:
colour burst register 1
bit Name
0-7 0
Register 015h:
colour burst register 2
Bit 7 6 5 4 3 2 1 0
Name 0 0 1 1 1 1 0 1
Register 016h:
colour burst register 3
Bit 7 6 5 4 3 2 1 0
Name 0 0 0 1 0 1 0 1
Register 017h:
Display offset
bit Name Expl.
0-7 DO0-7 Display offset Y (0-255).
- - - -
Register 020h: Register 021h:
Source X Low byte Source X High byte
Register 022h: Register 023h:
Source Y Low byte Source Y High byte
Register 024h: Register 025h:
Destination X Low byte Destination X High byte
Register 026h: Register 027h:
Destination Y Low byte Destination Y High byte
Register 028h: Register 029h:
Number of X dots low byte Number of X dots high byte
Register 02Ah: Register 02Bh:
Number of Y dots low byte Number of Y dots high byte
Register 02Ch:
colour register
bit Name Expl.
0-3 CL0-3 ? Graphic command colour register (LINE, POINT...)
4-7 CH0-3 ? Graphic command colour register (LINE, POINT...)
Register 2D:
Argument register
bit Name Expl.
0 MAJ Longest side, used by line 0=X, 1=Y
1 EQ ?Search?
2 DIX X step direction (0=right, 1=left)
3 DIY Y step direction (0=down, 1=up)
4 MXS Source external memory (0=128K VRAM, 1=64K VRAM)
5 MXD Destination external memory (0=128K VRAM, 1=64K extra)
6 MXC CPU Access external memory? (0=128K VRAM, 1=64K VRAM)
7 0 Always 0
Register 2E:
Command register
bit Name Expl.
0-2 AR0-2 Logical argument, see below.
3 TRN Transparet no effect
4-7 C0-3 Command, see below.
Commands (C0-3):
Value: Expl.:
0 Stop
4 Point, VRAM -> VDP
5 Pset, VDP -> VRAM
6 Search, VRAM -> VRAM
7 Line, VDP -> VRAM
8 Logical move, VDP -> VRAM
9 Logical move, VRAM -> VRAM
A Logical move, VRAM -> CPU
B Logical move, CPU -> VRAM
C High speed move (bits 0-3 has no effect), VDP -> VRAM
D High speed move (bits 0-3 has no effect), VRAM -> VRAM
E High speed move (bits 0-3 has no effect), VRAM -> CPU
F High speed move (bits 0-3 has no effect), CPU -> VRAM
Arguments (AR0-AR2):
Value: Name: Expl.:
0 PSET Set bits, set old bits to 0
1 AND Mask bits
2 OR Set bits, include old
3 XOR Swap new bits
4 NOT Set new bits to 0
----****
****----
Note 5a1,5b1:
PORT.9A,9B MVDP colour palette/Register data
----------
Port summary:
9A W 5a1 MVDP colour palette registers data write (2 bytes)
9B ? 5b1 MVDP Register data
For VPEEK example, see note 4a1 (port 98).
For block VRAM->RAM copy, see note 4a1 (port 98).
For VPOKE example, see note 4b1 (port 98).
For VRAM fill example, see note 4b1 (port 98).
For block RAM->VRAM copy, see note 4b1 (port 98).
For VRAM addresses in different screens, see note 4b1 (port 98).
For VRAM address explanation, see note 4b1 (port 98) subnotes A-I.
For VDP(B)=A example, see note 4d2 (port 99).
For VDP register explanation, see note 4d2 (port 99).
For screen selection, see note 4d2 (port 99).
For palette redefination example, see note 5a1 (port 9A).
Note 5a1:
PORT.9A MVDP colour palette registers data write (2 bytes)
-------
Output to port 9Ah:
This is the colour palette data port. The data is send consists of two bytes:
Byte 1: Byte 2:
Bit: Expl.: Bit: Expl.:
0-2 = Blue data (0-7) 0-2 = Green data (0-7)
3 = Always 0 (no effect) 3-7 = Always 0 (no effect)
4-6 = Red data (0-7)
7 = Always 0 (no effect)
Examples:
This routine will define the colour white (15 in BASIC) to the new values
RED=7, GREEN=4 and BLUE=1 (light red).
First the colour number to change must be defined by sending colour number
(0-15) to VDP register 10h.
Then the Red, Green and Blue colours are sent trough port 09Ah.
This mix of R, G and B will give colour # 15 a colour of lighgt red.
RED EQU 7 ; 0-7
GREEN EQU 4 ; 0-7
BLUE EQU 1 ; 0-7
di
ld a,0fh ; colour to change=colour 15(orginally white)
out (099h),a ; Send data
ld a,090h ; =Register 10h with bit 7 set
nop
nop
out (099h),a ; Select register
;
ld a,RED*16+BLUE ; Setup red and blue in reg. [a]
out (09ah),a ; Send red & blue
ld a,GREEN ; Setup green
out (09ah),a ; Send it.
ret
To set a colour to pure red, the other bits for green and blue should be set to 0.
Note 5b1:
PORT.9B MVDP Register data
-------
No information.
----****
****----
Note 6a1,6b1,6c1:
PORT.A0,A1,A2 I AY-3-8910 PSG (Programmable Sound Generator)
----------
Port summary:
A0 W 6a1 I AY-3-8910 PSG Register select
A1 W 6b1 I AY-3-8910 PSG Data write
A2 R 6c1 I AY-3-8910 PSG Data read
The AY-3-8910 is a I/O chip whith 3 sound generators.
It controls the three MSX std. audio channels, joystick and cassette.
Function/register table:
Frequency, audio channel A-C: 0...5
Noise freq.: 6
Mixer: 7
Volume: 8 ...10
Envelope: 11...13
Joystick and cassette: 14
Paddle,joystick sel,touchpad: 15
For register summary, see note 6a1 (port A0).
For SOUND A,B (register write) example, see note 6b1 (port A1).
For register read example, see note 6c1 (port A2).
For joystick read example, see note 6c1 (port A2).
Note 6a1:
PORT.A0 I AY-3-8910 PSG Register select
-------
Port A0h WRITE = PSG register select.
This port selects the current PSG register (0-15).
Registers are:
0 = Fine freq. channel A (0-255)
1 = Freq. channel A (0-15)
2 = Fine freq. channel B (0-255)
3 = Freq. channel B (0-15)
4 = Fine freq. channel C (0-255)
5 = Freq. channel C (0-15)
Output frequency (tone):
f = 3.579M/2
T -------------------
16*(256*fine+coarse)
Where "coarse" are one of the coarse frequency setting registers, 1,3 or 5
and "fine" are one of the fine frequency setting registers, 1,2 or 4.
6 = Noise period (0-31)
Output frequency (noise):
f = 3.579M/2
N --------------
16*NoisePeriod
Where "NoisePeriod" are register 6.
7 = Mixer
bit Expl.
0 = Channel A tone enable (0=Enable,1=Disable)
1 = Channel B tone enable (0=Enable,1=Disable)
2 = Channel C tone enable (0=Enable,1=Disable)
3 = Channel A noise enable (0=Enable,1=Disable)
4 = Channel B noise enable (0=Enable,1=Disable)
5 = Channel C noise enable (0=Enable,1=Disable)
6 = I/O port A mode (0=input, 1=Output)
7 = I/O port B mode (0=input, 1=Output)
8 = Volume channel A (0-15, 16=Envelope)
9 = Volume channel B (0-15, 16=Envelope)
10= Volume channel C (0-15, 16=Envelope)
11= Envelope fine freq. (0-255)
12= Envelope freq. (0-255)
Envelope frequency (tone or noise):
f = 3.579M/2
E ----------------------
256*(256*ECoarse+EFine)
Where "ECoarse" are the coarse envelope frequency setting register 12
and "EFine" are the fine envelope frequency setting register 11.
Note that the envelope period is
1
-----
f
E
13= Envelope shape (0-15)
C A A H
O T L L
N T T D
T
0 0 X X \________ 0
0 1 X X /________ 4
1 0 0 0 \\\\\\\\\ 8 (Repeating, see figure)
1 0 0 1 \________ 9
1 0 1 0 \/\/\/\/\ 10 (Repeating, see figure)
1 0 1 1 \ 11 (See figure)
1 1 0 0 ///////// 12 (Repeating)
1 1 0 1 / 13
1 1 1 0 /\/\/\/\/\ 14 (Repeating)
1 1 1 1 / 15
14= I/O port A (Joystick and cassette)
bit Expl.
0 = Joystick UP (0=Moved, 1=Not moved)
1 = Joystick DOWN (0=Moved, 1=Not moved)
2 = Joystick LEFT (0=Moved, 1=Not moved)
3 = Joystick RIGHT (0=Moved, 1=Not moved)
4 = Joystick trigger A
5 = Joystick trigger B
6 = Keyboard mode (On japanese machines only)
7 = Cassette input
15= I/O port B (Joystick select)
bit Expl.
0 = 1 (Used as handshaking output if touchpad)
1 = 1 (Used as handshaking output if touchpad)
2 = 1 (Used as handshaking output if touchpad)
3 = 1 (Used as handshaking output if touchpad)
4 = Pulse 1 (Positive pulse starting a monostable timer)
5 = Pulse 2 (Positive pulse starting a monostable timer)
6 = Joystick select (0=Connector 1, 1=Connector 2)
7 = Kana LED (Keyboard mode indicator. On japanese machines only)
Bits 4 and 5 is used by a program wich uses a paddle.
A short positive edge pulse on bit 4 (or 5) starts a monostable timer
(in the attatched paddle) and the paddle sets one of the joystick bits in
register 14 low (FIRE A (FIRE B),L,R,D or U).
When the monostable times out, the joystick bit in port 14 is set high again.
The length of the counting period of the monostable timer is set
(in the attatched paddle) by a variable resistor.
The computer determine the position of the variable resistor by measuring
the time while the joystick bit in register 14 is low.
PULSE _________|-|______________________
FIRE A/B
or ---------|______________|---------
L R D U
| - - - - - - -| = Variable resistor
Note 6b1:
PORT.A1 I AY-3-8910 PSG Data write
-------
Port A1h WRITE = PSG data write.
Used to send data to current PSG register.
Examples:
This routine will do the same as the BASIC command
SOUND A,B
where A is the PSG register and B is the byte to write
sound: out (0A0h),a ; Select register
ld a,b
out (0A1h),a ; Send data
ret
Note 6c1:
PORT.A2 I AY-3-8910 PSG Data read
-------
Port A2h READ = PSG data read.
Used to read data from current PSG register.
Examples:
How to read a byte from a register is shown in this routine
(Input: [a]=PSG register, Output: [a]=Data read)
read_psg:
out (0A0h),a ; Select register
in a,(0A2h) ; Read data
ret
This rotine will read joystick 1 or 2:
F3 di
3E 0F ld a,0fh Write this for Write this for
D3 A0 out (0a0h),a Joystick port 1: Joystick port 2:
DB A2 in a,(0a2h)
E6 DF / E6 AF and 11011111b; 0DFh and 10101111b; 0AFh
F6 4C / F6 03 or 01001100b; 04Ch or 00000011b; 003h
D3 A1 out (0a1h),a
3E 0E ld a,0eh
D3 A0 out (0a0h),a
DB A2 in a,(0a2h)
Now register [a] will have the following configuration for joystick
in port 1 (or port 2):
Bit #: 76 5 4 3210
|| | | ||||
Name: 10 TRG2 TRG1 RLDU
Where TRG2 is the second trigger button (not used on most Commodore
joysticks).
----****
****----
Note 7a1,7b1:
PORT.A8,A8 I 8255A/ULA9RA041 PPI (Programmable Peripheral Interface)
----------
Port summary:
A8 R 7a1 I 8255A/ULA9RA041 Port A Memory slot reister Read
A8 W 7b1 I 8255A/ULA9RA041 Port A Memory slot reister Write
For memory map, see note 7b1 (port A8).
Note 7a1:
PORT.A8 I 8255A/ULA9RA041 Port A Memory slot reister Read
-------
Port 0A8h READ = PPI port A (Primary slot register read)
Reads the current PSLOT (Primary Slot) configuration. Returned byte is:
bit Expl.
0-1 = Primary slot number (0-3) for memory page 0 (Addr. 0000-3FFF)
2-3 = Primary slot number (0-3) for memory page 1 (Addr. 4000-7FFF)
4-5 = Primary slot number (0-3) for memory page 2 (Addr. 8000-BFFF)
6-7 = Primary slot number (0-3) for memory page 3 (Addr. C000-FFFF)
Note 7b1:
PORT.A8 I 8255A/ULA9RA041 Port A Memory slot reister Write
-------
Port 0A8h WRITE = PPI port A (Primary slot register setup)
Selects the current PSLOT (Primary Slot) configuration. Byte to write is:
bit Expl.
0-1 = Primary slot number (0-3) for memory page 0 (Addr. 0000-3FFF)
2-3 = Primary slot number (0-3) for memory page 1 (Addr. 4000-7FFF)
4-5 = Primary slot number (0-3) for memory page 2 (Addr. 8000-BFFF)
6-7 = Primary slot number (0-3) for memory page 3 (Addr. C000-FFFF)
The standard RAM/ROM areas on a MSX machine is described by the map below:
(Note: the characters "a-i" is special memory blocks, see notes).
STANDARD |STANDARD |CARTRIDGE|SYSTEM
ROM |RAM |MEMORY |MEMORY
-----------------|---------|---------|---------
PSLOT#: : 0 : : 1 : : 2 : : 3 |
--------|SSLOT#:| |SSLOT#:| |SSLOT#:| |SSLOT#:|
|0|1|2|3| |0|1|2|3| |0|1|2|3| |0|1|2|3| Addresses:
PAGE: --- - - - -=- - - - -=- - - - -=- - - - -
| | | | |=| | | | |=| | | | |=| | | | | 0
0 |a| | | |=|c| | | |=| | | | |=| |h| | |
| | | | |=| | | | |=| | | | |=| | | | |
| | | | |=| | | | |=| | | | |=| | | | | 3FFF
--- - - - -=- - - - -=- - - - -=- - - - --
| | | | |=| | | | |=| | | | |=| | | | | 4000
1 |b| | | |=|d| | | |=| | | | |=|g|i| | |
| | | | |=| | | | |=| | | | |=| | | | |
| | | | |=| | | | |=| | | | |=| | | | | 7FFF
--- - - - --- - - - -=- - - - -=- - - - --
| | | | |=| | | | |=| | | | |=| | | | | 8000
2 | | | | |=|e| | | |=| | | | |=| | | | |
| | | | |=| | | | |=| | | | |=| | | | |
| | | | |=| | | | |=| | | | |=| | | | | BFFF
--- - - - --- - - - -=- - - - -=- - - - --
| | | | |=| | | | |=| | | | |=| | | | | C000
3 | | | | |=|f| | | |=| | | | |=| | | | |
| | | | |=| | | | |=| | | | |=| | | | |
| | | | |=| | | | |=| | | | |=| | | | | FFFF
------------------------------------------
Notes: (Memory configuration on a MSX2 expanded SV738 X'Press,
memory mapper for 256 Kbyte not implemented)
a= ROM BIOS (Games often use this ROM block)
b= ROM BASIC (This is the BASIC interpreter)
c= RAM 16K (1/4 of 64K bytes standard RAM) \
d= RAM 16K (1/4 of 64K bytes standard RAM) |
e= RAM 16K (1/4 of 64K bytes standard RAM) | = 64K bytes totally
f= RAM 16K (1/4 of 64K bytes standard RAM) /
g= ROM RS232 (Port drivers & terminal program)
h= ROM MSX2 (Complement to BASIC ROM)
i= ROM DOS (FDC drivers & MSX DOS)
*** OBSERVE ***
The memory location 7FBC-7FBF in [PSLOT 3, SSLOT 1] are used as command port
for the FDC (Floppy Disk Controller) chip, FD1793. Writing to this area might destroy the inserted disk.
Memory locations in that area:
reqpt equ 07fbch ; Data request port read only
; bit 7=1 for 1793 interrupt
; bit 6=0 for 1793 data request
selpt equ 07fbch ; Drive select port
; (write 0 to turn off drive motor)
; bit 0=1 for select drive 0
; bit 1=1 for select drive 1
; bit 2=1 for select side 1
; bit 3=1 for motor on
compt equ 07fb8h ; command port write only
sttpt equ 07fb8h ; Status port read only
trkpt equ 07fb9h ; Track register port (R/W)
secpt equ 07fbah ; Sector register port (R/W)
datapt equ 07fbbh ; data register port (R/W)
For further information about the FD1793 commands, see data manual.
----****
****----
Note 7c2,7d2,7e2,7f2:
PORT.A9,A9,AA,AA I 8255A/ULA9RA041 PPI (Programmable Peripheral Interface)
----------
Port summary:
A9 R 7c2 I 8255A/ULA9RA041 Port B Keyboard column inputs
A9 W 7d2 I 8255A/ULA9RA041 Port B
AA R 7e2 I 8255A/ULA9RA041 Port C Get Kbd Row sel,LED,CASo,CASm
AA W 7f2 I 8255A/ULA9RA041 Port C Set Kbd Row sel,LED,CASo,CASm
This part of the 8255 compatible chip controls the keyboard keys,
keyboard CAPS LED, cassette audio out and cassette motor relay.
For cassette input line, see note 6a1 (port A0).
For keyboard map, see note 7c2 (port A9).
For key depression detect, see note 7e2 (port AA).
For keyclick sound example, see note 7f2 (port AA).
Note 7c2:
PORT.A9 I 8255A/ULA9RA041 Port B Keyboard column inputs
-------
Port 0A9h READ = PPI port B (Keyboard columns):
Reading this port will get back the state of the selected
keyboard line (selected via port 0AAh). Each bit corresponds to one
of 8 keys on each line.
bit Name Expl.
0-7 KC0-7 Keyboard line status
The matrix connected keyboard can be described by this map:
Bit#:| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| | | | | | | | |
Line: | | | | | | | | |
---------+-----+-----+-----+-----+-----+-----+-----+-----|
0 | "7" | "6" | "5" | "4" | "3" | "2" | "1" | "0" |
---------+-----+-----+-----+-----+-----+-----+-----+-----|
1 | ";" | "]" | "[" | "\" | "=" | "-" | "9" | "8" |
---------+-----+-----+-----+-----+-----+-----+-----+-----|
2 | "B" | "A" | "£" | "/" | "." | "," | "'" | "`" |
---------+-----+-----+-----+-----+-----+-----+-----+-----|
3 | "J" | "I" | "H" | "G" | "F" | "E" | "D" | "C" |
---------+-----+-----+-----+-----+-----+-----+-----+-----|
4 | "R" | "Q" | "P" | "O" | "N" | "M" | "L" | "K" |
---------+-----+-----+-----+-----+-----+-----+-----+-----|
5 | "Z" | "Y" | "X" | "W" | "V" | "U" | "T" | "S" |
---------+-----+-----+-----+-----+-----+-----+-----+-----|
6 | F3 | F2 | F1 |CODE | CAP |GRAPH|CTRL |SHIFT|
---------+-----+-----+-----+-----+-----+-----+-----+-----|
7 | RET | SEL | <== |STOP | TAB | ESC | F5 | F4 |
---------+-----+-----+-----+-----+-----+-----+-----+-----|
8 |RIGHT|DOWN | UP |LEFT | DEL | INS |HOME |SPACE|
----------------------------------------------------------
Note 7d2:
PORT.A9 I 8255A/ULA9RA041 Port B write
-------
Port 0A9h WRITE= PPI port B (Keyboard columns):
? Writing to this port is not allowed (?).
Note 7e2:
PORT.AA I 8255A/ULA9RA041 Port C Get Kbd Row sel,LED,CASo,CASm
-------
Port 0AAh READ = PPI port C (Keyboard line and Cassette):
bit Name Expl.
0-3 KB0-3 Keyboard line (0-8 on SV738 X'Press)
4 CASON Cassette motor relay (0=On, 1=Off)
5 CASW Cassette audio out (Pulse)
6 CAPS CAPS-LOCK lamp (0=On, 1=Off)
7 SOUND Keyboard klick bit (Pulse)
Examples:
This routine will detect if a key is pressed:
DB AA in a,(0AAh) ; Get old value for port C.
E6 F0 and 0f0h ; Don't change bit 4-7
F6 __ or LINE ; Set the keyboard line (0-8).
D3 AA out (0AAh),a ; Send it to port C (KB0-3).
DB A9 in a,(0A9h) ; Read the line's columns (port B)
E6 __ and bbbbbbbb ; Mask the keys we don't want
20 __ jr z,pressed ; Jump if depressed.
Note 7f2:
PORT.AA I 8255A/ULA9RA041 Port C Set Kbd Row sel,LED,CASo,CASm
-------
Port 0AAh WRITE = PPI port C (Keyboard and Cassette control):
bit Name Expl.
0-3 KB0-3 Keyboard line select (0-8 on SV738 X'Press)
4 CASON Cassette motor relay control (0=On, 1=Off)
5 CASW Cassette audio out (Pulse)
6 CAPS CAPS-LOCK lamp control (0=On, 1=Off)
7 SOUND Keyboard klick bit (Pulse)
This routine will produce a tone from the keyclick bit:
loop: DB AA in a,(0AAh) ; Get old value for port C.
EE 80 xor 080h ; Swap bit 7
D3 AA out (0AAh),a ; Send it to port C.
00 nop ; Changing the delay here will
00 nop ; change the frequency.
18 F6 jr loop ; Go back to the loop.
----****
****----
Note 7g3,7h3:
PORT.AB,AB I 8255A/ULA9RA041 PPI (Programmable Peripheral Interface)
----------
Port summary:
AB R 7g3 I 8255A/ULA9RA041 Mode
AB W 7h3 I 8255A/ULA9RA041 Mode select and I/O setup of A,B,C
PPI mode selection and bit manipulation ports.
Note 7g3:
PORT.AB I 8255A/ULA9RA041 Mode
-------
Port 0BAh READ = PPI mode or reset/set bit port
? Reading from this port is not allowed (?).
Note 7h3:
PORT.AB I 8255A/ULA9RA041 Mode select and I/O setup of A,B,C
-------
Port 0ABh WRITE = PPI mode or reset/set bit port
This port is used in two ways depending on bit 7. If bit 7 is set to 1,
this port will be used as a mode setup port. If bit7=0 this port will be
used to set or reset a bit in port C.
PPI mode port (bits):
| --- GROUP A --- | --- GROUP B ---
7 | 6 5 4 3 | 2 1 0
| | | | | | | | | |
1 | A&C A C Upper | B&C B C Lower
| MODE Dir Dir 1=Input | Mode Dir 1=Input Dir 1=Input
| 00=Mode 0 1=Input 0=Output | 0=Mode 0 0=Output 0=Output
| 01 Mode 1 0=Output | 1=Mode 1
| 1x Mode 2 |
Mode 0: Basic input/output (Mode setup by reset)
Mode 1: Strobed input/output
Mode 2: Bi-Directional bus
In other words:
Bit Name Expl.
0 CLOWER Port C (lower four bits) direction (0=Output (MSX), 1=Input)
1 BDIR Port B direcition (0=Output, 1=Input (MSX))
2 B&C Port B and lower four bits of port C
operating mode. (0=Normal (MSX), 1=Strobed)
3 CUPPER Port C (Upper four bits) direction (0=Output (MSX), 1=Input)
4 ADIR Port A direction (0=Output (MSX), 1=Input)
5-6 A&C Port A and upper four bits of port C
operating mode.
(00=Normal mode (MSX),
01=Strobed mode,
1x=Bidirectional mode (x=Don't care)).
7 - 1 if mode setup function is selected.
The mode port can be used to directly set or reset any bit of port C when bit 7 is 0.
Bit Name Expl.
0 - Set/reset the bit (0=Reset, 1=Set)
1-3 - Bit number (0-7)
4-6 - Not used
7 - 0 if set/reset function selected.
----****
****----
Note 8a1:
PORT.B0,B1,B2,B3 External 8255 (SONY DataRamPack)
----------------
Port summary:
B0-B3 ? 8a1 External 8255 (SONY DataRamPack)
Note 8a1:
PORT.B0,B1,B2,B3 I 8255A/ULA9RA041 Mode
----------------
Sorry, no info.
----****
****----
Note 9a1,9b1:
PORT.B4,B5 RTC (Real Time Clock)
----------
Port summary:
B4 W 9a1 RP 5C01 (Not in 738) RTC Register select
B5 R/W 9b1 RP 5C01 (Not in 738) RTC data
Note 9a1:
PORT.B4 RP 5C01 (Not in 738) RTC Register select
-------
Port 0B4h = RTC Register select port (write only)
Bit Name Expl.
0-3 ? RTC register (0-15)
4-7 ? Not used (don't care)
Note 9b1:
PORT.B5 RP 5C01 (Not in 738) RTC data
-------
Port 0B5h = RTC data read/write port
Bit Name Expl.
0-3 ? RTC data read/write
4-7 ? Not used (set to 1)
----****
****----
Note 10a1:
PORT.B8,B9,BA,BB SANYO Light pen interface
----------------
Port summary:
B8-BB ? 10a1 SANYO Light pen interface
Note 10a1:
PORT.B8,B9,BA,BB SANYO Light pen interface
----------------
Sorry, no info.
----****
****----
Note 11a1:
PORT.BC,BD,BE,BF VHD control
----------------
Port summary:
BC-BF ? 11a1 VHD control
Note 11a1:
PORT.BC,BD,BE,BF VHD control
----------------
Sorry, no info.
----****
****----
Note 12a1:
PORT.C0,C1 MSX audio (MSX MUSIC again?)
----------
Port summary:
C0-C1 ? 12a1 MSX audio (MSX MUSIC again?)
Note 12a1:
PORT.C0,C1 MSX audio (MSX MUSIC again?)
----------
Sorry, no info.
----****
****----
Note 13a1:
PORT.C8,C9,CA,CB,CC,CD,CE,CF MSX Interface (??)
----------------------------
Port summary:
C8-CF ? 13a1 MSX Interface (??)
Note 13a1:
PORT.C8,C9,CA,CB,CC,CD,CE,CF MSX Interface (??)
----------------------------
Sorry, no info.
----****
****----
Note 14a1:
PORT.D0,D1,D2,D3,D4,D5,D6,D7 External Floppy Disk Controller
----------------------------
Port summary:
D0-D7 ? 14a1 External Floppy Disk Controller
Note 14a1:
PORT.D0,D1,D2,D3,D4,D5,D6,D7 External Floppy Disk Controller
----------------------------
Sorry, no info.
----****
****----
Note 15a1:
PORT.D8,D9,DA,DB Kanji ROM for Chinese characters
----------------
Port summary:
D8-DB ? 15a1 Kanji ROM for Chinese characters (Not included in European vers)
Note 15a1:
PORT.D8,D9,DA,DB Kanji ROM for Chinese characters
----------------
Sorry, no info.
----****
****----
Note 16a1:
PORT.F5 System control
-------
Port summary:
F5 ? 16a1 System control
Note 16a1:
PORT.F5 System control
-------
Sorry, no info.
----****
****----
Note 17a1:
PORT.F6 colour bus
-------
Port summary:
F6 ? 17a1 colour bus
Note 17a1:
PORT.F6 colour bus
-------
Sorry, no info.
----****
****----
Note 18a1:
PORT.F7 Audio/Video control
-------
Port summary:
F7 W 18a1 Audio/Video control
Note 18a1:
PORT.F7 Audio/Video control
-------
Sorry, no info.
----****
****----
Note 19a1:
PORT.FC,FD,FE,FF Memory mapper
----------------
Port summary:
FC-FF R/W 19a1 Memory mapper page select
Note 19a1:
PORT.FC,FD,FE,FF Memory mapper page select
----------------
Ports 0FCh-0FFh. These ports are normally not connected on a
standard MSX1 SV738 X'press. However, upgrading to MSX 2 is usually done
by changing some ROM's, set the VRAM to 128Kb and set the internal
RAM to 256Kb. The last thing is done by mapping 16Kbyte blocks to the
ports 0FCh-0FFh. The normal format of theese ports are:
0FCh=03 RAM block # for memory page 0 (Addr. 0000-3FFF)
0FDh=02 RAM block # for memory page 1 (Addr. 4000-7FFF)
0FEh=01 RAM block # for memory page 2 (Addr. 8000-BFFF)
0FFh=00 RAM block # for memory page 3 (Addr. C000-FFFF)
The number in each port is the number of the current 16Kbyte RAM block
(0-255). Observe that more than one memory page can use the same 16Kbyte
block. The total RAM (fully expanded) is (16Kbyte * 256 blocks)= 4Mbyte.
Usually the ports 0FCh-0FFh only uses 4 bits, so the maximum RAM is then
(16Kbyte * 16 blocks)= 256Kbyte.
Page: Port: Addr.: Available RAM blocks:
--------- 0000h --------- ---------
| 16Kb | | 16Kb | | 16Kb |
0 0FCh | BLOCK | | BLOCK | | BLOCK |
| #3 | | #4 | | #5 |
--------- 3FFFh --------- ---------
--------- 4000h --------- ---------
| 16Kb | | 16Kb | | 16Kb |
1 0FDh | BLOCK | | BLOCK | | BLOCK |
| #2 | | #6 | | #7 |
--------- 7FFFh --------- ---------
--------- 8000h --------- ---------
| 16Kb | | 16Kb | | 16Kb |
2 0FEh | BLOCK | | BLOCK | | BLOCK |
| #1 | | #8 | | #9 |
--------- BFFFh --------- ---------
--------- C000h --------- ---------
| 16Kb | | 16Kb | | 16Kb |
3 0FFh | BLOCK | | BLOCK | | BLOCK |
| #0 | | #10 | | #11 |
--------- FFFFh --------- ---------
... and so on to
--------- ---------
| 16Kb | | 16Kb |
| BLOCK | | BLOCK |
| #254 | | #255 |
--------- ---------
----****
HARDWARE PORTS
Front view
9-PIN D-SUB AMP 9 9-PIN D-SUB AMP 9
(FEMALE) (MALE)
5 4 3 2 1 1 2 3 4 5
------------- -------------
\ o o o o o / \ * * * * * /
\ o o o o / \ * * * * /
------- -------
9 8 7 6 6 7 8 9
DE-09x-P-F DE-09x-P-M
25-PIN D-SUB
(FEMALE)
13 12 11 10 9 8 7 6 5 4 3 2 1
---------------------------
\ o o o o o o o o o o o o /
\ o o o o o o o o o o o /
---------------------
25 24 23 22 21 20 19 18 17 16 15 14
DE-25x-P-F
25-PIN D-SUB
(MALE)
1 2 3 4 5 6 7 8 9 10 11 12 13
---------------------------
\ * * * * * * * * * * * * /
\ * * * * * * * * * * * /
---------------------
14 15 16 17 18 19 20 21 22 23 24 25
DE-25x-P-M
Micro-Ribbon / 14-pin AMPhenol Micro-Ribbon / 14-pin AMPhenol
(FEMALE) (MALE)
7 6 5 4 3 2 1 1 2 3 4 5 6 7
------------------- -------------------
| H H H H H H H | | _ _ _ _ _ _ _ |
\ =============== / \ =============== /
\ H H H H H H H / \ - - - - - - - /
--------------- ---------------
14 13 12 11 10 9 8 14 13 12 11 10 9 8
57LE-40140 57-30140
Phono RCA Phono RCA
(FEMALE) (MALE)
--- ---
( O ) ( * )
--- ---
1 2 1 2
PRC/1CS SPC/10
2.54 space DGE
(FEMALE)
Polarisation
mark
|___|
49 47 45 43 41 39 37 35 33 31 29 27 25 23 21 19 17 15 13 11 9 7 5 3 1
+---------------------------------------------------+
| H H H H H H H H H H H H H H H H H H H H H H H H H |
| ================================================= |
| H H H H H H H H H H H H H H H H H H H H H H H H H |
+---------------------------------------------------+
50 48 46 44 42 40 38 36 34 32 30 28 26 24 22 20 18 16 14 12 10 8 6 4 2
DGE
DIN audio
(FEMALE)
2
_____
/ o \
4 / o o \ 5
3 ( o o o ) 1 (8=center pin)
7 \ o o / 6
\__^__/
9
DIN-45326
INTERNAL (or external) 3.5" drive
(MALE)
rear, *=pin
F-353
CHINON
_____________________________________________________ PC
__ 1-----------------------------------+
---------- | * * * * * * * * * * * * * * * * * |
* * * * | * * * * * * * * * * * * * * * * * |
+-----------------------------------+
| | | |
+5V | GND |
GND +12V
Power supply 34-pin 2.54 contact
Pin number:
1 3 5 7 9 (upper line)
* * * * *
..... etc...
* * * *
2 4 6 8 (lower line)
EXTERNAL 5 1/4" DRIVE
(MALE)
2 4 6 8
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
(PC board)
- - - - - - - - - - - - - - - - -
1 3 5 7 9 ....
^
|
(Polarisation mark)
Note: Setting the drive signal connector upside-down will cause the
drive LED lamp to light continously and the drive will not work.
Mostly, this will not damadge the system.
5 1/4" drive Power supply
(MALE ON DRIVE)
+12V GND GND +5V
| | | |
-----------------------
| * * * * |
\_____________________/
U
WARNING! PIN CONFIGURATION FOR CONNECTOR ON DISK DRIVE! CHANGING +12V AND
+5V MIGHT DESTROY TTL LEVEL IC'S IN THE DISK DRIVE.
PIN CONFIGURATION
OC= Open collector -= No specified direction I= Input (to MSX)
NC= Not connected O= Output (to device)
RS-232-C MSX Serial DE-09x-P-F
Pin Name EIA RS232 I/O Comment
:CCITT V24
1 PG AA:101 - Protective Ground
2 TD BA:103 O Transmitted Data
3 RD BB:104 I Received Data
4 RTS CA:105 O Request To Send
5 CTS CB:106 I Clear To Send
6 DSR CC:107 I Data Set Ready
7 SG AB:102 - Signal Ground
8 DCD CF:109 I Data Channel received line
signal Detector,
Data Carrier Detect
9 DTR 108/2 O Data Terminal Ready
Full 25 pin (IBM XT/Amiga) and 9 pin (IBM AT) RS232 matching pin description
is added for reference below. Amiga pins is in pharenthesis:
RS-232-C IBM XT/(Amiga) Serial DB-25x-P-M
Pin Name I/O Comment
1 Shield - Protective Ground
2 TXD O Transmitted Data
3 RXD I Received Data
4 RTS O Request To Send
5 CTS I Clear To Send
6 DSR I Data Set Ready
7 SG - Signal Ground
8 DCD I Data Channel received line signal Detector,
Data Carrier Detect
9 +VCC O + VOLTAGE (+12V)
10 -VEE O - VOLTAGE (-12V)
11 (AUDO) (O) Unassigned (Audio out from Amiga)
12 S.SD I Secondary Received line signal detector
13 S.CTS I Secondary Clear to send
14 S.TXD O Secondary Transmitted Data
15 TXC I Transmitter signal element timing
16 S.RXD I Secondary Received data
17 RXC I Receiver signal element timing
18 LL (AUDI) O (I) Local loopback (Audio into Amiga)
19 S.RTS O Secondary Request to send
20 DTR O Data terminal ready
21 RL / SQD O Remote loopback
22 RI I Ring indicator
23 SS I/O Data signal rate selector
24 TXC1 O Transmit signal element timing
25 I Test mode
RS-232-C IBM AT Serial DB-09x-P-M
Pin Name I/O Comment
1 DCD I Data Channel received line signal Detector,
Data Carrier Detect
2 RXD I Received Data
3 TXD O Transmitted Data
4 DTR O Data terminal ready
5 SG - Signal Ground
6 DSR I Data Set Ready
7 RTS O Request To Send
8 CTS I Clear To Send
9 RI I Ring indicator
Centronic MSX Paralell 57LE-40140
1 _STB O Centronic Strobe pulse (char data on PDB lines)
2 PDB0 O Character data line, bit 0
3 PDB1 O Bit 1
4 PDB2 O
5 PDB3 O
6 PDB4 O
7 PDB5 O
8 PDB6 O
9 PDB7 O Bit 7
10 N.C -
11 BUSY I Signals if printer is busy
12 N.C -
13 N.C -
14 GND - Signal ground
Full 25 pin (IBM XT/Amiga) Centronic matching pin description
is added for reference below:
Centronic Amiga Paralell DB-25x-P-F
1 _STROBE O Centronic Strobe pulse (char data on PDB lines)
2 D0 O Character data line, bit 0
3 D1 O Bit 1
4 D2 O
5 D3 O
6 D4 O
7 D5 O
8 D6 O
9 D7 O Bit 7 (MSB)
10 _ACK I Acknowledge
11 BUSY I Signals if printer is busy
12 POUT I Paper Out
13 SEL I Select
14 +5V PULLUP O +5 Volts DC (_AUTO FEED XT on some printers)
15 - Not used
16 _RESET O Reset (Also called _PRIME)
17 GND - Signal ground
18 GND - Signal ground
19 GND - Signal ground
20 GND - Signal ground
21 GND - Signal ground
22 GND - Signal ground
23 GND - Signal ground
24 GND - Signal ground
25 GND - Signal ground
Full printer connector pin desctiption is added for reference below:
Centronic Printer Paralell 57-30360 AMPHENOL
1 _STB I Sync pulse. Data is read when low at least 1us
2 D0 I Bit 0. Data bits must be present 0.5uS
3 D1 I and 0.5us after _STB pulse
4 D2 I
5 D3 I
6 D4 I
7 D5 I
8 D6 I
9 D7 I Bit 7 (MSB)
10 _ACK O Acknowledge, request for data. Sent when printer is turned on.
11 BUSY O Signal is high under following conditions:
Receive buffer is full, Printer is processing data,
Printer is offline or Printer is in a error condition.
12 POUT O Paper Out sensor active.
13 SEL O Select. High when printer is ON LINE.
14 _AUTO FEED I When low, printer preforms CR+LF. When high, only CR.
15
16 SG - Signal ground
17 FG - Frame ground
18 +5V O +5V output
19 SG - _STB return for twisted pair (ground)
20 SG - D0 return for twisted pair (ground)
21 SG - D1 return for twisted pair (ground)
22 SG - D2 return for twisted pair (ground)
23 SG - D3 return for twisted pair (ground)
24 SG - D4 return for twisted pair (ground)
25 SG - D5 return for twisted pair (ground)
26 SG - D6 return for twisted pair (ground)
27 SG - D7 return for twisted pair (ground)
28 SG - _ACK return for twisted pair (ground)
29 SG - BUSY return for twisted pair (ground)
30 SG - _PRIME return for twisted pair (ground)
31 _PRIME I Reset signal.
32 _ERROR O Goes low when Paper out, offline, overload or cover open.
33 SG - Signal ground
34...36 Unused
Shugart 3.5" or 5 1/4" DE-25x-P-F
MSX Disk drive
(external)
1 +12V O
2 +5V O
3 +5V O
4 _INDEX I This interface signal is provided by the
drive each time an index or sector hole is
sensed by the INDEX/SECTOR sensing
photo transducer. Low when passing index hole
or no disk inserted.
5 _DRIVE SELECT 1 O Will turn drive 1 on. Drive number is set via
the shunts in each drive.
6 DIRECTION O Selects direction of the R/W head for the
STEP signal. "1"=Out (away from center),
"0"=In, (towards the center of the disk).
7 _STEP O Moves the R/W head in the direction set by
DIRECTION pin.
8 WRITE DATA O Bit stream of data to write on disk.
Should be "0" when reading data.
9 _WRITE GATE O When"0":Enables WRITE DATA to be written
on the diskette.
When"1":Enables STEP and disables WRITE DATA.
10 _TRACK 00 I "0" when R/W head is over the track number 0
(the outermost data track).
11 _WRITE PROTECT I When "0": No data can be written on the disk.
12 READ DATA I Data read from the diskette.
Normally kept high.
13 _SIDE SELECT O Selects one of the two sides on a diskette.
"1"= Side 0
"0"= Side 1
14 +12V O
15 +12V O
16 +5V O
17 _DRIVE SELECT 0 O Will turn drive 0 on. Drive number is set via
the shunts in each drive.
18 _MOTOR ON O Low level turns the selected drive
motor(s) on.
19 READY I "0" when drive has counted two index pulses
after drive motor gives normal speed.
"1" when drive is not ready.
20,21,22 GND - Logical ground.
23,24,25 GND -
Shugart 3.5" 34-pin 2.54 contact (3.5")
MSX Disk drive or PC-board (5 1/4")
(internal)
or 5 1/4"
2 DISK CHANGE I
4 _IN USE O
6 _DRIVE SELECT 3 O
8 _INDEX I
10 _DRIVE SELECT 0 O
12 _DRIVE SELECT 1 O
14 _DRIVE SELECT 2 O
16 _MOTOR ON O
18 DIRECTION O
20 _STEP O
22 WRITE DATA O
24 _WRITE GATE O
26 _TRACK 00 I
28 _WRITE PROTECT I
30 READ DATA I
32 _SIDE SELECT O
34 _READY I
1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33 GND
Joystick MSX std DE-09x-P-M
1 _FWD I Joystick pushed forward when high
2 _BACK I Backward
3 _LEFT I Left
4 _RIGHT I Right
5 +5V O 50mA power supply
6 _TRG1 I/O Trigger A / Output 1
7 _TRG2 I/O Trigger B / Output 2
8 OUTPUT O Output 3
9 GND - Signal ground
Amiga Joystick port is added for reference below.
WARNING!
Pin 5 is +5V on MSX and Mouse Button 2 on Amiga. Since Amiga mouse button
is active low, connecting a Amiga mouse to a MSX and pressing button 2 will
shortcut the supply voltage.
Joystick Amiga std DE-09x-P-M
1 _FWD I Joystick pushed forward when high
2 _BACK I Backward
3 _LEFT I Left
4 _RIGHT I Right
5 POTX I Horizontal potentiometer / LIGHT PEN PRESSED (LP Switch)
6 _FIRE I Trigger / _LIGHT PEN (Beam capture position)
7 +5V O +5 Volts DC
8 GND - Signal ground
9 POTY I Vertical potentiometer
Mouse Amiga std DE-09x-P-M
1 MOUSE V I Mouse Vertical
2 MOUSE H I Mouse horizontal
3 MOUSE VQ I Vertical quadrature
4 MOUSE HQ I Horizontal quadrature
5 BUTTON 2 I Mouse button 2
6 BUTTON 1 I Mouse button 1
7 +5V O +5 Volts DC
8 GND - Signal ground
9 BUTTON 3 I Mouse button 3
Casette MSX std DIN-45326
1 GND - Signal ground
2 GND -
3 GND -
4 CMTOUT O Sound output
5 CMTIN I Sound input
6 REM+ O Remote control (from relay)
7 REM- O Remote control (from relay)
8 GND - Signal ground
9 GND - Frame ground
MSX Video Composite PRC/1CS
1 Monitor video O
2 Ground -
MSX Audio (mono) 200mV PRC/1CS
1 Mono, mixed SOUNDIN, O
PPI and PSG
2 Ground -
MSX RF video Antenna PRC/1CS
1 Composite RF signal O
for TV
2 Ground -
Expansion MSX std DGE
1 _CS1 O Memory read in addresses 4000-7FFF
2 _CS2 O Memory read in addresses 8000-BFFF
3 _CS12 O Memory read in addresses 4000-BFFF
4 _SLTSL O Low when SLOT 2 (cartridge slot) is selected
5 reserved - NC, Reserved for future expansion. Do not use.
6 _RFSH O Refresh signal from CPU
7 _WAIT I OC, Tells CPU to wait. Refresh signal is not maintained.
8 _INT I OC, Requests a interrupt to CPU (call to addr. 38h).
9 _M1 O CPU fetches first part of instruction from memory
10 _BUSDIR I NC, was used to control the direction of external
data bus buffer. It is on LOW level when data is sent
by the cartridge.
11 _IORQ O I/O (port) request signal.
(address bus holds valid port address).
12 _MREQ O Memory request signal.
(address bus holds valid memory address).
13 _WR O Write signal from CPU (used as strobe to device)
14 _RD O Read signal from CPU (used as strobe to device)
15 _RESET I System reset signal. [PC]=0, [I]=0,[R]=0.
16 Reserved - NC, Reserved for future expansion. Do not use.
17 A0 O Address bus.
18 A1 O
19 A2 O
20 A3 O
21 A4 O
22 A5 O
23 A6 O
24 A7 O
25 A8 O
26 A9 O
27 A10 O
28 A11 O
29 A12 O
30 A13 O
31 A14 O
32 A15 O
33 D0 I/O Data bus.
34 D1 I/O
35 D2 I/O
36 D3 I/O
37 D4 I/O
38 D5 I/O
39 D6 I/O
40 D7 I/O
41 GND - Signal/power ground
42 CLOCK O CPU clock, 3.579 M Hz.
43 GND - Signal/power ground
44 SW1 - NC, Insert/remove detect for protection
45 +5V O +5V power supply, 300mA /slot
46 SW2 - NC, Insert/remove detect for protection
47 +5V O +5V power supply, 300mA /slot
48 +12V O +12V power supply, 50mA /slot
49 SOUNDIN I Sound input (-5dBm) (used by external sound gener.)
50 -12V O -12V power supply, 50mA /slot
SV 738 SPECIFICATIONS
Normal Expanded (MSX2)
CPU
Name: Z80
Frequency: 3.579MHz 3.579 MHz / 6 MHz
PRIMARY STORAGE
User RAM: 64k 64k (Up to 4MB with mapper)
Video RAM: 16k 128k
MSX BASIC ROM: 16k 16k+16k
MSX BIOS ROM: 16k
RS 232 firmware ROM: 8k 8k
MSX DOS firmware ROM: 16k 16k (+64k with DOS 2.20)
Total internal ROM: 56k 72k (136k with DOS 2.20)
Total internal RAM: 80k 192k (384k with 256k mapper)
SECONDARY STORAGE
Diskdrive
Disk: 3.5" Soft sectored
Sides: 1 2
Format:
CP/M-80 MSX DOS (IBM PC 720k compatible)
# of tracks /side: 80 # of tracks /side: 80
# of sectors/track: 17 # of sectors/track: 9
# of bytes/sector: 256 # of bytes/sector: 512
Encoding method: MFM
Recording density: 8187 BPI
Track density: 135 BPI
Formatted capacity: 360k (328k) 720k
Unformatted: 500k
Rotational speed: 300rpm
Data transfer rate: 250 k Bps
Seek time: 6/3 mSec
Setting time: 15 mSec
Motor start time: 400 mSec
Average access time: 173/94 mSec
Casette (recorder optional)
Data transfer rate
(baud rate) 1200 BpS (1200Hz - 1 wave "0", 2400Hz - 2 waves "1")
2400 BpS (2400Hz - 1 wave "0", 4800Hz - 2 waves "1")
Input (to computer): From earphone terminal of tape recorder
Output (from computer): To microphone terminal of tape recorder
Synchronization: Asynchronous
Modulation: FSK
Remote control: Yes (block)
DISPLAY
Text mode characters: 32*24, 40*24 32*24, 40*24
or 80*26.5 or 80*26.5
Text colours: 2 of 16 of 512 2 of 16 of 512
Graphic resolution: 256*192 512*212 (512*424 interlaced)
Graphic colours: 16 of 512 4,16 or 256 of 512
INPUT & OUTPUT PORTS
Serial: RS 232 C, 19200 BpS max
Paralell: Centronic (Strobed OUTPUT only)
Expansion: 34- pin CPU bus
Audio/Video: Audio: 3 channel 0-113kHz square output,
4 bit volume control (logarithmic),
15 envelope shapes and
1 square keyklick signal
RF and video ports:
Composite colour video out (standard)
Analog RGB (internal)
RF out (standard)
Storage: Cassette and disk dirve (+external drive port)
Joystick ports: 2, 4bit input, 1bit output, 2bits bidirectional
TTL level
KEYBOARD
Control keys (grey): 20
Cursor movement keys: 4 (enlarged)
Charcater keys (white): 49
Total keys: 73
OPERATIVE SYSTEMS (Microsoft)
MSX DOS version: 1.03 1.03 or 2.20
Diskbasic version: 1.0 2.0
CP/M-80 version: 2.2 2.2
ASCII table
Name Control Char Hex
null ctrl-@ NUL 00
start of heading ctrl-A SUH 01
start of text ctrl-B STX 02
end of text ctrl-C ETX 03 Cancel/abort in MSX DOS
end of xmit ctrl-D EOT 04
enquiry ctrl-E ENQ 05
acknowledge ctrl-F ACK 06
bell ctrl-G BEL 07
backspace ctrl-H BS 08
horizontal tab ctrl-I HT 09
line feed ctrl-J LF 0A
vertical tab ctrl-K VT 0B
form feed ctrl-L FF 0C Clear screen
carridge return ctrl-M CR 0D
shift in ctrl-N SO 0E
shift out ctrl-O SI 0F
data line escape ctrl-P DLE 10 Printer copy on in MSX DOS
device control 1 ctrl-Q DC1 11 XON
device control 2 ctrl-R DC2 12
device control 3 ctrl-S DC3 13 XOFF
device control 4 ctrl-T DC4 14
neg acknowledge ctrl-U NAK 15
synchronous idle ctrl-V SYN 16
end of xmit block ctrl-W ETAB 17
cancel ctrl-X CAN 18
end of medium ctrl-Y EM 19
substitute ctrl-Z SUB 1A EOF in MSX DOS
escape ctrl-[ ESC 1B
file separator ctrl-\ FS 1C
group separator ctrl-] GS 1D
record separator ctrl-^ RS 1E
unit separator ctrl-_ US 1F
Char Hex Char Hex Char Hex Char Hex Char Hex Char Hex
SP 20 0 30 @ 40 P 50 ¢ 60 p 70
! 21 1 31 A 41 Q 51 a 61 q 71
" 22 2 32 B 42 R 52 b 62 r 72
# 23 3 33 C 43 S 53 c 63 s 73
$ 24 4 34 D 44 T 54 d 64 t 74
% 25 5 35 E 45 U 55 e 65 u 75
& 26 6 36 F 46 V 56 f 66 v 76
` 27 7 37 G 47 W 57 g 67 w 77
( 28 8 38 H 48 X 58 h 68 x 78
) 29 9 39 I 49 Y 59 i 69 y 79
* 2A : 3A J 4A Z 5A j 6A z 7A
+ 2B ; 3B K 4B [ 5B k 6B { 7B
, 2C < 3C L 4C \ 5C l 6C | 7C
- 2D = 3D M 4D ] 5D m 6D } 7D
. 2E > 3E N 4E ^ 5E n 6E ~ 7E
/ 2F ? 3F O 4F _ 5F o 6F DEL 7F
VT-52 standard codes
07H Bell, Sound bell
09H BS, cursor left
0AH TAB, Cursor to next tab position
0BH LF, Cursor down a row
0CH HOME, Cursor to home
0DH FORMFEED, Clear screen and home
1BH ESC, Enter escape sequence
1CH RIGHT, Cursor right
1DH LEFT, Cursor left
1EH UP, Cursor up
1FH DOWN, Cursor down
ESC+"j" Clear screen and home
ESC+"E" Clear screen and home
ESC+"K" Clear to end of line
ESC+"J" Clear to end of screen
ESC+"l" Clear line
ESC+"L" Insert line
ESC+"M" Delete line
ESC+"Y"+a+b Set cursor coordinates, a=row+1FH, b=coulumn+1FH
ESC+"A" Cursor UP
ESC+"B" Cursor DOWN
ESC+"C" Cursor LEFT
ESC+"D" Cursor RIGHT
ESC+"H" Cursor home
ESC+"x"+"#" Change cursor,
"#"="4" if block cursor,
"#"="5" if cursor normally disabled
ESC+"y"+"#" Change cursor,
"#"="4" if underline cursor,
"#"="5" if cursor normally enabled
ESC+"p" Inverse text (SV328)
ESC+"q" Normal text (SV328)
************************
End of I/O documentation.
|