Продуктивный был день. С утра написал интро для ZX, потом взялся за работу для msdos. Кое-что ребята из канала sizecoding подсказали.
;flat assembler
org 100h
use16
;#define PIT_FREQ 0x1234DD;
;int notes[11] = {277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494};
;int i, counter;
;
;outb(0x61, inb(0x61) | 3); // enable speaker
;outb(0x43, 0xb6); // program the pit
;
;for (i=0; i<11; i++) {
; counter = (PIT_FREQ / notes[i]); // calculate frequency
; outb(0x42, counter & 0xff); // LSB
; outb(0x42, counter >> 8); // MSB
; ms_delay(100); // wait for a bit
xor bp,bp
mov al,$b6
out $43,al
pl:
mov bx,[cs:notes+bp]
add bp,2
cmp bp,22
jne nolbp
xor bp,bp
nolbp:
mov dx,$14
mov ax,$4f38
div bx
out $42,al
mov al,ah
out $42,al
; // Tell the 8255 PPI to start the sound
in al, $61 ;// Read Port B of the 8255 PPI
or al, $03 ;// Set bits 0 and 1:
;// bit 0 -- use the 8253/8254
;// bit 1 -- turn speaker on
out $61, al ;// Write to Port B of the 8255 PPI
mov dx, 3DAh
NoVRT:
in al,dx
test al,8
jz NoVRT ;wait until Verticle Retrace Ends
in al,60h
dec al
jne pl
; // Tell the 8255 PPI to stop the sound
in al, $61 ;// Read Port B of the 8255 PPI
and al, $FE ;NOT 2 ;// Clear bit 1 (turn speaker off)
out $61, al ;// Write to Port B of the 8255 PPI
ret
notes:
dw 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494
Звук вышел убогий, после мучений собрал 256б. В итоге, вернулся к MIDI.
Комментарии
Отправить комментарий