Created
January 17, 2020 13:17
-
-
Save Mati365/d341f12d72f82888ef8e95435a179805 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
format MZ | |
stack stk:256 | |
entry text:main | |
macro delay time { | |
local ext,iter | |
push cx | |
mov cx,time | |
ext: | |
push cx | |
mov cx,0FFFFh | |
iter: | |
loop iter | |
pop cx | |
loop ext | |
pop cx | |
} | |
; segment danych | |
segment data_16 use16 | |
; tablica z nutami | |
nuts dw 23A1h, 21A1h, 1FBEh, 1DF6h, 1C48h, 1AB1h, 1932h, 17C8h, 1672h, 1530h, 13FFh, 12E0h | |
; menu aplikacji | |
msg db 'Aplikacja Keyboard, wciskaj klawisze od 0 do 9 by grac, esc by wyjsc!', 0x0d, 0x0a, '$' | |
; flaga ktora sprawdza czy dzwiek jest juz wlaczony | |
sound_enabled db 0 | |
; segment kodu | |
segment text use16 | |
; funkcja wyłączająca dźwięk ze speakera | |
; odczyt do al i wrzucenie spowrotem do 61h | |
musicdown: | |
cmp byte [ds:sound_enabled], 0 | |
je musicdown.__exit | |
in al, 61h | |
and al, 0fch | |
out 61h, al | |
mov byte [ds:sound_enabled], 0 | |
.__exit: | |
ret | |
musicup: | |
cmp byte [ds:sound_enabled], 1 | |
je musicup.__exit | |
; wlaczenie speakera, wybor drugiego kanalu | |
mov al, 0B6h ; slowo stanu 10110110b (0B6h)-wybor 2-ego kanalu portu (glosnik) | |
out 43h, al ;do portu 43h | |
in al, 61h | |
or al, 3 | |
out 61h, al | |
mov byte [ds:sound_enabled], 1 | |
.__exit: | |
ret | |
; MAIN programu | |
main: | |
mov ax,data_16 | |
mov ds,ax | |
xor ax,ax | |
; wyswietlenie tekstu | |
lea dx, [ds:msg] ; adres wiadomosci | |
mov ah, 9 ; ah=9 - "print string" sub-function | |
int 0x21 ; przerwanie dosa | |
; wlaczenie speakeara | |
call musicup | |
run: | |
; sprawdzenie czy jakis klawisz jest wcisniety | |
.__loop: | |
xor ax, ax | |
mov ah, 0bh | |
int 21h ; zwraca 0 jesli zaden nie jest wcisniety, nie 0 jesli cos jest | |
cmp al, 0 | |
je __key_not_pressed | |
__key_pressed: | |
; sprawdza jaki klawisz wcisniety | |
mov ah, 0 | |
int 16h | |
cmp al, 27 ; jesli esc zamknij | |
je exit | |
; indeks dzwieku, ascii 0 zaczyna sie od 48 | |
sub al, 48 | |
xor bx, bx | |
mov bl, al | |
shl bx, 1 | |
; odgrywanie dzwieku | |
call musicup | |
mov ax, [ds:nuts + bx] | |
out 42h,al | |
mov al,ah | |
out 42h,al | |
delay 10 | |
__key_not_pressed: | |
call musicdown | |
jmp run.__loop | |
exit: | |
; wylaczenie dziweku | |
call musicdown | |
; przerwanie wyjscia z aplikacji | |
mov ax,4c00h | |
int 21h | |
ret | |
; segment stosu | |
segment stk use16 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment