[ Pobierz całość w formacie PDF ]

wszystko inne), a 1234h, gdy chcemy gorący reset.
Odpowiednie kawałki kodu wyglądają tak (przypominam, że adres 0040h:0072h = 0000:0472h - patrz część 2
mojego kursu):
(przeskocz kod do ręcznego resetowania)
Bogdan Drozdowski 225
Bogdan Drozdowski Język asembler dla każdego 2009-02-25
; zimny reset:
mov ax, 40h
mov ds, ax ; DS = 40h
mov word [ds:72h], 0 ; zimny reset
; niektóre kompilatory (np. TASM) nie lubią instrukcji w stylu
; jmp 0FFFFh:0000h, więc zakoduję ją ręcznie
db 0eah ; kod instrukcji wzięty z podręczników Intela
dw 0 ; offset
dw 0ffffh ; segment
; gorący reset:
xor ax, ax
mov ds, ax ; DS = 0
mov word [ds:472h], 1234h ; gorący reset
db 0eah ; kod instrukcji wzięty z podręczników Intela
dw 0 ; offset
dw 0ffffh ; segment
Drugim (i prostszym) sposobem jest zapisanie do jednego z portów klawiatury (64h) jednego z bajtów F0-FE,
który ma bit0 = 0 (jest takich oczywiście kilka, najczęściej stosuje się FEh), chociaż ten sposób nie jest
zalecany.
Kod jest wyjątkowo prosty i wygląda tak:
mov al, 0feh
out 64h, al
Celowo nie wspominam tutaj o jednym: o przerwaniu int19h, które służy do ponownego przeczytania
bootsektorów i przeładowania systemu od nowa. Gdy wkładacie niesystemową dyskietkę do stacji i
resetujecie komputer, to (o ile macie możliwość uruchomienia systemu z dyskietki) pojawia się napis
informujący o nieprawidłowym dysku systemowym. Po naciśnięciu Entera uruchamiane jest właśnie int19h,
które nie wykonuje żadnych resetów, tylko czyta bootsektory od nowa.
Nie wspominałem o int19h, gdyż jest ono niebezpieczne. Jeżeli jakikolwiek program przejął przerwanie np.
zegara, to int19h nie przywróci poprzedniej procedury, co jest nieprzewidywalne w skutkach!
Sposoby na wyłączanie urządzeń mogą się Wam przydać, gdy np. będziecie pisać własny wygaszacz ekranu,
a możliwość zresetowania komputera przyda się, gdy Wasze oprogramowanie zostanie zainstalowane i musi
zmienić np. zawartość pliku autoexec.bat.
Informacje, które tutaj podałem mogą się Wam też przydać przy pisaniu boot-sektorów do własnych
mini-systemów operacyjnych.
Spis treści off-line (Alt+1)
Spis treści on-line (Alt+2)
Ułatwienia dla niepełnosprawnych (Alt+0)
226 Bogdan Drozdowski
2009-02-25 Język asembler dla każdego Bogdan Drozdowski
Programowanie głośniczka w asemblerze
Czy nie myślicie czasem, jakby to było, gdyby można było wzbogacić swój program oprócz efektu
wizualnego, także o efekt dzwiękowy?
Programowanie kart dzwiękowych (zwłaszcza tych nowoczesnych) może sprawiać niemałe kłopoty. Stary,
poczciwy PC-Speaker jest jednak urządzeniem względnie prostym w programowaniu.
I to właśnie tutaj udowodnię. Najpierw troszkę teorii, potem - do dzieła!
Sporo urządzeń w komputerze ma własne porty, przez które można się z nimi komunikować. Jednak
głośniczek komputerowy nie ma własnego portu.
Jest tak przede wszystkim ze względu na oszczędności w budowie pierwszych PC-tów. Zamiast dać osobny
port na głośnik, firmy produkujące komputery wcisnęły go pod opiekę dwóch innych urządzeń:
" czasomierza systemowego, który posłuży nam do wytworzenia impulsów odpowiedniej
częstotliwości
" kontrolera klawiatury, który kontroluje, czy jest otwarty kanał z czasomierza do głośniczka, czyli czy
można będzie wysyłać informacje.
Podstawowe porty czasomierza to porty od 40h do 43h (cały zakres to 40h - 5fh, h oznacza szesnastkowo),
kontrolera klawiatury zaś - 60h do 64h (cały zakres: 60h - 6fh).
Nie będziemy ich jednak wszystkich używać. Będą na interesować tylko porty 42h, 43h i 61h.
Zacznijmy więc coś pisać:
in al,61h
or al,3
out 61h,al
Co zrobiliśmy? W spisie portów Listy Przerwań Ralfa Brown'a czytamy:
(przeskocz port 61h)
0061 R- KB controller port B control register (ISA, EISA)
0061 -W KB controller port B (ISA, EISA)
(R - czytanie (read) , W - pisanie (write))
oraz:
(przeskocz opis portu 61h)
Bitfields for KB controller port B (system control port) [output]:
Bit(s) Description (Table P0392)
7 pulse to 1 for IRQ1 reset (PC,XT)
6-4 reserved
3 I/O channel parity check disable
2 RAM parity check disable
1 speaker data enable
0 timer 2 gate to speaker enable
Bogdan Drozdowski 227
Bogdan Drozdowski Język asembler dla każdego 2009-02-25
Komenda IN AL,61h czyta bieżący status kontrolera, OR AL,3 ustawia (włącza) bity 0 (włączenie bramki [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • spraypainting.htw.pl