29 October 2008

SCANBOOT.ASM


;--------------------------------------------------------
; Program Name : SCANBOOT.ASM (SCAN BOOT Viruses)
; Porgram Type : ANTI VIRUS
; Penulis : Kutu Busuk
; ZeroBit Tech. Research & Development.
; Sourcer : Editor TP 5.5
; Compiler : TASM 2.0 + TLINK 2.0
; Program Code : I#05.930326.930423.07.$03
;--------------------------------------------------------

ESCAPE equ 27
JmlVir equ 15
JmlID equ 3
OneRec equ 11

Code Segment
Assume CS:Code,DS:Code
Org 100h

Begin:
Jmp Start

DUMMY db 13,'** SCANBOOT.ASM - (C)93xxxx, ZeroBit **',10,1Ah

JUNK db 13,'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿',13,10
db '³ Ada perubahan tidak sah... ³Ü',13,10
db 'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÛ',7,13,10,'$'
db ' ßßßßßßßßßßßßßßßßßßßßßßßßßßßßß',7,13,10,'$'

COPYRIGHT db 13,'** SCANBOOT R1.0 - (C)1993, ZeroBit TR&D **',10
db 13,'Masukkan disk di drive a: dan tekan tombol...$'
BATAL db 13,'Dibatalkan...' ,13,10,'$'
BACADISK db 13,'Membaca disk...' ,13,10,'$'
ERROR db 13,'Gagal akses...' ,13,10,'$'
NOVIR db 13,'Virus tak ketemu...' ,13,10,'$'
ADAVIR db 13,'Disk kena virus ' ,13,10,'$'

Ctr db 0
Drive db ?

Vir db 000, 233,172,000, 'Michael'
db 000, 235,078,144, 'DenZuko'
db 000, 235,041,144, 'Ohio '
db 103, 192,205,019, 'Hacker2'
db 043, 250,250,008, 'Hacker '
db 000, 233,013,001, 'H&Dee '
db 000, 235,064,000, 'Sapta '
db 005, 233,153,000, 'Stoned '
db 003, 051,192,142, 'Mystic2'
db 000, 233,170,000, 'VPV1 '
db 000, 235,031,144, 'Joshi '
db 043, 250,051,192, 'Robert '
db 043, 250,250,140, 'Voodoo '
db 043, 250,250,250, 'STMIK '
db 001, 233,074,001, 'Brain '

;--ofs---virus id-----name---
; 1 > panjang 1 record
; 1 2 3 4 5678901 > adalah 11 byte

Start:
mov ax,ds
mov es,ax

lea dx,COPYRIGHT ; cetak copyright
call cetak ; dan tanya drive...

xor ax,ax ; baca keyboard
int 16h

cmp al,ESCAPE ; esc ?
jne short noesc ; bukan ! lompat ke NOESC

lea dx,BATAL ; ya ! esc !
call cetak ; cetak "batal"

jmp quit ; dan keluar...

noesc:

mov ah,19h
int 21h
mov drive,al ; ambil nama drive !

lea dx,BACADISK ; cetak "baca disk"
call cetak

xor ax,ax ; reset disk drive
int 13h

mov drive,0 ; ** HANYA UNTUK TEST DRV A:. BISA DIBUANG **

mov cx,3 ; baca 3 kali jika ada error
lagi:
push cx
mov ax,0201h
mov cx,0001h
mov dl,drive
mov dh,0000h
mov bx,offset Buff ; baca boot sektor
int 13h
pop cx
jnc okay ; ada error ?
loop lagi ; ya ! baca lagi !

lea dx,ERROR ; cetak "error"
call cetak

jmp quit ; keluar

okay:
; cari virus data di Buff
mov si,offset Vir
sub si,OneRec
mov Ctr,0
virl:
inc Ctr
add si,OneRec
mov di,offset Buff
add di,[si]
inc si

mov cx,JmlID
repe cmpsb
je kena

cmp Ctr,JmlVir
je absen ; tidak sama ? tidak ada virus
jmp virl

kena:
lea dx,ADAVIR ; cetak "ada virus"
call cetak

mov dx,si ; cetak "nama virus"
inc dx
mov di,dx
add di,8
mov byte ptr [di],'$'
call cetak

jmp short quit ; keluar

absen:
lea dx,NOVIR ; cetak "takada virus"
call cetak

quit:
int 20h

cetak proc near
push ax
mov ah,9
int 21h
pop ax
ret
cetak endp

Buff db 0

Code EndS
End Begin

SLALOM R1.0


(* --------------------------------------------------- *)
(* Program Name : SLALOM R1.0 *)
(* Program Type : Game (And Demo too...) *)
(* Programmer : Kutu Busuk *)
(* ZeroBit Tech. Research & Dev. *)
(* Compiler : Turbo Pascal 5.50 *)
(* Program Code : #M04.93E02.93E04.16.$05.**** *)
(* Hardware Config. : AT/286-16MHz, CGA *)
(* --------------------------------------------------- *)

{$M 65520,0,0,R-}

Program Slalom;

Uses Dos, Crt;

Const
Passed : Boolean = False;
Noise : Boolean = True;
HighScr : Word = 0;
RgArrow = 77; { Scan Code }
LfArrow = 75;
UpArrow = 72;
DnArrow = 80;
F1 = 59;
Esc = 1;
Width = 57; { Lebar Area }
Road = 12; { Lebar Jalan }
MaxDly = 100;
MinDly = 15;
StepDly = 5; { Pakemnya Rem }

Var
Int1Ch : Pointer;
Dly,
Pos,
XPos,
Tree,
Inp,
Scan : Byte;
Quit,
RgArrP,
LfArrP,
UpArrP,
DnArrP,
F1P,
EscP,
Press : Boolean;
Dummy : Char;
H,
M,
S,
SD,
Score : Word;
Start,
Stop : Real;

Procedure KeyBoardHandler; Interrupt;
Begin
Inp := Port[$60];
Scan := Inp AND $7F;
Press := Inp < $80;
Case Scan of
RgArrow : RgArrP := Press;
LfArrow : LfArrP := Press;
UpArrow : UpArrP := Press;
DnArrow : DnArrP := Press;
F1 : F1P := Press;
Esc : EscP := Press;
End;
While KeyPressed do Dummy := ReadKey;
If EscP then Quit := True;
If F1P then
Begin
NoSound;
Noise := NOT Noise;
End;
End;

Procedure Init;
Begin
DirectVideo := False;
CheckBreak := False;
GetIntVec($1C,Int1Ch);
SetIntVec($1C,@KeyBoardHandler);
If Mem[0:$449] <> CO80 then TextMode(CO80);
TextAttr := $1F;
ClrScr;
InLine($b4/1/ { mov ah,1 ; kursor hilang }
$b9/32/32/ { mov cx,2020h }
$cd/$10); { int 10h }
Randomize;
End;

Procedure Done;
Begin
SetIntVec($1C,Int1Ch);
NoSound;
Window(01,01,80,25);
TextAttr := $1F;
ClrScr;
InLine($b4/1/ { mov ah,1 ; kursor ada lagi }
$b9/7/0/ { mov cx,7 }
$cd/$10); { int 10h }
End;

Procedure WriteXY(X, Y : Byte; St : String);
Begin
GotoXY(X,Y);
Write(St);
End;

Procedure Box(X1, Y1, X2, Y2, Attr, Back : Byte);
Begin
Window(X1+2,Y1+1,X2+2,Y2+1);
TextAttr := Back;
ClrScr;
Window(X1,Y1,X2,Y2);
TextAttr := Attr;
ClrScr;
Window(01,01,80,25);
End;

Procedure Draw;
Var X : Byte;
Begin
Port[985] := Blue; { BORDER Biru pada CGA }
Box(60,02,78,13,$2F,$07);
WriteXY(62,04,'TOMBOL-TOMBOL :');
WriteXY(64,06,#27' : KIRI');
WriteXY(64,07,#26' : KANAN');
WriteXY(64,08,#24' : GAS');
WriteXY(64,09,#25' : REM');
WriteXY(64,10,'F1 : SUARA');
WriteXY(64,11,'Esc : KELUAR');
Box(60,17,78,24,$4E,$07);
WriteXY(62,18,'® SLALOM R1.0 ¯');
WriteXY(63,20,'NTT :'); Write(HighScr:6);
WriteXY(63,21,'WAKTU :'); Write(20.0:6:1);
WriteXY(63,22,'LAJU :'); Write(0:6);
WriteXY(63,23,'NILAI :'); Write(0:6);
Window(01,01,Width+1,25);
TextAttr := $F;
ClrScr;
Window(01,01,80,25);
For X := 1 to 25 do
Begin
WriteXY(20,X,#178#178);
WriteXY(19+Road,X,#178#178);
End;
WriteXY(22,15,#234);
WriteXY(01,15,'SIAP ?');
For X := 3 downto 1 do
Begin
If Noise then Sound(1000);
Delay(100); NoSound; Delay(900);
GotoXY(01,15); Write('....',X:2);
End;
If Noise then Sound(1000);
Delay(1000);
WriteXY(06,15,'GO !!!');
NoSound;
End;

Procedure WriteInfo(Score, Gas : Word);
Var T : Byte;
Begin
T := TextAttr;
TextAttr := $4E;
GotoXY(72,21); Write(20.0 + Start - Stop:4:1);
GotoXY(70,22); Write(Gas:6);
GotoXY(70,23); Write(Score:6);
TextAttr := T;
End;

Function Enough : Boolean;
Var C : Char;
Begin
Box(07,08,51,12,$4F,$1E);
WriteXY(10,10,'ENTER UNTUK MAIN LAGI, ESC UNTUK KELUAR');
While KeyPressed do C := ReadKey;
Repeat
C := ReadKey;
Until C IN [#13,#27];
Enough := C = #27;
End;

Procedure Run;
Begin
Draw;
Dly := 50;
Pos := 20;
XPos := 22;
Score := 0;
Quit := False;
RgArrP := False;
LfArrP := False;
UpArrP := False;
DnArrP := False;
F1P := False;
EscP := False;
GetTime(H,M,S,SD);
Start := 3600*H+60*M+S+SD/100;
Repeat
GetTime(H,M,S,SD);
Stop := 3600*H+60*M+S+SD/100;
Passed := ((Stop - Start) > 20.0);
If NOT ((Stop - Start) > 19.0) then
Case Random(20) of
0..7 : If (Pos > 1) then Dec(Pos);
8..16 : If (Pos < (Width-Road)) then Inc(Pos);
End;
WriteXY(Pos,1,#178#178);
WriteXY(Pos+Road-1,1,#178#178);
Tree := Random(Width);
If (Tree < Pos) OR (Tree > (Pos+Road)) then
Begin
TextAttr := 9+Random(7);
WriteXY(Tree,1,#177);
TextAttr := $F;
End;
If UpArrP then
Begin
If (Dly > MinDly) then Dec(Dly)
End
else
If (Dly < MaxDly) then Inc(Dly);
If DnArrP AND (Dly < (MaxDly-StepDly)) then
Begin
Inc(Dly,StepDly);
If Noise then Sound(3951); { Suara Rem }
End;
WriteXY(XPos,15,#32);
If (LfArrP AND (XPos > 1)) then Dec(XPos);
If (RgArrP AND (XPos < Width)) then Inc(XPos);
InLine($B8/1/7/ { mov ax,701h ; scroll down }
$31/$C9/ { xor cx,cx }
$B6/24/ { mov dh,24 }
$B2/ $B7/$f/ { mov bh,0fh }
$cd/$10); { int 10h }
WriteXY(XPos,15,#234);
If Noise then Sound(20+(MaxDly-Dly)*2); { Suara Mesin }
Delay(Dly);
Inc(Score);
WriteInfo(Score,MinDly+MaxDly-Dly);
If Passed then
Begin
Box(17,18,40,22,$4E,$2F);
GotoXY(72,21); Write(0.0:4:1);
If Score > 200 then
Begin
WriteXY(20,20,'SUKSES ! NILAI ');
Write(Score);
End
else
WriteXY(20,20,'TERLALU LAMBAT !');
If Score > HighScr then
Begin
If HighScr <> 0 then
Begin
Sound(500); Delay(200);
WriteXY(20,21,'NILAI TERTINGGI !!!');
Sound(200); Delay(200);
End;
HighScr := Score;
End;
Sound(500); Delay(200);
Sound(200); Delay(500);
NoSound;
End;
If (Mem[$B800:(XPos-1)*2+13*160] <> 32) then
Begin
Mem[$B800:(XPos-1)*2+14*160+1] := $8C;
Box(17,18,40,22,$4E,$2F);
WriteXY(23,20,'TABRAKAN !!!');
For Dly := 1 to 150 do
Begin
If Noise then Sound(50+Random(700));
Delay(5);
End; { Mobil Meledak ! }
Quit := True;
NoSound;
End;
Until Quit OR Passed;
End;

BEGIN
Init;
Repeat
Run
Until Enough;
Done;
END.

28 October 2008

Tahun Kadaluwarsa LPG? Bukan!

Baru saja saya menerima email mengenai tabung LPG dan insiden tabung meledak yang banyak terjadi. Bahwa agar masyarakat jangan memakai tabung LPG yang tahun kadaluwarsa seperti tertera di tiap tabung tersebut.

Setelah saya cek (by the power of Google), ternyata informasi penanggalan di tiap tabung LPG berisikan waktu pembuatan.

Lengkapnya ada disini: http://www.bsn.or.id/files/sni/SNI%201452-2007.pdf

Jadi jika kita tidak mau pakai tabung LPG yang penanggalannya sudah lewat, itu malah akan berarti kita tidak dapat memakai tabung LPG manapun.

Satu pertanyaan kecil yang membuat saya berfikir, siapa juga yang menulis email tersebut pertama kali?

Satu lagi bukti bahwa asal forward email bisa berbahaya.

07 October 2008

brick walls are there for a reason

"Brick walls are there for a reason. They let us prove how badly we want things."

"Wait long enough, and people will surprise and impress you."

...from Randy Pausch's Last Lecture

Now what I want most is to spend more time with my family...