home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Unsorted BBS Collection
/
thegreatunsorted.tar
/
thegreatunsorted
/
programming
/
asm_programming
/
IRISASM.ZIP
/
IRIS.ASM
next >
Wrap
Assembly Source File
|
1993-09-24
|
5KB
|
211 lines
.MODEL SMALL
.STACK 400
DOSSEG
LOCALS
PAL_DIVIDER = 2
.DATA
CosTable LABEL BYTE
INCLUDE COSTBL.INC
ByeMsg db 'Cool message goes here',10,13
db '$'
;ByeMsgLng = $-ByeMsg
Palette LABEL BYTE
i = 0
REPT 128 SHR PAL_DIVIDER
DB 63, i, 63-i
i = i+ (1 SHL (PAL_DIVIDER-1))
ENDM
i = 0
REPT 128 SHR PAL_DIVIDER
DB 63-i, 63, i
i = i+ (1 SHL (PAL_DIVIDER-1))
ENDM
i = 0
REPT 128 SHR PAL_DIVIDER
DB 0, 63-i, 63
i = i+ (1 SHL (PAL_DIVIDER-1))
ENDM
i = 0
REPT 128 SHR PAL_DIVIDER
DB i, 0, 63
i = i+ (1 SHL (PAL_DIVIDER-1))
ENDM
VTime1 DB 2 ; Waves' speeds.
VTime2 DB 1
VTime3 DB 3
VTime4 DB 4
UDATASEG
PlasmaPal DB (256 SHR (PAL_DIVIDER-1))*3 DUP (?)
Time1 DB ? ; Waves' positions. Random
Time2 DB ?
Time3 DB ?
Time4 DB ?
.CODE
.STARTUP
CLD
MOV AX,13h
;mov ax,5Fh ;640x480 at least on diamond vesa compat card it is
INT 10h
CLI
MOV DX,3c4h
MOV AX,604h
OUT DX,AX
MOV AX,0F02h ; All planes
OUT DX,AX
MOV DX,3D4h
MOV AX,14h ; Disable dword mode
OUT DX,AX
MOV AX,0E317h ; Enable byte mode.
OUT DX,AX
MOV AL,9
OUT DX,AL
INC DX
IN AL,DX
AND AL,0E0h ; Duplicate each scan 8 times.
ADD AL,7
OUT DX,AL
MOV DX,3c8h ; Setup palette.
MOV AL,256-(256 SHR (PAL_DIVIDER-1))
OUT DX,AL
INC DX
MOV CX,(256 SHR (PAL_DIVIDER-1))*3
MOV SI,OFFSET Palette ; Prestored...
@@pl1:
LODSB
OUT DX,AL
LOOP @@pl1
MOV AX,0A000h
MOV ES,AX
MOV SI,OFFSET CosTable
MainLoop:
MOV DX,3DAh ; Retrace sync.
@@vs1:
IN AL,DX
TEST AL,8
JZ @@vs1
@@vs2:
IN AL,DX
TEST AL,8
JNZ @@vs2
XOR DI,DI
MOV AH,50 ; 50 lines.
MOV CL,Time3 ; Vertical Wave #1 position.
MOV CH,Time4 ; Vertical Wave #2 position.
@@lv:
PUSH AX
MOV AH,80 ; 80 columns. I like this mode. ;-)
MOV DL,Time1 ; Horizontal Wave #1 position.
MOV DH,Time2 ; Horizontal Wave #2 position.
@@lh:
MOV BX,BP ; Global displacement.
MOV AL,BL
; ADD AL,AH ; Could make for more perturbations.
XOR BH,BH
MOV BL,DL
ADD AL,[SI+BX] ; Add waves.
MOV BL,DH
ADD AL,[SI+BX]
MOV BL,CL
ADD AL,[SI+BX]
MOV BL,CH
ADD AL,[SI+BX]
IFDIF %PAL_DIVIDER,<1>
OR AL, (0FFh SHL (9-PAL_DIVIDER)) AND 0FFh
ENDIF
STOSB ; Draw it.
ADD DL,1 ; Trace the HWaves.
ADD DH,3
DEC AH
JNZ @@lh ; Trace the VWaves.
ADD CL,2
ADD CH,1
POP AX
DEC AH
JNZ @@lv
DEC BP ; Get a (reasonably) random.
MOV BX,BP
XOR BL,BH
XOR BL,-1[DI]
XOR BL,CL
XOR BL,DL
ADD BL,CH
ADD BL,DH
XOR BH,BH ; Choose a speed to INC or DEC.
MOV Di,OFFSET VTime1
TEST BL,8
JNZ @@dec
AND BL,3
CMP BYTE PTR [DI+BX],3
JG @@sum
INC BYTE PTR [DI+BX]
JMP @@sum
@@dec:
AND BL,3
CMP BYTE PTR [DI+BX],-3
JL @@sum
DEC BYTE PTR [DI+BX]
@@sum:
MOV DL,VTime1 ; Move waves.
MOV DH,VTime2
MOV CL,VTime3
MOV CH,VTime4
ADD Time1,DL
SUB Time2,DH
ADD Time3,CL
SUB Time4,CH
MOV AH,1
INT 16h
JNZ Bye
JMP MainLoop
Bye:
XOR AH,AH
INT 16h
MOV AX,3
INT 10h
mov ax, @data
mov ds,ax
mov dx,offset ByeMsg
mov ah,9
int 21h
;XOR BH,BH
;MOV DX,1700h
;MOV AH,2
;INT 10h
;MOV AX,0B800h
;MOV ES,AX
;MOV SI,OFFSET ByeMsg
;XOR DI,DI
;MOV CX,ByeMsgLng/2
;REP MOVSW
MOV AX,4C00h
INT 21h
END