home *** CD-ROM | disk | FTP | other *** search
- (* æ»Ñµ¿á½∞¡« ñ½∩ æ«ΣΓÅá¡«αá¼δ.
-
- äѼ«¡ßΓαᵿ«¡¡á∩ »α«úαá¼¼á, »«¬áºδóáεΘá∩ ß»«ß«íδ ß«¬αáΘÑ¡¿∩ αẼÑαá
- αѺ¿ñÑ¡Γ¡δσ »α«úαá¼¼, ¡á»¿ßá¡¡δσ ¡á ∩ºδ¬Ñ Turbo-Pascal 6.0.
- Å«ñα«í¡«ßΓ¿ ¿ß»«½∞º«óá¡¡δσ Γα嬫ó »α¿óÑñÑ¡δ ó ßΓáΓ∞Ñ, »«¼ÑΘÑ¡¡«⌐ ó
- φΓ«⌐ ªÑ æ«ΣΓÅá¡«αá¼Ñ.
- Åα«úαá¼¼á ¿úαáÑΓ »α«ßΓπε ¼Ñ½«ñ¿ε ó Σ«¡«ó«¼ αѪ¿¼Ñ, ºáΓѼ ñѽáÑΓ
- »∩Γ¿ßѬπ¡ñ¡πε »áπºπ ¿ ß¡«óá ¿úαáÑΓ Γπ ªÑ ¼Ñ½«ñ¿ε.
- ÇóΓ«α ºá ¬áτÑßΓó« ¼Ñ½«ñ¿¿ «ΓóÑΓßΓóÑ¡¡«ßΓ¿ ¡Ñ ¡ÑßÑΓ.
- ä½∩ »α«ßΓ«Γδ óÑ¬Γ«α »αÑαδóá¡¿∩ 1C »ÑαÑσóáΓδóáÑΓß∩ íѺó«ºóαáΓ¡«, Γ«
- ÑßΓ∞ »«ß½Ñ ºá»π߬á φΓ«⌐ »α«úαá¼¼δ «ßΓá½∞¡δÑ αѺ¿ñÑ¡Γδ, ¿ß»«½∞ºπεΘ¿Ñ
- óÑ¬Γ«α 1C, ¼«úπΓ »ÑαÑßΓáΓ∞ ßαáíáΓδóáΓ∞.
- ùΓ«íδ »α«óÑα¿Γ∞, ߬«½∞¬« »á¼∩Γ¿ φ¬«¡«¼¿Γß∩ »α¿ ¿ß»«½∞º«óá¡¿¿
- ¼ÑΓ«ñ«ó ß«¬αáΘÑ¡¿∩ αẼÑαá αѺ¿ñÑ¡Γ¡«⌐ »α«úαá¼¼δ, ó«ßßΓá¡«ó¿ΓÑ
- «»¿ßá¡¿Ñ ¼á¬α««»αÑñѽѡ¿∩ Standard.
- ô ¼Ñ¡∩ »«½πτ¿½ß∩ αѺ¿ñÑ¡Γ ó 5824 íá⌐Γá »α¿ {$DEFINE Standard} ¿
- óßÑú« ½¿Φ∞ 1904 íá⌐Γá, Ñß½¿ ¿ß»«½∞º«óáΓ∞ ¼ÑΓ«ñδ ß«¬αáΘÑ¡¿∩ αẼÑαá
- αѺ¿ñÑ¡Γ¡«⌐ »α«úαá¼¼δ, Γ« ÑßΓ∞ {.$DEFINE Standard}.
-
- ÇóΓ«α ÿÑσ«óµ«ó Ç.ï.
- 25 ΣÑóαá½∩ 1992 ú«ñá
-
- *)
-
- {.$DEFINE Standard}
-
- {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,R-,S-,V-,X-}
- {$M 1024,0,0}
-
- program MiniResident;
-
- uses DOS,CRT;
-
- CONST
- Counter : word = 0; (* æτÑΓτ¿¬ ó맮ó«ó »αÑαδóá¡¿∩ 1C - Γá⌐¼Ñαá *)
- MusicItem: word = 1; (* 쫼Ñα ΓѬπΘÑ⌐ τáßΓ«Γδ ¿ ñ½¿Γѽ∞¡«ßΓ¿ ºóπ¬á *)
- MaxItem = 58;(* éßÑú« φ½Ñ¼Ñ¡Γ«ó ¼áßß¿ó«ó ñ½¿Γѽ∞¡«ßΓ¿
- ¿ τáßΓ«Γδ ºóπ¬á *)
-
- CONST Fr : ARRAY[1..MaxItem] of word = (* ùáßΓ«Γá ºóπ¬á *)
- ( $106,$106,$125,$149,$106,$149,$125,$0C4,
- $106,$106,$125,$149,$106,$106,$106,$106,
- $125,$149,$15D,$149,$125,$106,$0F6,$0C4,
- $0DC,$0F6,$106,$106,$0DC,$0F6,$0DC,$0AE,
- $0DC,$0F6,$106,$0DC,$0C4,$0DC,$0C4,$0AE,
- $0A4,$0AE,$0C4,$0DC,$0F6,$0DC,$0AE,$0DC,
- $0F6,$106,$0DC,$0C4,$106,$0F6,$125,$106,
- $106,0);
- Tm : ARRAY[1..MaxItem] of byte = (* Åáπºá ¼Ñªñπ ¿º¼Ñ¡Ñ¡¿∩¼¿ ºóπ¬«ó *)
- ( 5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,
- 5 ,5 ,5 ,5 ,11,11,5 ,5 ,
- 5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,
- 5 ,5 ,11,11,6 ,5 ,6 ,5 ,
- 5 ,5 ,5 ,5 ,6 ,5 ,6 ,5 ,
- 5 ,5 ,7 ,6 ,5 ,6 ,5 ,5 ,
- 5 ,5 ,7 ,5 ,5 ,5 ,5 ,11 ,
- 11,90);
-
- (*
- Åα«µÑñπαδ Move, Sound ¿ NoSound, ¡á»¿ßá¡¡δÑ ó¼ÑßΓ« ßΓá¡ñáαΓ¡δσ
- ¿º ¼«ñπ½Ñ⌐ SYSTEM ¿ CRT.
- *)
-
- procedure Move( VAR Source, Dest; Count : word );
- (* ä½∩ Γ«ú«, τΓ«íδ ¡Ñ ¿ß»«½∞º«óáΓ∞ move ¿º ¼«ñπ½∩ SYSTEM *)
-
- TYPE
- Bytes = array[1..MaxInt] of byte;
- VAR
- I : word;
- begin
-
- FOR I := 1 TO Count DO Bytes(Dest)[I] := Bytes(Source)[I];
-
- end;{Move}
-
- (* Åα«µÑñπαδ Sound ¿ NoSound óº∩Γδ ¿º í¿í½¿«ΓѬ¿ Object Professional
- for Turbo-Pascal. êßσ«ñ¡δÑ ΓѬßΓδ ñαπú¿σ »α«µÑñπα, ¡Ñ«íσ«ñ¿¼δσ ñ½∩
- αáí«Γδ éáΦ¿σ αѺ¿ñÑ¡Γ¡δσ »α«úαá¼¼, ¼«ª¡« ¡á⌐Γ¿ Γá¼ ªÑ.
- *)
-
-
- procedure Sound(Hz: Word);
- (*Turn on the sound at the designated frequency*)
- begin
- asm
-
- MOV BX,Hz (*BX = Hz *)
- MOV AX,34DCh
- MOV DX,0012h (*DX:AX = $1234DC = 1,193,180 *)
- CMP DX,BX (*Make sure the division won't *)
- JAE @SoundExit (* produce a divide by zero error *)
- DIV BX (*Count (AX) = $1234DC div Hz *)
- MOV BX,AX (*Save Count in BX *)
-
- IN AL,61h (*Check the value in port $61 *)
- TEST AL,00000011b (*Bits 0 and 1 set if speaker is on *)
- JNZ @SetCount (*If they're already on, continue *)
-
- OR AL,00000011b (*Set bits 0 and 1 *)
- OUT 61h,AL (*Change the value *)
- MOV AL,182 (*Tell the timer that the count is coming *)
- OUT 43h,AL (*by sending 182 to port $43 *)
-
- @SetCount:
- MOV AL,BL (*Low byte into AL *)
- OUT 42h,AL (*Load low order byte into port $42 *)
- MOV AL,BH (*High byte into AL *)
- OUT 42h,AL (*Load high order byte into port $42*)
-
- @SoundExit:
- end;
- end;{Sound}
-
-
- procedure NoSound; assembler;
- (* Turn off the sound *)
- asm
-
- IN AL,61h (* Get current value of port $61 *)
- AND AL,11111100b (* Turn off bits 0 and 1 *)
- OUT 61h,AL (* Reset the port *)
-
- end; {NoSound}
-
-
- procedure BufferDS; (* îÑßΓ« ñ½∩ σαá¡Ñ¡¿∩ ¡«ó«ú« áñαÑßá ßÑú¼Ñ¡Γá ñá¡¡«ú« *)
- begin
- end;{BufferDS}
-
- procedure MyRes; interrupt;
- (* ÉѺ¿ñÑ¡Γ¡á∩ »α«µÑñπαá - «íαáí«Γτ¿¬ »ÑαÑσóáτÑ¡¡«ú« »αÑαδóá¡¿∩ 1æ *)
-
- begin
- {$IFNDEF Standard}
- ASM
- mov ax, cs : word ptr [BufferDS]
- mov ds,ax
- END;
- {$ENDIF}
-
- INC( Counter );
- if MusicItem = MaxItem (* éß∩ ¼πºδ¬á «Γδúαá½á? *)
- then NoSound
- else Sound( (Fr[MusicItem]*9) DIV 10 );
- if Counter = Tm[MusicItem] (* 使Γѽ∞¡«ßΓ∞ ΓѬπΘÑú« ºóπ¬á
- ¿ßτÑα»á¡á? *)
- then begin
- Inc( MusicItem ); (* äá, »ÑαÑσ«ñ¿¼ ¬ ß½ÑñπεΘѼπ ºóπ¬π *)
- Counter := 0;
- if MusicItem > MaxItem
- then MusicItem := 1;
- end;
- end;{MyRes}
-
- {$IFNDEF Standard}
-
- procedure DummyProc; external;
-
- procedure Keep( ExitCode : byte );
- (* æñó¿ú ßÑú¼Ñ¡Γá ñá¡¡δσ ó»½«Γ¡πε ¬ ¬«ñ«ó«¼π ßÑú¼Ñ¡Γπ.
- é αѺπ½∞ΓáΓÑ πª¿¼áÑΓß∩ EXE - Σá⌐½ ¡á߬«½∞¬« 󫺼«ª¡«. *)
-
- VAR
- ResidSize: word; (* αẼÑα αѺ¿ñÑ¡Γ¡«⌐ τáßΓ¿ »α«úαá¼¼δ ó »áαáúαáΣáσ *)
- NewDS : word; (* º¡áτÑ¡¿Ñ ßÑú¼Ñ¡Γá ¡«ó«ú« DS - ßÑú¼Ñ¡Γá ñá¡¡δσ *)
- DataSize : word; (* αẼÑα ßÑú¼Ñ¡Γá ñá¡¡δσ ó »áαáúαáΣáσ *)
-
-
- begin
-
-
-
- NewDS := (CSeg + Ofs(DummyProc) DIV 16) +1; (* ì«óδ⌐ ßÑú¼Ñ¡Γ ñá¡¡δσ
- ¡áτ¿¡áÑΓß∩ ßαáºπ »«ß½Ñ
- »α«µÑñπαδ Keep *)
-
- DataSize := SSeg-DSeg;
- ResidSize:= NewDS-PrefixSeg+DataSize;
-
- asm (* çừ¼¡¿¼ º¡áτÑ¡¿Ñ áñαÑßá ¡«ó«ú« ßÑú¼Ñ¡Γá ñá¡¡δσ *)
- mov ax,NewDS
- mov cs : word ptr [BufferDS], ax
- end;
-
- move( MEM[ DSeg:0 ], MEM[ NewDS:0 ], (SSeg-DSeg)*16);
- (* move ßñó¿úáÑΓ ßÑú¼Ñ¡Γ ñá¡¡δσ ó»α¿Γδ¬
- ¬ ¬«ñá¼ αѺ¿ñÑ¡Γ¡«⌐ τáßΓ¿ »α«úαá¼¼δ *)
-
- ASM (* æΓá¡«ó¿¼ß∩ αѺ¿ñÑ¡Γ«¼ *)
- mov ax,[SYSTEM.PREFIXSEG]
- mov es,ax
- mov es,es:[02CH] (* æ¡áτá½á «ßó«í«ªπ Environment block *)
- mov ah,49H
- int 21H
-
- mov dx,ResidSize (* ôßΓá¡«ó¿¼ αẼÑα αѺ¿ñÑ¡Γ¡«⌐ τáßΓ¿ *)
- mov ah,31H
- mov al,ExitCode (* ÆÑ»Ñα∞ - TSR ß ¬«ñ«¼ ó«ºóαáΓá ExitCode *)
- int 21H
- END;
-
- end;{Keep}
-
- procedure DummyProc;
- begin
- end;{DummyProc}
-
- {$ENDIF}
-
- (* ÄΓßεñá ¡áτ¿¡áÑΓß∩ Γá τáßΓ∞ »α«úαá¼¼δ, ¬«Γ«αá∩ ¡Ñ »«»áñÑΓ ó αѺ¿ñÑ¡Γ.
- ìÑ ñπ¼á⌐ΓÑ, τΓ« φΓ« ß½¿Φ¬«¼ ¼á½«, óÑñ∞ «¡á ó¬½ετáÑΓ ó ßÑí∩ »α«µÑñπαδ
- ¿º ¼«ñπ½Ñ⌐ DOS, SYSTEM, CRT ¿ ¿¡¿µ¿á½¿ºáµ¿«¡¡δ⌐ ¬«ñ φΓ¿σ ¼«ñπ½Ñ⌐.
- *)
-
- begin
- SetIntVec( $1C, Addr(MyRes) );
- SwapVectors;
- Keep( 0 );
- end.
-