; name : Cosmic ; coder : Dworkin ; music : ??? z cosmic.mod? ; compo : ; adress : Brno :) Czech republic ; e-mail : ogion@centrum.cz ; www : http://hyperlink.cz/ogion/ ; message : I don't speak english. ; Nemuzu sehnat autora skladby, mel jsem to v modu? a pred ; nekolika lety pri pokusu co zvladne speaker jsem nektere ; slibne skladby prepsal do qbasicu. Pak mne spadl hadr a ; prezily to jen ZNELKY.BAS. ; Zdrojak neni bez chyb a poznamky se mohu vztahovat k ne- ; jake predchazejici verzi. V chranenem rezimu procesoru ; mohou byt programu zakazany nektere cinnosti a muze se ; pak chovat nekorektne. ; Chcete-li se vyhnout problemum spoustejte program v DOSu. ; ; ; Testovano: DURON 750MHz, TNT2 Pro, DOS ; ; Minimalni konfiguace: ; ; - 286 nebo 386 ; - Fce 2 v INT 21h musi pri: 13... presunout kurzor na zacatek radku ; 9... mazat nekolik znaku ; ; Kompilace: com.bat cosmic ; ; COM.BAT: @echo off ; rem Doporucuji nastavit COM.BAT !\! v "NC" nebo ! v "DN" pro .ASM ; rem Jiny disk tlink nesezere ani s !:!\! nebo !\! ; if exist %1 goto error ; ?:\?\tasm %1.asm %2 /m /la |more ; ?:\?\tlink /t /x %1 ; del %1.obj ; goto exit ; :error ; echo Parametr musi byt bez pripony .asm! ; :exit dvaosmsestka EQU 0 IF dvaosmsestka .286 else .386 endif IDEAL MODEL TINY CODESEG Org 100h STARTUPCODE ;Predpoklad obsahu registru ;AX=0 ;BX=0 BH musi byt 0!!! ;CX=00ffh CH musi byt 0!!! ;DX=24D6h ;{Nastav Citac} MOV AL,0B6H OUT 43H,AL ;citac 2 je nastaven na: cteni/zapis 2 bytu, mod 3, binarne MOV SI,Offset Tony-1 @Repeat: mov di,offset Sloka0 @ForSloka: MOV cl,8 ;8..1, ch musi byt nulove!!! @Kladne: mov bp,3 ;3 :( @ForCX_8az1: dec bp ;bp mod 3 js @Kladne ;bp = 2,1,0,2,1,0,2,1 mov bl,[DI+BP] ;offset SlokaX + Index mov AX,[BX+SI] ;{Procedure Sound(AX:Word); Assembler;} OUT 42H,AL ;port[$42] := al, dolni byte MOV AL,AH ;horni byte OUT 42H,AL ;port[$42] := al mov ah, 02h ;zobraz znak mov dl,'' ;#22 ;{Procedure NoSound; Assembler;} IN AL,61h ;al := port[$61] AND AL,0FCH ;vynuluj dolni 2 bity OUT 61h,AL ;Port[$61=97] := al @Pis: int 21h ;CTRL+BREAK = Exit dec bx ;bx je 1..13 > 0 jnz @Pis mov dl,9 ;tab=maz int 21h ;CTRL+BREAK = Exit mov dl,13 ;cr=skok na zacatek radku int 21h ;CTRL+BREAK = Exit ;{Procedure InitSound; Assembler;} IN AL,61h ;al := port[$61=97] OR AL,3 ;2 nastav dolni 2 bity OUT 61h,AL ;zapni zvuk ;{Procedure Wait150ms; Assembler;} push 40h pop es mov bx,6ch IF dvaosmsestka mov ax,[es:bx] inc ax inc ax inc ax ;1x navic oproti 386 verzi @Wait286: cmp ax,[es:bx] ;1x za hodinu vynecha ton! :( ja @Wait286 ;neni tam JAE aby reseni nebylo 65536=0=nema reseni else mov eax,[es:bx] inc eax inc eax @Wait386: cmp eax,[es:bx] jae @Wait386 endif Loop @ForCX_8az1 ADD DI,3 cmp DI,SI jna @ForSloka ja @Repeat Sloka0 db 1,3,5 ;5 3 1 5 3 1 5 3 Sloka1 db 1,3,5 Sloka2 db 1,3,9 Sloka3 db 1,3,9 Sloka4 db 1,3,11 Sloka5 db 1,5,11 Sloka6 db 3,5,13 Sloka7 db 3,7,13 ; 1 3 5 7 9 11 13 Tony dw 1612,1709,1918,2033,2154,2415,2560 ; +97 +209 +115 +121 +261 +145 End 'QBasic PLAY "o3 t40 l32" FOR n = 1 TO 2 '1918,1709,1612 PLAY "D#FF#" '1918,1709,1612 PLAY "D#FF#" '1918,1709 PLAY "D#F" NEXT '1918,1709,1612 '1918,1709,1612 '1918,1709 FOR n = 1 TO 2 '2154,1709,1612 PLAY "C#FF#" '2154,1709,1612 PLAY "C#FF#" '2154,1709 PLAY "C#F" NEXT '2154,1709,1612 '2154,1709,1612 '2154,1709 PLAY "FF#" '2415,1709,1612 PLAY "FF#" '2415,1709,1612 PLAY "F" '2415,1709 PLAY "D#F" '2415,1918,1709 PLAY "D#F" '2415,1918,1709 PLAY "D#" '2415,1918 PLAY "D#F" '2560,1918,1709 PLAY "D#F" '2560,1918,1709 PLAY "D#" '2560,1918 PLAY "DF" '2560,2033,1709 PLAY "DF" '2560,2033,1709 PLAY "D" '2560,2033