home *** CD-ROM | disk | FTP | other *** search
- ; ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
- ;
- ; S H A D I N G B O B S
- ;
- ; Lissajous curves using 387 =;)
- ;
- ; ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ By Crom March 1996 ▓▓▓
- TITLE Intro for CHESSNIA BBS
- DOSSEG
- LOCALS @@
- JUMPS
- MODEL LARGE
- .386
- .387
- .STACK 2048
- ;
- ; ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
- ; D A T A S E G M E N T
- ; ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
- .DATA
- ; ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
- ; P R O G R A M V A R S
- ; ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
- A1 DW 145
- A2 DW 85
- CenterX DW 160
- CenterY DW 90
- t DD 00 ; Initial t val
- Inct DD 0.02 ; Initial Inc t
- f DD 00 ; Init phase
- Incf DD 0.6 ; Init Inc f
- Incw DW 2 ; w'/w = 3
- DosPI DD 6.2831
- Temp DW 00
- ; ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
- ; O L D I N T E R R U P T S V E C T O R S
- ; ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
- OldInt9 DD 0
- ; ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
- ; S P R I T E D E F I N I T I O N
- ; ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
- Sprite DB 0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0
- DB 0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0
- DB 0,0,0,2,2,2,2,2,2,2,2,2,2,0,0,0
- DB 0,0,2,2,2,2,2,4,4,2,2,2,2,2,0,0
- DB 0,2,2,2,2,2,4,4,4,4,2,2,2,2,2,0
- DB 0,2,2,2,2,4,4,8,8,4,4,2,2,2,2,0
- DB 2,2,2,2,4,4,8,8,8,8,4,4,2,2,2,2
- DB 2,2,2,2,4,4,8,16,16,8,4,4,2,2,2,2
- DB 2,2,2,2,4,4,8,8,8,8,4,4,2,2,2,2
- DB 0,2,2,2,2,4,4,8,8,4,4,2,2,2,2,0
- DB 0,2,2,2,2,2,4,4,4,4,2,2,2,2,2,0
- DB 0,0,2,2,2,2,2,4,4,2,2,2,2,2,0,0
- DB 0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0
- DB 0,0,0,2,2,2,2,2,2,2,2,2,2,0,0,0
- DB 0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0
- DB 0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0
- ; ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
- ; C O D E S E G M E N T
- ; ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
- .CODE
- ; ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
- ; Only detect E S C K E Y
- ; ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
- EscKey db 0
- ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
- ; I N T 9 we don't want PAUSE key :)
- ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
- MyInt9 PROC
- PUSH AX
- IN AL,60h
- PUSH AX
- IN AL,61h
- MOV AH,AL
- OR Al,80h
- OUT 61h,AL
- POP AX
- SHL AL,1
- SHR AL,1
- CMP AL,1
- JNE @@NoEsc
- MOV CS:[EscKey],1
- @@NoEsc:
- MOV AL,20h
- OUT 20h,AL
- POP AX
- IRET
- MyInt9 ENDP
- ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
- ; P U T P A L E T T E
- ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
- PutPal PROC
- PUSH ES DI AX CX DX
- CLI
- MOV DX,03C8h
- XOR AL,AL
- OUT DX,AL
- STI
- MOV AX,DS
- MOV ES,AX
- XOR CX,CX
- @@RGBLoop1:
- CLI
- MOV AL,CL
- OUT DX,AL
- INC DX
- MOV AL,0
- OUT DX,AL
- INC DI
- MOV AL,0
- OUT DX,AL
- INC DI
- MOV AL,CL
- OUT DX,AL
- INC DI
- STI
- DEC DX
- INC CL
- CMP CL,64
- JB @@RGBLoop1
- MOV CH,CL
- @@RGBLoop2:
- CLI
- MOV AL,CL
- OUT DX,AL
- INC DX
- MOV AL,CH
- OUT DX,AL
- INC DI
- MOV AL,CH
- OUT DX,AL
- INC DI
- MOV AL,63
- OUT DX,AL
- INC DI
- STI
- DEC DX
- DEC CH
- INC CL
- CMP CL,128
- JB @@RGBLoop2
- POP DX CX AX DI ES
- RET
- PutPal ENDP
-
- ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
- ; P U T S P R I T E S H A D I N G
- ; ■ IN : FS:SI SPRITE
- ; X,Y AX,DI
- ; BL Wide
- ; BH Height
- ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
- PutSprSh PROC
- PUSH ES DI CX DX
- PUSH BX
- SHL DI,6
- MOV BX,DI
- SHL DI,2
- ADD DI,BX
- ADD DI,AX ; DI is ok
- MOV AX,0A000h
- MOV ES,AX ; ES:DI ;)
- POP BX
-
- MOV CX,320
- SUB CL,BL
- SBB CH,0 ; CX = 320-Wide
- MOV DH,BL ; Store WIDE IN DH
- @@AnotherLine:
- MOV BL,DH
- @@AnotherPix:
- MOV AL,FS:[SI]
- INC SI
- OR AL,AL
- JZ @@NoPutPix
- MOV DL,ES:[DI]
- ADD DL,AL
- AND DL,7Fh ; We are using 127 cols
- MOV ES:[DI],DL
- @@NoPutPix:
- INC DI
- DEC BL
- JNZ @@AnotherPix
- ADD DI,CX
- DEC BH
- JNZ @@AnotherLine
- POP DX CX DI ES
- RET
- PutSprSh ENDP
-
- ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
- ; M A I N
- ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
- MAIN PROC
- MOV AX,@DATA ; DS to Data segment
- MOV DS,AX
- MOV FS,AX ; FS = Sprite SEG.
- MOV AX,13H
- INT 10H ; MCGA ON
- CALL PutPal
-
- PUSH DS
- MOV AH,35H
- MOV AL,9
- INT 21H ; Get Old Int 9 in ES:BX
- MOV WORD PTR [OldInt9 ],BX
- MOV WORD PTR [OldInt9+2],ES
- MOV AX,CS
- MOV DS,AX
- MOV DX,OFFSET MyInt9
- MOV AH,25H
- MOV AL,9
- INT 21H ; Set our Int 9.
- POP DS
-
- @@MainLoop:
- MOV t,0
- @@OnePeriod:
- ; x=160+(A1*Sin(t))
- FINIT ; Resets the coprocesor
- FLD t ; Load t
- FCOS ; ST = Cos (t)
- FIMUL A1 ; ST=ST*A1
- FIADD CenterX ; ST=ST+CenterX
- FIST Temp
- MOV AX,[Temp]
- PUSH AX
- ; y=90+(A2*Cos((Incw*t)+f))
- FINIT
- FLD t ; Load t
- FIMUL Incw ; ST=ST*Incw
- FADD f ; ST=ST+f
- FCOS ; ST = Sin (t)
- FIMUL A2 ; ST=ST*A2
- FIADD CenterY ; ST=ST+CenterY
- FIST Temp
- MOV DI,[Temp] ; DI=ST
-
- MOV DX,03DAh ; Wait for Vertical retrace ;)
- @@Jump1:
- IN AL,DX
- TEST AL,08h
- JZ @@Jump1
- @@Jump2:
- IN AL,DX
- TEST AL,08h
- JNZ @@Jump2
-
- POP AX
- PUSH SI
- MOV SI, OFFSET Sprite
- MOV BL,16
- MOV BH,BL
- CALL PutSprSh
- POP SI
-
- CMP CS:[EscKey],0
- JNE @@GoOUT
- ; t=t+Inct
- FINIT
- FLD t
- FADD Inct
- FST t
- FCOMP DosPI ; Compares ST to DosPI
- FSTSW AX ; Strore control word in AX
- SAHF
- JC @@OnePeriod ; Jump if t<DosPI
- ; f=f+Incf
- FINIT
- FLD f
- FADD Incf
- FST f
- FCOMP DosPI ; Compares ST to DosPI
- FSTSW AX ; Strore control word in AX
- SAHF
- JC @@TestKey
- MOV f,0
- @@TestKey:
- CMP CS:[EscKey],0
- JE @@MainLoop
- @@GoOut:
- PUSH DS
- MOV DX,WORD PTR [OldInt9 ]
- MOV AX,WORD PTR [OldInt9+2]
- MOV DS,AX
- MOV AH,25H
- MOV AL,9
- INT 21H ; Set old Int 9.
- POP DS
-
- MOV AX,3 ; McgaOff
- INT 10h
-
- MOV AX,4C00h
- INT 21h ; DOS control
- MAIN ENDP
- END MAIN
-