MILC logo

IndexVorigeVolgendeLeeg

Clockchip RP-501
Arjen Zeilemaker, 00-00-00


    
De clockchip van de MSX2 computer
---------------------------------

De MSX2 computer is voorzien van de RP-5C01 klokchip (of
compatible) met tijd en kalender functie. Bovendien bevat de chip
een aantal geheugenplaatsen, die door de NiCad batterij constant
van spanning worden voorzien. Deze geheugenplaatsen zijn
uitermate geschikt om opstartgegevens in op te slaan.


Algemene opbouw:
----------------

De chip heeft vier banken met ieder 13 geheugen plaatsen. Deze
plaatsen zijn echter niet in 8 bits (zoals we gewend zijn)
uitgevoerd, maar in 4 bits (z.g.n. nibbles).
De chip is aan te spreken via de I/O poorten B4H en B5H. I/O
poort B4H geeft de te lezen/schrijven nibble aan, terwijl via I/O
poort B5H de data gelezen of geschreven kan worden.
Zoals gezegd, heeft de chip de beschiking over 13 nibbles per
bank. Dit zijn de nibbles 00H tot 0CH. De nibbles 0DH tot 0FH
hebben speciale betekenis en kunnen onafhankelijk van de
ingestelde bank beschreven worden.


Programeer nibbles:
-------------------

De nibbles 0DH tot 0FH zijn speciale programeer nibbles. Ze
kunnen in iedere bank beschreven worden.

                   3  2   1  0
nibble 0DH         R  A  B1 B0

         R = Running, (1 = Klok loopt, 0 = Klok gepauseerd)
              Dit bit staat normaal natuurlijk op 1, waardoor de
              tijd en datum informatie constant wordt aangepast.
              Echter bij het lezen of schrijven van tijd en datum
              informatie is het belangrijk dat de gegevens even
              niet veranderen. Door nu het bit voor het lezen of
              schrijven te resetten, en na het lezen of schrijven
              weer te zetten, kan dit probleem makkelijk worden
              omzeild. Let er op dat het bit niet te lang op 0
              staat, omdat er dan tijdsafwijkingen gaan onstaan.
         A = Alarm, (1 = Alarm mode aan,0 = Alarm mode uit)
              Dit bit wordt geset indien er een alarmtijd wordt
              ingesteld. Indien de ingestelde alarmtijd/datum
              gelijk wordt aan de huidige tijd/datum en het alarm
              bit is 1, dan zal een speciale pin van de klokchip
              actief worden. Als het bit echter 0 is, dan vindt
              deze actie niet plaats.
         B1 en B0 zijn de current bank selectors
              De inhoud van deze bits bepalen welke bank actief
              is. M.a.w. van welke bank de nibbles 00H tot 0CH
              kunnen worden beschreven, dan wel gelezen.

                   3  2  1  0
Nibble 0EH         Y  D  M  S

         Y is de snelle mode bit voor het jaar
              Als het bit geset is, wordt om de 1/16384 seconde
              het jaar opgehoogt. (En daarmee ook de schrikel-
              jaar nibble). Als het bit gereset is, functioneerd
              het jaar gewoon afhankelijk van de rest van de
              datum.
         D is de snelle mode bit voor de dag
              Als het bit geset is, wordt om de 1/16384 seconde
              het dagnr. opgehoogt. (En daarmee wordt ook de rest
              van de datum versneld, afh. van dag).
         M is de snelle mode bit voor de minuten
              Als het bit geset is, wordt om de 1/16384 seconde
              de minuten opgehoogt. (En daarmee wordt ook de rest
              versneld). De seconden blijven normaal.
         S is de snelle mode bit voor de seconden
              Als het bit geset is, wordt om de 1/16384 seconde
              de seconden opgehoogt.

         OPM: In het speciale geval van M en S = 1 geldt de
              versnelling niet meer voor de seconden en minuten,
              die functioneren normaal!

Nibble 0FH

         Haven't got a idea


Geheugen nibbles.
-----------------

Zoals reeds gezegd hebben de nibbles 00H tot 0CH een geheugen
functie. Van de verschillende banken hebben de nibbles de
volgende betekenis:

Bank 00:

nibble 0 en 1
         Deze nibbles bevatten de seconde informatie van de
         huidige tijd. Nibble 1 is de highnibble en nibble 0 is
         de lownibble. Samengevoegt krijgen we een byte met de
         seconden als BCD-getal. (min 00H en max 59H)
nibble 2 en 3
         Deze nibbles bevatten de minuten informatie van de
         huidige tijd. Nibble 3 is de highnibble en nibble 2 is
         de lownibble. Samengevoegt krijgen we een byte met de
         minuten als BCD-getal. (min 00H en max 59H)
nibble 4 en 5
         Deze nibbles bevatten de uren informatie van de huidige
         tijd. Nibble 5 is de highnibble en nibble 4 is de
         lownibble. Samengevoegt krijgen we een byte met de uren
         als BCD-getal. (min 00H en max 23H)
nibble 6
         Deze nibble bevat het dagnr. in de week van de huidige
         datum. Helaas wordt deze functie van de klokchip niet
         gebruikt bij de MSX2-computer (onbegrijpelijk). Het
         nibble is min 00H en max 06H. (0 = Zondag)
nibble 7 en 8
         Deze nibbles bevatten de dagnr. informatie van de
         huidige datum. Nibble 8 is de highnibble en nibble 7 is
         de lownibble. Samengevoegt krijgen we een byte met het
         dagnr. als BCD-getal. (min 01H en max (afh. maand) 31H)
nibble 9 en A
         Deze nibbles bevatten de maandnr. informatie van de
         huidige datum. Nibble A is de highnibble en nibble 9 is
         de lownibble. Samengevoegt krijgen we een byte met het
         maandnr. als BCD-getal. (min 01H en max 12H)
nibble B en C
         Deze nibbles bevatten het jaar tov 1980 van de huidige
         datum. Nibble C is de highnibble en nibble B is de
         lownibble. Samengevoegt krijgen we een byte met het jaar
         tov 1980 als BCD-getal. (min 00H en max 99H)

Bank 01

nibble 0 en 1
         Deze nibbles heben geen geheugenfunctie, en kunnen dus
         niet beschreven worden.
nibble 2 en 3
         Deze nibbles bevatten de minuten informatie van de alarm
         tijd. Nibble 3 is de highnibble en nibble 2 is de
         lownibble. Samengevoegt krijgen we een byte met de
         minuten als BCD-getal. (min 00H en max 59H)
nibble 4 en 5
         Deze nibbles bevatten de uren informatie van de alarm
         tijd. Nibble 5 is de highnibble en nibble 4 is de
         lownibble. Samengevoegt krijgen we een byte met de uren
         als BCD-getal. (min 00H en max 23H)
nibble 6
         Deze nibble bevat het dagnr. in de week van de alarm
         datum. Helaas wordt deze functie van de klokchip niet
         gebruikt bij de MSX2-computer (onbegrijpelijk). Het
         nibble is min 00H en max 06H. (0 = Zondag)
nibble 7 en 8
         Deze nibbles bevatten de dagnr. informatie van de alarm
         datum. Nibble 8 is de highnibble en nibble 7 is de
         lownibble. Samengevoegt krijgen we een byte met het
         dagnr. als BCD-getal. (min 01H en max (afh. maand) 31H)
nibble 9
         Deze nibble heeft geen geheugenfunctie.
nibble A
         Haven't got a clue.
nibble B
         Deze nibble bevat het schrikkeljaar offset. offset 00H
         betekend een schrikeljaar en dan heeft februari dus 29
         dagen. De offset is min 00H en max 03H.
nibble C
         Deze nibble heeft geen geheugenfunctie.

Bank 02

nibble 0
         Deze nibble bevat altijd 0AH. Is dit niet het geval,
         dan zal de MSX2 subrom geheugenbanken 2 en 3 instaleren
         met standaardwaarden. Nibble 0 heeft dus een soort
         checkfunctie. Als de stroom van de chip zou uitvallen,
         dan zal nibble 0 leeg worden (=00H).
nibble 1
         Deze nibble bevat de pixel verplaatsing in X-richting,
         zoals die bij het opstarten van de computer naar de VDP
         moet worden geschreven. Standaard is de verplaatsing 0,
         echter door het SETADJUST commando kan het gewijzigt
         worden. LET OP: een negatieve waarde wordt als twee
         complement opgeslagen, dus -1 = 16-1 = 15.
nibble 2
         Deze nibble bevat de pixel verplaatsing in Y-richting,
         zoals die bij het opstarten van de computer naar de VDP
         moet worden geschreven. Zie verder nibble 1.
nibble 3
         Deze nibble bevat de screenmode instellingen, zoals die
         bij het opstarten worden ingesteld. Bit 0
         bevat de textmode (0 = SCREEN 0 en 1 = SCREEN 1),
         terwijl bit 1 bepaald of de interlacing aan (1) dan wel
         uit (Bit = 0) staat. Standaard geldt SCREEN 0 en
         interlacing uit.
nibble 4 en 5
         Deze beide nibbles vormen samen een byte (nibble 4 is
         de lownibble), die de schermbreedte van de textmode
         bevat, zoals die bij het opstarten moet worden
         ingesteld. Standaard geldt een schermbreedte van 37.
         LET OP: als de schermbreedte bij een ingesteld
         textscherm 0, 0 of groter dan 80 is, dan worden banken
         2 en 3 opnieuw geinstaleerd. Dit zelfde gebeurt als de
         ingestelde textmode 1 is, en de schermbreedte is 0 of
         groter dan 32.
nibble 6
         Deze nibble bevat de voorgrondkleur van het textscherm,
         zoals die bij het opstarten moet worden ingesteld.
         Standaard is de kleur 15 (wit).
nibble 7
         Deze nibble bevat de achtergrondkleur van het
         textscherm, zoals die bij het opstarten moet worden
         ingesteld. Standaard is de kleur 4 (donker blauw).
nibble 8
         Deze nibble bevat de randkleur van het textscherm,
         zoals die bij het opstarten moet worden ingesteld.
         Standaard is de kleur 4 (donker blauw).
nibble 9
         Deze nibble bevat diverse instellingen, zoals die bij
         het opstarten worden ingesteld. Bit 0 geeft aan
         of de funktietoetsen niet (Bit= 0), dan wel wel
         zichtbaar zijn. Bit 1 geeft aan of de toetsklick niet
         aan is (Bit= 0), danwel wel aan is. Bit 3 geeft aan of
         er wel een MSX-printer (Bit= 0), danwel geen MSX-
         printer is aangesloten. Bit 2 tenslotte geeft aan of de
         standaard cassette snelheid 1200 baud (Bit= 0), danwel
         2400 baud is. Standaard gelden de volgende
         instellingen: Funktietoetsen aan, Toetsklick aan, MSX-
         printer en 1200 baud cassettesnelheid.
nibble A
         Deze nibble bevat de beep instellingen, zoals die
         gelden bij de uitvoering van het BEEP commando. Bit 1
         en 0 geven het volume van de BEEP aan. 00B is zeer
         zacht, en 11B is zeer hard. Bit 3 en 2 geven de melodie
         aan.
         Standaard geldt: volume 01B en melodie 00B.
nibble B
         Deze nibble weet ik nog niet
         Bit 1 en 0 bevatten de kleurcode bij het opstartscherm.
         Standaard geldt dat de kleurcode 0 is.
nibble C
         Haven't got a clue

Bank 03

         nibble 0 Deze nibble geeft aan voor welk doel bank 3
         wordt gebruikt. Als het nibble 00H is, dan is er sprake
         van een TITLE. Is het nibble 01H, dan kan er sprake zijn
         van een PASSWORD. Als het nibble 02H is, dan is er een
         PROMPT ingesteld. Standaard is echter een lege TITLE
         ingesteld.
TITLE:
         De nibbles 1 t/m C bevatten de TITLE string. Er moeten
         telkens twee nibbles bij elkaar worden genomen, waardoor
         een byte ontstaat met een ASCII code. Dus nibble 1 met
         nibble 2 vormen het eerste byte enz. (volgens het
         lownibble,highnibble systeem). Het einde van de string
         wordt gevormd door een 00H byte of door het einde van
         bank 3. De TITLE string kan dus maximaal 6 karakters
         lang zijn.
         OPM. Als de TITLE string precies 6 karakters lang is,
         dan wordt na het tonen van de TITLE string eerst op een
         toets gewacht.
PROMPT:
         De nibbles 1 t/m C bevatten de PROMPT string. De nibbles
         heben precies dezelfde opbouw als bij de TITLE string,
         alleen vormen ze nu de PROMPT string. Als er geen PROMPT
         is ingesteld, dan wordt de standaard PROMPT genomen
         ("Ok").

PASSWORD:
         De nibbles 1 t/m 3 hebben een speciale waarde, zodat er
         door een stroomstoring niet toevallig een PASSWORD
         instelling kan onstaan. Nibble 1 moet 01H, nibble 2 02H
         en nibble 3 03H bevatten voor een geldig PASSWORD. De
         nibbles 4 t/m 7 bevatten het PASSWORD in een gecodeerde
         vorm. nibble 8 heeft een speciale betekenis. Is het
         nibble ongelijk aan 00H , dan wordt er via I/O poort 7FH
         een "password gelezen" (16 bits) en wordt vergeleken met
         de inhoud van nibbles 9 t/m C. Zijn deze waarden niet
         gelijk, dan komt de computer in een eindeloze lus
         terecht en start hij niet op.







De klokchip beschrijven of lezen:
---------------------------------

Het schrijven  en lezen via de I/O poorten is echter niet conform
de  MSX-regels en het is daarom beter om I/O met de chip over  te
laten aan de daarvoor bestemde BIOS-routines.
Het lezen  van een nibble gaat via de BIOS routine REDCLK (01F5H)
in het MSX2 subrom:

Input:  C = klokadres met bit 5 en 4 als banknummer
                      met bit 3 t/m 0 als nibblenummer
Output: A = gelezen data (bit 3 t/m 0)
Change: F

Het schrijven  van  een  nibble gaat via de BIOS  routine  WRTCLK
(01F9H) in het MSX2 subrom:

Input:  C = klokadres met bit 5 en 4 als banknummer
                      met bit 3 t/m 0 als nibblenummer
        A = te schrijven data (bit 3 t/m 0)
Output: -
Change: F


Voorbeelden:

RP-501.BAS      Een basic programma die de informatie uit dit document toepast
                op de gegevens die in uw clockchip zijn opgeslagen.

RP-501.GEN      Een assembler Source programma die de waarden van alle nibbles
                uit alle banken afdrukt op het scherm. Assembler programma
                geschreven met DEVPAC.

RP-501.BIN      Het eigenlijke machinetaal programma (Object) van RP-501.GEN
		Run het in basic met: BLOAD"RP-501.BIN",R


Informatie verzamelt en samengesteld door:

Arjen Zeilemaker
Woldweg 195
9606 PD Kropswolde
05980-22794 (Spraak)

>> RP-501.BAS ---------------------------------------------------------------

1  ' (C) 1992 by Ultrasoft
2  ' ********************************************
3  ' * Door: Arjen Zeilemaker                   *
4  ' *       Woldweg 195                        *
5  ' *       9606 PD Kropswolde                 *
6  ' *                                          *
7  ' * Dit programma analyseert de gegevens die *
8  ' * in de clockchip van uw MSX2 zijn op-     *
9  ' * geslagen.                                *
10 ' * Door het gebruik van de I/O poorten is   *
11 ' * het programma eigenlijk niet conform     *
12 ' * de MSX regels.                           *
13 ' ********************************************
20 SCREEN0:WIDTH80:KEYOFF
25 PRINT"RP-501 Analyser":PRINT
30 PRINT"Current mode setting: ";
35 OUT&HB4,13:VA=INP(&HB5)
40 PRINT"Bank";VA AND 3;"  ";
45 IF (VA AND 4) THEN PRINT"Alarm On   ";ELSEPRINT"Alarm Off  ";
50 IF (VA AND 8) THEN PRINT"Clock Running"ELSEPRINT"Clock Halted"
55 PRINT:PRINT"Bank 00"
60 OUT&HB4,13:OUT&HB5,INP(&HB5)AND7
65 BA=0:NI=0:GOSUB475:T1=VA
70 BA=0:NI=2:GOSUB475:T2=VA
75 BA=0:NI=4:GOSUB475:T3=VA
80 BA=0:NI=7:GOSUB475:D1=VA
85 BA=0:NI=9:GOSUB475:D2=VA
90 BA=0:NI=11:GOSUB475:D3=VA+1980
95 OUT&HB4,13:OUT&HB5,INP(&HB5)OR8
100 PRINTUSING"Current time information: ##:##:##";T3,T2,T1;
105 PRINTUSING"  date information: ##/##/####";D1,D2,D3
110 PRINT:PRINT"Bank 01"
115 BA=1:NI=0:GOSUB475:T1=VA
120 BA=1:NI=2:GOSUB475:T2=VA
125 BA=1:NI=4:GOSUB475:T3=VA
130 BA=1:NI=7:GOSUB475:D1=VA
135 BA=1:NI=9:GOSUB475:D2=VA
140 BA=1:NI=11:GOSUB475:D3=VA
145 PRINTUSING"Alarm time setting: ##:##:##";T3,T2,T1;
150 PRINTUSING"  date setting: ##/##/##";D1,D2,D3
155 PRINT:PRINT"Bank 02"
160 BA=2:NI=0:GOSUB460
165 IF VA<>10 THEN PRINT"Information in Bank 02 and 03 not valid"
170 BA=2:NI=1:GOSUB460:DX=VA:IFDX>7THENDX=DX-16
175 BA=2:NI=2:GOSUB460:DY=VA:IFDY>7THENDY=DY-16
180 PRINTUSING"Screen adjust in X-pixels: +##";DX
185 PRINTUSING"Screen adjust in Y-pixels: +##";DY
190 BA=2:NI=3:GOSUB460
195 PRINT"INITIAL: Screen-mode:";VA AND 1;
200 PRINT"  Interlace-mode ";
205 IF (VA\2) THENPRINT"On"ELSEPRINT"Off"
210 BA=2:NI=4:GOSUB480
215 PRINT"         Screen width:";VA
220 BA=2:NI=6:GOSUB460
225 PRINT"         Colors; Foreground";VA;
230 BA=2:NI=7:GOSUB460
235 PRINT",Background";VA;
240 BA=2:NI=8:GOSUB460
245 PRINT",Border";VA
250 BA=2:NI=9:GOSUB460
255 PRINT"         Functionkeys ";
260 IF (VA AND 1) THENPRINT"On";ELSEPRINT"Off";
265 PRINT", Key-klick ";
270 IF (VA AND 2) THENPRINT"On";ELSEPRINT"Off";
275 PRINT", ";
280 IF (VA AND 4) THENPRINT"No";
285 PRINT"MSX-printer, Cas baudrate ";
290 IF (VA AND 8) THENPRINT"2400"ELSEPRINT"1200"
295 BA=2:NI=10:GOSUB460
300 PRINT"         Beep; Melody";VA\4;"Volume";VA AND 3
305 BA=2:NI=11:GOSUB460
310 PRINT"         Start-up colors:";VA AND 3
315 PRINT:PRINT"Bank 03"
320 BA=3:NI=0:GOSUB460
325 IF VA<>0 THEN 345
330 BA=3:NI=1:TI$="":FORA=0TO5:GOSUB480:NI=NI+1:TI$=TI$+CHR$(VA):NEXTA
335 IFASC(TI$)=0 THEN445
340 PRINT"Title = ";TI$:GOTO450
345 IF VA<>2 THEN 360
350 BA=3:NI=1:TI$="":FORA=0TO5:GOSUB480:NI=NI+1:TI$=TI$+CHR$(VA):NEXTA
355 PRINT"Prompt = ";TI$:GOTO450
360 IF VA<>1 THEN 445
365 BA=3:NI=1:GOSUB460:IF VA<>1 THEN445
370 BA=3:NI=2:GOSUB460:IF VA<>2 THEN445
375 BA=3:NI=3:GOSUB460:IF VA<>3 THEN445
380 BA=3:NI=4:GOSUB480:PW=VA
385 BA=3:NI=6:GOSUB480:PW=PW+VA*256
390 PRINT"Password = ";
395 FORLP=0TO15
400   IF (PW/2)=INT(PW/2)THENOF=0:GOTO420
405   V1=INT(PW/256):V2=PW-V1*256
410   V2=V2XOR4:V1=V1XOR128:PW=V1*256+V2
415   OF=32768!
420   PW=INT(PW/2)+OF
425 NEXTLP
430 PRINTHEX$(PW)"H= "CHR$(PW/256)CHR$(PW-INT(PW/256)*256);
435 BA=3:NI=8:GOSUB480:IF VA=1 THEN PRINT"  Halt password"
440 GOTO450
445 PRINT"No (valid) information in bank 03"
450 '
455 GOTO 455
460 OUT&HB4,13:OUT(&HB5),(INP(&HB5)AND12)OR BA
465 OUT&HB4,NI:VA=INP(&HB5)
470 RETURN
475 GOSUB460:TP=VA:NI=NI+1:GOSUB460:VA=VA*10+TP:RETURN
480 GOSUB460:TP=VA:NI=NI+1:GOSUB460:VA=VA*16+TP:RETURN

    

Index

Vorige

Volgende