home *** CD-ROM | disk | FTP | other *** search
/ Solo Programadores 21 / SOLOPROG21.iso / disk21 / cdemos / shadebob.asm < prev    next >
Encoding:
Assembly Source File  |  1996-03-17  |  9.1 KB  |  298 lines

  1. ; ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
  2. ;
  3. ;  S H A D I N G   B O B S
  4. ;
  5. ;  Lissajous curves using 387 =;)
  6. ;
  7. ; ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ By Crom March 1996 ▓▓▓
  8. TITLE Intro for CHESSNIA BBS
  9. DOSSEG
  10. LOCALS @@
  11. JUMPS
  12. MODEL  LARGE
  13. .386
  14. .387
  15. .STACK 2048
  16. ;
  17. ; ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
  18. ;   D A T A   S E G M E N T
  19. ; ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
  20. .DATA
  21. ; ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  22. ;   P R O G R A M   V A R S
  23. ; ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  24. A1        DW  145
  25. A2        DW   85
  26. CenterX   DW  160
  27. CenterY   DW   90
  28. t         DD   00        ; Initial t val
  29. Inct      DD    0.02     ; Initial Inc t
  30. f         DD   00        ; Init phase
  31. Incf      DD    0.6      ; Init Inc f
  32. Incw      DW    2        ; w'/w = 3
  33. DosPI     DD    6.2831
  34. Temp      DW   00
  35. ; ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  36. ;   O L D   I N T E R R U P T S   V E C T O R S
  37. ; ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  38. OldInt9   DD   0
  39. ; ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  40. ;   S P R I T E    D E F I N I T I O N
  41. ; ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  42. Sprite    DB   0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0
  43.           DB   0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0
  44.           DB   0,0,0,2,2,2,2,2,2,2,2,2,2,0,0,0
  45.           DB   0,0,2,2,2,2,2,4,4,2,2,2,2,2,0,0
  46.           DB   0,2,2,2,2,2,4,4,4,4,2,2,2,2,2,0
  47.           DB   0,2,2,2,2,4,4,8,8,4,4,2,2,2,2,0
  48.           DB   2,2,2,2,4,4,8,8,8,8,4,4,2,2,2,2
  49.           DB   2,2,2,2,4,4,8,16,16,8,4,4,2,2,2,2
  50.           DB   2,2,2,2,4,4,8,8,8,8,4,4,2,2,2,2
  51.           DB   0,2,2,2,2,4,4,8,8,4,4,2,2,2,2,0
  52.           DB   0,2,2,2,2,2,4,4,4,4,2,2,2,2,2,0
  53.           DB   0,0,2,2,2,2,2,4,4,2,2,2,2,2,0,0
  54.           DB   0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0
  55.           DB   0,0,0,2,2,2,2,2,2,2,2,2,2,0,0,0
  56.           DB   0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0
  57.           DB   0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0
  58. ; ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
  59. ;   C O D E   S E G M E N T
  60. ; ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
  61. .CODE
  62. ; ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  63. ;   Only detect  E S C   K E Y
  64. ; ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  65. EscKey    db   0
  66. ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  67. ;   I N T    9   we don't want PAUSE key :)
  68. ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  69. MyInt9    PROC
  70.           PUSH    AX
  71.           IN      AL,60h
  72.           PUSH    AX
  73.           IN      AL,61h
  74.           MOV     AH,AL
  75.           OR      Al,80h
  76.           OUT     61h,AL
  77.           POP     AX
  78.           SHL     AL,1
  79.           SHR     AL,1
  80.           CMP     AL,1
  81.           JNE     @@NoEsc
  82.           MOV     CS:[EscKey],1
  83. @@NoEsc:
  84.           MOV     AL,20h
  85.           OUT     20h,AL
  86.           POP     AX
  87.           IRET
  88. MyInt9    ENDP
  89. ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  90. ;   P U T   P A L E T T E
  91. ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  92. PutPal    PROC
  93.           PUSH    ES DI AX CX DX
  94.           CLI
  95.           MOV     DX,03C8h
  96.           XOR     AL,AL
  97.           OUT     DX,AL
  98.           STI
  99.           MOV     AX,DS
  100.           MOV     ES,AX
  101.           XOR     CX,CX
  102. @@RGBLoop1:
  103.           CLI
  104.           MOV     AL,CL
  105.           OUT     DX,AL
  106.           INC     DX
  107.           MOV     AL,0
  108.           OUT     DX,AL
  109.           INC     DI
  110.           MOV     AL,0
  111.           OUT     DX,AL
  112.           INC     DI
  113.           MOV     AL,CL
  114.           OUT     DX,AL
  115.           INC     DI
  116.           STI
  117.           DEC     DX
  118.           INC     CL
  119.           CMP     CL,64
  120.           JB      @@RGBLoop1
  121.           MOV     CH,CL
  122. @@RGBLoop2:
  123.           CLI
  124.           MOV     AL,CL
  125.           OUT     DX,AL
  126.           INC     DX
  127.           MOV     AL,CH
  128.           OUT     DX,AL
  129.           INC     DI
  130.           MOV     AL,CH
  131.           OUT     DX,AL
  132.           INC     DI
  133.           MOV     AL,63
  134.           OUT     DX,AL
  135.           INC     DI
  136.           STI
  137.           DEC     DX
  138.           DEC     CH
  139.           INC     CL
  140.           CMP     CL,128
  141.           JB      @@RGBLoop2
  142.           POP     DX CX AX DI ES
  143.           RET
  144. PutPal    ENDP
  145.  
  146. ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  147. ;   P U T   S P R I T E    S H A D I N G
  148. ;   ■ IN     : FS:SI   SPRITE
  149. ;              X,Y     AX,DI
  150. ;              BL      Wide
  151. ;              BH      Height
  152. ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  153. PutSprSh  PROC
  154.           PUSH  ES DI CX DX
  155.           PUSH  BX
  156.           SHL   DI,6
  157.           MOV   BX,DI
  158.           SHL   DI,2
  159.           ADD   DI,BX
  160.           ADD   DI,AX                     ; DI is ok
  161.           MOV   AX,0A000h
  162.           MOV   ES,AX                     ; ES:DI ;)
  163.           POP   BX
  164.  
  165.           MOV   CX,320
  166.           SUB   CL,BL
  167.           SBB   CH,0                      ; CX = 320-Wide
  168.           MOV   DH,BL                     ; Store WIDE IN DH
  169. @@AnotherLine:
  170.           MOV   BL,DH
  171. @@AnotherPix:
  172.           MOV   AL,FS:[SI]
  173.           INC   SI
  174.           OR    AL,AL
  175.           JZ    @@NoPutPix
  176.           MOV   DL,ES:[DI]
  177.           ADD   DL,AL
  178.           AND   DL,7Fh                    ; We are using 127 cols
  179.           MOV   ES:[DI],DL
  180. @@NoPutPix:
  181.           INC   DI
  182.           DEC   BL
  183.           JNZ   @@AnotherPix
  184.           ADD   DI,CX
  185.           DEC   BH
  186.           JNZ   @@AnotherLine
  187.           POP   DX CX DI ES
  188.           RET
  189. PutSprSh  ENDP
  190.  
  191. ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  192. ;   M A I N
  193. ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  194. MAIN      PROC
  195.           MOV     AX,@DATA                ; DS to Data segment
  196.           MOV     DS,AX
  197.           MOV     FS,AX                   ; FS = Sprite SEG.
  198.           MOV     AX,13H
  199.           INT     10H                     ; MCGA ON
  200.           CALL    PutPal
  201.  
  202.           PUSH    DS
  203.           MOV     AH,35H
  204.           MOV     AL,9
  205.           INT     21H                     ; Get Old Int 9 in ES:BX
  206.           MOV     WORD PTR [OldInt9  ],BX
  207.           MOV     WORD PTR [OldInt9+2],ES
  208.           MOV     AX,CS
  209.           MOV     DS,AX
  210.           MOV     DX,OFFSET MyInt9
  211.           MOV     AH,25H
  212.           MOV     AL,9
  213.           INT     21H                     ; Set our Int 9.
  214.           POP     DS
  215.  
  216. @@MainLoop:
  217.           MOV     t,0
  218.   @@OnePeriod:
  219.   ; x=160+(A1*Sin(t))
  220.           FINIT                           ; Resets the coprocesor
  221.           FLD     t                       ; Load t
  222.           FCOS                            ; ST = Cos (t)
  223.           FIMUL   A1                      ; ST=ST*A1
  224.           FIADD   CenterX                 ; ST=ST+CenterX
  225.           FIST    Temp
  226.           MOV     AX,[Temp]
  227.           PUSH    AX
  228.   ; y=90+(A2*Cos((Incw*t)+f))
  229.           FINIT
  230.           FLD     t                       ; Load t
  231.           FIMUL   Incw                    ; ST=ST*Incw
  232.           FADD    f                       ; ST=ST+f
  233.           FCOS                            ; ST = Sin (t)
  234.           FIMUL   A2                      ; ST=ST*A2
  235.           FIADD   CenterY                 ; ST=ST+CenterY
  236.           FIST    Temp
  237.           MOV     DI,[Temp]               ; DI=ST
  238.  
  239.           MOV     DX,03DAh                ; Wait for Vertical retrace ;)
  240. @@Jump1:
  241.           IN      AL,DX
  242.           TEST    AL,08h
  243.           JZ      @@Jump1
  244. @@Jump2:
  245.           IN      AL,DX
  246.           TEST    AL,08h
  247.           JNZ     @@Jump2
  248.  
  249.           POP     AX
  250.           PUSH    SI
  251.           MOV     SI, OFFSET Sprite
  252.           MOV     BL,16
  253.           MOV     BH,BL
  254.           CALL    PutSprSh
  255.           POP     SI
  256.  
  257.           CMP     CS:[EscKey],0
  258.           JNE     @@GoOUT
  259.   ; t=t+Inct
  260.           FINIT
  261.           FLD     t
  262.           FADD    Inct
  263.           FST     t
  264.           FCOMP   DosPI                   ; Compares ST to DosPI
  265.           FSTSW   AX                      ; Strore control word in AX
  266.           SAHF
  267.           JC      @@OnePeriod             ; Jump if t<DosPI
  268.   ; f=f+Incf
  269.           FINIT
  270.           FLD     f
  271.           FADD    Incf
  272.           FST     f
  273.           FCOMP   DosPI                   ; Compares ST to DosPI
  274.           FSTSW   AX                      ; Strore control word in AX
  275.           SAHF
  276.           JC      @@TestKey
  277.           MOV     f,0
  278. @@TestKey:
  279.           CMP     CS:[EscKey],0
  280.           JE      @@MainLoop
  281. @@GoOut:
  282.           PUSH    DS
  283.           MOV     DX,WORD PTR [OldInt9  ]
  284.           MOV     AX,WORD PTR [OldInt9+2]
  285.           MOV     DS,AX
  286.           MOV     AH,25H
  287.           MOV     AL,9
  288.           INT     21H                     ; Set old Int 9.
  289.           POP     DS
  290.  
  291.           MOV     AX,3                    ; McgaOff
  292.           INT     10h
  293.  
  294.           MOV     AX,4C00h
  295.           INT     21h                     ; DOS control
  296. MAIN      ENDP
  297.           END     MAIN
  298.