Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Autorzy: dr Ian Logan i dr Frank O'Hara |
©2024 mgr Jerzy Wałaszek |
Maskowane przerwanie zostaje wyłączone, a do pary rejestrów DE zostaje wstawiony adres możliwego szczytu RAM.
0000 START DI Wyłącz "przerwanie klawiatury".
XOR A +00 dla startu (lecz +FF dla 'NEW').
LD DE,+FFFF Możliwy szczyt RAM.
JP 11CB,START/NEW Skocz naprzód. |
Wskaźnik błędu jest ustawiany na pozycję błędu.
0008 ERROR-1 LD HL,(CH-ADD) Adres osiągnięty przez LD (X-PTR),HL interpreter jest kopiowany do JP 0053,ERROR-2 wskaźnika błędu przed dalszym działaniem. |
Rejestr A zawiera kod znaku, który ma być wyświetlony.
0010 PRINT-A-1 JP 15F2,PRINT-A-2 Skocz natychmiast naprzód. DEFB +FF,+FF,+FF,+FF,+FF Niewykorzystana pamięć. |
Zawartość pamięci bieżąco adresowana przez CH-ADD zostaje pobrana. Powrót następuje, jeśli A reprezentuje drukowalny znak, w przeciwnym razie CH-ADD zostaje zwiększone, a test powtórzony.
0018 GET-CHAR LD HL,(CH-ADD) Pobierz wartość adresowaną LD A,(HL) przez CH-ADD. 001C TEST-CHAR CALL 007D,SKIP-OVER Sprawdź, czy znak jest RET NC drukowalny. Jeśli tak, powróć. |
Gdy wiersz języka BASIC jest interpretowany, procedura ta jest cyklicznie wywoływana, aby przesuwać się wzdłuż wiersza.
0020 NEXT-CHAR CALL 0074,CH-ADD+1 CH-ADD należy zwiększyć. JR 001C,TEST-CHAR Skocz wstecz, aby przetestować nową wartość. DEFB +FF,+FF,+FF Niewykorzystana pamięć. |
Następuje wejście do kalkulatora zmiennoprzecinkowego pod adresem 335B. |
0028 FP-CALC JP 335B,CALCULATE Skocz naprzód natychmiast. DEFB +FF,+FF,+FF,+FF,+FF Niewykorzystana pamięć. |
Ta procedura tworzy wolne miejsce w obszarze roboczym. Liczba komórek jest określana przez bieżącą zawartość pary rejestrów BC.
0030 BC-SPACES PUSH BC Zapamiętaj liczbę komórek. LD HL,(WORKSP) Pobierz bieżący adres startu PUSH HL obszaru roboczego i również go zapamiętaj JP 169E,RESERVE przed przejściem dalej. |
Gdy wystąpi przerwanie maskowane, zegar czasu rzeczywistego zostaje zwiększony i klawiatura przeskanowana.
0038 MASK-INT PUSH AF Zapamiętaj bieżące wartości przechowywane
PUSH HL w tych rejestrach.
LD HL,(FRAMES) Młodsze dwa bajty licznika
INC HL ramek są zwiększane
LD (FRAMES),HL co każde 20ms. (Anglia) Najstarszy
LD A,H bajt licznika ramek jest
OR L zwiększany tylko wtedy, gdy
JR NZ,0048,KEY-INT wartość dwóch młodszych bajtów
INC (FRAMES-3) wynosi zero.
0048 KEY-INT PUSH BC Zapamiętaj bieżące wartości przechowywane
PUSH DE w tych rejestrach.
CALL 02BF,KEYBOARD Teraz przeskanuj klawiaturę.
POP DE Odtwórz zapamiętane wartości.
POP BC
POP HL
POP AF
EI Przed powrotem przerwanie maskowane
RET zostaje włączone. |
Adres powrotu do interpretera wskazuje na "DEFB" , które określa rodzaj błędu. To "DEFB" zostaje pobrane i przeniesione do ERR-NR.
Stos maszynowy zostaje wyczyszczony przed skokiem naprzód w celu wyczyszczenia skoku kalkulatora.
0053 ERROR-2 POP HL Adres na stosie wskazuje LD L,(HL) kod błędu 0055 ERROR-3 LD (ERR-NR),L Zostaje on przeniesiony do ERR-NR. LD SP,(ERR-SP) Maszyna jest czyszczona, przed JP 16C5,SET-STK wyjściem poprzez SET-STK. DEFB +FF,+FF,+FF,+FF Niewykorzystana pamięć. DEFB +FF,+FF,+FF |
Ta procedura nie jest używana w standardowym Spectrum, lecz ten kod pozwala dokonać resetu systemu po aktywacji linii NMI. Zmienna systemowa pod adresem 5CB0, o nazwie NMIADD, musi posiadać wartość zero, aby doszło do resetu.
0066 RESET PUSH AF Zapamiętaj bieżące wartości przechowywane PUSH HL w tych rejestrach. LD HL,(NMIADD) Dwa bajty NMIADD LD A,H muszą oba być zero dla resetu OR L JR NZ,0070,NO-RESET Uwaga: Tutaj powinno być 'JR Z'! JP (HL) Skocz do START. 0070 NO-RESET POP HL Odtwórz zapamiętane wartości rejestrów POP AF RETN i powróć |
Adres przechowywany przez CH-ADD zostaje pobrany, zwiększony i zapamiętany. Teraz zawartość pamięci adresowanej przez CH-ADD zostaje pobrana. Punkty wejścia TEMP-PTR1 i TEMP-PTR2 są używane do chwilowego ustawienia CH-ADD.
0074 CH-ADD+1 LD HL,(CH-ADD) Pobierz adres. 0077 TEMP-PTR1 INC HL Zwiększ wskaźnik. 0078 TEMP-PTR2 LD (CH-ADD),HL Ustaw CH-ADD. LD A,(HL) Pobierz adresowaną wartość RET i powróć. |
Wartość przekazana do podprogramu w rejestrze A jest sprawdzana, czy tworzy znak drukowalny. Różne kody specjalne powodują zwiększenie HL o 1 lub o 2, a CH-ADD zostaje odpowiednio poprawione.
007D SKIP-OVER CP +21 Powróć z wyzerowanym znacznikiem przeniesienia, RET NC jeśli jest to zwykły kod znaku. CP +0D Powróć, jeśli osiągnięto koniec wiersza RET Z CP +10 Powróć przy kodach od +00 do +0F, RET C lecz z przeniesieniem ustawionym. CP +18 Powróć przy kodach od +18 do +20 CCF znów z ustawionym przeniesieniem. RET C INC HL Przeskocz raz. CP +16 Skocz naprzód przy kodach od +10 JR C,0090,SKIPS do +15 (INK do OVER). INC HL Przeskocz jeszcze raz (AT i TAB). 0090 SKIPS SCF Wróć z ustawionym znacznikiem przeniesienia LD (CH-ADD),HL i CH-ADD zawierającym właściwy adres. RET |
Wszystkie symbole używane prze Spectrum są rozwijane przez odwołania do tej tablicy. Ostatni kod każdego symbolu jest w negatywie przez ustawienie bitu nr 7.
0095 BF 52 4E C4 49 4E 4B 45 '?' R N 'D' I N K E 009D 59 A4 50 C9 46 CE 50 4F Y '$' P 'I' F 'N' P O 00A5 49 4E D4 53 43 52 45 45 I N 'T' S C R E E 00AD 4E A4 41 54 54 D2 41 D4 N '$' A T T 'R' A 'T' 00B5 54 41 C2 56 41 4C A4 43 T A 'B' V A L '$' C 00BD 4F 44 C5 56 41 CC 4C 45 O D 'E' V A 'L' L E 00C5 CE 53 49 CE 43 4F D3 54 'N' S I 'N' C O 'S' T 00CD 41 CE 41 53 CE 41 43 D3 A 'N' A S 'N' A C 'S' 00D5 41 54 CE 4C CE 45 58 D0 A T 'N' L 'N' E X 'P' 00DD 49 4E D4 53 51 D2 53 47 I N 'T' S Q 'R' S G 00E5 CE 41 42 D3 50 45 45 CB 'N' A B 'S' P E E 'K' 00ED 49 CE 55 53 D2 53 54 52 I 'N' U S 'R' S T R 00F5 A4 43 48 52 A4 4E 4F D4 '$' C H R '$' N O 'T' 00FD 42 49 CE 4F D2 41 4E C4 B I 'N' O 'R' A N 'D' 0105 3C BD 3E BD 3C BE 4C 49 < '=' > '=' < '>' L I 010D 4E C5 54 48 45 CE 54 CF N 'E' T H E 'N' T 'O' 0115 53 54 45 D0 44 45 46 20 S T E 'P' D E F 011D 46 CE 43 41 D4 46 4F 52 F 'N' C A 'T' F O R 0125 4D 41 D4 4D 4F 56 C5 45 M A 'T' M O V 'E' E 012D 52 41 53 C5 4F 50 45 4E R A S 'E' O P E N 0135 20 A3 43 4C 4F 53 45 20 '#' C L O S E 013D A3 4D 45 52 47 C5 56 45 '#' M E R G 'E' V E 0145 52 49 46 D9 42 45 45 D0 R I F 'Y' B E E 'P' 014D 43 49 52 43 4C C5 49 4E C I R C L 'E' I N 0155 CB 50 41 50 45 D2 46 4C 'K' P A P E 'R' F L 015D 41 53 C8 42 52 49 47 48 A S 'H' B R I G H 0165 D4 49 4E 56 45 52 53 C5 'T' I N V E R S 'E' 016D 4F 56 45 D2 4F 55 D4 4C O V E 'R' O U 'T' L 0175 50 52 49 4E D4 4C 4C 49 P R I N 'T' L L I 017D 53 D4 53 54 4F D0 52 45 S 'T' S T O 'P' R E 0185 41 C4 44 41 54 C1 52 45 A 'D' D A T 'A' R E 018D 53 54 4F 52 C5 4E 45 D7 S T O R 'E' N E 'W' 0195 42 4F 52 44 45 D2 43 4F B O R D E 'R' C O 019D 4E 54 49 4E 55 C5 44 49 N T I N U 'E' D I 01A5 CD 52 45 CD 46 4F D2 47 'M' R E 'M' F O 'R' G 01AD 4F 20 54 CF 47 4F 20 53 O T 'O' G O S 01B5 55 C2 49 4E 50 55 D4 4C U 'B' I N P U 'T' L 01BD 4F 41 C4 4C 49 53 D4 4C O A 'D' L I S 'T' L 01C5 45 D4 50 41 55 53 C5 4E E 'T' P A U S 'E' N 01CD 45 58 D4 50 4F 4B C5 50 E X 'T' P O K 'E' P 01D5 52 49 4E D4 50 4C 4F D4 R I N 'T' P L O 'T' 01DD 52 55 CE 53 41 56 C5 52 R U 'N' S A V 'E' R 01E5 41 4E 44 4F 4D 49 5A C5 A N D O M I Z 'E' 01ED 49 C6 43 4C D3 44 52 41 I 'F' C L 'S' D R A 01F5 D7 43 4C 45 41 D2 52 45 'W' C L E A 'R' R E 01FD 54 55 52 CE 43 4F 50 D9 T U R 'N' C O P 'Y' |
Jest sześć oddzielnych tablic klawiszy. Ostateczny znak zależy od naciśnięcia określonego klawisza oraz używanego trybu.
(a) Główna tablica klawiszy - tryb L z CAPS SHIFT.
0205 42 48 59 36 35 54 47 56 B H Y 6 5 T G V 020D 4E 4A 55 37 34 52 46 43 N J U 7 4 R F C 0215 4D 4B 49 38 33 45 44 58 M K I 8 3 E D X 021D 0E 4C 4F 39 32 57 53 5A SYMBOL L 0 9 2 W S Z SHIFT 0225 20 0D 50 30 31 51 41 SPACE ENTER P 0 1 Q A |
(b) Tryb rozszerzony. Klawisze literowe bez SHIFT
022C E3 C4 E0 E4 READ BIN LPRINT DATA 0230 B4 BC BD BB TAN SGN ABS SQR 0234 AF B0 B1 C0 CODE VAL LEN USR 0238 A7 A6 BE AD PI INKEY$ PEEK TAB 023C B2 BA E5 A5 SIN INT RESTORE RND 0240 C2 E1 B3 B9 CHR$ LLIST COS EXP 0244 C1 B8 STR$ LN |
(c) Tryb rozszerzony. Klawisze literowe z jednym z klawiszy SHIFT.
0246 7E DC DA 5C ~ BRIGHT PAPER \
024A B7 7B 7D D8 ATN { } CIRCLE
024E BF AE AA AB IN VAL$ SCREEN$ ATTR
0252 DD DE DF 7F INVERSE OVER OUT ©
0256 B5 D6 7C D5 ASN VERIFY | MERGE
025A 5D DB B6 D9 ] FLASH ACS INK
025E 5B D7 0C 07 [ BEEP |
(d) Kody sterujące. Klawisze cyfrowe z CAPS SHIFT.
0260 0C 07 06 04 DELETE EDIT CAPS LOCK TRUE VIDEO 0264 05 08 0A 0B INV VIDEO Kursor w lewo Kursor w dół Kursor w górę 0268 09 0F Kursor w prawo GRAPHICS |
(e) Kod symboli. Klawisze literowe z SYMBOL SHIFT.
026A E2 2A 3F CD STOP * ? STEP 026E C8 CC CB 5E >= TO THEN ^ 0272 AC 2D 2B 3D AT - + = 0276 2E 2C 3B 22 . , ; " 027A C7 3C C3 3E <= < NOT > 027E C5 2F C9 60 OR / <> £ 0282 C6 3A AND : |
(f) Tryb rozszerzony. Klawisze cyfrowe z SYMBOL SHIFT.
0284 D0 CE A8 CA FORMAT DEF FN FN LINE 0288 D3 D4 D1 D2 OPEN CLOSE MOVE ERASE 028C A9 CF POINT CAT |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.