home *** CD-ROM | disk | FTP | other *** search
/ The Equalizer BBS / equalizer-bbs-collection_2004.zip / equalizer-bbs-collection / DEMOSCENE-STUFF / CDMSRC.ZIP / CONDOM.ASM next >
Assembly Source File  |  1994-07-23  |  22KB  |  715 lines

  1. ; ========================= CONDOM Intro ver 1.11 ===========================
  2. ; 23/07/94
  3. ; CONDOM.ASM source of CONDOM.COM
  4. ; Public domain code.
  5. ;
  6. ; Copyright and blah-blah (c) 1994 "SuiCYCOManiac"
  7.  
  8. .386 ; for real mode 386
  9.  
  10. ;********  a little EQU to start
  11.  
  12. ; the memory size (given in para for DOS)
  13. ProgramSize  EQU 128 + 1  ;  2048 bytes of code + 16 bytes for para
  14. DataSize     EQU 2000 + 1 ; 32000 bytes of data + 16 bytes for para
  15. ; I exaggerate the memory size so there will be no problem
  16.  
  17. ; some EQU to change the Intro look-like
  18. NumberOfStars EQU 512     ; if you want more or less
  19. SpeedOfStars  EQU 4       ; do your changes
  20.  
  21. ;************************************************************
  22.  
  23. Code Segment para public USE16 'CODE'
  24.  
  25.      Assume CS:Code
  26.      ORG 100h
  27.  
  28. Start:  Jmp      Near Ptr EntryPoint ; jump over some code...
  29.  
  30. CompleteBailOut:
  31. ; reinits the screen to the "classic" text mode (80x25) and exits
  32.        Mov       AX,0003h       ; it's the mode 3h
  33.        Int       10h            ; call BIOS
  34.  
  35. BailOut:                        ; exits this marvelous program
  36.        Mov       AX,CS          ; it's time
  37.        Mov       DS,AX          ; to tell you
  38.        Mov       DX,Offset EndMsg ; goodbye...
  39.        Mov       AH,09          ;
  40.        Int       21h            ;
  41.  
  42.        Mov       AX,4C00h       ; exit !
  43.        Int       21h            ; Hey DOS, you have some work to do
  44.  
  45. EntryPoint:
  46. ; first we have to manage memory :
  47.        Mov       AH,4Ah         ; Deallocate the not need memory for code,
  48.        Mov       BX,ProgramSize ; the constants and initialized variables
  49.        Mov       CX,CS          ;
  50.        Mov       ES,CX          ;
  51.  
  52.        Int       21h            ; call DOS
  53.        Jc        Short BailOut  ; sorry, don't work
  54.  
  55. ; check if the user got a VGA
  56.        Mov       AX,1A00h       ;
  57.        Int       10h            ;
  58.        Cmp       BL,07          ; if upper he's got a VGA or a MCGA
  59.        Jb        Short BailOut  ; else go out
  60.  
  61.        Mov       AH,48h         ; allocate the memory for the datas and
  62.        Mov       BX,DataSize    ; the stack
  63.        Int       21h            ; call DOS
  64.        Jc        Short BailOut  ; not enough memory or something like that
  65.  
  66.        Mov       DS,AX          ; init DS on the Data
  67.        Mov       SS,AX          ; init the stack
  68.        Mov       SP,07D00h      ; init the pile pointer
  69.        Cld                      ; everyone in this program increment
  70.  
  71. ; check if the user got at least a 386
  72.        Push      SP             ; test if this is a 8086
  73.        Pop       BX             ;
  74.        Cmp       BX,SP          ;
  75.        Jne       Short BailOut  ; no, so go out
  76.  
  77.        Mov       BX,1110000000000000b  ; test if this is a 80286
  78.        Push      BX             ; bit 12-15 is always clear on a 80286
  79.        Popf                     ;
  80.        Pushf                    ;
  81.        Pop       BX             ;
  82.        Test      BX,1110000000000000b ;
  83.        Jz        Short BailOut ; if clear then it's a 80286
  84.  
  85.        Mov       FS,AX          ; init FS as an alternate data segment
  86.  
  87.      Assume DS:Data,SS:Data,FS:Data
  88.  
  89. ; zero the data segment
  90.        Mov       ES,AX          ;
  91.        Mov       CX,8000        ; 32000 bytes of datas
  92.        Mov       DI,Offset StarsX ; StarsX is the first data
  93.        Xor       EAX,EAX        ;
  94.        Rep       Stosd          ;
  95.  
  96. ; init the screen:
  97.        Mov       AX,0013h       ; mode 13h (320x200 256 colors)
  98.        Int       10h            ; Call video BIOS
  99.  
  100.        Call      Near Ptr MakeMsgs  ; create fonts and the messages
  101.        Call      Near Ptr MakeStars ; create the Stars
  102.  
  103.        Mov       AX,0A000h      ; init ES the screen segment
  104.        Mov       ES,AX          ;
  105.  
  106. ; clear the screen
  107.        Xor       EAX,EAX        ; we want to clear the screen
  108.        Mov       CX,16000       ;
  109.        Xor       DI,DI          ;
  110.        Rep       Stosd          ; clear screen
  111.  
  112.        Call      WaitVerticalRetrace ; try to synchronise the timer
  113.        Call      InitTimer           ; with the vertical retrace
  114.  
  115. MainLoop:
  116.  
  117. WaitLoop:
  118.        Cmp       CS:[IncCounter],2 ; waiting loop used to slow down
  119.        Jnae      WaitLoop          ; the animation to less than 36 FPS
  120.                                    ; otherwise it will be too fast on fast
  121.                                    ; computer, or on very fast VGA card
  122.  
  123.        Call      WaitVerticalRetrace ; wait for the vertical retrace
  124.        Mov       CS:[IncCounter],00 ; start counter
  125.        Call      DisplayStars   ; show the Stars
  126.        Call      DisplayMsgs    ; show the publicity messages
  127.  
  128.        Mov       AH,01          ; if the user press a
  129.        Int       16h            ; key, make sure that we can know
  130.        Jz        MainLoop       ; if keypressed the user is bored so go out
  131.  
  132. TheEndComplete:
  133.        Call      UnInitTimer      ; uninstall the timer
  134.        Call      Near Ptr FadeOut ; fade this screen out and then
  135.        Jmp       CompleteBailOut  ; it's the end of the show
  136.  
  137. ;******** Here's some PROCs.
  138.  
  139. ;======== InitTimer ========
  140. ; install the frame
  141.  
  142. InitTimer PROC NEAR
  143.  
  144.        Push      DS
  145.  
  146.        Xor       SI,SI          ; first point the data segment on
  147.        Mov       DS,SI          ; the interrupt table
  148.  
  149.        Mov       EDX,DS:[32]    ; save the old int 08h vector
  150.        Mov       CS:[OldInt08h],EDX
  151.  
  152.        Mov       DX,CS          ; here's the new int 08h vector
  153.        Shl       EDX,16         ;
  154.        Mov       DX,Offset NewInt08h ;
  155.  
  156.        Cli
  157.        Mov       DS:[32],EDX    ; assign the NewInt08h
  158.  
  159.        Mov       AL,36h         ; now the timer runs at about 36.4 Hz
  160.        Out       43h,AL         ; this 4 times faster than the original timer
  161.        Xor       AL,AL          ;
  162.        Out       40h,AL         ;
  163.        Mov       AL,40h         ;
  164.        Out       40h,AL         ;
  165.        Sti                      ;
  166.  
  167.        Pop       DS
  168.        Ret                      ;
  169. InitTimer ENDP
  170.  
  171. ;======== UnInitTimer ========
  172. ; uninstall the new timer and restore the old one
  173.  
  174. UnInitTimer PROC NEAR
  175.        Push      DS             ;
  176.  
  177.        Xor       SI,SI          ;
  178.        Mov       DS,SI          ;
  179.  
  180.        Cli                      ; some crucial code
  181.        Mov       EDX,CS:[OldInt08h] ;
  182.        Mov       DWord Ptr DS:[32],EDX
  183.  
  184.        Mov       AL,36h         ;
  185.        Out       43h,AL         ;
  186.        Xor       AL,AL          ;
  187.        Out       40h,AL         ;
  188.        Out       40h,AL         ;
  189.        Sti                      ; finished, Ints enable
  190.  
  191.        Pop       DS
  192.        Ret                      ;
  193.  
  194. UnInitTimer ENDP
  195.  
  196. ;======== NewInt08h ========
  197. ; it's the new int 08h, four times faster
  198.  
  199. NewInt08h PROC FAR
  200.        Pushf                   ; save the flags
  201.        Cmp      CS:[Clock],4   ;
  202.        Jne      NoIretThroughOldInt08
  203.        Pushf                   ; we've called four times the timer
  204.        Call     CS:[OldInt08h] ; so we must update the old
  205.        Mov      CS:[Clock],00  ; timer
  206.  
  207. NoIretThroughOldInt08:
  208.        Inc      CS:[Clock]      ; update the clock
  209.        Inc      CS:[IncCounter] ;
  210.  
  211.        Mov      AL,20h          ;
  212.        Out      20h,AL          ;
  213.        Popf                     ; restore flags
  214.        Iret                     ;
  215. NewInt08h ENDP
  216.  
  217. ;======== MakeStars ========
  218. ; init the Stars
  219.  
  220. MakeStars PROC NEAR
  221.  
  222. ; first start to init the palette of the Stars
  223.        Mov       AX,63          ; 64 BW colors for the star gradiant
  224.        Xor       SI,SI          ; clear the index
  225.        Mov       DI,Offset Palette+(64*3) ; keep an eye on the palette for
  226.                                           ; the fade out
  227.        Mov       DX,03C9h       ; load some value for DX
  228.  
  229. StarsPalCreateLoop:
  230.        Dec       DX             ; DX=03C8h,
  231.        Out       DX,AL          ; which color ?
  232.  
  233.        Inc       DX             ; DX=03C9h, we can send the RGB value now
  234.        Mov       [StarsCol+SI],AL ; store the color number
  235.        Mov       [DI],AL        ; save value
  236.        Out       DX,AL          ; send red value
  237.        Mov       [StarsCol+SI+1],AL ;
  238.        Mov       [StarsCol+SI+2],AL ;
  239.        Out       DX,AL          ; send green value
  240.        Mov       [DI-1],AL      ;
  241.        Mov       [DI-2],AL      ;
  242.        Mov       [StarsCol+SI+3],AL ;
  243.        Out       DX,AL          ; send blue value
  244.        Add       SI,04          ; next.
  245.        Sub       DI,03
  246.  
  247.        Dec       AX             ; decrement
  248.        Jns       StarsPalCreateLoop ; next...
  249.  
  250. ; now it's time to create some Stars
  251.        Mov       SI,(NumberOfStars shl 1) -2 ; clear index
  252.  
  253. StarsXYZCreateLoop:
  254. ; creation of X value :
  255.        Mov       DI,320         ; first create some X value,
  256.        Call      Near Ptr Random ; find some random value
  257.        Sub       AX,160         ; the result was in AX
  258.        Imul      AX,80          ; mul it (integer)
  259.        Mov       [StarsX+SI],AX ; and save it
  260.  
  261. CreateY:
  262. ; creation of Y value :
  263.        Mov       DI,200        ; create random value
  264.        Call      Near Ptr Random ; for the Y
  265.        Sub       AX,100        ; do the complex
  266.        Imul      AX,80         ; alchemy...
  267.        Mov       [StarsY+SI],AX ; save it
  268.  
  269. CreateX:
  270. ; creation of Z value:
  271.        Mov       DI,256         ; random !
  272.        Call      Near Ptr Random ; ...
  273.        Inc       AX             ;
  274.        Mov       [StarsZ+SI],AX ; saving
  275.  
  276.        Sub       SI,02          ; next X,Y,Z
  277.        Jns       StarsXYZCreateLoop ; continue the loop if necessary
  278.  
  279.        Ret                      ; that's all
  280.  
  281. MakeStars ENDP
  282.  
  283. ;======== DisplayStars ========
  284. ; display the Stars
  285.  
  286. DisplayStars PROC NEAR
  287.  
  288.        Mov      SI,(NumberOfStars shl 1) -2  ; clear index
  289.  
  290. DisplayStarsLoop:
  291.  
  292.        Sub      Word Ptr [StarsZ+SI],SpeedOfStars ;
  293.        Cmp      Word Ptr [StarsZ+SI],1
  294.        Jnle     NoChangeWithZ
  295.        Mov      Word Ptr [StarsZ+SI],256
  296.  
  297. NoChangeWithZ:
  298. ; calculate Y
  299.  
  300.        Push     Word Ptr [LastSY+SI] ; do the unwrite of the
  301.        Push     Word Ptr [LastSX+SI] ; precedent Stars
  302.        Xor      AL,AL                ;
  303.        Call     Near Ptr SetPixel    ;
  304.  
  305.        Mov      AX,[StarsY+SI]  ; for the perspective
  306.        Mov      CX,[StarsZ+SI]  ; projection
  307.  
  308.        Cwd                      ; clear DX and extend sign
  309.        Idiv     CX              ; do the perspective projection (Y/Z)
  310.                                 ; the quotient is in AL so extend
  311.                                 ; the sign to the AH
  312.        Add      AX,100          ; the origin is the center of the
  313.                                 ; screen (160,100)
  314.        Mov      [LastSY+SI],AX  ; save the value so we can unwrite latter
  315.        Push     AX              ; push it so we can draw it
  316.  
  317. ; calculate X
  318.        Mov      AX,[StarsX+SI]  ; now do it for X value
  319.  
  320.        Cwd                      ;
  321.        Idiv     CX              ;
  322.  
  323.        Add      AX,160          ; put him to the center
  324.        Mov      [LastSX+SI],AX  ;
  325.        Push     AX              ; push it for SetPixel
  326.  
  327. ; select the correct color
  328.        Mov      DI,(offset StarsCol) - 1 ;
  329.        Add      DI,CX           ; Stars have their colors according to their Z
  330.  
  331.        Mov      AL,[DI]         ; get the correct color
  332.        Call     Near Ptr SetPixel ; write the pixel
  333.  
  334.        Sub      SI,02
  335.        Jns      DisplayStarsLoop
  336.  
  337.        Ret
  338.  
  339. DisplayStars ENDP
  340.  
  341. ;======== WaitVerticalRetrace ========
  342. ; wait for the vertical retrace
  343. ; used register(s) : AX,DX
  344.  
  345. WaitVerticalRetrace PROC NEAR
  346.  
  347.        Mov       DX,03DAh       ;
  348.  
  349. Wait1:
  350.        In        AL,DX          ;
  351.        Test      AL,08h         ;
  352.        Jnz       Wait1          ;
  353.  
  354. Wait2:
  355.        In        AL,DX          ;
  356.        Test      AL,08h
  357.        Jz        Wait2          ;
  358.        Ret                      ;
  359.  
  360. WaitVerticalRetrace ENDP
  361.  
  362. ;======== SetPixel ========
  363. ; set a pixel at X,Y with a given color
  364. ; X EQU [BP+02]
  365. ; Y EQU [BP+04]
  366.  ; PixelColor EQU AL
  367. ; destroyed register(s) : DI
  368.  
  369. SetPixel PROC NEAR
  370.  
  371.         Mov      BP,SP          ; init the stack pointer
  372.         Mov      DI,[BP+04]     ; load DI
  373.         Cmp      DI,200         ; check if not out of the screen
  374.         Jae      SetPixelEnd    ; yes, so don't write
  375.         Cmp      Word Ptr [BP+02],320 ; idem for the X
  376.         Jae      SetPixelEnd    ;
  377.  
  378.         Shl      DI,08          ; PixelOffset = (Y*320) + X
  379.         Shl      Word ptr [BP+04],06 ; so we can do some Shl to replace
  380.         Add      DI,[BP+04]     ; the muls
  381.         Add      DI,[BP+02]     ; adding the X value
  382.         Mov      ES:[DI],AL     ; set the pixel
  383.  
  384. SetPixelEnd:
  385.         Ret      04h            ; and last but not the least
  386.  
  387. SetPixel ENDP
  388.  
  389.  
  390. ;======== SetColor ========
  391. ; set the corresponding color with his new R,G,B value
  392. ; FirstColorToChange EQU AL
  393. ; PaletteOffset      EQU SI  (this offset is set to the first color to set)
  394. ; NumberOfColor      EQU BX
  395. ; destroyed register(s) : DX
  396.  
  397. SetColor PROC NEAR
  398.         Mov      DX,03C8h       ; first tell VGA that we
  399.  
  400. WriteColor:
  401.         Out      DX,AL          ; want that color
  402.  
  403.         Inc      DX
  404.         Outsb                   ; send red value
  405.         Outsb                   ; send green value
  406.         Outsb                   ; send blue value
  407.  
  408.         Dec     DX
  409.         Inc     AL
  410.  
  411.         Dec     BX              ; do the loop
  412.         Jnz     WriteColor      ;
  413.  
  414.         Ret                     ; ?
  415.  
  416. SetColor ENDP
  417.  
  418. ;======== FadeOut ========
  419. ; fade out the palette
  420.  
  421. FadeOut PROC NEAR
  422.     Mov     CX,64           ; do this is 64 times
  423.  
  424. FadingOut:
  425.         Mov     DI,767          ; load the "looper"
  426.  
  427. DecrementingColorIntensity:
  428.         Cmp     Byte Ptr [Palette+DI],0 ; is it already faded out
  429.         Je      FadedOut        ; if yes, next
  430.         Dec     Byte Ptr [Palette+DI]   ; make this color fade out
  431.  
  432. FadedOut:
  433.         Dec     DI              ; do the loop
  434.         Jns     DecrementingColorIntensity
  435.  
  436.         Call    Near Ptr WaitVerticalRetrace ; avoid some display problem
  437.         Mov     SI,Offset Palette  ; load the correct offset
  438.         Mov     BX,256             ; change 256 colors
  439.         Xor     AL,AL              ; first color is zero
  440.         Call    Near Ptr SetColor  ; write the colors
  441.  
  442.         Loop    FadingOut       ; fade this out (loop is not the quickest way
  443.                                 ; but is fast enough)
  444.         Ret                     ; don't forget to go back
  445.  
  446. FadeOut ENDP
  447.  
  448.  
  449. ;======== Random ========
  450. ; return a random number in the specified range
  451. ; Range EQU DI
  452. ; return in AX
  453. ; destroyed register(s) : DX
  454.  
  455. Random PROC NEAR
  456.  
  457.     Mov     AX,30247        ; load the "muller"
  458.         Mul     CS:[Seed]       ; mul with the Seed
  459.         Xor     AX,8690h        ; do some stuff to make this
  460.         Add     AX,27128        ; value random
  461.         Mov     CS:[Seed],AX    ; save the Seed
  462.  
  463. ; now cut our value to make him fit in the range
  464.         Mul     DI              ; AX is the virtual fractional part of a
  465.                                 ; fixed point who got an integer part of zero
  466.         Mov     AX,DX           ; so the value will fit the range
  467.  
  468.         Ret                     ; don't forget to go back
  469.  
  470. Random ENDP
  471.  
  472. ;======== MakeMsgs ========
  473. ; create the messages
  474.  
  475. MakeMsgs PROC NEAR
  476. ; make color 15 invisible
  477.         Mov     DX,03C8h        ; select color 128
  478.         Mov     AL,0            ;
  479.         Out     DX,AL           ;
  480.         Inc     DX
  481.         Xor     AL,AL
  482.         Mov     CX,80           ;
  483.  
  484. CreateBlackColors:
  485.         Out     DX,AL
  486.         Out     DX,AL
  487.         Out     DX,AL
  488.         Loop    CreateBlackColors
  489.  
  490. ; now we can extract ROM fonts
  491.         Mov     CX,05           ; five messages
  492.         Mov     SI,Offset Message1 ;
  493.  
  494. MsgGrabbingLoop:
  495.         Push    CX
  496.  
  497.         Mov     DX,CS           ; it's in the initialized data
  498.         Mov     ES,DX           ;
  499.  
  500.         Mov     AX,1300h        ; write string BIOS function
  501.         Mov     CX,CS:[SI]      ; load size
  502.         Mov     BX,0015         ;
  503.         Mov     DX,0100h        ; column and row zero
  504.         Add     SI,6            ;
  505.         Mov     BP,SI           ; load the correct offset in BP
  506.         Int     10h             ;
  507.  
  508. ; now save
  509.         Mov     CX,CS:[SI-6]    ; load size
  510.         Mov     DI,CS:[SI-4]    ; know where to store it
  511.  
  512.         Shl     CX,02           ; in pixel that give you what ?
  513.         Add     CX,CX           ;
  514.         Mov     BP,CX           ; save it for futher use
  515.  
  516.         Mov     AX,0A000h       ; ES = VRAM segment
  517.         Mov     ES,AX           ;
  518.  
  519.         Mov     AL,80           ; load the color counter
  520.         Mov     DX,1920         ; DX is the looper
  521.  
  522. GrabingLoop:
  523.         Mov     BX,DX           ; in BX is the offset
  524.  
  525. RowLoop:
  526.         Cmp     Byte Ptr ES:[BX],00 ;
  527.         Jz      NoWrite         ;
  528.         Mov     [DI],AL         ;
  529.  
  530. NoWrite:
  531.         Inc     BX
  532.         Inc     DI
  533.         Loop    RowLoop         ; do the row loop
  534.  
  535.         Mov     CX,BP           ; restore
  536.         Add     DX,320          ; do the loop
  537.         Inc     AL              ; adjust the color count
  538.         Cmp     DX,5760         ;
  539.         Jne     GrabingLoop     ;
  540.  
  541.         Add     SI,CS:[SI-6]
  542.         Mov     AL,80
  543.         Pop     CX
  544.         Loop    MsgGrabbingLoop
  545.  
  546. ; init the SinusVal
  547.         Mov     DI,59
  548.         Call    Near Ptr Random
  549.         Mov     [SinusVal],AX
  550.  
  551.         Ret
  552.  
  553. MakeMsgs ENDP
  554.  
  555. ;======== DisplayMsgs ========
  556. ; display the messages
  557.  
  558. DisplayMsgs PROC NEAR
  559.  
  560.         Mov     BX,Offset Message1 ;
  561.         Mov     AH,05              ; 5 messages
  562.  
  563. DisplayMsgsLoop:
  564.         Add     BX,06
  565.         Mov     BP,CS:[BX-6]    ; how many rows ?
  566.  
  567.         Shl     BP,02
  568.         Add     BP,BP
  569.         Xor     CX,CX
  570.         Sub     BP,02
  571.  
  572. DisplayMsgsRowLoop:
  573.         Mov     DX,12
  574.         Mov     DI,CS:[BX-2]    ; load the offset on screen
  575.  
  576.         Mov     SI,Offset SinusTab
  577.         Add     SI,[SinusVal]
  578.  
  579.         Push    BP
  580.  
  581.         Movsx   SI,CS:[SI]
  582.  
  583.         Mov     BP,SI
  584.         Shl     BP,06
  585.         Shl     SI,08
  586.         Add     SI,BP
  587.  
  588.         Pop     BP
  589.  
  590.         Add     DI,SI
  591.  
  592.         Mov     SI,CS:[BX-4]    ; load the offset in mem
  593.  
  594.         Add     SI,CX
  595.         Add     DI,CX
  596.  
  597.         Inc     [SinusVal]
  598.         Cmp     [SinusVal],60
  599.         Jne     DisplayMsgsLineLoop
  600.         Mov     [SinusVal],00
  601.  
  602. DisplayMsgsLineLoop:
  603.         Mov     AL,[SI]
  604.         Mov     ES:[DI],AL
  605.  
  606.         Add     SI,BP
  607.         Inc     AL
  608.         Add     SI,02
  609.         Add     DI,320
  610.         Dec     DX
  611.         Jnz     DisplayMsgsLineLoop
  612.  
  613.         Mov     AL,80
  614.         Inc     CX
  615.         Cmp     BP,CX
  616.         Jne     DisplayMsgsRowLoop
  617.  
  618.         Add     BX,CS:[BX-6]
  619.         Dec     AH
  620.         Jnz     DisplayMsgsLoop ;
  621.  
  622.         Ret                     ;
  623.  
  624. DisplayMsgs ENDP
  625.  
  626. ;******** Some CONSTANTS and Initialized value to finish !
  627.  
  628. Seed DW 35467 ; the seed for the Random function
  629.  
  630. Message1:
  631.      DW 32                                 ; first his size in char
  632.      DW Offset Message1SPR                 ; his offset in the memory
  633.      DW 5120 + 32                          ; his offset on the screen
  634.      DB '■ Condom HQ (33-1) 46-70-75-62 ■' ; the message
  635.   ; decalage (32 pixels)
  636.  
  637. Message2:
  638.      DW 18
  639.      DW Offset Message2SPR
  640.      DW 10240 + 88
  641.      DB '■ Generalist BBS ■'
  642.   ; (decalage 88 pixels de l'écran)
  643.  
  644. Message3:
  645.      DW 38
  646.      DW Offset Message3SPR
  647.      DW 20480 + 8
  648.      DB '■ Over 110 international conferences ■'
  649.   ; (decalage 8 pixels de l'écran)
  650.  
  651. Message4:
  652.      DW 16
  653.      DW Offset Message4SPR
  654.      DW 25600 +96
  655.      DB '■ Open 24h/24h ■'
  656.   ; (decalage 96 pixels )
  657.  
  658. Message5:
  659.      DW 33
  660.      DW Offset Message5SPR
  661.      DW 30720 + 28
  662.      DB '■ Running FrontDoor 2.12 Mailer ■'
  663.   ; (decalage 28 pixels)
  664.  
  665. SinusTab DB 0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3
  666.          DB 2,2,2,2,2,1,1,1,1,1,0,0,0,0,0
  667.          DB -1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-3,-3,-3,-3,-3,-2,-2,-2,-2,-2
  668.          DB -1,-1,-1,-1,-1
  669.  
  670. EndMsg DB 'Condom HQ (33-1) 46-70-75-62 Ivry Sur Seine, France.',0Ah,0Dh
  671.        DB 0Ah,0Dh
  672.        DB '74:320/7@SparkNet       34:200/400@FrancoPhoNet',0Ah,0Dh
  673.        DB '400:433/9@Direct_Link   222:320/6@GameNet',0Ah,0Dh
  674.        DB 'FREQ allowed any System. Point Mode Accepted.',0Ah,0Dh
  675.        DB 0Ah,0Dh
  676.        DB 'Coded by SuiCYCOmaniac.',0Ah,0Dh
  677.        DB 'Your sysop Stéphane Boullet.',0Ah,0Dh,'$'
  678.  
  679. OldInt08h  DD 00000000h ; the old int 08h vector
  680. Clock      DB 00h       ; the clock used to manage the old int 08h
  681. IncCounter DB 00h       ; used to slow down animation
  682.  
  683. Code ENDS
  684.  
  685. Data Segment Para USE16  ; "virtual" segment on the heap
  686.  
  687. DataSeg_MCB  DB 16 Dup (?)
  688.  
  689. ; the value for the Stars are some integers
  690. StarsX   DW  NumberOfStars Dup (?) ; some X,Y,Z value
  691. StarsY   DW  NumberOfStars Dup (?) ;
  692. StarsZ   DW  NumberOfStars Dup (?) ;
  693. LastSX   DW  NumberOfStars Dup (?) ; value used for the unwrite
  694. LastSY   DW  NumberOfStars Dup (?) ;
  695. StarsCol DB  256 Dup (?)           ; color value for the stars
  696. Palette  DB  768 Dup (?)           ; palette, useful for the fade out
  697.  
  698. ; messages storages
  699. Message1SPR DB  3072 Dup (?)
  700. Message2SPR DB  1728 Dup (?)
  701. Message3SPR DB  3648 Dup (?)
  702. Message4SPR DB  1536 Dup (?)
  703. Message5SPR DB  3168 Dup (?)
  704. SinusVal    DW  ?
  705.  
  706. ; StackData DB ? Dup (?)  ; the reminder place of this data segment
  707.                           ; is reserved for the stack
  708.  
  709. Data ENDS
  710.  
  711. End Start
  712.  
  713.  
  714.  
  715.