VZEditor/SRC/scrn.asm
2025-04-02 07:52:59 +09:00

423 lines
6.1 KiB
NASM

;****************************
; 'scrn.asm'
;****************************
include vz.inc
;--- External symbols ---
wseg
; extrn altsize :byte
extrn atrtbl :byte
extrn atrucsr :byte
extrn atrflag :byte
extrn csr_i :byte
extrn csr_o :byte
extrn dspsw :byte
extrn fkeymode :byte
extrn grctbl :byte
extrn hardware :byte
extrn hsplit :byte
extrn vsplit :byte
extrn linecnt :byte
extrn syssw :byte
extrn silent :byte
extrn msgon :byte
extrn conbufsz :word
extrn conseg :word
IFNDEF NOFILER
extrn curscrn :word
ENDIF
extrn dosscrn :word
extrn farseg :word
; extrn gvram :word
extrn imgstack :word
extrn refloc :word
extrn tvsize :word
extrn tmpbuf3 :word
extrn paltblp :word
endws
extrn do_tab :near
extrn ems_loadmap :near
extrn ems_map :near
; extrn ems_nec :near
extrn ems_savemap :near
extrn iskanji :near
extrn optputs :near
extrn toupper :near
extrn resetfp :near
IFDEF PC98
extrn sm_sensekey :near
ENDIF
dseg
;--- Local work ---
GDATA scrnparm, label, byte
dsp _farptr <>
win _rect <>
loc _point <>
GDATA dosloc, dw, 0
dspatr db 0
locx0 db 0
dosh db 0
GDATA chkh, db, 0 ; ##156.123
savef db 0
GDATA ucsrpos, dw, 0
ucsrlen db 0
fnckey db 0
GDATA defatr, db, INVALID
imagep dw 0
lineh db 0
precsr db -1 ; ##153.41
GDATA doswd, dw, WD ; ##156.123
doswd2 dw WD*2
hsplit0 db 0 ; ##16
vsplit0 db 0 ;
;gvseg dw 0
;extbank db 0
rolc1 db 0
lineh1 db 0
waitc dw 1 ; ##153.50
paltbl db -1
db 16 dup(0)
dospaltbl db 0,1,2,3,4,5,20,7,56,57,58,59,60,61,62,63,0
endds
iseg
assume ds:cgroup ; ##156
;--- Init screen param. ---
public initscrn
initscrn proc
mov al,linecnt
mov chkh,al
call doswindow
shr cl,1
shr ch,1
mov vsplit,cl
mov hsplit,ch
call resetscrnh
VZ_RET
initscrn endp
endis
eseg
assume ds:nothing
;--- Check "silent" ---
public issilent,is_dossilent
issilent proc
tstb silent
_ifn z
inc sp
inc sp
_endif
VZ_RET
issilent endp
is_dossilent proc
test silent,2
_ifn z
inc sp
inc sp
_endif
VZ_RET
is_dossilent endp
;--- Get/set window ---
; DL,DH :window top-left x,y
; CL,CH :window size x,y
public getwindow
getwindow proc
mov dx,word ptr win.px
mov cx,word ptr win.sx
VZ_RET
getwindow endp
public setwindow
setwindow proc
mov word ptr win.px,dx
mov word ptr win.sx,cx
VZ_RET
setwindow endp
;--- Get dos window ---
;<--
; DL,DH :window top-left x,y
; CL,CH :window size x,y
public doswindow
doswindow proc
call dosheight
mov cl,byte ptr doswd
clr dx
VZ_RET
doswindow endp
;--- Set dos window ---
public setdoswindow
setdoswindow proc
pushm <ax,cx,dx>
call doswindow
call setwindow
popm <dx,cx,ax>
VZ_RET
setdoswindow endp
;--- Set command line window ---
public setcmdwindow
setcmdwindow proc
call dosloc1
mov cl,byte ptr doswd
sub cl,dl
mov ch,1
call setwindow
call setrefloc
VZ_RET
setcmdwindow endp
dosloc1 proc
mov dx,dosloc
call dosheight
sub ch,cl
cmp dh,ch
_if a
mov dh,ch
_endif
VZ_RET
dosloc1 endp
;--- Save window,location ---
; keep registors except DI
public savewloc
savewloc proc
pop di
push loc
push word ptr win.px
push word ptr win.sx
push refloc
jmp di
savewloc endp
;--- Load window,location ---
; keep registors except DX,DI
public loadwloc
loadwloc proc
pop di
pop refloc
pop word ptr win.sx
pop word ptr win.px
pop dx
pushf
call locate
popf
jmp di
loadwloc endp
;--- Check screen size --- ; ##156.133
public chkscreen
chkscreen proc
call getdosloc2
mov win.py,dh
mov dosloc.py,dh
mov byte ptr refloc+1,dh
VZ_RET
chkscreen endp
;--- Locate x,y ---
; DL,DH :location x,y
public locate
locate proc
push di
mov loc,dx
call mkwindp
mov dsp.@off,di
pop di
VZ_RET
locate endp
;--- Get GVRAM work @seg ---
;<-- AX :@seg
getgvseg proc
; call setgbank
call ems_savemap
mov ax,farseg
call ems_map
VZ_RET
getgvseg endp
;--- Get locate x,y ---
;<-- DL,DH :location x,y
public getloc
getloc proc
mov dx,loc
VZ_RET
getloc endp
;--- Set dos location ---
public setdosloc
setdosloc proc
mov ax,loc
add ax,word ptr win.px
mov dosloc,ax
VZ_RET
setdosloc endp
;--- Set dos cursor ---
public setdoscsr
setdoscsr proc
call doswindow
call setwindow
call dosloc1
call locate
mov al,CSR_SYS
call csron
VZ_RET
setdoscsr endp
;--- Get graphic char ---
;--> AL :graf char type
;<-- AL :graf char code
dummy label byte
public getgrafchr
getgrafchr proc
push bx
call getgrctbl ; ##156.DOSV
sub al,GRC
xlat cs:dummy
pop bx
VZ_RET
getgrafchr endp
;--- Init window parm. ---
;-->
; DL,DH,CL,CH :screen block
;<--
; SI=DI :screen offset
; DS=ES :screen segment
; CX : block size x
; DX : block size y
initwind proc
call mkscrnp
mov si,di
mov ds,dsp.@seg
movseg es,ds
mov dl,ch
clr dh
clr ch
VZ_RET
initwind endp
;--- Reset image ptr ---
public clrwstack
clrwstack proc
mov ax,imgstack
mov imagep,ax
VZ_RET
clrwstack endp
;--- Set/Get cursor type ---
; DL :insert mode (0-15)
; DH :overwrite mode (0-15)
public setcsrtype
setcsrtype proc
mov csr_i,dl
mov csr_o,dh
VZ_RET
setcsrtype endp
public getcsrtype
getcsrtype proc
mov dl,csr_i
mov dh,csr_o
VZ_RET
getcsrtype endp
;--- Convert shift-JIS to JIS ---
;--> DX :shift JIS code
;<-- AX :JIS code
public cvtjis
cvtjis proc
mov ax,dx
mstojis
VZ_RET
cvtjis endp
endes
IF 0
bseg
;--- Set/reset G-RAM bank ---
IO_GBANK equ 0A6h
IO_8OR16 equ 06Ah
public setgbank,resetgbank
setgbank proc
push ax
tstb extbank
_ifn z
outi IO_8OR16,1
_endif
mov al,1
jmps gbank1
resetgbank:
push ax
mov al,0
gbank1: tstw gvseg
_ifn z
out IO_GBANK,al
_else
push bx
mov bl,al
xor bl,1
call ems_nec
pop bx
_endif
pop ax
VZ_RET
setgbank endp
endbs
ENDIF
IFDEF PC98
include scrn98.asm
ELSE
include scrnibm.asm
ENDIF
end
;****************************
; End of 'scrn.asm'
; Copyright (C) 1989 by c.mos
;****************************