Upload
This commit is contained in:
commit
43352ff262
1291 changed files with 220976 additions and 0 deletions
339
MAIN/VMODE.ASM
Normal file
339
MAIN/VMODE.ASM
Normal file
|
|
@ -0,0 +1,339 @@
|
|||
|
||||
ALIGN 16
|
||||
mode0d db 256 dup(0)
|
||||
mode0e db 256 dup(0)
|
||||
mode13 db 256 dup(0)
|
||||
vid_oldint dd 0
|
||||
vid_curmode dw -1
|
||||
|
||||
vid_intti PROC NEAR
|
||||
cmp ah,0fh
|
||||
je @@f
|
||||
cmp ah,0
|
||||
je @@1
|
||||
@@nn: jmp cs:vid_oldint
|
||||
@@f: cmp cs:vid_curmode,-1
|
||||
je @@nn
|
||||
mov ax,cs:vid_curmode
|
||||
mov ah,40
|
||||
mov bh,0
|
||||
iret
|
||||
@@1: nop
|
||||
; cmp al,13h
|
||||
; je @@mode13
|
||||
; cmp al,13h+80h
|
||||
; je @@mode13noclr
|
||||
; cmp al,0dh
|
||||
; je @@mode0d
|
||||
; cmp al,0dh+80h
|
||||
; je @@mode0dnoclr
|
||||
; cmp al,0eh
|
||||
; je @@mode0e
|
||||
cmp al,4
|
||||
ja @@gn
|
||||
cmp cs:notextmode,0
|
||||
je @@gn
|
||||
iret
|
||||
@@gn: mov cs:vid_curmode,-1
|
||||
jmp cs:vid_oldint
|
||||
@@mode13:
|
||||
mov cs:vid_curmode,13h
|
||||
pusha
|
||||
push ds
|
||||
push es
|
||||
call clearpalette
|
||||
mov ax,cs
|
||||
mov ds,ax
|
||||
mov si,OFFSET mode13
|
||||
call loadvmode
|
||||
call clearvram
|
||||
pop es
|
||||
pop ds
|
||||
popa
|
||||
iret
|
||||
@@mode13noclr:
|
||||
mov cs:vid_curmode,13h
|
||||
pusha
|
||||
push ds
|
||||
push es
|
||||
;call clearpalette
|
||||
mov ax,cs
|
||||
mov ds,ax
|
||||
mov si,OFFSET mode13
|
||||
call loadvmode
|
||||
pop es
|
||||
pop ds
|
||||
popa
|
||||
iret
|
||||
@@mode0d:
|
||||
mov cs:vid_curmode,0dh
|
||||
pusha
|
||||
push ds
|
||||
push es
|
||||
call clearpalette
|
||||
mov ax,cs
|
||||
mov ds,ax
|
||||
mov si,OFFSET mode0d
|
||||
call loadvmode
|
||||
call clearvram
|
||||
pop es
|
||||
pop ds
|
||||
popa
|
||||
iret
|
||||
@@mode0dnoclr:
|
||||
mov cs:vid_curmode,13h
|
||||
pusha
|
||||
push ds
|
||||
push es
|
||||
call clearpalette
|
||||
mov ax,cs
|
||||
mov ds,ax
|
||||
mov si,OFFSET mode0d
|
||||
call loadvmode
|
||||
pop es
|
||||
pop ds
|
||||
popa
|
||||
iret
|
||||
@@mode0e:
|
||||
mov cs:vid_curmode,0eh
|
||||
pusha
|
||||
push ds
|
||||
push es
|
||||
call clearpalette
|
||||
mov ax,cs
|
||||
mov ds,ax
|
||||
mov si,OFFSET mode0e
|
||||
call loadvmode
|
||||
call clearvram
|
||||
pop es
|
||||
pop ds
|
||||
popa
|
||||
iret
|
||||
vid_intti ENDP
|
||||
|
||||
vmode_deinit PROC NEAR
|
||||
xor ax,ax
|
||||
mov ds,ax
|
||||
mov ax,word ptr cs:vid_oldint[0]
|
||||
mov bx,word ptr cs:vid_oldint[2]
|
||||
mov word ptr ds:[010h*4+0],ax
|
||||
mov word ptr ds:[010h*4+2],bx
|
||||
ret
|
||||
vmode_deinit ENDP
|
||||
|
||||
vmode_init PROC NEAR
|
||||
pusha
|
||||
push ds
|
||||
push es
|
||||
push fs
|
||||
push gs
|
||||
|
||||
IF 0
|
||||
mov ax,0dh ;320x200x16
|
||||
int 10h
|
||||
mov ax,cs
|
||||
mov ds,ax
|
||||
mov si,OFFSET mode0d
|
||||
call savevmode
|
||||
mov ax,13h ;320x200x256
|
||||
int 10h
|
||||
mov ax,cs
|
||||
mov ds,ax
|
||||
mov si,OFFSET mode13
|
||||
call savevmode
|
||||
mov ax,0eh ;640x350x16
|
||||
int 10h
|
||||
mov ax,cs
|
||||
mov ds,ax
|
||||
mov si,OFFSET mode0e
|
||||
call savevmode
|
||||
mov ax,3
|
||||
int 10h
|
||||
ENDIF
|
||||
|
||||
xor ax,ax
|
||||
mov ds,ax
|
||||
mov ax,word ptr ds:[010h*4+0]
|
||||
mov bx,word ptr ds:[010h*4+2]
|
||||
mov word ptr cs:vid_oldint[0],ax
|
||||
mov word ptr cs:vid_oldint[2],bx
|
||||
mov word ptr ds:[010h*4+0],OFFSET vid_intti
|
||||
mov word ptr ds:[010h*4+2],cs
|
||||
|
||||
pop gs
|
||||
pop fs
|
||||
pop es
|
||||
pop ds
|
||||
popa
|
||||
ret
|
||||
vmode_init ENDP
|
||||
|
||||
VSAL MACRO
|
||||
mov ds:[si],al
|
||||
inc si
|
||||
ENDM
|
||||
|
||||
;vmode data to DS:SI
|
||||
savevmode PROC NEAR
|
||||
mov dx,3cch
|
||||
in al,dx
|
||||
VSAL
|
||||
;Read Sequencer (3C4)
|
||||
mov dx,3c4h
|
||||
xor ah,ah
|
||||
mov cx,04h+1
|
||||
@@r1: mov al,ah
|
||||
out dx,al
|
||||
inc dx
|
||||
in al,dx
|
||||
VSAL
|
||||
dec dx
|
||||
inc ah
|
||||
loop @@r1
|
||||
;Read CRTC (3D4)
|
||||
mov dx,3d4h
|
||||
xor ah,ah
|
||||
mov cx,18h+1
|
||||
@@r2: mov al,ah
|
||||
out dx,al
|
||||
inc dx
|
||||
in al,dx
|
||||
VSAL
|
||||
dec dx
|
||||
inc ah
|
||||
LOOP @@r2
|
||||
;Read GFX controller (3CE)
|
||||
mov dx,3ceh
|
||||
xor ah,ah
|
||||
mov cx,08h+1
|
||||
@@r3: mov al,ah
|
||||
out dx,al
|
||||
inc dx
|
||||
in al,dx
|
||||
VSAL
|
||||
dec dx
|
||||
inc ah
|
||||
loop @@r3
|
||||
;Read Attribute controller (3C0)
|
||||
xor ah,ah
|
||||
mov cx,14h+1
|
||||
@@r4: mov dx,3dah
|
||||
in al,dx
|
||||
mov dx,3c0h
|
||||
mov al,ah
|
||||
out dx,al
|
||||
inc dx
|
||||
in al,dx
|
||||
VSAL
|
||||
dec dx
|
||||
out dx,al
|
||||
mov al,20h
|
||||
out dx,al
|
||||
inc ah
|
||||
loop @@r4
|
||||
ret
|
||||
savevmode ENDP
|
||||
|
||||
;vmode data from DS:SI
|
||||
loadvmode PROC NEAR
|
||||
mov dx,3dah
|
||||
@@1: in al,dx
|
||||
test al,8
|
||||
jnz @@1
|
||||
@@2: in al,dx
|
||||
test al,8
|
||||
jz @@2
|
||||
;Syncronous reset
|
||||
mov dx,3c4h
|
||||
mov ax,0200h
|
||||
out dx,ax
|
||||
;Clear CRTC protection flag
|
||||
mov dx,3d4h
|
||||
mov al,011h
|
||||
out dx,al
|
||||
inc dx
|
||||
in al,dx
|
||||
and al,not 128
|
||||
out dx,al
|
||||
;Set misc register
|
||||
mov al,ds:[si]
|
||||
inc si
|
||||
mov dx,3c2h
|
||||
out dx,al
|
||||
;Set Sequencer (3C4)
|
||||
mov dx,3c4h
|
||||
xor al,al
|
||||
mov cx,04h+1
|
||||
@@w1: mov ah,ds:[si]
|
||||
inc si
|
||||
out dx,ax
|
||||
inc al
|
||||
loop @@w1
|
||||
;Set CRTC (3D4)
|
||||
mov dx,3d4h
|
||||
xor al,al
|
||||
mov cx,18h+1
|
||||
@@w2: mov ah,ds:[si]
|
||||
inc si
|
||||
out dx,ax
|
||||
inc al
|
||||
loop @@w2
|
||||
;Set GFX controller (3CE)
|
||||
mov dx,3ceh
|
||||
xor al,al
|
||||
mov cx,08h+1
|
||||
@@w3: mov ah,ds:[si]
|
||||
inc si
|
||||
out dx,ax
|
||||
inc al
|
||||
loop @@w3
|
||||
;Set Attribute controller (3C0)
|
||||
mov dx,3dah
|
||||
in al,dx
|
||||
mov dx,3c0h
|
||||
xor ah,ah
|
||||
mov cx,14h+1
|
||||
@@w4: mov al,ah
|
||||
out dx,al
|
||||
mov al,ds:[si]
|
||||
out dx,al
|
||||
inc si
|
||||
inc ah
|
||||
loop @@w4
|
||||
;Enable display, enable PEL mask
|
||||
mov dx,3c0h
|
||||
mov al,20h
|
||||
out dx,al
|
||||
mov dx,3c6h
|
||||
mov al,0ffh
|
||||
out dx,al
|
||||
ret
|
||||
loadvmode ENDP
|
||||
|
||||
clearvram PROC NEAR
|
||||
push es
|
||||
push di
|
||||
mov dx,3c4h
|
||||
mov ax,0f02h
|
||||
out dx,ax
|
||||
mov ax,0a000h
|
||||
mov es,ax
|
||||
xor di,di
|
||||
xor eax,eax
|
||||
mov cx,16384
|
||||
rep stosd
|
||||
pop di
|
||||
pop es
|
||||
ret
|
||||
clearvram ENDP
|
||||
|
||||
clearpalette PROC NEAR
|
||||
mov dx,3c8h
|
||||
xor al,al
|
||||
out dx,al
|
||||
inc dx
|
||||
mov cx,768
|
||||
@@1: out dx,al
|
||||
loop @@1
|
||||
ret
|
||||
clearpalette ENDP
|
||||
Loading…
Reference in a new issue