Initial put
This commit is contained in:
@@ -0,0 +1,259 @@
|
||||
;====================================================
|
||||
;
|
||||
; Library ASM code
|
||||
;
|
||||
;====================================================
|
||||
IDEAL
|
||||
P386N
|
||||
MODEL medium,C
|
||||
|
||||
extrn xormask:WORD,yshift:WORD,CGAfont:WORD,VGAfont:WORD
|
||||
|
||||
DATASEG
|
||||
|
||||
SCindex = 3c4h
|
||||
SCmapmask = 2
|
||||
GCindex = 3CEh
|
||||
GCreadmap = 4
|
||||
GCmode = 5
|
||||
|
||||
a = 0
|
||||
LABEL CGAlookup WORD
|
||||
PUBLIC CGAlookup
|
||||
REPT 100
|
||||
dw a,a XOR 2000h
|
||||
a = a+80
|
||||
ENDM
|
||||
|
||||
a = 0
|
||||
LABEL EGA1lookup WORD
|
||||
PUBLIC EGA1lookup
|
||||
REPT 200
|
||||
dw a
|
||||
a = a+40
|
||||
ENDM
|
||||
|
||||
a = 0
|
||||
LABEL EGA2lookup WORD
|
||||
PUBLIC EGA2lookup
|
||||
REPT 480
|
||||
dw a
|
||||
a = a+80
|
||||
ENDM
|
||||
|
||||
a = 0
|
||||
LABEL VGAlookup WORD
|
||||
PUBLIC VGAlookup
|
||||
REPT 200
|
||||
dw a
|
||||
a = a+320
|
||||
ENDM
|
||||
|
||||
|
||||
CODESEG
|
||||
|
||||
;====================================================
|
||||
;
|
||||
; Draw CGA chars
|
||||
;
|
||||
;====================================================
|
||||
PROC CGAcharout
|
||||
PUBLIC CGAcharout
|
||||
ARG x:WORD,y:WORD,chr:BYTE
|
||||
USES si,di,ds
|
||||
mov bx,[y]
|
||||
shl bx,1
|
||||
shl bx,1
|
||||
shl bx,1
|
||||
shl bx,1
|
||||
mov di,[CGAlookup+bx]
|
||||
mov ax,[x]
|
||||
shl ax,1
|
||||
add di,ax
|
||||
|
||||
mov al,[chr]
|
||||
xor ah,ah
|
||||
shl ax,1
|
||||
shl ax,1
|
||||
shl ax,1
|
||||
shl ax,1
|
||||
mov si,ax
|
||||
|
||||
mov ax,0b800h
|
||||
mov es,ax
|
||||
mov ds,[CGAfont]
|
||||
cld
|
||||
cmp [ss:xormask],0
|
||||
ja @@1
|
||||
|
||||
REPT 4
|
||||
movsw
|
||||
add di,2000h-2
|
||||
movsw
|
||||
sub di,2000h-78
|
||||
ENDM
|
||||
jmp @@exit
|
||||
@@1:
|
||||
REPT 4
|
||||
lodsw
|
||||
xor ax,0ffffh
|
||||
stosw
|
||||
add di,2000h-2
|
||||
lodsw
|
||||
xor ax,0ffffh
|
||||
stosw
|
||||
sub di,2000h-78
|
||||
ENDM
|
||||
@@exit:
|
||||
ret
|
||||
ENDP
|
||||
|
||||
;====================================================
|
||||
;
|
||||
; Draw EGA chars
|
||||
;
|
||||
;====================================================
|
||||
PROC EGAcharout
|
||||
PUBLIC EGAcharout
|
||||
ARG x:WORD,y:WORD,chr:BYTE,video:WORD
|
||||
USES si,di,ds,bp
|
||||
|
||||
mov dx,GCindex
|
||||
mov ax,GCmode
|
||||
out dx,ax
|
||||
|
||||
mov bx,[y]
|
||||
shl bx,1
|
||||
shl bx,1
|
||||
shl bx,1
|
||||
add bx,[yshift]
|
||||
shl bx,1
|
||||
|
||||
cmp [video],1
|
||||
jne @@0
|
||||
mov cx,39
|
||||
mov di,[EGA1lookup+bx]
|
||||
jmp @@1
|
||||
@@0:
|
||||
mov cx,79
|
||||
mov di,[EGA2lookup+bx]
|
||||
@@1:
|
||||
add di,[x]
|
||||
|
||||
mov ax,0a000h
|
||||
mov es,ax
|
||||
mov ds,ax
|
||||
|
||||
mov si,0f000h
|
||||
mov al,[chr]
|
||||
xor ah,ah
|
||||
shl ax,1
|
||||
shl ax,1
|
||||
shl ax,1
|
||||
add si,ax
|
||||
|
||||
cld
|
||||
cmp [ss:xormask],0
|
||||
ja @@2
|
||||
|
||||
mov dx,GCindex
|
||||
mov ax,GCmode OR 100h
|
||||
out dx,ax
|
||||
mov dx,SCindex
|
||||
mov ax,SCmapmask OR 0f00h
|
||||
out dx,ax
|
||||
|
||||
REPT 8
|
||||
movsb
|
||||
add di,cx
|
||||
ENDM
|
||||
jmp @@exit
|
||||
|
||||
@@2:
|
||||
ga = 100h
|
||||
gb = 0
|
||||
mov bp,si
|
||||
mov bx,di
|
||||
REPT 4
|
||||
mov dx,SCindex
|
||||
mov ax,SCmapmask OR ga
|
||||
out dx,ax
|
||||
mov dx,GCindex
|
||||
mov ax,GCreadmap OR gb
|
||||
out dx,ax
|
||||
REPT 8
|
||||
lodsb
|
||||
xor al,0ffh
|
||||
stosb
|
||||
add di,cx
|
||||
ENDM
|
||||
mov di,bx
|
||||
mov si,bp
|
||||
ga = ga*2
|
||||
gb = gb+100h
|
||||
ENDM
|
||||
@@exit:
|
||||
mov dx,GCindex
|
||||
mov ax,GCmode
|
||||
out dx,ax
|
||||
ret
|
||||
ENDP
|
||||
|
||||
;====================================================
|
||||
;
|
||||
; Draw VGA chars
|
||||
;
|
||||
;====================================================
|
||||
PROC VGAcharout
|
||||
PUBLIC VGAcharout
|
||||
ARG x:WORD,y:WORD,chr:BYTE
|
||||
USES si,di,ds
|
||||
|
||||
mov bx,[y]
|
||||
shl bx,1
|
||||
shl bx,1
|
||||
shl bx,1
|
||||
add bx,[yshift]
|
||||
shl bx,1
|
||||
mov di,[VGAlookup+bx]
|
||||
|
||||
mov ax,[x]
|
||||
shl ax,1
|
||||
shl ax,1
|
||||
shl ax,1
|
||||
add di,ax
|
||||
|
||||
mov ah,[chr]
|
||||
xor al,al
|
||||
shr ax,1
|
||||
shr ax,1 ;[chr]*64!
|
||||
mov si,ax
|
||||
|
||||
mov ax,0a000h
|
||||
mov es,ax
|
||||
mov ds,[VGAfont]
|
||||
|
||||
cmp [ss:xormask],0
|
||||
ja @@1
|
||||
|
||||
REPT 8
|
||||
REPT 4
|
||||
movsw
|
||||
ENDM
|
||||
add di,320-8
|
||||
ENDM
|
||||
jmp @@exit
|
||||
@@1:
|
||||
REPT 8
|
||||
REPT 4
|
||||
lodsw
|
||||
xor ax,0ffffh
|
||||
stosw
|
||||
ENDM
|
||||
add di,320-8
|
||||
ENDM
|
||||
@@exit:
|
||||
ret
|
||||
ENDP
|
||||
|
||||
END
|
||||
Reference in New Issue
Block a user