SORD Creative Computer $$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$ $$ $$$$$$$ $$ $$ $$ $$$$$$$ $$$$$$ $$$$$$ $$ $$$$$$$$$$$$$$$$$ $$$$$$$$$$ $$ $$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$ $$ $$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$ $$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$ $$ $$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$ $$$ $$ $$$$$$$ $$$$$$$$$ $$$$$$$$ $$ $$ $$$$$$$ $$$$$$$ $$$$$$$ $$ $$$$$$$ $$$$$$$ $$$$$$$ $$ $$$$$$$ $$$$$$$ $$$$$$$ $$ $$$$$$$ $$$$$$$ $$$$$$$ $$ $$$$$$$ $$$$$$$ $$$$$$$ $$ $$$$$$$ $$$$$$$ $$$$$$$ $$ $$$$$$$ $$$$$$$ $$$$$$$ ####### $$ $$$$$$$ $$$$$$$ $$$$$$$ ####### $$ $$$$$$$ $$$$$$$ $$$$$$$ ####### $$ $$$$$$$ $$$$$$$ $$$$$$$ ####### $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ -------------------------------------------------- | | | THE MSX RED BOOK | | | -------------------------------------------------- MSX RED BOOK - 1 - OBSAH ===== 1. Uvod ............................................................. 2 2. Hardware MSX ..................................................... 3 2.1. Videoprocesor .................................................... 3 2.2. Programing sound generator ....................................... 4 2.3. Programmable Peripherial Interface ............................... 5 3. Memory Map - mapa pameti systemu ................................. 6 3.1. Program text area ................................................ 7 3.2. String storage area .............................................. 7 3.3. I/O buffers - FCB ................................................ 8 4. Keyboard - klavesnice ............................................ 8 5. BIOS ............................................................. 9 5.1. Vektory .......................................................... 9 6. Workspace Area ................................................... 17 6.1. Rutiny ........................................................... 17 6.2. Promenne ......................................................... 17 6.3. The Hooks - hacky ................................................ 29 6.4. Zbyvajici prostor ................................................ 31 7. Emulator systemu MSX ............................................. 32 7.1. Pracovni prostor emulatoru ....................................... 32 7.2. Zpusob vyuziti hacku HDEVN ....................................... 34 7.3. Volne prostory ................................................... 35 Created by LZR Soft, december 1988 - june 1991. MSX RED BOOK - 2 - 1. Uvod ************* THE MSX RED BOOK - cervena kniha MSX The MSX Red Book (C) Copyright 1985 AVALON SOFTWARE ISBN 07457-0178-7 Cervena kniha MSX obsahuje podrobny popis systemu MSX z pohledu programatora. Cervena kniha je rozdelena na nekolik casti. V uvodni casti jsou obecne infor- mace o systemu MSX. Dalsi cast je venovana vlastnostem jednotlivych hardwaro- vych komponentu systemu a jejich programovani a v dalsi casti nasleduje pod- robny popis rutin MSX-ROM: BIOS-MSX a MSX-BASIC. Nasledujici cast knihy je ve- novana popisu rozdeleni pracovniho prostoru a nakonec je uvedeno nekolik pri- kladu, ve kterych jsou popsany programy v assembleru. Tato prirucka neni prekladem cervene knihy, i kdyz temer vse, co je zde uvede- no z cervene knihy vychazi. Je zde popsano pouze programovani hardwaru, vyznam a pouzivani systemovych rutin tzv. vektory BIOS-MSX a je zde uvedeno rozdeleni pracovniho prostoru. Prirucka se venuje popisu standardniho systemu MSX verze 1.0. V zaveru jsou popsany rozdily, ktere se vyskytuji mezi standardnim systemem MSX a emulatorem MSX, ktery je zprovoznen na pocitaci SORD m.5. MSX RED BOOK - 3 - 2. Hardware MSX ********************* mikroprocesor Z80A CPU videoprocesor TMS9929 ( VDP ) soundprocesor GI8910 ( PSG ) periferie I8255 ( PPI ) 2.1. Videoprocesor ====================== VDP data port ( I/O port 98H ) ------------------------------ Brana pro zapis nebo cteni jednoho bajtu do nebo z VRAM na nebo z predem nas- tavene adresy. Po cteni nebo zapisu se adresa automaticky o jednu zvetsi. VDP command port ( I/O port 99H ) --------------------------------- Bity po precteni: 7 - 1 = paprsek dobehl na konec obrazovky 6 - 1 = nastal stret dvou a vice spritu 5 - 1 = na jedne TV radce se nachazi pet a vice spritu 4 az 0 - cislo spritu, ktery je paty na TV radce Bity pro zapis: Je-li nastaven bit 7, pak bity 2 az 0 obsahuji cislo registru VDP, do ktereho ma byt proveden zapis. Je-li shozen bit 7, pak bity 5 az 0 obsahuji adresu VRAM, na kterou se ma VDP nastavit, pricemz bit 6 urcuje, ma-li se VDP nasta- vit pro cteni nebo zapis - 0 = cteni, 1 = zapis. Pozor! Nejdrive se vysilaji data nebo dolni polovina adresy ( bity 7 az 0 nemaji zadny specialni vyznam ) a teprve pote se vysila cislo registru nebo horni polovina adresy ( bity 7 a 6 maji vyse uvedeny vyznam ). Vyznam registru VDP: 7 6 5 4 3 2 1 0 bit/registr ,-------+-------+-------+-------+-------+-------+-------+-------. | 0 | 0 | 0 | 0 | 0 | 0 | M3 | EXTVI | R0 +-------+-------+-------+-------+-------+-------+-------+-------+ | VRAM | BLANK | INTEN | M1 | M2 | 0 | SIZE | MAG | R1 +-------+-------+-------+-------+-------+-------+-------+-------+ | 0 | 0 | 0 | 0 | adresa obrazovky | R2 +-------+-------+-------+-------+-------+-------+-------+-------+ | adresa tabulky barev | R3 +-------+-------+-------+-------+-------+-------+-------+-------+ | 0 | 0 | 0 | 0 | 0 | adresa predloh znaku | R4 +-------+-------+-------+-------+-------+-------+-------+-------+ | 0 | adresa tabulky spritu | R5 +-------+-------+-------+-------+-------+-------+-------+-------+ | 0 | 0 | 0 | 0 | 0 | adresa predloh spritu | R6 +-------+-------+-------+-------+-------+-------+-------+-------+ | barva popredi | barva pozadi nebo ramecku | R7 `-------+-------+-------+-------+-------+-------+-------+-------' Vyznam jednotlivych bitu: EXTVI - 0 = zakazani externiho videosignalu VRAM - vyber pameti pouzitych pro VRAM: 0 = 4027 ; 1 = 4108 / 4116 BLANK - 0 = nezobrazuji se tvary, pouze barva pozadi INTEN - 0 = zakaz generovani prerusovaciho signalu SIZE - 0 = 8*8, 1 = 16*16 MAG - 0 = nezvetseno, 1 = dvakrat zvetseno M1 M2 M3 - nastaveni rezimu 0 0 0 GI 0 0 1 GII 0 1 0 MCOL 1 0 0 TEXT MSX RED BOOK - 4 - High Low registr R2=adresa/400H - 00xx xx00 0000 0000 -> 0000 0000 0000 xxxx R3=adresa/40H - 00xx xxxx xx00 0000 -> 0000 0000 xxxx xxxx R4=adresa/800H - 00xx x000 0000 0000 -> 0000 0000 0000 0xxx R5=adresa/80H - 00xx xxx0 0000 0000 -> 0000 0000 000x xxxx R6=adresa/800H - 00xx x000 0000 0000 -> 0000 0000 0000 0xxx 2.2. Programing sound generator =================================== PSG address port ( I/O port A0H ) --------------------------------- Nastavuje cislo registru PSG, se kterym se bude pracovat ( 0 az 15 ). PSG data write port ( I/O port A1H ) ------------------------------------ Brana pro zapis dat do registru PSG. Registry 0 az 13 ridi zvuk, registr 14 je pouzit pro cteni - bity: 7: vstup z magnetofonu, 6: rezim klavesnice, 5: joystisk B fire, 4: joystisk A fire, dalsi bity jsou smery na vybranem joysticku: 3: vpravo, 2: vlevo, 1: dolu, 0: nahoru. Plati: 0 = aktivni, 1 = neaktivni. Registr 15 je pouzit pro zapis - bity: 7: KANA LED, 6: vyber joysticku ( 0 = 1 konektor, 1 = 2 konektor ), 5: pulse 2 paddle, 4: pulse 1 paddle, 3 az 0 - nepouzito. PSG data read port ( I/O port A2H ) ----------------------------------- Brana pro cteni dat z registru PSG - viz write port. Vyznam registru PSG: 7 6 5 4 3 2 1 0 bit/registr ,-------+-------+-------+-------+-------+-------+-------+-------. | frekvence kanalu A, nizsi byte | R0 +-------+-------+-------+-------+-------+-------+-------+-------+ | X | X | X | X | frekvence kanalu A,vyssi byte | R1 +-------+-------+-------+-------+-------+-------+-------+-------+ | frekvence kanalu B, nizsi byte | R2 +-------+-------+-------+-------+-------+-------+-------+-------+ | X | X | X | X | frekvence kanalu B,vyssi byte | R3 +-------+-------+-------+-------+-------+-------+-------+-------+ | frekvence kanalu C, nizsi byte | R4 +-------+-------+-------+-------+-------+-------+-------+-------+ | X | X | X | X | frekvence kanalu C,vyssi byte | R5 +-------+-------+-------+-------+-------+-------+-------+-------+ | X | X | X | frekvence sumu | R6 +-------+-------+-------+-------+-------+-------+-------+-------+ | B dir | A dir | C sum | B sum | A sum | C ton | B ton | A ton | R7 +-------+-------+-------+-------+-------+-------+-------+-------+ | X | X | X | rezim | amplituda kanalu A | R8 +-------+-------+-------+-------+-------+-------+-------+-------+ | X | X | X | rezim | amplituda kanalu B | R9 +-------+-------+-------+-------+-------+-------+-------+-------+ | X | X | X | rezim | amplituda kanalu C | R10 +-------+-------+-------+-------+-------+-------+-------+-------+ | nizsi byte frekvence amplitudove modulace | R11 +-------+-------+-------+-------+-------+-------+-------+-------+ | vyssi byte frekvence amplitudove modulace | R12 +-------+-------+-------+-------+-------+-------+-------+-------+ | X | X | X | X | tvar modulace tonu | R13 +-------+-------+-------+-------+-------+-------+-------+-------+ |CAS INP|KBD MOD|JOY F B|JOY F A| JOY > | JOY < | JOY v | JOY ^ | R14 +-------+-------+-------+-------+-------+-------+-------+-------+ | KANA |JOY SEL|PULSE 1|PULSE 2| 1 | 1 | 1 | 1 | R15 +-------+-------+-------+-------+-------+-------+-------+-------+ MSX RED BOOK - 5 - 2.3. Programmable Peripherial Interface =========================================== PPI port A ( I/O port A8H ) --------------------------- Primary slot register - rozdeleni operacni pameti mezi sloty. Operacni pamet mikroprocesoru ma velikost 64KB a je rozdelena do ctyr 16KB stranek ( memory page ). System MSX ma ctyri tzv. sloty. Jeden slot predstavu- je, pametovou oblast o velikosti 64KB rozdelenou na ctyri 16KB stranky ( slot page ). Operacni pamet v MSX je sestavena z techto slot stranek. Kazda stranka ma sve cislo, ktere urcuje zaroven jeji umisteni v adresovem prostoru. V kazde memory page je pripojena jedna slot page se stejnym cislem. Nejjednodussi na pochopeni je situace, kdy je cely jeden slot pripojen jako operacni pamet. V takovem pripade je do prostoru memory page #0 pripojena slot page #0, do memo- ry page #1 slot page #1 a tak dale. Umistemi stranek v adresovem prostoru: page #0: 0000-3FFF, page #1: 4000-7FFF, page #2: 8000-BFFF, page #3: C000-FFFF MSX sloty jsou zpravidla rozdeleny takto: slot #0: page #0 a page #1 - 32KB ROM page #2 a page #3 - 32KB RAM slot #1: prvni kartridz, slot #2: druhy kartridz, slot #3: page #0 a page #1 - 32KB RAM page #2 a page #3 - nic Slot #0 vzdy obsahuje 32KB ROM s operacnim systemem MSX. Nemusi vsak obsahovat pamet RAM, ta muze byt ve strankach #2 a #3 slotu #3. Primary slot register urcuje, ktere sloty jsou pripojeny do operacni pameti. Registr je rozdelen na ctyri dvojice bitu. Kazda dvojice predstavuje jednu memory page a jeji obsah pak urcuje cislo pripojeneho slotu. Bity: 7+6: memory page #3, 5+4: memory page #2, 3+2: memory page #1, 1+0: memory page #0. Kartridz, ktery se zasouva do slotu #1 a #2, obsahuje tyto informace ( offset od pocatecni adresy ): +0000: DM 'AB' - identifikace slotu +0002: DW INIT - adresa inicializace nebo startovaci adresa +0004: DW STATEMENT - adresa rozsirujiciho ovladace +0006: DW DEVICE - adresa ovladace noveho zarizeni +0008: DW TEXT - adresa tokenovaneho basickeho programu +000A: DS RESERVED - vyhrazeny prostor pro vyssi verze +0010: DS PROGRAM - vlastni program v kartridzi PPI port B ( I/O port A9H ) --------------------------- Keyboard column inputs - cteni predem nastavene rady klavesnice ( row select ) Pro tlacitka plati: 0 = stisknuto, 1 = nestisknuto PPI port C ( I/O port AAH ) --------------------------- Bity: 7: key click, 6: CAPS LED, 5: MGF output, 4: motor on, 3-0: keyboard row select. Pro bity 7 az 4 plati: 0 = aktivni, 1 = neaktivni. Bity 3 az 0 obsahu- ji cislo rady klavesnice. PPI mode port ( I/O port ABH ) ------------------------------ PPI mode selection - programovani PPI Poznamka: Zapojeni klavesnice je uvedeni nize. MSX RED BOOK - 6 - 3. Memory Map - mapa pameti systemu ***************************************** System MSX prepoklada pouziti 32 KB pameti ROM, ve ktere je ulozen, minimalne 8 KB RAM pro svou praci, ktera muze byt zvetsena az na 64 KB RAM ( z toho je vyuzitelnych jen 32 KB ). Dale je mozne zvetsit pamet o dalsich 1024 KB pomoci sekundarnich rozsirujicich slotu. Nejvetsi cast ze 32KB RAM je urcena pro program v jazyce MSX-BASIC a pro jeho promenne. Zbyvajici cast je pak urcena pro zasobnik mikroprocesoru Z80, I/O bafry a vnitrni pracovni prostor. Po restartu systemu MSX vypada rozdeleni pa- meti nasledovne: FFFF +-----------------------+ | | | workspace area | | | F380 +-----------------------+ HIMEM (FC4A) | I/O buffer 1 | F280 +-----------------------+ | FCB 1 | F277 +-----------------------+ | I/O buffer 0 | F177 +-----------------------+ NULBUF (F862) | FCB 0 | F16E +-----------------------+ | F277 (FCB 1) | F16C +-----------------------+ | F16E (FCB 0) | F16A +-----------------------+ FILTAB (F860) | 00 | F168 +-----------------------+ MEMSIZ (F672), FRETOP (F69B) | string storage area | F0A0 +-----------------------+ STKTOP (F674) | Z80 stack | |.......................| | | | | | | | | 8003 +-----------------------+ STREND (F6C6) | array storage area | 8003 +-----------------------+ ARYTAB (F6C4) | variable storage area | 8003 +-----------------------+ VARTAB (F6C2) | program text area | 8001 +-----------------------+ TXTTAB (F676) | 00 | 8000 +-----------------------+ BOTTOM (FC48) | | | Basic interpreter | | | 268C +-----------------------+ | | | BIOS-MSX | | | 0000 +-----------------------+ MSX RED BOOK - 7 - Vysvetlivky: Workspace area - prostor pro systemove promenne BIOS a MSX-BASIC String storage area - prostor pro basicke retezcove promenne Z80 stack - prostor pro zasobnik mikroprocesoru Array storage area - prostor pro basicke promenne typu pole Variable storage area - prostor pro jednoduche basicke promenne Program text area - prostor pro basicky program Basic interpreter - interpretr jazyka MSX-BASIC BIOS-MSX - zaklad programoveho systemu Pro pripadnou disassemblaci - datove oblasti: 0004-0007, 002B-002F, 0508-050D, 092F-097F, 0DA5-0EC4, 1033-105A, 1061-10C1, 1233-1252, 13A9-1448, 160B-1612, 185D-1863, 1B97-1BAA, 1BBF-23BE, 2439-2459, 2CF1-2E70, 3030-3039, 3710-3719, 392E-3FE1, 43B5-43C3, 46E6-46E7, 4B3A-4B4C, 4C2F-4C3F, 555A-5569, 5D83-5DB0, 6F76-6F8E, 70FF-710C, 7182-7195, 71A2-71B5, 71C7-71DA, 72A6-72B9, 73E4-73E4, 752E-7585, 7754-7757, 7BA3-7BCA, 7ED8-7F26, 7F41-7FB6, 7FBE-7FFF 3.1. Program text area ========================== "Program text area" je slozen z tokenovanych ( zakodovanych ) programovych radku ulozenych podle cisel. Program je ukoncen nulovym radkem. Nulovy bajt na adrese 8000H je falesny konec programoveho radku, pred prvnim programovym rad- kem.Je potrebny k synchronizaci hlavni behove smycky pri startu programu. Jed- noduche promenne a promenne typu pole jsou slozeny jak z ciselnych tak i z re- tezcovych promennych a jsou ulozeny za sebou podle toho, jak jsou postupne nachazeny nebo deklarovany v programu. Rychlost provadeni je zavisla na tom, jsou-li promenne typu pole deklarovany drive nez jednoduche promenne. Zasobnik Z80 je umisten pod "String storage area" a jeho struktura vypada nasledovne: | | STKTOP +----+ | 00 | | 00 | +----+ Mainloop SP | 46 | | 01 | +----+ Statement SP | | Je-li umisteni zasobniku zmeneno, napriklad prikazem "CLEAR" nebo "MAXFILES", jsou nejprve ulozeny dva nulove bajty na zasobnik jako ukoncovac pro blokova prohledavani u funkci "FOR" nebo "GOSUB". Predpokladane nulove parametry jsou tedy pritomny v zasobniku a proto bude behem hlavni provadeci smycky Z80 SP na STKTOP-2. Pokud bude rizeni prevedeno z hlavni provadeci smycky na ovladac prikazu, pak bude Z80 SP na STKTOP-4. 3.2. String storage area ============================ "String storage area" je slozeno z tel retezcu oznacenych jako promenne nebo pole. Behem vycislovani vyrazu mohou byt take docasne ulozeny v retezcovem zasobniku prostrednictvim cisla retezce. Nulovy bajt nasledujici za "String storage area" je prechodny omezovac pro funkci "VAL". MSX RED BOOK - 8 - 3.3. I/O buffers - FCB =========================== Oblast mezi "String storage area" a HIMEM je pouzita pro I/O bafry. I/O bafr 0 pro "SAVE" a "LOAD" existuje vzdy, ale cislo bafru muze byt zmeneno prikazem "MAXFILES". Vsechny I/O bafry maji informace o svem stavu ulozeny v 9ti bajtech FCB. Adresa FCB je ulozena v tabulce pod FCB 0, za ni nasleduje 256 bajtu datoveho bafru. Vyznam jednotlivych bajtu FCB je nasledujici: 0 1 2 3 4 5 6 7 8 +---+---+---+---+---+---+---+---+---+ |MOD|00H|00H|00H|DEV|00H|POS|00H|PPS| FCB - file control block +---+---+---+---+---+---+---+---+---+ MOD - momentalni rezim bafru DEV - kod zarizeni, ktere bafr vyuziva POS - ukazatel aktualni pozice v bafru PPS - pozice pri "PRINT" Zbyvajici bajty FCB nejsou ve standardnim MSXu vyuzity. 4. Keyboard - klavesnice ****************************** Pristup na klavesnici se realizuje ve dvou krocich. Nejprve se na branu 0AAH vysle cislo rady, ktera se bude cist a pote se z brany 0A9H precte jeji stav. Jednotlive bity pak urcuji stav tlacitek. 7 6 5 4 3 2 1 0 bit/brana ,-------+-------+-------+-------+-------+-------+-------+-------. | KEYBOARD COLUMN INPUTS | 0A9 | nacteni sloupce klaves | +-------+-------+-------+-------+-------+-------+-------+-------+ | KEY | CAP | CAS | CAS | KEYBOARD ROW SELECT | 0AA | CLICK | LED | OUT | MOTOR | vyber rady klaves | `-------+-------+-------+-------+-------+-------+-------+-------' 7 6 5 4 3 2 1 0 bit/rada ,-------+-------+-------+-------+-------+-------+-------+-------. | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 00 +-------+-------+-------+-------+-------+-------+-------+-------+ | ; | ] | [ | \ | = | - | 9 | 8 | 01 +-------+-------+-------+-------+-------+-------+-------+-------+ | B | A | (A#(B | / | . | , | ` | ' | 02 +-------+-------+-------+-------+-------+-------+-------+-------+ | J | I | H | G | F | E | D | C | 03 +-------+-------+-------+-------+-------+-------+-------+-------+ | R | Q | P | O | N | M | L | K | 04 +-------+-------+-------+-------+-------+-------+-------+-------+ | Z | Y | X | W | V | U | T | S | 05 +-------+-------+-------+-------+-------+-------+-------+-------+ | F3 | F2 | F1 | CODE | CAP | GRAPH | CTRL | SHIFT | 06 +-------+-------+-------+-------+-------+-------+-------+-------+ | ENTER | SEL | BS | STOP | TAB | ESC | F5 | F4 | 07 +-------+-------+-------+-------+-------+-------+-------+-------+ | --> | |v | |^ | <-- | DEL | INS | HOME | SPACE | 08 +-------+-------+-------+-------+-------+-------+-------+-------+ | 4 | 3 | 2 | 1 | 0 | --- | --- | --- | 09 +-------+-------+-------+-------+-------+-------+-------+-------+ | . | , | - | 9 | 8 | 7 | 6 | 5 | 0A `-------+-------+-------+-------+-------+-------+-------+-------' MSX RED BOOK - 9 - 5. BIOS ************* Zacatek pameti ROM obsahuje BIOS-MSX - zaklad programoveho systemu. BIOS je vpodstate rozsahly program, ktery obsluhuje hardware pocitace. Zpusob, jakym BIOS pracuje, predurcuje i zakladni filozofii systemu. Vsechny programy by se mely dusledne odkazovat na rutiny v BIOSu. Pak by bylo mozne system MSX po hardwarove strance menit, aniz by vyvstala potreba uzpuso- bovat zmenam stavajici programove vybaveni. V idealnim pripade by se tedy daly provozovat tytez programy jak na stare verzi, tak na nove verzi systemu. 5.1. Vektory ================ V teto kapitole jsou popsany vektory BIOSu, na ktere by se tedy vsechny prog- ramy mely odkazovat. U kazdeho vektoru je napsana adresa, na ktere lezi, jmeno rutiny na kterou skace, dale jsou uvedeny vstupne/vystupni parametry a regist- ry ktere jsou zmeneny. Je-li uvedeno IM, znamena to, ze je zmenen prerusovaci mod a je-li uvedeno EI nebo DI, je v rutine povoleno nebo zakazano preruseni. Vsechna cisla jsou o sestnactkovem zakladu. 0000 CHKRAM otestuje pamet, zinicializuje system,najde sloty a odstartuje bud roz- sirujici slot nebo interpretr MSX-BASIC vstup: nic; vystup: nic; meni: AF, BC, DE, HL, SP, IM, EI 0004 DW 1BBF ;adresa znakoveho generatoru v ROM 0006 DB 10 ;port VDP pro cteni dat 0007 DB 10 ;port VDP pro zapis dat 0008 SYNCHR kontroluje bezny znak na ktery ukazuje HL, je-li zadan. Pokud ne, jde se na "Syntax error". V opacnem propade se propada do CHRGTR vstup: HL, znak ke kontrole umisteny na adrese za RST 08; vystup: HL - ukazuje na nasledujici znak, A - znak, CY=1 pokud bylo cislo, Z=1 po- kud byl ukoncovac; meni: AF, HL 000B NOP 000C RDSLT vybere vhodny slot podle hodnoty ziskane prostrednictvim registru a cte obsah pameti ve slotu vstup: A: FxxxSSPP | |||| | ||`+-- cislo ( 0-3 ) primarniho slotu | `+---- cislo ( 0-3 ) sekundarniho slotu `--------- =1 pokud je specifikovan sekundarni slot HL - cilova adresa; vystup: A - nacteny bajt; meni: AF, BC, DE, DI 000F NOP 0010 GETCHR vyzvedne nasledujici znak ( nebo token ) z basickeho programu vstup: HL; vystup: HL - ukazuje na nasledujici znak, A - znak, CY=1 pokud bylo cislo, Z=1 pokud byl ukoncovac; meni: AF, HL 0013 NOP 0014 WRSLT vybere vhodny slot podle hodnoty ziskane prostrednictvim registru a zapise do pameti ve slotu vstup: A: FxxxSSPP | |||| | ||`+-- cislo ( 0-3 ) primarniho slotu | `+---- cislo ( 0-3 ) sekundarniho slotu `--------- =1 pokud je specifikovan sekundarni slot HL - cilova adresa, E - bajt k zapisu; vystup: nic; meni: AF,BC,D,DI 0017 NOP MSX RED BOOK - 10 - 0018 OUTDO zapise znak do bezneho zarizeni vstup: A - znak, PRTFIL, PRTFLG; vystup: nic; meni: nic 001B NOP 001C CALSLT vykona rutinu ve slotu vstup: IY:FxxxSSPP | |||| | ||`+-- cislo ( 0-3 ) primarniho slotu | `+---- cislo ( 0-3 ) sekundarniho slotu `--------- =1 pokud je specifikovan sekundarni slot IX - adresa rutiny; vystup: nic; meni: AF', BC', DE', HL', DI 001F NOP 0020 DCOMPR porovna registrove pary HL a DE vstup: HL, DE; vystup: Z=1 kdyz HL=DE, CY=1 kdyz HL0 long header; vystup: F: CY=1 bylo-li preruseno; meni: AF, BC, HL, DI 00ED TAPOUT zapise jeden bajt na pasek vstup: A - bajt; vystup: F: CY=1 bylo-li preruseno; meni: AF, B, HL 00F0 TAPOOF zastavi zapis na pasek a po 550 ms vypne motor vstup: nic; vystup: nic; meni: EI 00F3 STMOTR spusti/zastavi motor vstup: A=0 stop, A=1 start, A=FF prepnout na opacny stav; vystup: nic; meni: AF 00F6 LFTQ vraci pocet volnych bajtu v hudebni fronte vstup: A - cislo fronty; vystup: HL - volny prostor ve fronte; meni: AF, BC, HL 00F9 PUTQ zaradi bajt do hudebni fronty vstup: A - cislo fronty, E - data; vystup: F: Z=1 pokud je fronta plna; meni: AF, BC, HL 00FC RIGHTC presune pixel vpravo vstup: CMASK; vystup: nic; meni: AF 00FF LEFTC presune pixel vlevo vstup: CMASK; vystup: nic; meni: AF 0102 UPC presune pixel nahoru vstup: CLOC; vystup: nic; meni: AF 0105 TUPC presune pixel nahoru vstup: CLOC; vystup: F: CY=1 mimo obrazovku; meni: AF 0108 DOWNC presune pixel dolu vstup: CLOC; vystup: nic; meni: AF 010B TDOWNC presune pixel dolu vstup: CLOC; vystup: F: CY=1 mimo obrazovku; meni: AF 010E SCALXY prevede graficke souradnice na platne vstup: BC-souradnice X, DE-souradnice Y; vystup: F: CY=0 pokud byly prevedeny; meni: AF 0111 MAPXYC prevede graficke souradnice na fyzickou adresu vstup: BC-souradnice X, DE-souradnice Y; vystup: nic; meni: AF, D, HL 0114 FETCHC nacte masku tvaru z grafickych souradnic vstup: nic; vystup: HL - adresa ( CLOC ), A - tvar ( CMASK ); meni:A, HL MSX RED BOOK - 15 - 0117 STOREC uschova fyzickou adresu a masku tvaru vstup: HL - adresa ( CLOC ), A - tvar ( CMASK );vystup: nic; meni: nic 011A SETATR nastavi barvu inkoustu vstup: A - kod barvy; vystup: F: CY=1 neznama barva; meni: F 011D READC vraci barvu pixelu vstup: nic; vystup: A - barva; meni: AF, EI 0120 SETC obarvi pixel vstup: ATRBYT; vystup: nic; meni: AF, EI 0123 NSETCX obarvi vodorovne pixely vstup: HL - pocet pixelu; vystup: nic; meni: AF, BC, DE, HL, EI 0126 GTASPC vraci vzajemny pomer elipsovitosti vstup: nic; vystup: DE - ASPCT1, HL - ASPCT2; meni: DE, HL 0129 PNTINI zinicializuje funkci PAINT vstup: A - boundary colour; vystup: F: CY=1 neznama barva; meni: AF 012C SCANR precte pixel vpravo vstup: B - prepinac plneni, DE - citac preskoceni; vystup: DE - pre- skoceni, HL - citac pixelu; meni: AF, BC, DE, HL, EI 012F SCANL precte pixel vlevo vstup: nic; vystup: HL - citac pixelu; meni: AF, BC, DE, HL, EI 0132 CHGCAP zmeni stav indikatoru Caps Lock LED vstup: A<>0 zhasnout, A=0 rozsvitit; vystup: nic; meni: AF 0135 GHGSND zmeni stav key click ( pipani klaves ) vstup: A=0 vypnout, A<>0 zapnout; vystup: nic; meni: AF 0138 RSLREG cte registr primarniho slotu vstup: nic; vystup: A - obsah registru primarniho slotu; meni: A 013B WSLREG zapise do registru primarniho slotu vstup: A - hodnota; vystup: nic; meni: nic 013E RDVDP precte status registr VPD vstup: nic; vystup: A - status registr; meni: A 0141 SNSMAT vraci stav stisklych klaves jedne rady klavesnice, viz tabulka vstup: A - cislo rady; vystup: A - stav ( bit=0 stisknuto ); meni: AF, C, EI 0144 PHYDIO vykona nejakou operaci u takovych zarizeni jako je treba disk. U mini- malni konfigurace se skace jen na hacek ( hook ) vstup: nic; vystup: nic; meni: nic 0147 FORMAT inicializuje takova zarizeni jako je treba disk. U minimalni konfigu- race se skace jen na hacek ( hook ) vstup: nic; vystup: nic; meni: nic 014A ISFLIO kontroluje, jestli je pouzit I/O bafr zarizenim vstup: nic;vystup: F: Z=0 file I/O active ( soubor aktivni ); meni: AF 014D OUTDLP konverze znaku tisknutych na tiskarnu vstup: A - znak; vystup: prekonvertuje znak a vytiskne ho; meni: EI MSX RED BOOK - 16 - 0150 GETVCP vraci adresu ukazatele v bafru hudebni fronty vstup: A - cislo fronty ( 0-2 ); vystup: HL - adresa; meni: AF, HL 0153 GETVC2 vraci adresu bajtu v bafru hudebni fronty vstup: L - cislo bajtu ( 0-16 ); vystup: HL - adresa; meni: AF, HL 0156 KILBUF smaze bafr klavesnice vstup: nic; vystup: nic; meni: HL 0159 CALBAS vykona rutinu ve slotu ( call_far ) vstup: IX - adresa; vystup: nic; meni: AF', BC', DE', HL', IY, DI MSX RED BOOK - 17 - 6. Workspace Area *********************** 6.1. Rutiny =============== Oblast pameti RAM od adresy 0F380H do adresy 0FD99H je vyhrazena pro systemove podprogramy a systemove promenne. Tyto nam rikaji, v jakem stavu se nachazi MSX-BIOS a MSX-BASIC nebo urcuji nektere jejich funkce. Prvni bajty pracovniho prostoru obsahuji podprogramy pro obsluhu slotu: .RADIX 16T F380 RDPRIM: OUT (0A8),A ;Set new primary slot F382 LD E,(HL) ;Read memory F383 JR WRPRM1 ;Restore old primary slot Tato rutina je volana z rutiny RDSLT pro prepnuti primarniho slotu a cteni bajtu z jeho pameti. Parametr pro nastaveni noveho primarniho slotu je preda- van v registru A, pro stary slot v registru D. Nacteny bajt je v registru E. F385 WRPRIM: OUT (0A8),A ;Set new primary slot F387 LD (HL),E ;Writo to memory F388 WRPRM1: LD A,D ;Get old setting F389 OUT (0A8),A ;Restore old primary slot F38B RET Tato rutina je volana z rutiny WRSLT pro prepnuti primarniho slotu a zapisu bajtu do jeho pameti. Parametr pro nastaveni noveho primarniho slotu je preda- van v registru A, pro stary slot v registru D. Bajt k zapisu je v registru E. F38C CLPRIM: OUT (0A8),A ;Set new primary slot F38E EX AF,AF' ;Swap to AF for call F38F CALL CLPRM1 ;Do it F392 EX AF,AF' ;Swap to AF F393 POP AF ;Get old setting F394 OUT (0A8),A ;Restore old primary slot F396 EX AF,AF' ;Swap to AF F397 RET F398 CLPRM1: JP (IX) Tato rutina je volana z rutiny CALSLT pro prepnuti primarniho slotu a zavola- ni podprogramu na dane adrese. Parametr pro nastaveni noveho primarniho slotu je predavan v registru A, pro stary slot v zasobniku Z80. Adresa rutiny v re- gistrovem paru IX. 6.2. Promenne ================= Oblast od adresy F39A do adresy FD99 je vyuzita pro "System Variables" - sys- temove promenne. F39A USRTAB DW 475A ;USR 0 F39C DW 475A ;USR 1 F39E DW 475A ;USR 2 F3A0 DW 475A ;USR 3 F3A2 DW 475A ;USR 4 F3A4 DW 475A ;USR 5 F3A6 DW 475A ;USR 6 F3A8 DW 475A ;USR 7 F3AA DW 475A ;USR 8 F3AC DW 475A ;USR 9 Tyto promenne obsahuji adresy definovane prikazem "DEFUSRn". Jejich hodnoty jsou po zapnuti nastaveny interpretrem na hodnotu, ktera zpusobi volani chyby "Illegal function call". Provadeni rutin ve stojovem kodu lze vyvolat pouzitim funkce "USRn(x)". MSX RED BOOK - 18 - F3AE LINL40 DB 37T Sire obrazovky v TEXT modu 40x24 - lze zmenit prikazem "WIDTH" F3AF LINL32 DB 29T Sire obrazovky v TEXT modu 32x24 - lze zmenit prikazem "WIDTH" F3B0 LINLEN DB 37T Aktualni pocet sloupcu obrazovky F3B1 CRTCNT DB 24T Aktualni pocet radku obrazovky F3B2 CLMLST DB 14T Nejmensi pocet sloupcu, ktere musi byt stale dostupne na jednom radku pro tisk dat. Je-li mista mene, vytiskne se nejprve CR a LF. Tuto hodnotu lze menit prikazy "WIDTH" a "SCREEN". F3B3 TXTNAM DW 0000 ;Name table base F3B5 TXTCOL DW 0000 ;Colour table base F3B7 TXTCGP DW 0800 ;Character pattern base F3B9 TXTATR DW 0000 ;Sprite Attribute base F3BB TXTPAT DW 0000 ;Sprite pattern base Bazove adresy pro VDP v rezimu text 40x24. Hodnoty lze menit prikazem "BASE". F3BD T32NAM DW 1800 ;Name table base F3BF T32COL DW 2000 ;Colour table base F3C1 T32CGP DW 0000 ;Character pattern base F3C3 T32ATR DW 1B00 ;Sprite Attribute base F3C5 T32PAT DW 3800 ;Sprite pattern base Bazove adresy pro VDP v rezimu text 32x24. Hodnoty lze menit prikazem "BASE". F3C7 GRPNAM DW 1800 ;Name table base F3C9 GRPCOL DW 2000 ;Colour table base F3CB GRPCGP DW 0000 ;Character pattern base F3CD GRPATR DW 1B00 ;Sprite Attribute base F3CF GRPPAT DW 3800 ;Sprite pattern base Bazove adresy pro VDP v rezimu Graphics. Hodnoty lze menit prikazem "BASE". F3D1 MLTNAM DW 0800 ;Name table base F3D3 MLTCOL DW 0000 ;Colour table base F3D5 MLTCGP DW 0000 ;Character pattern base F3D7 MLTATR DW 1B00 ;Sprite Attribute base F3D9 MLTPAT DW 3800 ;Sprite pattern base Bazove adresy pro VDP v rezimu Multicolor. Hodnoty lze menit prikazem "BASE". F3DB CLIKSW DB 01 Tato promenna ridi interrupt handler ( prerusovaci ovladac ) pipani klaves. CLIKSW=0 nepipat, CLIKSW<>0 pipat. Tuto hodnotu lze menit prikazem "SCREEN". F3DC CSRY DB 01 Souradnice Y kurzoru v rezimu text ( od 1 do CTRCNT ). F3DD CSRX DB 01 Souradnice X kurzoru v rezimu text ( od 1 do LINLEN ). F3DE CNSDFG DB FF Stav zobrazeni FUNC key. CNSDFG=0 nezobrazovat, CNSDFG<>0 zobrazovat. MSX RED BOOK - 19 - F3DF RG0SAV DB 00 ;Ukazka registru modu VDP pro rezim text 40x24 F3E0 RG1SAV DB F0 F3E1 RG2SAV DB 00 F3E2 RG3SAV DB 00 F3E3 RG4SAV DB 01 F3E4 RG5SAV DB 00 F3E5 RG6SAV DB 00 F3E6 RG7SAV DB F4 V techto osmi promennych je ulozen stav osmi registru VDP ( write only ). F3E7 STATFL DB CA Na tuto promennou Interrupt handler prubezne uklada status registr VDP. F3E8 TRGFLG DB F1 Na tuto promennou Interrupt handler prubezne uklada stav ctyr akcnich tlacitek joysticku a klavesy SPACE. Bit=0 stisknuto, =1 nestisknuto. F3E9 FORCLR DB 0F Barva popredi ( foreground color ). Lze menit prikazem "COLOR". F3EA BAKCLR DB 04 Barva pozadi znaku ( background color ). Lze menit prikazem "COLOR". F3EB BDRCLR DB 04 Barva pozadi obrazovky ( border color ). Lze menit prikazem "COLOR". F3EC MAXUPD DB C3 DW 0000 Instrukce Z80 JP 0000. Adresu skoku na standardni rutiny RIGHTC, LEFTC, UPC a DOWNC doplnuje ovladac prikazu "LINE". F3EF MINUPD DB C3 DW 0000 Instrukce Z80 JP 0000. Adresu skoku na standardni rutiny RIGHTC, LEFTC, UPC a DOWNC doplnuje ovladac prikazu "LINE". F3F2 ATRBYT DB 0F ;inkoust pro GRP F3F3 QUEUES DW F959 ;adresa rizeni 3 hudebnich front F3F5 FRCNEW DB FF ;flag "CLOAD/CLOAD?". 00 - CLOAD, FF - CLOAD? F3F6 SCNCNT DB 01 ;citac cteni klavesnice F3F7 REPCNT DB 01 ;citac autorepeatu F3F8 PUTPNT DW FBF0 ;ukazatel zapisu do KEYBUF F3FA GETPNT DW FBF0 ;ukazatel cteni z KEYBUF F3FC CS1200 DB 53 ;LO cykl prvni pule F3FD DB 5C ;LO cykl druha pule F3FE DB 26 ;HI cykl prvni pule F3FF DB 2D ;HI cykl druha pule F400 DB 0F ;citac cyklu hlavicky Techto pet promennych obsahuje parametry pro zaznamovou rychlost 1200 baudu. F401 CS2400 DB 25 ;LO cykl prvni pule F402 DB 2D ;LO cykl druha pule F403 DB 0E ;HI cykl prvni pule F404 DB 16 ;HI cykl druha pule F405 DB 1F ;citac cyklu hlavicky Techto pet promennych obsahuje parametry pro zaznamovou rychlost 2400 baudu. MSX RED BOOK - 20 - F406 LOW DB 53 ;LO cykl prvni pule F407 DB 5C ;LO cykl druha pule F408 HIGH DB 26 ;HI cykl prvni pule F409 DB 2D ;HI cykl druha pule F40A HEADR DB 0F ;citac cyklu hlavicky Techto pet promennych obsahuje bezne parametry pro zaznamovou rychlost 1200Bd. Tyto hodnoty lze menit prikazy "CSAVE" a "SCREEN". F40B ASPCT1 DW 0100 Default pomeru elipsovitosti deleny 256ti pro ovladac prikazu "CIRCLE". F40D ASPCT2 DW 0100 Default pomeru elipsovitosti deleny 256ti pro ovladac prikazu "CIRCLE". Pomer elipsovitosti je pritomen ve dvou formach. Tudiz muze ovladac prikazu "CIRCLE" vybrat to vhodnejsi, aniz by potreboval cokoli zkouset. F40F ENDPRG DB ':' F410 DB 00 F411 DB 00 F412 DB 00 F413 DB 00 Techto pet bajtu tvori prazdny programovy radek. Radek existuje pro pripad o- setreni chyby behem provadeni hlavni behove smycky, neni-li v bafru klavesnice dostupny nejaky tokenizovany text. Pokud je v teto chvili aktivni "ON ERROR GOTO", pak jej opatri nejakym textem pro ukonceni prikazem "RESUME". F414 ERRFLG DB 00 ;cislo posledni chyby F415 LTPOS DB 00 ;pozice hlavy pri "LPRINT" F416 PRTFLG DB 00 ;OUTDO, ukazatel tisknu na: 0-screen, 1-PRT F417 NTMSXP DB 00 Tuto promennou vyuziva rutina OUTDO pro tisk grafickych znaku na tiskarnu. NTMSXP<>0 misto grafickych znaku se tisknou mezery, NTMSXP=0 tisknout grafiku. Hodnotu lze menit prikazem "SCREEN". F418 RAWPRT DB 00 Tuto promennou vyuziva rutina OUTDO pro zmenu tisku grafickych znaku na tis- karnu. RAWPRT=0 zmena, RAWPRT<>0 tak jak je. F419 VLZADR DW 0000 ;adresa znaku pri vykonavani prikazu "VAL" F41B VLZDAT DB 00 ;hodnota znaku pri vykonavani prikazu "VAL" F41C CURLIN DW FFFF ;cislo vykonavane programove radky, FFFF=primy mod F41E KBFMIN DB ':' ;prazdny prefix pro radek pri chybe F41F KBUF DS 318T ;bafr tokenovane formy prikazoveho radku F55D BUFMIN DB ',' ;prazdny prefix pro KBUF pro synchonizaci "INPUT" F55E BUF DS 259T ;bafr pro text z konzoly pro INLIN F661 TTYPOS DB 00 ;pozice pri "PRINT" na obrazovku F662 DIMFLG DB 00 ;DIMFLG=1, kdyz prikaz DIM hleda promennou F663 VALTYP DB 02 ;DAC, 2-integer, 3-string, 4-single, 8-double precision F664 DORES DB 00 ;=1, kdyz je tokenizovan text za prikazem DATA F665 DONUM DB 00 ;=1, kdyz je tokenizovan vyraz za GOTO, GOSUB, THEN, atd. F666 CONTXT DW 0000 ;uschova adresy znaku nasledujiciho za ciselnou konstantou F668 CONSAV DB 00 ;uschova TOKENu ciselne konstanty nalezene v programu F669 CONTYP DB 00 ;uschova typu ciselne konstanty nalezene v programu F66A CONLO DS 8 ;uschova hodnoty ciselne konstanty nalezene v programu F672 MEMSIZ DW F168 Tato promenna obsahuje vrchol ( nejvyssi adresu ) "String storage area".Hodno- tu lze menit prikazy "CLEAR" a "MAXFILES". F674 STKTOP DW F0A0 Adresa dna zasobniku Z80. Hodnotu lze menit prikazy "CLEAR" a "MAXFILES". MSX RED BOOK - 21 - F676 TXTTAB DW 8001 ;zacatek "Program text area" F678 TEMPPT DW F67A ;prvni volna pozice v TEMPST F67A TEMPST DS 30T Tento bafr je pouzit pro ukladani informaci o retezcich. Funguje jako zasobnik pro retezcove operace, ktere do neho ukladaji sve vysledky a nebo je z neho vybiraji. F698 DSCTMP DS 3 Tento bafr je pouzit retezcovymi funkcemi pro meziuschovu vysledku. F69B FRETOP DW F168 Adresa prvniho volneho bajtu ve "String storage area". Pokud se FRETOP=MEMSIZ, je prostor "String storage area" prazdny. F69D TEMP3 DW 0000 Tato promenna je pouzita pro meziuschovu ruznymi castmi interpretru. F69F TEMP8 DW 0000 Tato promenna je pouzita pro meziuschovu ruznymi castmi interpretru. F6A1 ENDFOR DW 0000 Tato promenna je pouzita ovladacem prikazu "FOR" pro meziuschovu koncove adre- sy prikazu behem sestavovani blokovych parametru. F6A3 DATLIN DW 0000 Cislo radky pro beznou polozku prikazu "DATA". F6A5 SUBFLG DB 00 Flag prikazu "ERASE", "FOR", "FN" a "DEF FN" pro rutinu hledani promennych. F6A6 FLGINP DB 00 Flag zpusobu cteni. FLGINP=0 INPUT, FLGINP<>0 READ. F6A7 TEMP DW 0000 Tato promenna je pouzita pro meziuschovu ruznymi castmi interpretru. F6A9 PTRFLG DB 00 Tato promenna je normalne nulova, ale nastavuje se, kdyz jsou nejake operandy v programu prevedeny na ukazatele. F6AA AUTFLG DB 00 ;flag provadeni prikazu "AUTO" F6AB AUTLIN DW 0000 ;cislo radky pro "AUTO" F6AD AUTINC DW 0000 ;krok "AUTO" F6AF SAVTXT DW 0000 Tato promenna je obsazovana behovou smyckou na zacatku kazdeho prikazu umiste- neho v programu. Je pouzita behem osetrovani chyby nastavenim ERRTXT pro ovla- dac prikazu "RESUME" a OLDTXT pro ovladac prikazu "CONT". F6B1 SAVSTK DW F09E Na tuto promennou je ukladan behovou smyckou vrchol zasobniku Z80 na zacatku kazdeho prikazu pro pripadne osetreni chyby. F6B3 ERRLIN DW 0000 ;cislo programove radky s chybou F6B5 DOT DW 0000 Na tuto promennou je ukladano hlavni behovou smyckou a error handlerem ( oset- reni chyb ) cislo radku pri pouziti "." parametru. F6B7 ERRTXT DW 0000 Na tuto promennou uklada error handler ( osetreni chyb ) SAVTXT pro pouziti ovladacem prikazu "RESUME". MSX RED BOOK - 22 - F6B9 ONELIN DW 0000 ;adresa programove radky pro "ON ERROR GOTO" F6BB ONEFLG DB 00 ;=1, je-li aktivni "ON ERROR GOTO" F6BC TEMP2 DW 0000 ;pouzito pro meziuschovu ruznymi castmi interpretru F6BE OLDLIN DW 0000 ;cislo ukoncene radky pro "CONT" po "END" a "STOP" F6C0 OLDTXT DW 0000 ;adresa prave vykonaneho prikazu F6C2 VARTAB DW 8003 ;zacatek "Variable storage area" F6C4 ARYTAB DW 8003 ;zacatek "Array storage area" F6C6 STREND DW 8003 ;prvni bajt za "Array storage area" F6C8 DATPTR DW 8000 ;adresa polozky za prikazem "DATA" F6CA DEFTBL DB 08 ;A F6CB DB 08 ;B F6CC DB 08 ;C F6CD DB 08 ;D F6CE DB 08 ;E F6CF DB 08 ;F F6D0 DB 08 ;G F6D1 DB 08 ;H F6D2 DB 08 ;I F6D3 DB 08 ;J F6D4 DB 08 ;K F6D5 DB 08 ;L F6D6 DB 08 ;M F6D7 DB 08 ;N F6D8 DB 08 ;O F6D9 DB 08 ;P F6DA DB 08 ;Q F6DB DB 08 ;R F6DC DB 08 ;S F6DD DB 08 ;T F6DE DB 08 ;U F6DF DB 08 ;V F6E0 DB 08 ;W F6E1 DB 08 ;X F6E2 DB 08 ;Y F6E3 DB 08 ;Z Techto 26 promennych obsahuje implicitni hodnotu pro kazdou skupinu Basickych promennych.Tyto hodnoty jsou po zapnuti ( "NEW" a "CLEAR" ) nastaveny na "dou- ble precision" a pozdejsi zmena je mozna jen prikazy "DEF INT/STR/SNG/DBL". F6E4 PRMSTK DW 0000 Bazova adresa minuleho blokoveho parametru "FN" v zasobniku Z80. Je pouzita behem sbirani mezivysledku po retezcovych operacich, pro prenos z bloku na za- sobnik. F6E6 PRMLEN DW 0000 ;delka blokoveho parametru "FN" v PARM1 F6E8 PARM1 DS 100T ;bafr pro lokalni promenne "FN" F74C PRMPRV DW F6E4 ;ukazatel na blokovy parametr "FN" F74E PRMLN2 DW 0000 ;delka blokoveho parametru "FN" sestavovaneho v PARM2 F750 PARM2 DS 100T ;bafr pro sestavovani lokalnich promennych "FN" F7B4 PRMFLG DB 00 ;flag hledani lokalnich nebo globalnich promennych F7B5 ARYTA2 DW 0000 Tato promenna je pouzita behem hledani promenne pro meziuschovu ukoncovaci ad- resy pri prohlizeni "storage area" ( skladovaci prostor ). MSX RED BOOK - 23 - F7B7 NOFUNS DB 00 ;flag hledani lokalnich promennych "FN" F7B8 TEMP9 DW 0000 ;pouzito pro meziuschovu ruznymi castmi interpretru F7BA FUNACT DW 0000 ;cislo aktivniho prikazu "FN" F7BC SWPTMP DS 8 ;uschova prvniho parametru pro "SWAP" F7C4 TRCFLG DB 00 ;flag provadeni "TRACE", 0 - off, NZ - on F7C5 FBUFFR DB 43T ;bafr pro uschovu textu vytvareneho behem ciselne konverze F7F0 DECTMP DW 0000 ;meziuscha pro rutinu deleni "double precision" F7F2 DECTM2 DW 0000 ;meziuscha pro rutinu deleni "double precision" F7F4 DECCNT DB 00 ;ulozeni cisel nenulovych bajtu v mantise druheho operandu ;pri deleni "double precision" F7F6 DAC DS 16T ;primarni akumulator interpretru behem vycislovani vyrazu F806 HOLD DS 65T ;ulozeni prvniho operandu pri nasobeni "double precision" F847 ARG DS 16T ;sekundarni akumulator interpretru behem vycislovani vyrazu F857 RNDX DS 8 ;bafr pro nahodna cisla ( "double precision" ) F85F MAXFIL DB 01 ;pocet vyhrazenych uzivatelskych I/O bafru ( "MAXFILES" ) F860 FILTAB DW F16A ;adresa ukazatele v tabulce FCBu F862 NULBUF DW F177 ;adresa prvniho bajtu v datovem I/O bafru 0 F864 PTRFIL DW 0000 ;adresa aktivniho I/O bafru FCB F866 FILNAM DS 11T ;bafr pro zapisovane jmeno souboru; pro disk "FILENAME.BAS" F871 FILNM2 DS 11T ;bafr pro ctene jmeno souboru; take pro porovnani s FILNAM F87C NLONLY DB 00 Tato promenna je normalne nulova, ale behem programu "LOAD" je nastavena na nenulovou hodnotu. Bit 0 je pouzit k zabraneni zavreni I/O bafru 0 behem na- hravani. Bit 7 je pouzit k zabraneni uzavreni I/O bafru 0 uzivatelem, pokud je pozadavek na automaticke odstartovani nahraneho programu. F87D SAVEND DW 0000 ;posledni bajt pri BSAVE F87F FNKSTR DS 160T ;bafr pro 10 16ti znakovych funkcnich klaves; prikaz "KEY" F91F CGPNT DB 00 ;Slot ID a adresa znakoveho generatoru v BIOSu pro rutiny F920 DW 1BBF ;INITXT a INIT32 F922 NAMBAS DW 0000 ;text mode VDP Name table base address F924 CGPBAS DW 0800 ;text mode VDP Character pattern base address F926 PATBAS DW 3800 ;VDP Sprite Pattern Table base address F928 ATRBAS DW 1B00 ;VDP Sprite Attribute Table base address F92A CLOC DW 0000 ;Pixel location F92C CMASK DB 80 ;Pixel mask Tyto dve promenne obsahuji beznou fyzickou adresu bodu pouzivanou standardnimi rutinami RIGHTC, LEFTC, UPC, TUPC, DOWNC, TDOWNC, FETCHC, STOREC, READC, SETC, NSETCX, SCANR a SCANL. CLOC uschovava adresu bajtu obsahujici bezny pixel a CMASK definuje bod v dosahu tohoto bajtu. F92D MINDEL DW 0000 Tato promenna je pouzita ovladacem prikazu "LINE" k uschove nejmensiho rozdilu mezi koncovymi body na radku. F92F MAXDEL DW 0000 Tato promenna je pouzita ovladacem prikazu "LINE" k uschove nejvetsiho rozdilu mezi koncovymi body na radku. F931 ASPECT DW 0000 Tato promenna je pouzita ovladacem prikazu "CIRCLE" k uschove pomeru elipsovi- tosti. Ten je ulozen jako jeden bajt binarni casti. Pomer 0.75 bychom zapsali jako 00C0H. Vyssi bajt je pozadovan pouze pokud je pomer presne 1.00, pak je to 0100H. F933 CENCNT DW 0000 Tato promenna je pouzita ovladacem prikazu "CIRCLE" k uschove citace bodu kon- coveho uhlu. MSX RED BOOK - 24 - F935 CLINEF DB 00 Tato promenna je pouzita ovladacem prikazu "CIRCLE" k uschove flagu dvou linek. Bit 0 je nastaven, pokud je zadana linka od pocatecniho uhlu do stredu a bit 7 je nastaven, pokud je pozadovana z koncoveho uhlu. F936 CNPNTS DW 0000 Tato promenna je pouzita ovladacem prikazu "CIRCLE" k uschove cisel bodu v do- sahu ctyriceti peti stupnoveho segmentu. F938 CPLOTF DB 00 Tato promenna je normalne nulova, ale je nastavena ovladacem prikazu "CIRCLE", pokud je koncovy uhel mensi nez pocatecni. Je pouzita k urceni dosahu bodu, ktere by byly nastaveny "uvnitr" nebo "vne" uhlu. F939 CPCNT DW 0000 Tato promenna je pouzita ovladacem prikazu "CIRCLE" pro uschovani citace bodu dosahu ctyriceti peti stupnoveho segmentu, je to defakto Y souradnice. F93B CPCNT8 DW 0000 Tato promenna je pouzita ovladacem prikazu "CIRCLE" pro uschovani celeho cita- ce bodu na pritomne pozici. F93D CRCSUM DW 0000 Tato promenna je pouzita ovladacem prikazu "CIRCLE" jako citac vypoctu bodu. F93F CSTCNT DW 0000 Tato promenna je pouzita ovladacem prikazu "CIRCLE" jako citac bodu pocatecni- ho uhlu. F941 CSCLXY DW 00 Tato promenna je pouzita ovladacem prikazu "CIRCLE" jako priznak k urceni,jaky smer elipitckeho zplosteni je pouzit: 00=Y, 01=X. F942 CSAVEA DW 0000 ;ruzne meziuschovy rutiny SCANR F944 CSAVEM DB 00 ;ruzne meziuschovy rutiny SCANR F945 CXOFF DW 0000 ;ruzne meziuschovy prikazu "CIRCLE" F947 CYOFF DW 0000 ;ruzne meziuschovy prikazu "CIRCLE" F949 LOHMSK DB 00 ;uschova bodu nejvice vlevo pri "PAINT" F94A LOHDIR DB 00 ;uschova noveho primeho pozadavku kresleni pri "PAINT" F94B LOHADR DW 0000 ;uschova bodu nejvice vlevo pri "PAINT" F94D LOHCNT DW 0000 ;uschova velikosti LH excursion pri "PAINT" F94F SKPCNT DW 0000 ;uschova citace preskoku od SCANR pri "PAINT" F951 MOVCNT DW 0000 ;uschova citace pohybu od SCANR pri "PAINT" F953 PDIREC DB 00 ;pozadavek na kresleni: 40=dolu, C0=nahoru, 00=koncit F954 LFPROG DB 00 ;flag stoupani vlevo pri "PAINT" F955 RTPROG DB 00 ;flag stoupani vpravo pri "PAINT" F956 MCLTAB DW 0000 ;adresa prikazove tabulky makro jazyka "DRAW" and "PLAY" F958 MCLFLG DB 00 ;=0: makro jazyk "DRAW", <>0: makro jazyk "PLAY" MSX RED BOOK - 25 - F959 QUETAB DB 00 ;AQ put position F95A DB 00 ;AQ get position F95B DB 00 ;AQ putback flag F95C DB 7F ;AQ size F95D DW F975 ;AQ address F95F DB 00 ;BQ put position F960 DB 00 ;BQ get position F961 DB 00 ;BQ putback flag F962 DB 7F ;BQ size F963 DW F9F5 ;BQ address F965 DB 00 ;CQ put position F966 DB 00 ;CQ get position F967 DB 00 ;CQ putback flag F968 DB 7F ;CQ size F969 DW FA75 ;CQ address F96B DB 00 ;RQ put position F96C DB 00 ;RQ get position F96D DB 00 ;RQ putback flag F96E DB 00 ;RQ size F96F DW 0000 ;RQ address Techto 24 promennych formuje ridici bloky pro tri hudebni fronty ( VOICAQ, VOICBQ, VOICCQ ) a frontu RS232. Tri hudebni ridici bloky jsou inicializovany rutinou GICINI a podporovany interrupt handlerem a rutinou PUTQ. Ridici blok RS232 neni pouzit v bezne ROM MSX. F971 QUEBAK DB 00 ;AQ putback character F972 DB 00 ;BQ putback character F973 DB 00 ;CQ putback character F974 DB 00 ;RQ putback character Tyto ctyri promenne jsou pouzity pro ukladani nekterych nechtenych znaku,ktere vraci pridruzena fronta. Ackoli je "putback" ( zpetne ukladani ) snadno imple- mentovatelne v MSX ROM se bezne nepouziva. F975 VOICAQ DS 128T ;Voice A queue F9F5 VOICBQ DS 128T ;Voice B queue FA75 VOICCQ DS 128T ;Voice C queue FAF5 RS2IQ DS 64T ;RS232 input queue Tyto 4 bafry obsahuji tri hudebni a jednu nevyuzivanou RS232 frontu. FB35 PRSCNT DB 00 Tuto promennou pouziva ovladac prikazu "PLAY" jako citac cisla pri doplnovani retezce operandu. Aby se zabranilo opakovani aktivace rutinou STRTMS, je vzdy po zpracovani jednoho ze tri operandu nastaven bit 7. FB36 SAVSP DW 0000 Tuto promennou pouziva ovladac prikazu "PLAY" pro ulozeni zasobniku Z80 pred spustenim prekladu do makro jazyka. Tato hodnota je porovnavana se zasobnikem po navratu z prekladu, aby se poznalo, nepretekla-li fronta a nebyl-li preklad predcasne ukoncen. FB38 VOICEN DB 00 ;cislo kanalu pro "PLAY" FB39 SAVVOL DW 0000 ;hlasitost pri pauze v "PLAY" FB3B MCLLEN DB 00 ;prekladac makro jazyka - delka retezce FB3C MCLPTR DW 0000 ;prekladac makro jazyka - adresa retezce FB3E QUEUEN DB 00 ;cislo hudebni fronty pro interrupt handler FB3F MUSICF DB 00 ;iniciace hudebni fronty, bity 0-2 ~ A-C FB40 PLYCNT DB 00 ;cislo sekvence za prikazem "PLAY" MSX RED BOOK - 26 - FB41 VCBA DW 0000 ;Duration counter FB43 DB 00 ;String lenght FB44 DW 0000 ;String address FB46 DW 0000 ;Stack data address FB48 DB 00 ;Music packet lenght FB49 DS 7 ;Music packet FB50 DB 04 ;Octave FB51 DB 04 ;Lenght FB52 DB 78 ;Tempo FB53 DB 88 ;Volume FB54 DW 00FF ;Envelope period FB56 DS 16T ;Space for stack data Tento triceti sedmi bajtovy bafr je pouzit ovladacem prikazu "PLAY" pro uloze- ni beznych parametru pro kanal A. FB66 VCBB DS 37T Tento bafr je pouzit ovladacem prikazu "PLAY" pro ulozeni beznych parametru pro kanal B. Struktura je stejna jako u kanalu A. FB8B VCBC DB 37T Tento bafr je pouzit ovladacem prikazu "PLAY" pro ulozeni beznych parametru pro kanal C. Struktura je stejna jako u kanalu A. FBB0 ENSTOP DB 00 Tato promenna urcuje, zda-li bude ovladac preruseni provadet horky start in- terpretru pri soucasne stisklych klavesach CODE, GRAPH, CTRL a SHIFT. ENSTOP=0 zakazano, ENSTOP<>0 povoleno. FBB1 BASROM DB 00 Tatopromenna urcuje, zda-li budou standardni rutiny ISCNTC a INLIN reagovat na stisk CTRL/STOP. BASROM=0 nereagovat, BASROM<>0 reagovat. FBB2 LINTTB DS 24T Kazda z techto 24 promennych je normalne nenulova, ale je vynulovana, pokud obsah prislusne obrazovkove radky pretece do nasledujici radky. Tyto promenne jsou obsluhovany BIOSem, ale pouze pri pouziti standardni rutiny INLIN ( obra- zovkovy editor ) a pouzivaji se k rozliseni mezi logickymi a fyzickymi radkami. FBCA FSTPOS DW 0000 ;souradnice kurzoru v INLIN po ukonceni textu FBCC CURSAV DB 00 ;znak, na nemz je kurzor FBCD FNKSWI DB 00 ;CHNS, funkcni klavesy jsou: =0 se SHIFTem, <>0 bez SHIFTu FBCE FNKFLG DS 10T ;=1 "KEY (n) ON" FBD8 ONGSBF DB 00 Tato promenna je inkrementovana interrupt handlerem pokazde,kdyz zarizeni chce archivovat nezbytne podminky pro vyvolani preruseni. Promenna je pouzita beho- vou smyckou k zjisteni, zda-li nejake preruseni neprobiha bez hledani v TRPTBL. MSX RED BOOK - 27 - FBD9 CLIKFL DB 00 ;zabraneni falesnemu pipani klaves pri FUNC FBDA OLDKEY DS 11T ;predchazejici stav matice klavesnice FBE5 NEWKEY DS 11T ;soucasny stav matice klavesnice FBF0 KEYBUF DS 40T ;bafr klavesnice FC18 LINWRK DS 40T ;uschova radku z obrazovky FC40 PATWRK DS 8 ;uschova 8x8 bodove predlohy FC48 BOTTOM DW 8000 ;nejnizsi adresa RAM pouzitelna interpretrem FC4A HIMEM DW F380 ;nejvyssi adresa+1 RAM pouzitelna interpretrem FC4C TRPTBL DS 3 ;klavesa 1 FC4F DS 3 ;klavesa 2 FC52 DS 3 ;klavesa 3 FC55 DS 3 ;klavesa 4 FC58 DS 3 ;klavesa 5 FC5B DS 3 ;klavesa 6 FC5E DS 3 ;klavesa 7 FC61 DS 3 ;klavesa 8 FC64 DS 3 ;klavesa 9 FC67 DS 3 ;klavesa 10 FC6A DS 3 ;STOP FC6D DS 3 ;SPRITE FC70 DS 3 ;STRIG 0 FC73 DS 3 ;STRIG 1 FC76 DS 3 ;STRIG 2 FC79 DS 3 ;STRIG 3 FC7C DS 3 ;STRIG 4 FC7F DS 3 ;INTERVAL FC82 DS 3 ;nevyuzito FC85 DS 3 ;nevyuzito FC88 DS 3 ;nevyuzito FC8B DS 3 ;nevyuzito FC8E DS 3 ;nevyuzito FC91 DS 3 ;nevyuzito FC94 DS 3 ;nevyuzito FC97 DS 3 ;nevyuzito Techto 26 promennych obsahuje bezny stav ovladacu preruseni od zarizeni. Prvni bajt kazde promenne obsahuje status zarizeni ( bit 0-on, 1-stop, 2-event acti- ve ) a je menen ovladacem preruseni, prerusovacim procesem behove smycky a ov- ladaci prikazu "DEVICE ON/OFF/STOP" a "RETURN". Dva zbyvajici bajty jsou nas- taveny ovladacem prikazu "ON DEVICE GOSUB" a obsahuji adresu programoveho rad- ku s podprogramem, ktery se ma vykonat pri preruseni programu. FC9A RTYCNT DB 00 ;nevyuzito v MSX ROM FC9B INTFLG DB 00 ;0 - nic, 3 - CTRL/STOP, 4 - STOP FC9C PADY DB 00 ;Y souradnice posledniho bodu nalezeneho "touchpad"em FC9D PADX DB 00 ;X souradnice posledniho bodu nalezeneho "touchpad"em FC9E JIFFY DW 0000 ;vzestupny citac preruseni pro "TIME" FCA0 INTVAL DW 0000 ;velikost intervalu pro "ON INTERVAL" FCA2 INTCNT DW 0000 ;sestupny citac preruseni pro "ON INTERVAL" FCA4 LOWLIM DB 31 ;minimalni delka start bitu pro TAPION FCA5 WINWID DB 22 ;delka LO/HI cyklu pro TAPION FCA6 GRPHED DB 00 ;=1 od CNVCHR pri nalezeni grafickeho znaku v hlavicce FCA7 ESCCNT DB 00 ;citac parametru ESC pro CHPUT FCA8 INSFLG DB 00 ;00 - mod psani, FF - mod insert FCA9 CSRSW DB 00 ;pri cekani na klavesu kurzor: =0 smazan, <>0 zobrazen FCAA CSTYLE DB 00 ;=0 kurzor 8x8, <>0 kurzor jako podtrzitko FCAB CAPST DB 00 ;caps lock status, =0 vypnut, <>0 zapnut FCAC KANAST DB 00 ;status klavesy DEAD ( KANA ) FCAD KANAMD DB 00 ;mod klavesnice na japonskych pocitacich FCAE FLBMEM DB 00 ;file I/O error FCAF SCRMOD DB 00 ;rezim obrazovky 0-TEXT, 1-GI, 2-GII, 3-MULTICOLOR FCB0 OLDSCR DB 00 ;predchazejici rezim obrazovky MSX RED BOOK - 28 - FCB1 CASPRV DB 00 ;znak vraceny I/O bafru pri funkci magnetofonu putback FCB2 BDRATR DB 00 ;hranicni barva pro "PAINT" FCB3 GXPOS DW 0000 ;ruzne ukladana graficka souradnice X FCB5 GYPOS DW 0000 ;ruzne ukladana graficka souradnice Y FCB7 GRPACX DW 0000 ;bezna graficka souradnice X pro GRPPRT FCB9 GRPACY DW 0000 ;bezna graficka souradnice Y pro GRPPRT FCBB DRWFLG DB 00 ;bity 6 a 7 pri "N" a "B" v "DRAW" FCBC DRWSCL DB 00 ;snimaci faktor pri "S" v "DRAW" FCBD DRWANG DB 00 ;uhel pri "A" v "DRAW" FCBE RUNBNF DB 00 ;pri "BLOAD": 0 neni auto run, <>0 je auto run ( ",R" ) FCBF SAVENT DW 0000 ;vstupni adresa pri "BSAVE" a "BLOAD" FCC1 EXPTBL DB 00 ;Primary slot 0 FCC2 DB 00 ;Primary slot 1 FCC3 DB 00 ;Primary slot 2 FCC4 DB 00 ;Primary slot 3 Prislusna promenna je nastavena na 80h pri nalezeni primarniho rozsirujiciho slotu. FCC5 SLTTBL DB 00 ;Primary slot 0 FCC6 DB 00 ;Primary slot 1 FCC7 DB 00 ;Primary slot 2 FCC8 DB 00 ;Primary slot 3 Tyto promenne obsahuji duplikaty obsahu registru ctyr moznych sekundarnich rozsirujicich slotu. FCC9 SLTATR DS 4 ;PS0,SS0 FCCD DS 4 ;PS0,SS1 FCD1 DS 4 ;PS0,SS2 FCD5 DS 4 ;PS0,SS3 FCD9 DS 4 ;PS1,SS0 FCDD DS 4 ;PS1,SS1 FCE1 DS 4 ;PS1,SS2 FCE5 DS 4 ;PS1,SS3 FCE9 DS 4 ;PS2,SS0 FCED DS 4 ;PS2,SS1 FCF1 DS 4 ;PS2,SS2 FCF5 DS 4 ;PS2,SS3 FCF9 DS 4 ;PS3,SS0 FCFD DS 4 ;PS3,SS1 FD01 DS 4 ;PS3,SS2 FD05 DS 4 ;PS3,SS3 Atributy nalezenych rozsirujicich ROM slotu. Bit: 7 - BASIC program, 6 - Devi- ce handler ( ovladac zarizeni ), 5 - Statement handler ( ovladac prikazu ). ROM s programem ve strojovem kodu je umistena do stranky 1 a ROM s programem v MSX-BASIC je umistena do stranky 2. FD09 SLTWRK DS 128T Tento bafr poskytuje dva bajty lokalniho pracovniho prostoru pro kazdy ze 64 moznych rozsirujicich slotu. FD89 PROCNM DS 16T Tento bafr je pouzit k uschove jmena zarizeni nebo jmena prikazu pro jeho vyz- kouseni v rozsirujicim ROM slotu. FD99 DEVICE DB 00 Tato promenna je pouzita pro zpracovani kodu zarizeni ( kod je v rozsahu 0-3 ) v rozsirujicim slotu. MSX RED BOOK - 29 - 6.3. The Hooks - hacky ========================== Oblast "Workspace area" od adresy FD9A obsahuje 112 hacku. Kazdy z nich je po zapnuti naplnen peti instrukcemi RET Z80. Tyto jsou volany ze strategickych mist v BIOSu nebo interpretru a tudiz takto muze byt zakladni ROM rozsirena. Jedna se hlavne o Disk BASIC. Kazdy hacek obsahuje dostatek mista pro ulozeni instrukce potrebne pro volani slotu: RST 30H DB Slot ID DW Address RET Hacky jsou vypsany na nasledujicich strankach spolecne s adresami odkud jsou volany a s informaci, jaka je jejich funkce. FD9A HKEYI DS 5 ;0C4A Interrupt handler FD9F HTIMI DS 5 ;0C53 Interrupt handler FDA4 HCHPU DS 5 ;08C0 CHPUT std routine FDA9 HDSPC DS 5 ;09E6 Display cursor FDAE HERAC DS 5 ;0A33 Erase cursor FDB3 HDSPF DS 5 ;0B2B DSPFNK std routine FDB8 HERAF DS 5 ;0B15 ERAFNK std routine FDBD HTOTE DS 5 ;0842 TOTEXT std routine FDC2 HCHGE DS 5 ;10CE CHGET std routine FDC7 HINIP DS 5 ;071E Copy character set to VDP FDCC HKEYC DS 5 ;1025 Keyboard decoder FDD1 HKEYA DS 5 ;0F10 Keyboard decoder FDD6 HNMI DS 5 ;1398 NMI std routine FDDB HPINL DS 5 ;23BF PINLIN std routine FDE0 HQINL DS 5 ;23CC QINLIN std routine FDE5 HINLI DS 5 ;23D5 INLIN std routine FDEA HONGO DS 5 ;7810 "ON DEVICE GOSUB" FDEF HDSKO DS 5 ;7C16 "DSKO$" FDF4 HSETS DS 5 ;7C1B "SET" FDF9 HNAME DS 5 ;7C20 "NAME" FDFE HKILL DS 5 ;7C25 "KILL" FE03 HIPL DS 5 ;7C2A "IPL" FE08 HCOPY DS 5 ;7C2F "COPY" FE0D HCMD DS 5 ;7C34 "CMD" FE12 HDSKF DS 5 ;7C39 "DSKF" FE17 HDSKI DS 5 ;7C3E "DSKI$" FE1C HATTR DS 5 ;7C43 "ATTR$" FE21 HLSET DS 5 ;7C48 "LSET" FE26 HRSET DS 5 ;7C4D "RSET" FE2B HFIEL DS 5 ;7C52 "FIEL" FE30 HMKI$ DS 5 ;7C57 "MKI$" FE35 HMKS$ DS 5 ;7C5C "MKS$" FE3A HMKD$ DS 5 ;7C61 "MKD$" FE3F HCVI DS 5 ;7C66 "CVI" FE44 HCVS DS 5 ;7C6B "CVS" FE49 HCVD DS 5 ;7C70 "CVD" MSX RED BOOK - 30 - FE4E HGETP DS 5 ;6A93 Locate FCB FE53 HSETF DS 5 ;6AB3 Locate FCB FE58 HNOFO DS 5 ;6AF6 "OPEN" FE5D HNULO DS 5 ;6B0F "OPEN" FE62 HNTFL DS 5 ;6B3B Close I/O buffer 0 FE67 HMERG DS 5 ;6B63 "MERGE/LOAD" FE6C HSAVE DS 5 ;6BA6 "SAVE" FE71 HBINS DS 5 ;6BCE "SAVE" FE76 HBINL DS 5 ;6BD4 "MERGE/LOAD" FE7B HFILE DS 5 ;6C2F "FILES" FE80 HDGET DS 5 ;6CB3 "GET/PUT" FE85 HFILO DS 5 ;6C51 Sequential output FE8A HINDS DS 5 ;6C79 Sequential input FE8F HRSLF DS 5 ;6CD8 "INPUT$" FE94 HSAVD DS 5 ;6D03 "LOC", 6D14 "LOF" ;6D25 "EOF", 6D39 "FPOS" FE99 HLOC DS 5 ;6D0F "LOC" FE9E HLOF DS 5 ;6D20 "LOF" FEA3 HEOF DS 5 ;6D33 "EOF" FEA8 HFPOS DS 5 ;6D43 "FPOS" FEAD HBAKU DS 5 ;6E36 "LINE INPUT$" FEB2 HPARD DS 5 ;6F15 Parse device name FEB7 HNODE DS 5 ;6F33 Parse device name FEBC HPOSD DS 5 ;6F37 Parse device name FEC1 HDEVN DS 5 ;Tento hacek neni pouzit FEC6 HGEND DS 5 ;6F8F I/O function despatcher FECB HRUNC DS 5 ;629A Run - clear FED0 HCLEA DS 5 ;62A1 Run - clear FED5 HLOPD DS 5 ;62AF Run - clear FEDA HSTKE DS 5 ;62F0 Reset stack FEDF HISFL DS 5 ;145F ISFLIO std routine FEE4 HOUTD DS 5 ;1B46 OUTDO std routine FEE9 HCRDO DS 5 ;7328 CR, LF to OUTDO FEEE HDSKC DS 5 ;7374 Mainloop line input FEF3 HDOGR DS 5 ;593C Line draw FEF8 HPRGE DS 5 ;4039 Program end FEFD HERRP DS 5 ;40DC Error handler FF02 HERRF DS 5 ;40FD Error handler FF07 HREAD DS 5 ;4128 Mainloop "OK" FF0C HMAIN DS 5 ;4134 Mainloop FF11 HDIRD DS 5 ;41A8 Mainloop direct statement FF16 HFINI DS 5 ;4237 Mainloop finished FF1B HFINE DS 5 ;4247 Mainloop finished FF20 HCRUN DS 5 ;42B9 Tokenise FF25 HCRUS DS 5 ;4353 Tokenise FF2A HISRE DS 5 ;437C Tokenise FF2F HNTFN DS 5 ;43A4 Tokenise FF34 HNOTR DS 5 ;44EB Tokenise FF39 HSNGF DS 5 ;45D1 "FOR" FF3E HNEWS DS 5 ;4601 Runloop new statement FF43 HGONE DS 5 ;4646 Runloop execute FF48 HCHRG DS 5 ;4666 CHRGTR std routine FF4D HRETU DS 5 ;4821 "RETURN" FF52 HPRTF DS 5 ;4A5E "PRINT" FF57 HCOMP DS 5 ;4A54 "PRINT" FF5C HFINP DS 5 ;4AFF "PRINT" FF61 HTRMN DS 5 ;4B4D "READ/INPUT" error FF66 HFRME DS 5 ;4C6D Expression Evaluator FF6B HNTPL DS 5 ;4CA6 Expression Evaluator MSX RED BOOK - 31 - FF70 HEVAL DS 5 ;4DD9 Factor Evaluator FF75 HOKNO DS 5 ;4F2C Factor Evaluator FF7A HFING DS 5 ;4F3E Factor Evaluator FF7F HISMI DS 5 ;51C3 Runloop execute FF84 HWIDT DS 5 ;51CC "WIDTH" FF89 HLIST DS 5 ;522E "LIST" FF8E HBUFL DS 5 ;532D Detokenise FF93 HFRQI DS 5 ;543F Convert to integer FF98 HSCNE DS 5 ;5514 Line number to pointer FF9D HFRET DS 5 ;67EE Free descriptor FFA2 HPTRG DS 5 ;5EA9 Variable search FFA7 HPHYD DS 5 ;148A PHYDIO std routine FFAC HFORM DS 5 ;148E FORMAT std routine FFB1 HERRO DS 5 ;406F Error handler FFB6 HLPTO DS 5 ;085D LPTOUT std routine FFBB HLPTS DS 5 ;0884 LPTSTT std routine FFC0 HSCRE DS 5 ;79CC "SCREEN" FFC5 HPLAY DS 5 ;73E5 "PLAY" statement 6.4. Zbyvajici prostor ========================== Prostor od adresy FFCA az do konce RAM neni ve standardnim MSXu vyuzit. Pouze na poslednim bajtu pameti RAM je uschovana informace o slotech, ktere system rozsiruji. FFCA UNUSED DS 53T ;nevyuzity prostor FFFF CONFIG DB 00 ;informace o rozsirujicich slotech MSX RED BOOK - 32 - 7. Emulator systemu MSX ***************************** 7.1. Pracovni prostor emulatoru =================================== Emulator MSX verze 1.C na pocitaci SORD m.5 vyuziva nektere systemove promenne jinym zpusobem: F871 FILNM2 DB 00 Tato promenna je pouzita pro identifikaci typu souboru nahravaneho z magneto- fonu ( zarizeni "CMT:" ). "A" - ASCII file (.AS), "M" - CSAVEd file (.MX), "B" - BSAVEd file (.BN). F872 UNUSE1 DS 10T ;nevyuzito FD7A ATTRIB DB 00 ;Attribut FD7B FILNAM DS 06 ;jmeno souboru FD81 DOTNAM DM '.' ;tecka ve jmenu FD82 EXTNAM DM ' ' ;pripona jmena: AS ascii, MX basic, BN binary. FD84 BEGADR DW 0000 ;pocatecni adresa FD86 LENGHT DW 0000 ;delka souboru FD88 STAADR DW 0000 ;adresa autostartu FD8A UNUSID DS 0F ;nevyuzity prostor v hlavicce FD99 DEVICE DB 00 ;vyznam nezmenen Techto 31 bajtu je pouzito pro nacitanou a zapisovanou hlavicku souboru. Od adresy FD09 a FD89 jsou i puvodni bafry pro rozsirujici sloty. Protoze prvni bafr neni vubec vyuzit, je jeho konec pouzivan pro ID blok "CMT:. Druhy bafr je i nadale vyuzivan pro zapis jmena zarizeni. Tyto prostory spolu nekoliduji. FDEF HDSKO DS 5 ;7C16 "DSKO$" FDF4 HSETS DS 5 ;7C1B "SET" FDF9 HNAME DS 5 ;7C20 "NAME" FDFE HKILL DS 5 ;7C25 "KILL" FE03 HIPL DS 5 ;7C2A "IPL" FE08 HCOPY DS 5 ;7C2F "COPY" FE0D HCMD DS 5 ;7C34 "CMD" FE12 HDSKF DS 5 ;7C39 "DSKF" FE17 HDSKI DS 5 ;7C3E "DSKI$" FE1C HATTR DS 5 ;7C43 "ATTR$" FE21 HLSET DS 5 ;7C48 "LSET" FE26 HRSET DS 5 ;7C4D "RSET" FE2B HFIEL DS 5 ;7C52 "FIEL" FE30 HMKI$ DS 5 ;7C57 "MKI$" FE35 HMKS$ DS 5 ;7C5C "MKS$" FE3A HMKD$ DS 5 ;7C61 "MKD$" FE3F HCVI DS 5 ;7C66 "CVI" FE44 HCVS DS 5 ;7C6B "CVS" FE49 HCVD DS 5 ;7C70 "CVD" Tyto hacky nejsou v emulatoru vyuzity. V originalu se tyto diskove prikazy a funkce vykonavaji tak, ze se jako prvni vola prislusny hacek a po navratu se skoci na chybove hlaseni "Illegal function call". V emulatoru se rovnou skace na chybove hlaseni. FEC1 HDEVN DS 5 ;jine zarizeni nez "CMT:" pri CLOAD/CSAVE Vyznam tohoto hacku byl zmenen. "Povesenim" se na tento hacek je mozne zapiso- vat a nacitat basicky program z jineho zarizeni nez jen magnetofonu. Mechanis- mus tohoto "poveseni" je popsan nize. MSX RED BOOK - 33 - FFCA WRKREG DB 00 ;schova registru PSG se kterym se pracuje FFCB SGREG0 DB 00 ;Registr 0 PSG FFCC SGREG1 DB 00 ;Registr 1 PSG FFCD SGREG2 DB 00 ;Registr 2 PSG FFCE SGREG3 DB 00 ;Registr 3 PSG FFCF SGREG4 DB 00 ;Registr 4 PSG FFD0 SGREG5 DB 00 ;Registr 5 PSG FFD1 SGREG6 DB 00 ;Registr 6 PSG FFD2 SGREG7 DB 00 ;Registr 7 PSG FFD3 SGREG8 DB 00 ;Registr 8 PSG FFD4 SGREG9 DB 00 ;Registr 9 PSG FFD5 SGREGA DB 00 ;Registr 10 PSG FFD6 SGREGB DB 00 ;Registr 11 PSG FFD7 SGREGC DB 00 ;Registr 12 PSG FFD8 SGREGD DB 00 ;Registr 13 PSG FFD9 SGREGE DB 00 ;Registr 14 PSG FFDA SGREGF DB 00 ;Registr 15 PSG Techto 17 bajtu je pouzito pro emulaci zvukoveho cipu AY-3-8910. Dalsi promenne vznikly pouzitim MONITORu ROM pocitace SORD m5: -------------------------------------------------------------- 7019 STDLY DB 14 Tato promenna urcuje zaznamovou rychlost, s jakou se bude zapisovat na magne- tofon. Hodnotu lze menit parametrem v prikazech "SCREEN" a "CSAVE". Hodnota mensi nez 14h je zmenena na 14h, takze nenastava konflikt pri pouzivani origi- nalnich MSX programu, ktere pouzivaji hodnoty 1 a 2 ( cimz by byla nastavena nesmyslne vysoka rychlost ). 708E SYSFMT DB 00 ;bit: 1 - LDMONT 0=OLD 1=VERIFY ;bit: 0 - BUFSMT nacitat do 0=RAM 1=VRAM, v emulatoru vzdy 0 Tato promenna slouzi pro nastaveni prenosovych parametru z magnetofonu. 7090 AVILMT DB 00 Tato promenna slouzi pro ulozeni delky prave nacteneho bloku. 7236 MODROM DB 01 ;mode ROM 723A MODRAM DB 00 ;mode RAM 723D CHANEL DB 7F ;channel for OUT Tyto tri promenne jsou pouzity v rutinach, ktere prepinaji RAM 64 KB a MONITOR ROM. Ukazka je pro system 64 KRD ( eventuelne pro 64 KRX ). Pro modul 64 KBI jsou hodnoty zmeneny na 00, 01 a 6C a pro modul 64 KBF na 00, 01 a 30. V prin- cipu vypadaji rutiny pro prepinani ROM/RAM nasledovne: 7235 ROM LD A,01 7237 JR 723B 7239 RAM LD A,00 723B DI 723C OUT (7F),A 723E RET 7255 AVRHL DB 00,00,00 Tato promenna slouzi pro ukladani delek pulsu pri cteni z magnetofonu. MSX RED BOOK - 34 - 7.2. Zpusob vyuziti hacku HDEVN =================================== Abychom mohli tento hacek vyuzit, musime zacit svuj podprogram nize uvedenym zpusobem, nebo zpusobem velmi podobnym. V prikazech CLOAD/CLOAD?/CSAVE se pri testovani jmena zarizeni skace na hacek HDEVN a pak na chybu "Bad file name", je-li uvedeno zarizeni jineho jmena nez "CMT:". Nejprve tedy musime nas pod- program "povesit" na hacek: START: LD HL,CBASIC ;adresa podprogramu LD A,00 ;do akumulatoru instrukce skoku ORG $-1 JP 0000 ORG $-2 LD (0FEC2),HL ;na adresu 0FEC1H ulozit instrukci LD (0FEC1),A ;JP CBASIC RET ;a ven Nyni se pri skoku na hacek HDEVN neprovede pouhy RET, nybrz skok na podprogram CBASIC, ktery by mel zacinat priblizne takto: CBASIC: POP DE ;zahozeni navratove adresy volani hacku POP BC ;vyzvednuti adresy zacatku jmena zarizeni POP DE ;vyzvednuti adresy, ze ktere byl test volan LD HL,6FC7 ;adresa pri CSAVE RST 20 ;porovnani HL a DE JR Z,CSAVE ;pri shode skoc na podprogram CSAVE LD HL,7137 ;adresa pri CLOAD RST 20 ;porovnani HL a DE JP NZ,475A ;pri neshode skoc na "Illegal function call" CLOAD: CALL DEVNAM ;kontrola jmena zarizeni ... ;a zde jiz zpracovani CLOAD a VERIFY ... ;na adrese 0F3F5H je priznak CLOAD/VERIFY JP 706D ;skok na konec rutiny prikazu CLOAD, ocekava ;na (0F676) zacatek a v HL konec programu CSAVE: CALL DEVNAM ;kontrola jmena zarizeni ... ;podprogram CSAVE POP HL ;obnoveni ukazatele na prikaz RET ;navrat z rutiny prikazu CSAVE DEVNAM: LD D,B ;do DE adresu jmena uvedeneho LD E,C LD HL,JMENO ;do HL adresu jmena ocekavaneho LD B,3 ;tri znaky jmena DEVLOP LD A,(DE) ;znak uvedeneho jmena AND 0DF ;jen velka pismena CP (HL) ;porovnej s ocekavanym jmenem JP NZ,6E6B ;pri neshode skoc na "Bad file name" INC DE ;posun na dalsi znak INC HL DJNZ DEVLOP ;celkem trikrat INC HL ;posun za ":",nyni HL ukazuje na jmeno souboru RET JMENO: DM 'CAS' ;ocekavane jmeno zarizeni Podle navratovych adres se rozlisi, ktery z ovladacu prikazu CLOAD a CSAVE na hacek odsocil a pokud se na hacek skocilo odjinud je ohlasena chyba "Illegal function call". V zasobniku je ulozena i adresa, na ktere lezi "filspec", coz je "jmeno zarizeni"+":"+"jmeno souboru". Jmeno zarizeni ma vzdy 3 znaky. Pokud chceme, muzeme jmeno zarizeni zkontrolovat ( podprogram DEVNAM ) a pripadne skocit na chybu "Bad file name". MSX RED BOOK - 35 - 7.3. Volne prostory ======================= Zde jsou popsany prostory ve "workspace area", ktere nejsou v emulatoru zaru- cene systemem vyuzity. Lze je obsadit kratkymi podprogramy ve strojovem kodu. F872-F87B nacitane jmeno z "CAS:" F969-F970 ridici blok RS232 FAF5-FB34 RS232 FC82-FC9A nevyuzito v devices interrupt handler FD09-FD79 sloty FDEF-FE4D hacky FFDB-FFFE konec pameti MSX RED BOOK - 36 - T H E M S X R E D B O O K Podle ruznych materialu a na zaklade vlastnich zku- senosti sestavil a napsal LZR Soft. V Kladne 1991. Vydani treti,pocet vytisku dle potreby. Vytisteno na tiskarne LA120 firmy DEC. 04-NOV-91