Skip to content

Instantly share code, notes, and snippets.

@Mati365
Created January 17, 2020 13:17
Show Gist options
  • Save Mati365/d341f12d72f82888ef8e95435a179805 to your computer and use it in GitHub Desktop.
Save Mati365/d341f12d72f82888ef8e95435a179805 to your computer and use it in GitHub Desktop.
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