Systémové proměnné počítačů Sinclair ZX Spectrum

Systé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.[1] 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.[2] 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.[3] 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.[4] 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.[5]

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.[6]

Přehled systémových proměnných

editovat
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.[7]
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.[7]
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é[1]
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.[1]
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.[7]
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.[8]
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.[9]
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
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ě).[9] 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
23689 5C89 1 číslo řádku aktuální tiskové pozice
SPOSNL 23690 5C8A 1 číslo sloupce aktuální tiskové pozice v editační části obrazovky
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)[9]
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[9]
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.[10]
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.[9]

Přehled systémových proměnných ZX Interface 1

editovat
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)[2]
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

Od adresy 23792 jsou uloženy informace o otevřených kanálech. Informace o každém otevřeném kanálu na ZX Microdrive je velká 595 bytů, informace o každém otevřeném kanálu na síti ZX Net je velká 276 bytů.

Přehled dodatečných systémových proměnných počítačů ZX Spectrum 128K/+2

editovat
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, systémovou proměnnou je možné využít ke stránkování paměti ve 128 Basicu[11]
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
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í[12]
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í[12]
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í[12]
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[12]
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[12]
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. Prostor o velikosti 32 bytů je také používán jako vyrovnávací paměť při operacích s ramdiskem,[12] 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 60416 (šestnáctkově EC00) po adresu FFFF.[11][12]

adresa velikost význam
ECO0 3 příznaky při editaci řádku Basicu
ECO3 3 příznaky při chybě při editaci řádku Basicu
ECO8 2 číslo řádku na který se vstoupilo při pohybu kurzoru programem, varianta E_PPC
60431 ECOF 1 nastavení barev používaných editorem 128 Basicu,[11] alternativa ATTR_P
60432 EC10 1 omezení barev používáných editorem 128 Basicu,[11] alternativa MASK_P


Od adresy 60415 směrem dolů až k adrese 49152 je zapisován adresář ramdisku.[11] Katalog ramdisku tak může zasáhnout i do oblasti druhé videoram, kterou 128 Basic ale nepoužívá.

Přehled dodatečných systémových proměnných počítačů ZX Spectrum +2A/+3

editovat
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.
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

editovat
  1. a b c RAK, Pavel. Systémové proměnné. ZX Magazín. 1993, čís. 3/93, s. 22–24. ISSN 1210-4833. ((česky)) 
  2. a b Organizacja pamięci ZX Spectrum 48/+ Archivováno 16. 2. 2010 na Wayback Machine. (polsky) na spectrum.8bit.pl, cit. 2014-03-30
  3. Those Moody Microdrives. Your Spectrum. March 1984, čís. 2. Dostupné online. ((anglicky)) 
  4. VILÍM, Tomáš. Assembler a ZX Spectrum, 1. díl. Ústí nad Labem: Proxima - Software, 1992. ((česky)) 
  5. NAYLOR, Jeff; ROGERS, Diane. Inside your Spectrum. London: Sunshine Books, 1984. Dostupné online. ISBN 0-946408-35-1. ((anglicky)) 
  6. ŽABENSKÝ, Petr. Systémové proměnné MDOSu. ZX Magazín. 1999, čís. 4/98-1/99, s. 17. ((česky)) 
  7. a b c Variables on a Theme - Part One. Your Spectrum. March 1984, čís. 2. Dostupné online. ((anglicky)) 
  8. Тайники ZX-Spectrum: Системные переменные Бейсика. Echo. Март 1997, čís. 03. Anglicky na [1]. Dostupné online. ((rusky)) 
  9. a b c d e Variables on a Theme - Part Two. Your Spectrum. May 1984, čís. 3. Dostupné online. ((anglicky)) 
  10. Sinclair ZX Spectrum computer System Variables Archivováno 22. 11. 2013 na Wayback Machine. (anglicky) na wearmouth.demon.co.uk
  11. a b c d e (Hollub). Spectrum 128K - stránkování paměti v Basicu. ZX Magazín. 1991, čís. 6–8/91, s. 86–89. 
  12. a b c d e f g WILSON, Matthew. Spectrum 128 ROM 0 Disassembly [online]. 2010-11-04, rev. 2011-02-12 (datum vytvoření PDF souboru). Dostupné online. ((anglicky)) 

Externí odkazy

editovat