Systémové proměnné počítačů Sinclair ZX Spectrum
Author
Albert FloresSystémové proměnné počítačů Sinclair ZX Spectrum jsou místa v paměti tohoto počítače, která ovlivňují chování jeho základního programového vybavení v jeho paměti ROM. V paměti počítače jsou umístěny od adresy 23552 po adresu 23733. Pokud je k počítači připojen ZX Interface 1, jsou vytvořeny další systémové proměnné v oblasti od adresy 23734 po adresu 23791. Tyto systémové proměnné jsou vytvořeny až při vložení příkazu pro ZX Interface 1 nebo při pokusu o vložení řádku se syntaktickou chybou. Počítače ZX Spectrum 128K/+2/+2A/+3 mají další systémové proměnné umístěné v oblasti tiskové vyrovnávací paměti tiskárny ZX Printer (tyto počítače v režimu 128 Basic, resp. +3 Basic ZX Printer nevyužívají).
Systém ZX Spectra využívá jako ukazatel na systémové proměnné registr IY (obsahuje vždy hodnotu 23610 desítkově, 5C3A šestnáctkově, ukazuje tedy přímo na systémovou proměnnou ERRNR), jeho hodnotu je nutné zachovat při využívání některých podprogramů v ROM a při využívání přerušení v módu IM1. Dvoubytové systémové proměnné jsou uloženy ve tvaru nejdříve nejméně významný bajt a po něm nejvíce významný bajt.
Systémové proměnné disketových jednotek Didaktik 40 a Didaktik 80 jsou umístěny v jejich vlastní paměti RAM od adresy 14336 po adresu 16383.
Přehled systémových proměnných
název | adresa | velikost | význam | |
---|---|---|---|---|
KSTATE | 23552 | 5C00 | 8 | dočasné hodnoty při vyhodnocování stisknuté klávesy |
LAST_K | 23560 | 5C08 | 1 | kód poslední stisknuté klávesy |
REPDEL | 23561 | 5C09 | 1 | doba stisku klávesy po jejíž uplynutí bude držení klávesy vyhodnoceno jako opakovaný stisk (v padesátinách sekundy) |
REPPER | 23562 | 5C0A | 1 | pauza mezi jednotlivými vyhodnoceními opakovaného stisknutí klávesy při jejím držení (v padesátinách sekundy) |
DEFADD | 23563 | 5C0B | 2 | adresa argumentu uživatelem definované funkce DEF FN při vyhodnocování této funkce. Pokud není vyhodnocována uživatelem definovaná funkce, tato systémová proměnná obsahuje nulu. +more |
K_DATA | 23565 | 5C0D | 1 | informace o barvách vložených jako řídicí znaky z klávesnice |
TVDATA | 23565 | 5C0E | 1 | informace o barvách a pozicování AT a TAB při tisku na obrazovku |
STRMS | 23568 | 5C10 | 38 | adresy kanálů připojených na jednotlivé linky |
CHARS | 23606 | 5C36 | 2 | adresa definice znakové sady od mezery po znak ©. Adresa ale ukazuje na znak s kódem nula (v případě standardního ASCII by se jednalo o znak NULL), proto do systémové proměnné musí být uložena hodnota o 256 menší, než je skutečný začátek definice znakové sady. |
RASP | 23608 | 5C38 | 1 | délka zvuku varovného bzučáku |
PIP | 23609 | 5C39 | 1 | délka pípnutí po stisku klávesy |
ERRNR | 23610 | 5C3A | 1 | číslo chybového hlášení zmenšené o 1 (takže chybovému hlášení 0 OK odpovídá hodnota -1, tj. 255) |
FLAGS | 23611 | 5C3B | 1 | různé příznaky pro práci Basicu, blíže nespecifikovatelné |
TVFLAG | 23612 | 5C3C | 1 | příznaky využívané při tisku na obrazovku |
ERR_SP | 23613 | 5C3D | 2 | adresa adresy, na kterou se skočí v případě výskytu chybového hlášení (rst 08) |
LIST_SP | 23615 | 5C3F | 2 | adresa adresy, na kterou se skočí po ukončení výpisu programu. Obvykle je hodnota této systémové proměnné shodná s hodnotou ERR_SP. |
MODE | 23617 | 5C41 | 1 | určuje režim kurzoru při editaci řádku a při vkládání dat příkazu INPUT. Hodnoty 0, 1, 2 a 4 nastaví režim L/C, E, G a K. |
NEWPPC | 23618 | 5C42 | 2 | číslo řádku, na který skočí příkaz GO TO nebo GO SUB |
NSPPC | 23620 | 5C44 | 1 | pořadí příkazu v rámci řádku, na který se skočí. Nastavením této systémové proměnné lze simulovat příkaz GO TO na daný příkaz v řádku |
PPC | 23621 | 5C45 | 2 | číslo právě vykonávaného řádku |
SUBPPC | 23623 | 5C47 | 1 | pořadí právě vykonávaného příkazu v rámci řádku |
BORDCR | 23624 | 5C48 | 1 | barva okraje (borderu) a editační části obrazovky |
E_PPC | 23625 | 5C49 | 2 | číslo řádku s programovým kurzorem (řádek, který je přesunut do editační oblasti při stisku klávesy EDIT) |
VARS | 23627 | 5C4B | 2 | adresa začátku oblasti, ve které jsou uloženy hodnoty proměnných Basicu |
DEST | 23629 | 5C4D | 2 | adresa právě používané proměnné |
CHANS | 23631 | 5C4F | 2 | adresa informací o kanálech |
CURCHL | 23633 | 5C51 | 2 | adresa kanálu, který je právě otevřen |
PROG | 23635 | 5C53 | 2 | adresa začátku oblasti paměti, ve které je uložen Basicový program |
NXTLIN | 23637 | 5C55 | 2 | adresa dalšího řádku v programu |
DATADD | 23639 | 5C57 | 2 | adresa konce naposledy čtené položky u příkazu DATA |
E_LINE | 23641 | 5C59 | 2 | adresa právě zapisovaného příkazu |
K_CUR | 23643 | 5C5B | 2 | adresa kurzoru |
CH_ADD | 23645 | 5C5D | 2 | adresa následujícího znaku, který se bude interpretovat |
X_PTR | 23647 | 5C5F | 2 | adresa výskytu syntaktické chyby |
WORKSP | 23649 | 5C61 | 2 | adresa dočasného pracovního prostoru |
STKBOT | 23651 | 5C63 | 2 | adresa začátku zásobníku kalkulátoru |
STKEND | 23653 | 5C65 | 2 | adresa vrcholu zásobníku kalkulátoru, začátek volného místa |
BREG | 23655 | 5C67 | 1 | registr B kalkulátoru |
MEM | 23656 | 5C68 | 2 | adresa oblasti používané kalkulátorem, obvykle adresa oblasti MEMBOT, ale ne vždy |
FLAGS2 | 23658 | 5C6A | 1 | další příznaky používané při práci Basicu. Bit 3 této systémové proměnné určuje, zda je zapnutý caps lock. |
DF_SZ | 23659 | 5C6B | 1 | počet řádků v editační části obrazovky. Pokud je počet řádků nastavený na 0 a mělo by dojít k obvyklému využití této části, např. pro výpis chybového hlášení, systém ZX Spectra se zhroutí, proto je lepší pro výpis textu v dolní části obrazovky použít PRINT #1. |
S_TOP | 23660 | 5C6C | 2 | číslo řádku programu, který je vypsán jako první při automatickém výpisu programu na obrazovku |
OLDPPC | 23662 | 5C6E | 2 | číslo řádku, na který skočí příkaz CONTINUE |
OSPPC | 23664 | 5C70 | 1 | pořadí příkazu, na který skočí příkaz CONTINUE |
FLAGX | 23665 | 5C71 | 1 | různé příznaky |
STRLEN | 23666 | 5C72 | 2 | délka právě vyhodnocovaného řetězce |
T_ADDR | 23668 | 5C74 | 2 | adresa následující položky v syntaktické tabulce |
SEED | 23670 | 5C76 | 2 | nastavení generátoru náhodných čísel |
FRAMES | 23672 | 5C78 | 3 | doba od zapnutí počítače (v padesátinách sekundy) |
UDG | 23675 | 5C7B | 2 | adresa definice znaků UDG |
COORDS | 23677 | 5C7D | 1 | souřadnice x posledního nakresleného bodu |
COORDS | 23678 | 5C7E | 1 | souřadnice y posledního nakresleného bodu |
P_POSN | 23679 | 5C7F | 1 | číslo sloupce v tiskové vyrovnávací paměti |
PRCC | 23680 | 5C80 | 2 | adresa v tiskovém bufferu, na kterou se zapíše další znak při tisku na tiskárně. Vyšší bajt na adrese 23681, obsahuje vždy hodnotu 91 (desítkově). Tato systémová proměnná není používána u ZX Specter 128K+/+2/+2A/+3 v režimu 128 Basic, resp. +3 Basic. Někdy je vyšší byte této systémové proměnné uváděn jako samostatná nepojmenovaná systémová proměnná. |
ECHO_E | 23682 | 5C82 | 2 | adresa posledního znaku ve vyrovnávací paměti při vkládání dat (při editaci programu nebo při příkazu INPUT) |
DF_CC | 23684 | 5C84 | 2 | adresa ve videoram odpovídající aktuální tiskové pozici |
DF_CCL | 23686 | 5C86 | 2 | adresa ve videoram odpovídající aktuální tiskové pozici v editační části obrazovky |
S_POSN | 23688 | 5C88 | 1 | číslo sloupce aktuální tiskové pozice |
S_POSN | 23689 | 5C89 | 1 | číslo řádku aktuální tiskové pozice |
SPOSNL | 23690 | 5C8A | 1 | číslo sloupce aktuální tiskové pozice v editační části obrazovky |
SPOSNL | 23691 | 5C8B | 1 | číslo řádku aktuální tiskové pozice v editační části obrazovky |
SCR_CT | 23692 | 5C8C | 1 | počet řádků, po jejichž vytisknutí na obrazovku se objeví otázka scroll. |
ATTR_P | 23693 | 5C8D | 1 | aktuálně nastavené barvy, flash a bright |
MASK_P | 23694 | 5C8E | 1 | určuje, které barevné vlastnosti mají být zachovány na tiskových pozicích při novém výpisu do těchto pozic (určeno příkazy INK 8, PAPER 8, BRIGHT 8 A FLASH 8) |
ATTR_T | 23695 | 5C8F | 1 | dočasně nastavené barvy, flash a bright (jak jsou specifikovány v aktuálním příkazu PRINT nebo INPUT, pokud specifikovány nejsou, přebírají se hodnoty z ATTR_P) |
MASK_T | 23696 | 5C90 | 1 | jako MASK_P, ale pro aktuální příkaz PRINT nebo INPUT (viz ATTR_T) |
P_FLAG | 23697 | 5C91 | 1 | další příznaky pro tisk na obrazovku, systémová proměnná je ovlivňována příkazy INK 9, PAPER 9, OVER a INVERSE |
MEMBOT | 23698 | 5C92 | 30 | pracovní prostor kalkulátoru |
NMIADD | 23728 | 5CB0 | 2 | adresa rutiny obsluhující NMI. U ZX Specter 48K/48K+/128K+/+2 je v ROM chyba, takže pokud tato systémová proměnná obsahuje 0, provede se reset počítače, jinak neprovede nic. u počítačů ZX Spectrum +2A/+3 je chyba opravena. Pokud je připojen ZX Interface 1, systémová proměnná je také využívaná pro uložení nastavené šířky při tisku přes RS-232. |
RAMTOP | 23730 | 5CB2 | 2 | adresa posledního bytu paměti využitelného pro Basic |
P_RAMT | 23732 | 5CB4 | 2 | adresa posledního fyzicky existujího bytu paměti RAM. Systémovou proměnnou je možné využít pro zjištění, zda program běží na ZX Spectru 16K nebo na ZX Spectru 48K. |
Přehled systémových proměnných ZX Interface 1
název | adresa | velikost | význam | |
---|---|---|---|---|
FLAGS_3 | 23734 | 1 | příznaky pro činnost ZX Interface 1 | |
VECTOR | 23735 | 2 | adresa používaná pro rozšíření interpretu Basicu (normálně je v této systémové proměnné uložena hodnota 01F0) | |
SBRT | 23737 | 10 | rutina pro stránkování ROM, využívaná pro spuštění podprogramu v ROM ZX Spectra z ROM ZX Interface 1 | |
BAUD | 23747 | 2 | rychlost přenosu sériového portu | |
NTSTAT | 23749 | 1 | síťové číslo stanice pro práci v síti ZX Net | |
IOBORD | 23750 | 1 | barva okraje při vstupně výstupních operacích | |
SERFL | 23751 | 2 | pracovní hodnoty při práci se sériovým portem | |
SECTOR | 23753 | 2 | pracovní hodnoty při práci se ZX Microdrive | |
CHADD | 23755 | 2 | dočasné uložení hodnoty systémové proměnné CH_ADD | |
NTRESP | 23757 | 1 | návratový kód stanice při práci v síti | |
NTDEST | 23758 | 1 | síťové číslo cílové stanice (touto systémovou proměnnou začíná síťová vyrovnávací paměť) | |
NTSRCE | 23759 | 1 | síťové číslo vysílací stanice | |
NTNUMB | 23760 | 2 | číslo bloku posílaného přes síť (0 - 65535) | |
NTTYPE | 23762 | 1 | hlavičkový byte | |
NTLEN | 23763 | 1 | délka bloku dat posílaného přes síť | |
NTDCS | 23764 | 1 | kontrolní součet bloku posílaného přes síť | |
NTHCS | 23765 | 1 | kontrolní součet hlavičky bloku | |
D_STR1 | 23766 | 2 | číslo jednotky ZX Microdrive nebo číslo cílové stanice v síti, nebo určení režimu sériového přenosu (touto systémovou proměnnou začíná 8bytový specifikátor souboru) | |
S_STR1 | 23768 | 1 | číslo linky (0 - 15) | |
L_STR1 | 23769 | 1 | typ zařízení (m, n, t nebo b) | |
N_STR1 | 23770 | 2 | délka názvu souboru | |
T_STR1 | 23772 | 2 | adresa prvního znaku názvu souboru | |
D_STR2 | 23774 | 8 | druhý 8bytový specifikátor souboru používaný příkazy MOVE a LOAD (má stejnou strukturu jako první specifikátor) | |
HD_00 | 23782 | 1 | typ souboru (touto systémovou proměnnou začíná pracovní oblast pro příkazy SAVE, LOAD, VERIFY a MERGE) | |
HD_0B | 23783 | 2 | délka datového bloku | |
HD_0D | 23785 | 2 | počáteční adresa dat | |
HD_0F | 23787 | 2 | délka programu v Basicu (bez společně uložených proměnných) | |
HD_11 | 23789 | 2 | číslo řádku, od kterého se program v Basicu automaticky spustí (autostart) | |
COPIES | 23791 | 1 | počet kopií uložených příkazem SAVE |
Přehled dodatečných systémových proměnných počítačů ZX Spectrum 128K/+2
název | adresa | velikost | význam | |
---|---|---|---|---|
SWAP | 23296 | 5B00 | 20 | stránkovací rutina |
YOUNGER | 5B14 | 9 | stránkovací rutina | |
ONERR | 5B1D | 18 | stránkovací rutina | |
PIN | 5B2F | 5 | předrutina vstupu RS-232 | |
POUT | 5B34 | 22 | předrutina výstupu RS-232 | |
POUT2 | 5B4A | 14 | předrutina výstupu znaku přes RS-232 | |
TARGET | 23384 | 5B58 | 2 | adresa rutiny volané v ROM 1 |
RETADDR | 23386 | 5B5A | 2 | adresa návratu do ROM 0 |
BANK_M | 23388 | 5B5C | 1 | poslední hodnota zapsaná na port 7FFD |
RAMRST | 23389 | 5B5D | 1 | instrukce rst 8 používaná ROM 0 pro zobrazení chybových hlášení z ROM 1 |
RAMERR | 23390 | 5B5E | 1 | číslo chybového hlášení |
BAUD | 23391 | 5B5F | 2 | časovací konstanta výstupu RS-232 |
SERFL | 23393 | 5B61 | 1 | příznak příjmu druhého znaku |
SERFL | 23394 | 5B62 | 1 | přijmutá data |
COL | 23395 | 5B63 | 1 | číslo aktuálně tisknutého sloupce |
WIDTH | 23396 | 5B64 | 1 | šířka tisku ve znacích (standardně 80) |
TVPARS | 23397 | 5B65 | 1 | počet parametrů očekávaných RS-232 |
FLAGS3 | 23398 | 5B66 | 1 | příznaky činnosti editoru 128 Basicu a kazetových/ramdiskových operací |
N_STR1 | 5B67 | 10 | název souboru při operacích s ramdiskem, používána také pro uložení adresy právě zpracovávaného řádku při přečíslovávání | |
HD_00 | 5B71 | 1 | hlavičkové informace při operacích s ramdiskem. Dále používaná jako počítadlo pixelů při tisku kopie obrazovky příkazem COPY, uložení rychlosti přenosu při nastavení příkazem FORMAT a pro odkládání informací při přečíslovávání | |
HD_0B | 5B72 | 2 | hlavičkové informace při operacích s ramdiskem - délka bloku, používána také jako počítadlo půlřádků při tisku kopie obrazovky příkazem COPY a pro uloženín ASCII reprezentace nového čísla řádku při přečíslovávání | |
HD_0D | 5B74 | 2 | hlavičkové informace při operacích s ramdiskem | |
HD_0F | 5B76 | 2 | hlavičkové informace při operacích s ramdiskem, používaná také přečíslovávací rutinou | |
HD_11 | 5B78 | 2 | hlavičkové informace při operacích s ramdiskem, používaná také přečíslovávací rutinou pro dočasné uložení hodnoty systémové proměnné VARS | |
SC_00 | 5B7A | 1 | alternativní hlavičkové informace při operacích s ramdiskem | |
SC_0B | 5B7B | 2 | alternativní hlavičkové informace při operacích s ramdiskem | |
SC_0D | 5B7D | 2 | alternativní hlavičkové informace při operacích s ramdiskem | |
SC_0F | 5B7F | 2 | alternativní hlavičkové informace při operacích s ramdiskem | |
OLDSP | 5B81 | 2 | původní hodnota registru SP, pokud byl zásobník přesunut do TSTACK | |
SFNEXT | 5B83 | 2 | ukazatel na začátek volného místa v ramdisku | |
SFSPACE | 5B85 | 3 | velikost volného místa v ramdisku | |
ROW01 | 5B88 | 1 | informace o stisknutých klávesách keypadu ve třetí řadě | |
ROW23 | 5B89 | 1 | informace o stisknutých klávesách keypadu v první a druhé řadě | |
ROW45 | 5B8A | 1 | informace o stisknutých klávesách keypadu ve čtvrté a páté řadě | |
SYNRET | 5B8B | 2 | návratová adresa pro ONERR | |
LASTV | 5B8D | 5 | poslední hodnota zobrazená kalkulátorem | |
RNLINE | 5B92 | 2 | adresa délky právě přečíslovávaného řádku | |
RNFIRST | 5B94 | 2 | počáteční číslo řádku pro přečíslování (standardně 10) | |
RNSTEP | 5B96 | 2 | přírůstek čísla řádku při přečíslování (standardně 10) | |
STRIP1 | 5B98 | 8 | znakový generátor pro první proužek Sinclairovy duhy. +more Prostor o velikosti 32 bytů je také používán jako vyrovnávací paměť při operacích s ramdiskem, v tomto případě je obsah generátoru přepsán. | |
STRIP2 | 8 | znakový generátor pro druhý proužek Sinclairovy duhy | ||
TSTACK | 23551 | 5BFF | dočasný zásobník, systémová proměnná je vrcholem zásobníku |
Pracovní proměnné editoru 128 Basicu jsou umístěny ve stránce 7 od adresy EC00 po adresu FFFF.
Přehled dodatečných systémových proměnných počítačů ZX Spectrum +2A/+3
název | adresa | velikost | význam | |
---|---|---|---|---|
SWAP | 23296 | 5B00 | 16 | stránkovací rutina |
STOO | 23312 | 5B10 | 17 | stránkovací rutina |
YOUNGER | 23329 | 5B21 | 9 | stránkovací rutina |
REGNUOY | 23338 | 5B2A | 16 | stránkovací rutina |
ONERR | 23354 | 5B3A | 24 | stránkovací rutina |
OLDHL | 23378 | 5B52 | 2 | dočasně uložená hodnota registru při stránkování ROM |
OLDBC | 23380 | 5B54 | 2 | dočasně uložená hodnota registru při stránkování ROM |
OLDAF | 23382 | 5B56 | 2 | dočasně uložená hodnota registru při stránkování ROM |
TARGET | 23384 | 5B58 | 2 | adresa rutiny volané v ROM 3 |
RETADDR | 23386 | 5B5A | 2 | adresa návratu do ROM 1 |
BANKM | 23388 | 5B5C | 1 | poslední hodnota zapsaná na port 7FFD |
RAMRST | 23389 | 5B5D | 1 | instrukce rst 8 používaná ROM 1 pro zobrazení chybových hlášení z ROM 3 |
RAMERR | 23390 | 5B5E | 1 | číslo chybového hlášení. Také je používáno pro uložení dočasného písmena jednotky. +more |
BAUD | 23391 | 5B5F | 2 | perioda vysílání bitů přes sériový port RS-232 (v 1/26 T-cyklů procesorů), nastavována příkazem FORMAT LINE |
SERFL | 23393 | 5B61 | 2 | příznak příjmu druhého znaku a data |
COL | 23395 | 5B63 | 1 | číslo aktuálně tisknutého sloupce |
WIDTH | 23396 | 5B64 | 1 | šířka tisku ve znacích (standardně 80) |
TVPARS | 23397 | 5B65 | 1 | počet parametrů očekávaných RS-232 |
FLAGS3 | 23398 | 5B66 | 1 | příznaky nastavení tisku (tisk klíčových slov, RS-232/Centronics) a disketového řadiče (přítomnost řadiče, přítomnost disku B:) |
BANK678 | 23399 | 5B67 | 1 | poslední hodnota zapsaná na port 1FFD |
XLOC | 23400 | 5B68 | 1 | souřadnice x při tisku příkazem COPY |
YLOC | 23401 | 5B69 | 1 | souřadnice y při tisku příkazem COPY |
OLDSP | 23402 | 5B6A | 2 | původní hodnota registru SP, pokud byl zásobník přesunut do TSTACK |
SYNRET | 23404 | 5B6C | 2 | návratová adresa pro ONERR |
LASTV | 23406 | 5B6E | 5 | poslední hodnota zobrazená kalkulátorem |
RCLINE | 23411 | 5B73 | 2 | číslo právě přečíslovávaného řádku |
RCSTART | 23413 | 5B75 | 2 | počáteční číslo řádku pro přečíslování (standardně 10) |
RCSTEP | 23415 | 5B77 | 2 | přírůstek čísla řádku při přečíslování (standardně 10) |
LODDRV | 23417 | 5B79 | 1 | písmeno jednotky pro operace LOAD, MERGE a VERIFY |
SAVDRV | 23418 | 5B7A | 1 | písmeno jednotky pro operacI save |
DUMPLF | 23419 | 5B7B | 1 | počet 1/216 pro posun papíru při tisku příkazem COPY EXP (standardně 9) |
STRIP1 | 23420 | 5B7C | 8 | znakový generátor pro první proužek Sinclairovy duhy |
STRIP2 | 23428 | 5B84 | 8 | znakový generátor pro druhý proužek Sinclairovy duhy |
TSTACK | 23551 | 5BFF | 115 | dočasný zásobník, když je používána stránka 7 (editorem +3 Basicu nebo +3DOSem). Systémová proměnná je vrcholem zásobníku, v případě potřeby může zásobník přepsat systémové proměnné STRIP1 a STRIP2 |
Reference
Externí odkazy
[url=http://users. dcc. +moreuchile. cl/~rbaeza/cursos/proyarq/dfuenzal/vars. html]Arquitectura de Computadores : Tarea #3 - El ZX Spectrum 48K - Variables del Sistema [/url] na dcc. uchile. cl * [url=http://rosettacode. org/wiki/Special_variables#ZX_Spectrum_Basic]Special variables[/url] na rosettacode. org.