Goldklang Ira na TRS-80 Revived strony

Procedury język maszynowy

przez @ 19:31, 4 lutego 2010 roku.
[Model I][Model III] TRS-80 Procedury Machine Language Model [iv][Model 100]



Ogólne ramy i opis
procedur w języku BASIC wszystkich maszyn po tej samej czynności. Można POKE je do pamięci RAM lub opakowanie go w łańcuch. W przypadku tego ostatniego, można ustawić, łańcuch długości liczba bajtów w komputerze rutynowych języka, znaleźć LSB i MSB tego łańcucha, obciążenie USR rutynowych adres startowy z MSB i LSB, że, a następnie połączyć się z rutynowych . W ogóle rutynowych będzie wyglądać:

10 X $="/////////////////////"
20 REM NUMER ukośników powinna odpowiadać liczba bajtów
30 A = PEEK (VarPtr (X $) +1): B = PEEK (VarPtr (X $) +2): C = A + B 256 *
40 REM Następny krok zależy od tego czy jesteś w II Poziom podstawowy LUB NA DYSKU BASIC, więc dla nich mają szereg LINE
ALBO
50 POKE 16526,: POKE 16527, B: "LEVEL II podstawową metodę do wyznaczenia USR (0) punktu wejścia
OR
50 DEFUSR0 = C: metoda "DOS do wyznaczenia USR (0) punktu wejścia
60 READ D: D IF END <0 THEN
70 POKE C, D: C = C + 1: GOTO 60
100 DATA ... ..

Po okresie, rutynowych nazywa zwykłą X = USR (0) polecenia.

Oczywiście, istnieje wiele innych sposobów, aby to zrobić, ale idea pozostała taka sama. Jeśli nie chcesz błoto wokół z zmieniając długość napisu, można przejść:

10 pełnych 100
20 READ D: D IF => 0 to x = $ X $ + CHR $ (D): GOTO 20
30 A = PEEK (VarPtr (X $) +1): B = PEEK (VarPtr (X $) +2): C = A + B 256 *
40 REM Następny krok zależy od tego czy jesteś w II Poziom podstawowy LUB NA DYSKU BASIC, więc dla nich mają szereg LINE
ALBO
50 POKE 16526,: POKE 16527, B: "LEVEL II podstawową metodę do wyznaczenia USR (0) punktu wejścia
OR
50 DEFUSR0 = C: metoda "DOS do wyznaczenia USR (0) punktu wejścia
100 DATA ... ..

Po okresie, rutynowych nazywa zwykłą X = USR (0) polecenia.

Wybór byłego pozwoli zaoszczędzić program z wbudowanym string, a potem wystarczy tylko linie 10, 30 i 50 w przyszłości.


Rising Sound Saucer
10 X USE $="////////////////////////////": "28 tnie
100 DATA 205, 127, 10, 77, 68, 62, 1, 105, 211, 255
110 DATA 45, 32, 253, 60, 105, 211, 255, 45
120 DATA 32, 253, 13, 16, 238, 175, 211, 244, 201, -1


Wypełnienie ekranu z charakterem XXXX
10 X USE $="//////////////////////": '22 tnie
100 DATA 229, 1, 16, 64, 33, 1, 60, 45, 62, XXXX "REPLACE XXX wartość ASCII
110 DATA 119, 35, 16, 252, 6, 64, 13, 32, 247
120 DATA 225, 201, -1


Wszystkie znaki graficzne odwrotnej
10 X USE $="///////////////////////": '23 tnie
100 DATA 217, 33, 255, 63, 6, 60, 126, 254, 128
110 DATA 56, 4, 47, 246, 128, 119, 43, 124
120 DATA 184, 48, 242, 217, 201, -1


Przejść o jeden blok w prawo
10 X $="///////////////////////////////////////////// /////": "przeznaczy 50 tnie
100 DATA 33, 254, 63, 17, 255, 63, 1, 255, 3
110 DATA 237, 184, 14, 16, 17, 0, 60, 33, 63
120 DATA 0, 25, 237, 160, 229, 209, 121, 183, 32
130 DATA 244, 62, 16, 33, 0, 60, 229, 209, 19
140 DATA 1, 4, 0, 237, 176, 17, 60, 0, 25
150 DATA 61, 183, 32, 240, 201, -1


Save & Restore ekranu
10000 pamiętać, aby ustawić rozmiar pamięci TO 31699
10010 NA TO ZZ = 31700 31723: READ D: POKE ZZ, D: NEXT ZZ: END
10020 DATA 33, 0, 60, 17, 254, 123, 1, 0, 4, 237, 176, 201
10030 DATA 33, 254, 123, 17, 0, 60, 1, 0, 4, 237, 176, 201
11000 POKE 16526, 212: POKE 16527, 123: Q = USR (0): RETURN
12000 POKE 16526, 224: POKE 16527, 123: Q = USR (0): RETURN

Zapisz GOSUB używać ekranu 11000
Przywracanie GOSUB wykorzystanie ekranu 12000


Rutynowe Rising Sound Saucer
1 M $ = "": 30 znaków
2 I = VarPtr (M $): J = PEEK (I +1) + 256 * PEEK (I +2)
3 FOR K = J J +26: READ X: POKE K, X: NEXT K
4 POKE 16526, PEEK (I +1): POKE 16527, PEEK (I +2)
5 DATA 205, 127, 10, 77, 68, 62, 1, 105, 211, 255, 45, 32, 253
6 Dane 60, 105, 211, 255, 45, 32, 253, 13, 16, 238, 175, 211, 255, 201
7 A = USR (0)
8 dla T = 1027 na 755 STEP -1: G = USR (T): T NEXT


Procedury White Out
1 DLA i = 1 do 14: READ P: WR WR $ $ = CHR $ + (P): NEXT
2 POKE 16526, PEEK (VarPtr (WR $) +1)
3 POKE 16527, PEEK (VarPtr (WR $) +2)
4 Dane 33, 0, 60, 54, 255, 17, 1, 60, 1, 255, 3, 237, 176, 201

do uruchomienia na białym

X = USR (0)


1 DLA i = 1 do 13: READ P: WR WR $ $ = CHR $ + (P): NEXT
2 POKE 16526, PEEK (VarPtr (WR $) +1)
3 POKE 16527, PEEK (VarPtr (WR $) +2)
4 Dane 33, 0, 60, 62, 191, 119, 35, 124, 254, 64, 32, 247, 201

do uruchomienia na białym

X = USR (0)


1 DIM (30): dla x = 1 do 27: READ (X): NEXT X
Kategorii 2 i X = 32512 DO 32538: POKE X (X-32511): NEXT X
3 POKE 16526, 0: POKE 16527, 127
4 Dane 33, 0, 60, 17, 1, 60, 1, 255, 3, 54, 191, 237, 176, 6, 5
5 Dane 33, 255, 255, 43, 124, 181, 194, 18, 127, 16, 245, 201

do uruchomienia na białym

X = USR (0)


Wiele USR () zwraca
Następujących pozycji w programie maszyny pozwala na tyle USR
wzywa jak pamięć pozwala. Zaproszenie do USR (0) udaje się do programu 0, zaproszenia do
USR (1) udaje się do programu 1, itd. W obecnej formie może być używany do grafiki.
Jeśli dane mają być przekazywane do programu maszyny następnie shoul Rozmiar pamięci
DBE ustawionego na odpowiednią liczbę bajtów poniżej pochodzenia
pozycji, w tym danych szturchnął "Notatnik" przed wywołaniem USR (n),
i program (n), a następnie ładuje z "Notatnik" w sposób pożądany.

Pierwszej linii każdego programu powinny posiadać odpowiednią etykietą - PRGO, PRG1, itp. Jest to, oczywiście, bezwzględnie, że żadne zmiany się między CALL 2687 i JP PRGN.

Asembler pozycji dla wielu połączeń USR.

                 nnnn ORG
 (Etykiety), EQU (według życzenia)
                  ""
                 CALL 2687
                 XOR
                 LD B, 3
         Wyś. ADD A, L
                 Grudzień B
                 NZ JP, Wyś.
                 L LD,
                 LD BC, 5 dolarów
                 ADD HL, BC
                 JP (HL)
                 JP PRG0
                 JP PRG1
                 JP PRG2

                 JP PRGN


Odbijaniu i Break Wyłącz rutynowe

To rutynowe zapewni odbijaniu klawiatury z przerwą niepełnosprawnych. Pamiętaj, aby jako rezerwę 32742 Rozmiar pamięci w celu ochrony szlaku i CSAVE to, gdyż po zakończeniu NEW:
10 CLS: dla x = 32743 do 32767: READ: POKE X: X NEXT
20 POKE 16526, 231: POKE 16527, 127: C = USR (0)
30 PRINT @ 512, "OK";
40 dla D = 1 do 1000: D NEXT
50 nowych
60 DATA 33, 238, 127, 34, 22, 64, 201, 205, 227
70 Dane 3, 103, 1, 50, 0, 205, 96, 0, 124, 254
80 Dane 1, 192, 62, 0, 201, 0, 0
UWAGA: 16526 jest 408e w Hex. 408EH jest 2-bajtowy adres rutynowych USR, więc szturchanie 231 i 127 jest LSB / MSB z 32743, punkt wejścia procedury.

Trackback URI do tego wpisu to: http://www.trs-80.com/wordpress/zaps-patches-pokes-tips/machinelanguage/trackback/

Leave a Reply

Uwaga: Moderowanie komentarzy jest obecnie aktywne, więc nie będzie opóźnienie między wysłaniem komentarza, a kiedy pojawia się. Cierpliwość jest cnotą, nie ma potrzeby, aby ponownie przedstawić swój komentarz.

[Ira Goldklang na TRS-80 Revived strony jest dumnie zasilany przez WordPress .]