home *** CD-ROM | disk | FTP | other *** search
- {16.III.1995}
- {A very very small demo by Andrzej Dzirba}
- {A critics and other comments please send to
- DZIRBA@.VETTER.ZSE.LUBLIN.PL }
-
- PROGRAM sdemo;
- TYPE tbl = ARRAY [1..316] OF
- INTEGER;
- CONST vga = $A000;
- TYPE
- ball = ARRAY [1..20 * 20] OF
- BYTE;
- VAR
- i : WORD;
- x1, y1, t, omega, fi : REAL;
- tblx : ^tbl;
- tbly : ^tbl;
- tblx2, tbly2 : ^tbl;
- tblx3, tbly3 : ^tbl;
-
- TYPE Virtual = ARRAY [1..64000] OF
- BYTE;
- VirtPtr = ^Virtual;
-
- VAR Virscr : VirtPtr;
- Vaddr : WORD;
- virscr2 : VirtPtr;
- vaddr2 : WORD;
- CONST
- k : ARRAY [1..3] OF
- ball =
- ( (
- 0, 0, 0, 0, 0, 75, 77, 77, 77, 77, 76, 75, 71, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 77, 88, 86, 88, 88, 88, 88, 86, 83, 79, 75, 69, 0, 0, 0, 0, 0,
- 0, 0, 82, 89, 93, 93, 93, 93, 93, 92, 90, 88, 83, 80, 76, 71, 0, 0, 0,
- 0, 0, 79, 91, 96, 98, 98, 98, 98, 98, 96, 93, 92, 88, 83, 80, 76, 69, 0,
- 0, 0, 0, 93, 98, 101, 102, 102, 103, 103, 103, 101, 98, 93, 92, 88, 83, 79, 74,
- 0, 0, 0, 81, 98, 103, 104, 106, 108, 108, 108, 106, 103, 103, 98, 93, 90, 86, 81,
- 76, 69, 0, 0, 86, 101, 103, 108, 111, 112, 112, 112, 111, 108, 103, 101, 96, 92, 88,
- 83, 78, 73, 0, 0, 98, 103, 106, 111, 114, 117, 117, 117, 114, 111, 106, 102, 98, 93,
- 88, 83, 78, 71, 0, 0, 83, 103, 107, 112, 117, 120, 122, 120, 117, 112, 108, 102, 98,
- 93, 88, 83, 77, 69, 0, 0, 0, 103, 108, 112, 117, 122, 122, 120, 117, 113, 108, 102,
- 98, 93, 88, 83, 76, 0, 0, 0, 0, 86, 103, 112, 117, 120, 122, 120, 117, 113, 108,
- 103, 98, 93, 88, 83, 72, 0, 0, 0, 0, 0, 92, 106, 114, 117, 117, 117, 114, 111,
- 106, 103, 98, 93, 85, 77, 0, 0, 0, 0, 0, 0, 0, 89, 101, 107, 112, 112, 111,
- 108, 104, 101, 93, 86, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 94, 94,
- 92, 91, 88, 87, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
- (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 238, 238, 239, 240, 242,
- 244, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 233, 230, 227, 227, 229, 232,
- 234, 238, 241, 245, 250, 0, 0, 0, 0, 0, 0, 0, 233, 223, 223, 223, 223, 223, 226,
- 40, 232, 234, 238, 241, 246, 249, 0, 0, 0, 0, 0, 234, 222, 219, 219, 219, 219, 220,
- 223, 225, 40, 232, 234, 239, 242, 247, 251, 0, 0, 0, 0, 223, 215, 214, 215, 214, 214,
- 216, 218, 223, 225, 40, 232, 235, 239, 244, 248, 0, 0, 0, 232, 214, 211, 209, 209, 209,
- 211, 214, 214, 218, 223, 226, 229, 234, 238, 242, 247, 251, 0, 0, 226, 209, 207, 205, 205,
- 205, 207, 209, 43, 216, 220, 224, 228, 232, 237, 241, 245, 250, 0, 0, 224, 207, 203, 201,
- 201, 45, 203, 207, 211, 215, 219, 223, 227, 232, 237, 241, 245, 250, 0, 0, 40, 205, 201,
- 198, 46, 198, 45, 205, 209, 214, 219, 223, 227, 232, 237, 241, 247, 251, 0, 0, 0, 205,
- 201, 46, 196, 46, 201, 205, 209, 214, 219, 223, 227, 232, 237, 241, 247, 0, 0, 0, 0,
- 226, 201, 198, 196, 198, 201, 205, 209, 214, 219, 223, 227, 232, 236, 242, 247, 0, 0, 0,
- 0, 0, 219, 201, 201, 201, 203, 207, 211, 215, 219, 223, 227, 232, 238, 244, 0, 0, 0,
- 0, 0, 0, 0, 226, 205, 205, 207, 210, 43, 216, 220, 224, 230, 236, 244, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 40, 224, 226, 40, 230, 233, 234, 239, 0, 0, 0, 0, 0),
- (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 140, 147, 141, 138, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 143, 153, 151, 153, 151, 147, 141, 136, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 32, 156, 159, 159, 159, 156, 153, 147, 142, 137, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 151, 34, 166, 166, 166, 164, 159, 156, 153, 148, 142, 136, 0,
- 0, 0, 0, 0, 0, 0, 32, 163, 170, 172, 172, 172, 170, 166, 159, 156, 151, 145, 139,
- 132, 0, 0, 0, 0, 0, 0, 153, 170, 175, 178, 37, 178, 175, 170, 164, 159, 153, 147,
- 140, 133, 0, 0, 0, 0, 0, 0, 33, 172, 178, 182, 183, 182, 178, 172, 166, 160, 153,
- 147, 140, 133, 0, 0, 0, 0, 0, 0, 32, 172, 37, 183, 185, 183, 37, 172, 166, 160,
- 153, 147, 140, 132, 0, 0, 0, 0, 0, 0, 0, 158, 172, 182, 185, 182, 178, 172, 165,
- 159, 153, 145, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 172, 37, 178, 175, 170,
- 164, 159, 151, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 172, 172, 170,
- 166, 158, 151, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150,
- 153, 151, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) );
-
-
- PROCEDURE setvga;
- assembler;
- asm
- mov ax, 0013h
- INT 10h
- END;
-
- PROCEDURE settext;
- assembler;
- asm
- mov ax, 0003h
- INT 10h
- END;
-
- FUNCTION KEYPRESSED : BOOLEAN;
- assembler;
- asm
- IN al, 60h
- cmp al, 1
- je @EXIT
- XOR al, al
- @EXIT :
- END;
-
- PROCEDURE Pal (Col, R, G, B : BYTE);
- assembler;
- asm
- mov dx, 3c8h
- mov al, [Col]
- out dx, al
- INC dx
- mov al, [R]
- out dx, al
- mov al, [G]
- out dx, al
- mov al, [B]
- out dx, al
- END;
-
- PROCEDURE LoadPal (FileName : STRING);
- TYPE DACType = ARRAY [0..255] OF
- RECORD
- R, G, B : BYTE;
- END;
- VAR DAC : DACType;
- Fil : FILE OF
- DACType;
- i : INTEGER;
- BEGIN
- ASSIGN (Fil, FileName);
- RESET (Fil);
- READ (Fil, DAC);
- CLOSE (Fil);
- FOR i := 0 TO 255 DO
- Pal (i, DAC [i] .R, DAC [i] .G, DAC [i] .B);
- END;
-
- PROCEDURE Cls (Col : BYTE;
- Where : WORD);
- assembler;
- asm
- push es
- mov cx, 32000;
- mov es, [Where]
- XOR di, di
- mov al, [Col]
- mov ah, al
- rep stosw
- pop es
- END;
-
- PROCEDURE WaitRetrace;
- assembler;
- LABEL
- l1, l2;
- asm
- mov dx, 3DAh
- l1 :
- IN al, dx
- AND al, 08h
- jnz l1
- l2 :
- IN al, dx
- AND al, 08h
- jz l2
- END;
-
- PROCEDURE putball (X, Y : WORD;
- VAR sprt : ball;
- Where : WORD);
- assembler;
- LABEL
- _Redraw, _DrawLoop, _Exit, _LineLoop, _NextLine, _Store, _NoPaint;
-
- asm
- push ds
- push es
- lds si, sprt
- mov ax, X { ax = x }
- mov bx, Y { bx = y }
- _Redraw :
- push ax
- mov ax, [Where]
- mov es, ax
- mov ax, bx {; ax = bx x = y}
- mov bh, bl {; y = y * 256 bx = bx * 256}
- XOR bl, bl
- SHL ax, 6 {; y = y * 64 ax = ax * 64}
- add bx, ax {; y = (y*256) + (Y*64) bx = bx + ax (ie y*320)}
- pop ax {; get back our x}
- add ax, bx {; finalise location}
- mov di, ax
- mov dl, 20 { dl = height of sprite }
- XOR ch, ch
- mov cl, 20 { cx = width of sprite }
- cld
- push ax
- mov ax, cx
- _DrawLoop :
- push di { store y adr. for later }
- mov cx, ax { store width }
- _LineLoop :
- mov bl, BYTE PTR [si]
- OR bl, bl
- jnz _Store
- _NoPaint :
- INC si
- INC di
- loop _LineLoop
- jmp _NextLine
- _Store :
- movsb
- loop _LineLoop
- _NextLine :
- pop di
- DEC dl
- jz _Exit
- add di, 320 { di = next line of sprite }
- jmp _DrawLoop
- _Exit :
- pop ax
- pop es
- pop ds
- END;
-
- PROCEDURE copyblock (X, Y : WORD;
- height : WORD;
- source, dest : WORD);
- assembler;
- asm
- push ds
- mov ax, dest
- mov es, ax
- mov ax, source
- mov ds, ax
- mov bx, [X]
- mov dx, [Y]
- push bx {; and this again for later}
- mov bx, dx {; bx = dx}
- mov dh, dl {; dx = dx * 256}
- XOR dl, dl
- SHL bx, 6 {; bx = bx * 64}
- add dx, bx {; dx = dx + bx (ie y*320)}
- pop bx {; get back our x}
- add bx, dx {; finalise location}
- mov di, bx {; es:di = where to go}
- mov si, di
- mov al, 60
- mov bx, height { Hight of block to copy }
- @@1 :
- mov cx, 24 { Width of block to copy divided by 2 }
- rep movsw
- add di, 110h { 320 - 48 = 272 .. or 110 in hex }
- add si, 110h
- DEC bx
- jnz @@1
- pop ds
- END;
-
- PROCEDURE SetUpVirtual;
- BEGIN
- GETMEM (Virscr, 64000);
- Vaddr := SEG (Virscr^);
- GETMEM (virscr2, 64000);
- vaddr2 := SEG (virscr2^);
- END;
-
- PROCEDURE ShutDown;
- BEGIN
- FREEMEM (Virscr, 64000);
- FREEMEM (virscr2, 64000);
- END;
-
- PROCEDURE init;
- BEGIN
- t := 11;
- omega := 10 / 20;
- fi := PI / 20;
- GETMEM (tblx, SIZEOF (tblx^) );
- GETMEM (tbly, SIZEOF (tbly^) );
- GETMEM (tblx2, SIZEOF (tblx2^) );
- GETMEM (tbly2, SIZEOF (tbly2^) );
- GETMEM (tblx3, SIZEOF (tblx3^) );
- GETMEM (tbly3, SIZEOF (tbly3^) );
-
- FOR i := 1 TO 316 DO
- BEGIN
- x1 := SIN (t);
- y1 := SIN (omega * t + fi);
- t := t + 0.04;
- tblx^ [i] := ROUND (160 + x1 * (440 DIV 4) );
- tbly^ [i] := ROUND (95 + y1 * (300 DIV 4) );
- END;
-
- t := 10.5;
- FOR i := 1 TO 316 DO
- BEGIN
- x1 := SIN (t);
- y1 := SIN (omega * t + fi);
- t := t + 0.04;
- tblx2^ [i] := ROUND (160 + x1 * (440 DIV 4) );
- tbly2^ [i] := ROUND (95 + y1 * (300 DIV 4) );
- END;
-
- t := 10;
- FOR i := 1 TO 316 DO
- BEGIN
- x1 := SIN (t);
- y1 := SIN (omega * t + fi);
- t := t + 0.04;
- tblx3^ [i] := ROUND (160 + x1 * (440 DIV 4) );
- tbly3^ [i] := ROUND (95 + y1 * (300 DIV 4) );
- END;
- END;
-
- PROCEDURE liczenie;
- BEGIN
-
- i := 1;
- REPEAT
-
- copyblock (tblx^ [i] - 5, tbly^ [i] - 2, 25, vaddr2, Vaddr);
- copyblock (tblx2^ [i] - 5, tbly2^ [i] - 2, 25, vaddr2, Vaddr);
- copyblock (tblx3^ [i] - 5, tbly3^ [i] - 2, 25, vaddr2, Vaddr);
-
- putball (tblx^ [i] + 5, tbly^ [i], k [1], Vaddr);
- putball (tblx2^ [i] + 5, tbly2^ [i], k [2], Vaddr);
- putball (tblx3^ [i] + 5, tbly3^ [i], k [3], Vaddr);
- WaitRetrace;
-
- copyblock (tblx^ [i] - 5, tbly^ [i] - 2, 25, Vaddr, vga);
- copyblock (tblx2^ [i] - 5, tbly2^ [i] - 2, 25, Vaddr, vga);
- copyblock (tblx3^ [i] - 5, tbly3^ [i] - 2, 25, Vaddr, vga);
-
- INC (i);
- IF i = 316 THEN
- i := 1;
- UNTIL KEYPRESSED;
- FREEMEM (tblx, SIZEOF (tblx^) );
- FREEMEM (tbly, SIZEOF (tbly^) );
- FREEMEM (tblx2, SIZEOF (tblx2^) );
- FREEMEM (tbly2, SIZEOF (tbly2^) );
- FREEMEM (tblx3, SIZEOF (tblx3^) );
- FREEMEM (tbly3, SIZEOF (tbly3^) );
- END;
-
- BEGIN
- setvga;
- SetUpVirtual;
- Cls (0, vga);
- Cls (0, Vaddr);
- Cls (0, vaddr2);
-
- LoadPal ('sdemo.pal');
- init;
- liczenie;
-
- settext;
- ShutDown;
- WRITELN ('Very Small Demo by Andrzej Dzirba ');
- WRITELN ('Dzirba@Vetter.Zse.Lublin.Pl');
- END.