View Single Post
Old 06-21-2009, 12:34 PM  
milambur
Mainstream since 2010
 
milambur's Avatar
 
Industry Role:
Join Date: Jan 2003
Posts: 1,327
Yeah, php is for pussies, here is some simple GEEK code I wrote when I was in highschool:
Code:
PROGRAM MandelBrot;
USES Crt,Dos;
CONST
  VGASegment = $0A000;
  xres = 160;
  yres = 100;
VAR
 i,x,y   : Integer;
 ch      : Char;
 a,b,ao,
 bo,abs  : Real;

PROCEDURE InitGraph(k : Byte);         {Inits Graph/Textmode}
VAR
  g : Byte;
BEGIN
  CASE k OF
    1 : g := $03;     {Inits 80x25 Textmode}
    2 : g := $13;     {Inits 320x200x256 Graphmode}
    3 : g := $12;     {Inits 640x480x16 Graphmode}
  END;

  ASM
    MOV AH,$00
    MOV AL,g
    INT $10           {Inits new mode}
  END;
END;

PROCEDURE PutPixel(x,y : Word; col : Byte);
VAR
  Mempos : Word;
BEGIN
  Mempos := (y-1)*320 + (x-1);
  Mem[VGASegment:Mempos] := col; {Givs memory position mempos the value of col}
END;


{PROCEDURE PutPixel(x,y : Word; col : Byte);
BEGIN
  ASM
    MOV AH,$0C
    MOV AL,col
    MOV CX,x
    MOV DX,y
    INT $10
  END;
END;}

BEGIN
{  ASM
    MOV AX,$4F02
    MOV BX,$101
    INT $10
  END;}
  InitGraph(2);
  FOR x := -xres TO xres DO
    FOR y := -yres TO 0 DO BEGIN
      a := x/50;
      b := y/50;
      i := 1;
      REPEAT
        abs := a*a+b*b;
        IF abs > 4 THEN BEGIN
          PutPixel(x+xres,y+yres,i+16);
          PutPixel(x+xres,yres-y,i+16);
        END
        ELSE BEGIN
          ao := a;
          bo := b;
          a := ao*ao-bo*bo+x/50;
          b := 2*ao*bo+y/50;
          Inc(i);
        END;
      UNTIL  (i = 100) OR (abs > 4);
    END;
  ch := ReadKey;
END.
Code:
code   SEGMENT para PUBLIC 'code'
       ASSUME cs:code
       LOCALS
       .386

       JMP Main

InitG  PROC NEAR

       INT  10

       RET
       ENDP

Random PROC NEAR
       MOV  EAX,1107030247
       MOV  EBX,DS:seed
       MUL  EBX
       ADD  EAX,97177
       MOV  DS:seed,EAX
       SHR  EAX,15
       AND  AX,8191
       RET
       ENDP

StartV PROC NEAR
       MOV  CX,70

pix1:  CALL Random
       MOV  BX,41
       DIV  BX
       MOV  SI,CX
       ADD  SI,100
       MOV  DS:[SI],AX
       LOOP pix1

       MOV  CX,70
pix2:  CALL Random
       MOV  BX,26
       DIV  BX
       MOV  SI,CX
       ADD  SI,200
       MOV  DS:[SI],AX
       LOOP pix2

       RET
       ENDP

Scroll PROC NEAR
       MOV  CX,70
Ppix:  MOV  SI,CX
       MOV  AX,DS:[SI+100]
       INC  AX
       MOV  DS:[SI],AX
       DEC  AX
       MOV  BX,DS:[SI+200]
       INC  BX
       MOV  DS:[SI],BX
       DEC  BX
       MUL  BX
       MOV  SI,AX
       MOV  BX,15
       MOV  0A000h:[SI],BX
       LOOP Ppix


       RET
       ENDP

Main   PROC NEAR
       MOV  AH,13h
       CALL InitG
       CALL StartV
       CALL Ppix
       MOV  AH,06h
       MOV  DL,0FFh
       INT  21h
       MOV  AH,3
       CALL InitG
       ENDP

seed   dd  0

code   ENDS
       END
Code:
CONST
  VGASegment = $0A000;

VAR
  x,y : Integer;

PROCEDURE SetColor(color,R,G,B:Byte);
BEGIN
	Port[$3C8] := color;
	Port[$3C9] := R;
	Port[$3C9] := G;
	Port[$3C9] := B;
END;

PROCEDURE InitGraph(k : Byte);         {Inits Graph/Textmode}
VAR
  g : Byte;
BEGIN
  CASE k OF
    1 : g := $03;     {Inits 80x25 Textmode}
    2 : g := $13;     {Inits 320x200x256 Graphmode}
    3 : g := $12;     {Inits 640x480x16 Graphmode}
  END;

  ASM
    MOV AH,$00
    MOV AL,g
    INT $10           {Inits new mode}
  END;
END;

PROCEDURE InitVESAGraph(k : Byte);
VAR
  g : Word;
BEGIN
  CASE k OF
    1 : g := $100;              {640*400*256}
    2 : g := $101;              {640*480*256}
    3 : g := $102;              {800*600*16}
    4 : g := $103;              {800*600*256}
    5 : g := $104;              {1024*768*16}
    6 : g := $105;              {1024*768*256}
    7 : g := $106;              {1280*1024*16}
    8 : g := $107;              {1280*1024*256}
  END;
  ASM
    MOV AX,$4F02
    MOV BX,g
    MOV CX,0
    MOV DX,0
    INT $10
    MOV g,AX
  END;
  Write(g);
END;

PROCEDURE PutPixel(x,y : Word; col : Byte);
VAR
  Mempos : Word;
BEGIN
  IF (x > 1) AND (x < 321) AND (y > 1) AND (y < 201) THEN BEGIN
    Mempos := (y-1)*320 + (x-1);
    Mem[VGASegment:Mempos] := col; {Givs memory position mempos the value of col}
  END;
END;

PROCEDURE PutPixelAG(x,y : Word; Col : Byte);
BEGIN
  ASM
    MOV AH,$0C
    MOV AL,Col
    MOV CX,x
    MOV DX,y
    INT $10
  END;
END;

PROCEDURE PutPixelVESA(x,y : Word; col : Byte);
BEGIN

END;

PROCEDURE ClearScr;
BEGIN
  FOR i := 1 TO 64000 DO
    Mem[$A000:i] := 0;
END;

FUNCTION GetPixelAG(x,y : Word) : Byte;
VAR
  g : Byte;
BEGIN
  ASM
    MOV AH,$0D
    MOV CX,x
    MOV DX,y
    INT $10
    MOV g,AL
  END;
  GetPixelAG := g;
END;

FUNCTION GetPixel(x,y : Word) : Byte;
VAR
  Mempos : Word;
BEGIN
  IF (x > 1) AND (x < 321) AND (y > 1) AND (y < 201) THEN BEGIN
    Mempos := (y-1)*320 + (x-1);
    GetPixel := Mem[VGASegment:Mempos]; {Givs memory position mempos the value of col}
  END
  ELSE
    GetPixel := 0;
END;

PROCEDURE WriteString(x,y : Byte; col : Byte; s : STRING; bi : Boolean);
VAR
  g : Byte;
BEGIN
  ASM
    MOV AH,$02
    MOV DH,y
    MOV DL,x
    MOV BH,$0
    INT $10
  END;
  FOR i := 1 TO Length(s) DO BEGIN
    g := Ord(s[i]);
    ASM
      MOV AH,$0E
      MOV AL,g
      MOV BL,col
      INT $10
    END;
    IF bi THEN BEGIN
    {  Sound(1000);
      Delay(15);
      NoSound;
      Delay(30);}
    END;
  END;
END;

PROCEDURE LoadImage(s : STRING);
VAR
  pix   : FILE;
  R,G,B : Byte;
  ext   : Word;

BEGIN
  Assign(pix,s);
  Reset(pix,1);
  FOR i := 1 TO 10 DO
    BlockRead(pix,ch,SizeOf(ch));

  FOR i := 0 TO 255 DO BEGIN
    BlockRead(pix,ch,SizeOf(ch));
    R := Ord(ch);
    BlockRead(pix,ch,SizeOf(ch));
    G := Ord(ch);
    BlockRead(pix,ch,SizeOf(ch));
    B := Ord(ch);
    SetColor(i,R,G,B);
  END;

  BlockRead(pix,Mem[$A000:0],$FA00);
 { Move(Mem[$9000:0],Mem[$A000:0],$FA00);

  ext := EMBGetMem(64);
  MoveToEMB(Mem[$A000:0],ext,$FA00);
  ClearScr;
  ch := ReadKey;
  MoveFromEMB(ext,Mem[$A000:0],$FA00);}
END;

PROCEDURE ReadPCX(s : String);
VAR
  image   : ARRAY[1..64000] OF Byte;
  pic     : FILE;
  n       : Integer;
  k,R,G,B : Byte;

BEGIN
  Assign(pic,s);
  Reset(pic,1);

  FOR i := 0 TO 255 DO
    SetColor(i,0,0,0);

  FOR i := 1 TO 128 DO
    BlockRead(pic,k,SizeOf(k));

  i:=0;
    REPEAT
      Blockread(pic,k,SizeOf(k));
        k := k AND $FF;
        IF (k AND $C0) = $C0 THEN BEGIN
          n := k AND $3F;
          Blockread(pic,k,SizeOf(k));
          FOR R := 1 TO n DO BEGIN
            Mem[$A000:(y-1)*320+x] := k;
            Inc(x);
          END;
        END
        ELSE BEGIN
          Mem[$A000:(y-1)*320+x] := k;
          Inc(x);
        END;
    UNTIL x>=64000 ;

    BlockRead(pic,ch,SizeOf(ch));

  FOR i := 0 TO 255 DO BEGIN
    BlockRead(pic,R,SizeOf(R));
    R := R SHR 2;
    BlockRead(pic,G,SizeOf(G));
    G := G SHR 2;
    BlockRead(pic,B,SizeOf(B));
    B := B SHR 2;
    SetColor(i,R,G,B);
  END;
{  Move(Mem[$9000:0],Mem[$A000:0],$FA00);}

  Close(pic);
END;
__________________
Alea iacta est
milambur is offline   Share thread on Digg Share thread on Twitter Share thread on Reddit Share thread on Facebook Reply With Quote