home *** CD-ROM | disk | FTP | other *** search
- ; BBSTRO for Intereor WHQ bbs! [SysGod: Zyark] [+45 36701219]
- ; Code & Graphics by CyPoxl of Intereor productions
- ; Font by Sector/Intereor
- ; Thanks to Vulture of Outlaw Triad for the plasma...
- ; Code suxx, I know... [Not yours Vulture] - AND it is pretty old stuff! :(
- ; Lots of confusing comments :)
- Dosseg ; Ehh, who cares?.. we only got 1 seg to play with
- Model Tiny ; 1 seg := c0m file
- Jumps ; Nice looong jumps :)
- Code Segment ; Instead of .code we make our own code seg..
- Assume Cs:Code, Ds:Code, Es:Code; e.g: Totally irrelevant!
- Org 100h ; c0m entry point
-
- ;[][][][][][][][][][][][][][][][][][MACROS][][][][][][][][][][][][][][][][][]
-
- WaitVRT Macro ; Macro = happy word :)
- Local @Vrt, @Vrt2
- Mov Dx,3dah ; Vga reg [status register]
- @Vrt:
- In Al,Dx ; Get Status
- Test Al,8 ; Vertical retrace?
- Jz @Vrt ; Nope
- @Vrt2:
- In Al,Dx
- Test Al,8 ; Vertical Retrace?
- Jnz @Vrt2 ; Yer, now its time to write
- Endm
-
- ;[][][][][][][][][][][][][][][][][][]CODE[][][][][][][][][][][][][][][][][][]
-
- Intro Proc
- Jmp Next
- Db '(c)ypoxl' ; (c)opyright CyPoxl '97, but who cares..?
- Next:
- Call SetVgaStuff ; Init mode 13h, set palette..
- Cli ; FuCK interrupts
- Mov Dx,21h ; Interrupt mask reg!
- In Al,Dx
- Mov Byte Ptr Ds:[OldIRQs],Al
- Or Al,11b ; Turn off keyboard and timer interrupt
- Out Dx,Al
- Xor Di,Di
- Lea Si,ITlogo
- Mov Cx,15021
- Rep Movsb
- Mov Di,47*320 ; After logo
- Mov Al,64 ; e.g blueish
- Call MakeBar ; Draw nice bar
- Mov Di,143*320 ; After plasma/before font
- Xor Al,Al ; Greyish
- Call MakeBar
- Mov Di,173*320 ; After font
- Xor Al,Al ; Greyish [like font]
- Call MakeBar
- Mov Bp,140 ; 10x14 equals...?
- @StartTxt:
- Lea Bx,IntereorTxt ; Pointer to txt
- @GetChar:
- Mov Al,byte ptr Ds:[Bx] ; Get Char
- Inc Bx ; Point to next char in Txt
- Xor Ah,Ah ; I forgot why..uhm.. think its cuz we multiply
- Or Al,Al ; Zero indicator?
- Jz @StartTxt ; All over...again
- Cmp Al,' ' ; Space?
- Jnz @NotSpace ; Not space
- Mov Dh,8 ; 8 vertical lines
- Call MoveXScreen ; If you cant guess I wont tell ya
- Jmp @GetChar
- @NotSpace:
- Lea Si,Font ; Font pointer
- Sub Al,'(' ; Start char = '('
- Mul Bp ; Calculate offset in font [Bp=140]
- Add Si,Ax ; ^^^^^^^^^^^^^^^^^^^^^^^^
- Mov Cl,10 ; 10 like in 10x14 font!
- @HLine:
- Push Si ; Save Si, cuz we mess with it
- Mov Di,159*320+280-1 ; Very hardcore calculation, hehe :)
- Mov Ch,14 ; 14 like in.....
- @VLine:
- Movsb ; Move string byte (Font => Screen)
- Add Di,320-1 ; Next line (on screen)
- Add Si,10-1 ; Next byte in font [vertical]
- Dec Ch
- Jnz @VLine ; Not through with vertical line
- In Al,60h ; Keyboard reg
- Cmp Al,1 ; Check Escape
- Jz QuitIntro ; Quit on escape
- Call MoveScreen ; Next vertical line
- Call Do_Plasma ; Hmm...
- Pop Si ; Font in si
- Inc Si ; Next byte in font
- WaitVRT
- Loop @HLine ; Next vertical line
- Mov Dh,2 ; Dist between letters
- Call MoveXScreen
- Jmp @GetChar
- QuitIntro:
- Sti
- Mov Ax,3 ; Init text mode [80x25x16c]
- Int 10h
- Call DispAnsi ; Nice ansi w. softscroll :)
- Cli
- Mov Dx,21h
- Mov Al,Byte Ptr Ds:[OldIRQs] ; Old IRQ settings
- Out Dx,Al ; Trust me, the user will like this, hehe :)
- Sti
- Mov Ax,4C00h ; Save terminate function
- Int 21h ; TermiNate Prog
- Intro Endp
-
- MoveXScreen Proc
- Call MoveScreen ; Move screen
- Call Do_Plasma ; Remember to update plasma
- Push Dx
- WaitVRT
- Pop Dx
- Dec Dh
- Jnz MoveXScreen ; Counter=0?
- Ret
- MoveXScreen Endp
-
- MoveScreen Proc
- Push Cx Es ; Cx must not be messed with
- Pop Ds
- Mov Si,159*320+40+1 ; Source
- Mov Di,159*320+40 ; Destination=source-1
- Mov Dl,14 ; 10x14 font!
- @MV:
- Mov Cx,240 ; Scroll window size
- Rep Movsb
- Add Di,320-240
- Add Si,320-240
- Dec Dl ; Dl=counter
- Jnz @MV
- Push Cs
- Pop Ds Cx
- Ret
- MoveScreen Endp
-
- SetVgaStuff Proc
- Mov Ax,13h ; Init mode 13h [320x200x256c]
- Int 10h
- Mov Ax,0A000h ; Vga seg
- Mov Es,Ax ; Es:Di [for stosb]
- Lea Si,Palette ; Plasma+font pal
- Mov Cx,243*3 ; RGB
- Mov Dx,3C8h ; Pal reg index
- And Al,0 ; Eg: Xor Al,Al / Sub Al,Al
- Out Dx,Al ; Start with 1st color
- Inc Dl ; Pal reg data [write only]
- @Out:
- Mov Al,Byte Ptr Ds:[Si] ; Get R/G/B Val
- Out Dx,Al ; Store it in vga reg
- Inc Si ; Next
- Loop @Out
- Ret
- SetVgaStuff Endp
-
- Do_Plasma proc
- Push Bx Cx Dx Bp ; Save [maybe to many] regs
- Mov Di,60+320*63 ; Plasma pos [x,y=60,16]
- Mov Cl,Byte Ptr Ds:[Co1] ; Vertical cosine start values
- Mov Ch,Byte Ptr Ds:[Co2]
- Mov Ah,80 ; 80 vertical lines
- @Outer_Plasma:
- Push Ax
- Mov Dl,Byte Ptr Ds:[Co3] ; Horizontal cosine start values
- Mov Dh,Byte Ptr Ds:[Co4]
- Mov Ah,100 ; 200 horizontal lines [YES: 200!]
- @Inner_Plasma:
- Xor al,Al
- Xor bh,bh
- Mov Bl,Dl ; Add 4 cosine values
- Add Al,Byte Ptr Ds:[Cosine+Bx]
- Mov Bl,Dh
- Add Al,Byte Ptr Ds:[Cosine+Bx]
- Mov Bl,Cl
- Add Al,Byte Ptr Ds:[Cosine+Bx]
- Mov Bl,Ch
- Add Al,Byte Ptr Ds:[Cosine+Bx]
- And Al,01111111b
- Mov Byte Ptr Es:[Di],Al ; Store Color on Vga
- Inc Di ; Leave 1 pixel black
- Inc Di ; Thats why we have 200 horizontal pixels
- Add Dl,1
- Add Dh,2
- Dec Ah ; Next pixel on horizontal line
- Jnz @Inner_Plasma
- Add Cl,3
- Add Ch,4
- Add Di,120
- Pop Ax
- Dec Ah ; Next horizontal line
- Jnz @Outer_Plasma
- Sub [Co1],4
- Add [Co2],3
- Sub [Co3],2
- Add [Co4],1
- Pop Bp Dx Cx Bx
- Ret
- Do_Plasma endp
-
- MakeBar Proc
- Mov Bx,16 ; 16 shades
- @MakeIt:
- Mov Cx,320 ; Guess...
- Rep Stosb
- Add Al,4 ; Next color
- Dec Bx ; Bx=counter
- Jnz @MakeIt
- Ret
- MakeBar Endp
-
- DispAnsi Proc ; I figured this out - all by myself! :-)
- Push Cs ; So..
- Pop Ds ; Ds=cs
- Mov Al,0ah ; Index [cursor]
- Mov Ah,100000b ; Bit 5 (6) [cursor 0=on 1=off]
- Mov Dx,3D4h
- Out Dx,Ax
- Mov Ax,0B800h ; Color text seg
- Mov Es,Ax
- Mov Cx,4000 ; Just to be save
- Xor Ax,Ax ; 000000000etc...
- Cld
- Rep Stosw ; Clear 2 pages
- Mov Ax,501h ; Select page 1 [normally we have page 0]
- Int 10h
- Cli ; Don't want any interrupts to..interrupt :)
- WaitVRT ; Otherwise we'll get to see the logo for a very short time
- Xor Di,Di ; Page 0:0
- Lea Si,Ansi ; My own ansi
- Mov Cx,80*15 ; 15 lines long
- Rep Movsw ; Put in on page 0
- Mov Bx,80*15 ; Set the screen offset just below the ansi!
- Call SetMemAdd ; Cuz we want to scroll it down
- Mov Cx,15 ; Ansi hight!
- @RowLoop:
- Push Cx
- Sub Bx,80 ; Next Row
- Call SetMemAdd ; In display memory
- WaitVRT
- Mov Ax,0f08h ; Display last pixel of chars
- Mov Dx,3D4h ; Vga Reg !!!
- Out Dx,Ax
- Dec Ah ; Display one more pixel
- Mov Cx,15 ; Cuz We have set the 1st, and now there are
- @PixelLoop: ; 15 to go [vgafont: 8x16]
- WaitVRT ; Wait until Vertical Retrace!
- Mov Dx,3D4h ; I hope this works on all adaptors..
- Mov Al,8
- Out Dx,Ax
- Dec Ah
- Loop @PixelLoop ; Next Pixel
- Pop Cx
- Loop @RowLoop ; Next row
- Sti ; Turn on interrupts
- Mov Ax,500h ; Turn on page 0
- Int 10h
- Mov Ax,0B0Ah ; Start cursor scanline
- Out Dx,Ax
- Mov Ax,0D0Bh ; End cursor scanline
- Out Dx,Ax
- Ret
- DispAnsi Endp
-
- SetMemAdd Proc
- Push Ax
- Mov Dx,3D4h ; ...Vga reg!
- Mov Al,0Ch
- Mov Ah,Bh ; High address
- Out Dx,Ax
- Inc Al
- Mov Ah,Bl ; Low address
- Out Dx,Ax
- Pop Ax
- Ret
- SetMemAdd Endp
-
- ;[][][][][][][][][][][][][][][][][][]DATA[][][][][][][][][][][][][][][][][][]
- IntereorTxt Label Byte
- Db 'INTEREOR WHQ BBS '
- Db '(+45) 367-012-19 '
- Db 'CALL NOW? '; ?=! ! [forget it..You'll notice :)]
- Db ' '
- Db 'SYSOP: ZYARK '
- Db 'LOTS OF XM/MOD, DEMOS, ETC... '
- Db ' '
- Db 'GREETS: VULTURE/OT '
- Db 'MOTIVE/INTEREOR '
- Db 'NARCOID/SMERSH '
- Db ' '
- Db 'INTEREOR WHQ BBS '
- Db '(+45) 367-012-19 '
- Db 'CALL NOW? '
- Db ' '
- Db 'CODE: CYPOXL/INTEREOR '
- Db 'GRAPHICS: CYPOXL '
- Db 'FONT: SECTOR/INTEREOR '
- Db ' '
- Db 0 ; DONE
-
- Label Palette Byte
- I = 0
- Rept 32 ; 32 increasing colors of white
- Db I,I,I
- I = I + 1
- Endm
-
- Rept 32 ; 32 decreasing colors of white
- Db I,I,I
- I = I - 1
- Endm
-
- Rept 32 ; 32 increasing colors of blue
- Db 0,0,I
- I = I + 1
- Endm
- Rept 32 ; What could tjis beeee?
- Db 0,0,I
- I = I - 1
- Endm
- ;Font colors:
- Db 3 Dup (3Fh) ; White
- Db 3 Dup (1Eh) ; Less white
- Db 3 Dup (0Eh) ; Less than less white
- Include Logo.pal ; logo.pal
-
- OldIRQs Db ? ; Old IRQ settings
-
- Co1 Db ? ; 4 different angles
- Co2 Db ?
- Co3 Db ?
- Co4 Db ?
- Include cosine.dat ; Cosine Values for plasma
- Include it-font.inc ; Intereor font by Sector
- Include logo.inc ; Intereor logo [by me - and my raytracer-,
- ; hehe]
- Include ansi.inc ; Ansi logo [also by me :)]
- Code Ends
- End Intro