; === "EXPRESS TRAIN 125" BY PWP === ; ; This is just a proof of concept. ; The main point here is that tiny MS-DOS demos with PCM sound are possible. ; ; Compiles with nasm. ; ; Uses COVOX sound, use Dosbox to emulate it. ; ; viznut/pwp 2011-11-05 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; bits 16 org 0x100 mov al,0x13 int 0x10 push cs pop ds call hooktimer mov dword[melody],3 mov dword[timctr],0 mov word[beatsy],5 mov dword[speedy],5 ;;; MAINLOOP push 0xa000 pop es l1: mov bx,[timctr+1] push 0xa200 pop es add ax,cx l0: add bx,cx xor ax,bx and ax,bx push cx pop cx xor ax,cx xor ax,[timctr+1] and ax,15 add ax,15 xor ax,[melody] stosb loop l0 ; Tekstii pitäis olla push ax ; Jännäobminointeja ei ole push bx push cx push dx xor ax,ax xor bx,bx mov dh,0 ; Pystyrivi mov dl,5 ; Vaakarivi - ei tosin tee mitään mov bh,0 ; emt mov ah,2 ; emt int 10h ; emt mov dx,hello ; Hello, world siihen niin kivasti mov ah,9 ; funktio tekstirivin printtauksee int 21h ; interrupteri notta ko. funktio vedettäs pop dx pop cx pop bx pop ax cmp dword[timctr],16383 jle changed mov dword[melody],5 cmp dword[timctr],32766 jle changed mov word[melody],7 cmp dword[timctr],49150 jle changed mov word[melody],3 cmp dword[timctr],81919 jle changed mov word[melody],2 cmp dword[timctr],90110 jle changed mov word[melody],1 cmp dword[timctr],98301 jle changed mov word[melody],2 cmp dword[timctr],114684 jle changed mov word[melody],4 cmp dword[timctr],131067 jle changed mov word[melody],3 cmp dword[timctr],147451 jle changed mov dword[timctr],0 mov word [beatsy],4 mov word [speedy],8 changed: in al,0x60 ; esc key check cbw dec ax jnz l1 ;;; (UN)INIT CODE mov al,0x3 int 0x10 lds dx,[oldint] jno timset hooktimer: mov ax,0x3508 int 0x21 push es push bx pop dword [oldint] mov dx,handler mov ah,0x99 ; interrupt rate (0x20 is about 36 kHz i think) timset: mov al,0x36 out 0x43,al mov al,ah out 0x40,al mov al,0 out 0x40,al mov ax,0x2508 int 0x21 ret ;;; TIMER IRQ HANDLER handler: pusha mov ax,[timctr] mov dx,ax mov bx,dx imul dx,[melody] mov cl,[beatsy] shr bx,cl ; (5) sit 4 ku alempi o 9 or dx,bx shr ax,6 or ax,dx mov bx,dx ; (5) sit 7 ; sit 9 imul dx,[speedy] shr bx,2 and dx,bx and ax,dx mov dx,0x378 out dx,al inc dword [timctr] ;cmp dword[timctr],1024 ;jne change mov al,0x20 out 0x20,al popa iret ;;; VARIABLES hello db "Dignity: Separate, Rebuild. Annihilate, Compile, Run$" timctr equ $+0 oldint equ $+4 melody equ $+8 beatsy equ $+12 speedy equ $+16