home *** CD-ROM | disk | FTP | other *** search
- .model tiny
- .stack 100h
- .code
- .data
- .386P
-
- enable_c32=1
- use_NMI=0
-
- include mem32.inc
-
- .data
-
- start_GDT
- GDT_seg code16 c16
- GDT_seg code32 c32
- GDT_seg data16 d16
- GDT_seg data32 d32
- end_GDT dgroup
-
- palette db 768 dup(0)
- pal_name db 'palette.bin',0
-
- code32 segment use32
- r_table dw 256 dup(0)
- r_table_ptr dw 0
- fire_flag db 0
- table equ this byte
- num=0
- rept 256/2
- if (num-7)/4 ge 0
- db (num-7)/4
- else
- db 0
- endif
- num=num+1
- if num ge 4
- db (num+8)/4
- else
- db 0
- endif
- num=num+1
- endm
- ends
- virtscreen segment para use32
- db 65536 dup(?)
- ends
- bigseg segment para use32
- db 2*65536 dup(?)
- ends
- .code
- locals
-
- debut:
-
- mov ax,code32
- mov ds,ax
- mov es,ax
- mov di,offset r_table
- @@b:
- call random1
- mov ah,bh
- stosw
- cmp di,offset r_table+512
- jb @@b
- mov ax,bigseg
- mov es,ax
- xor di,di
- mov cx,32768
- xor dx,dx
- mov bx,offset table
- @@b1:
- mov ax,dx
- xlat
- xchg al,ah
- xlat
- xchg al,ah
- stosw
- inc dx
- loop @@b1
- mov ax,bigseg+4096
- mov es,ax
- mov cx,dx
- @@b2:
- mov ax,dx
- xlat
- xchg al,ah
- xlat
- xchg al,ah
- stosw
- inc dx
- loop @@b2
-
- mov ax,13h
- int 10h
- mov ax,cs
- mov ds,ax
- mov es,ax
- Mov Dx, offset pal_name
- Mov Ax,3D00H
- Int 21H
- Push Ax
- Pop Bx
- Mov Ax,3F00H
- Mov Cx,768
- Mov Dx,offset palette
- Int 21H
- Mov Ax,3E00H
- Int 21H
- Mov Ax,1012H
- Xor Bx,Bx
- Mov Cx,256
- Mov Dx,offset palette
- Int 10H
-
- mov ax,cs
- mov ds,ax
- mov es,ax
- init_GDT
- init_GDT_base_addr code16
-
- mov ax,code32
- init_GDT_base_seg code32
-
- mov ax,virtscreen
- mov ds,ax
- mov es,ax
- xor di,di
- xor ax,ax
- mov cx,32768
- rep stosw
- mov ax,0a000h
- mov es,ax
-
- boucle:
-
- disable_interrupts
- push ax
- switch_prot code32,@@pmode
-
- code32 segment
- assume cs:code32
- @@pmode:
- mov ax,mem32_ptr_GDT_data32
- mov gs,ax
- switch_real code32,@@rmode
- @@rmode:
-
- mov ax,bigseg
- mov gs,ax
-
- flat:
-
- mov dx,3dah
- @@b0:
- in al,dx
- test al,8
- jnz @@b0
- @@b1:
- in al,dx
- test al,8
- jz @@b1
-
- mov dx,3c8h
- xor al,al
- out dx,al
- inc dx
- dec al
- out dx,al
- out dx,al
- out dx,al
-
- push es
- push ds
- pop es
-
- mov edi,64000-3*320
- @@boucle:
- call random2
- sar al,1;8
- shr al,3;2
- add al,fire_flag
- jns @@ok
- xor al,al
- @@ok:
- mov ah,al
- shl eax,8
- mov al,ah
- shl eax,8
- mov al,ah
- stosd
- cmp di,64000
- jb @@boucle
-
- @@fin_random:
-
- pop es
-
- mov dx,3c8h
- xor al,al
- out dx,al
- inc dx
- mov al,16
- out dx,al
- out dx,al
- out dx,al
-
- xor edi,edi
- mov ecx,200
- xor ebx,ebx
- jmp short @@debile
- align 4
- @@debile:
- rept 80
- mov eax,[di+320]
- add eax,[di+319]
- add eax,[di+641]
- add eax,[di+960]
- mov bx,ax
- shr eax,16
- mov ax,gs:[eax*2]
- shl eax,16
- mov ax,gs:[ebx*2]
- mov [edi],eax
- stosd
- endm
- dec ecx
- jnz @@debile
-
- mov dx,3c8h
- xor al,al
- out dx,al
- inc dx
- out dx,al
- out dx,al
- out dx,al
-
- switch_prot code16,@@pmode
- ends
- assume cs:_text
- @@pmode:
- mov ax,mem32_ptr_GDT_data16
- mov gs,ax
- switch_real _text,@@rmode
- @@rmode:
-
- pop ax
- mov al,ah
- enable_interrupts
-
- mov ah,1
- int 16h
- jz boucle
- xor ah,ah
- int 16h
- cmp al,27
- je fin
- push es
- mov bx,code32
- mov es,bx
- assume es:code32
- cmp al,' '
- jne not0
- neg es:fire_flag
- jmp short ok
- not0:
- cmp al,'+'
- jne not1
- cmp es:fire_flag,31
- je ok
- inc es:fire_flag
- jmp short ok
- not1:
- cmp al,'-'
- jne ok
- cmp es:fire_flag,-32
- je ok
- dec es:fire_flag
- ok:
- pop es
- jmp boucle
-
- fin:
- mov ax,3
- int 10h
-
- mov ax,4c00h
- int 21h
-
- lowr dw 1
- highr dw 657
- random1:
- mov ax,16807 ;multiplie seed par a
- mul cs:lowr
- mov bx,ax
- mov cx,dx
- mov ax,16807
- mul cs:highr
- add ax,cx ;calcule le reste du produit divisé par m
- adc dx,0
- shl ax,1
- rcl dx,1
- shr ax,1
- add bx,dx
- adc ax,0
- test ax,32768
- jnz increm
- pas_increm:
- mov cs:lowr,bx ;c'est fait !
- mov cs:highr,ax
- ret ;bye bye random !
- increm:
- inc bx
- xor ax,ax
- jmp pas_increm
-
- code32 segment
- assume cs:code32
- random2:
- mov bx,cs:r_table_ptr
- mov ax,cs:r_table[bx+73]
- xor cs:r_table[bx],ax
- xor cs:r_table[bx+256],ax
- add cs:r_table_ptr,2
- and cs:r_table_ptr,255
- ret
- ends
-
- end debut