Files
Digital-Research-Source-Code/GSX/GSX-86 DRIVER SOURCES/DDNECLIC.A86
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

446 lines
12 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;**********************************************************************
;* NEC DEVICE DRIVER FOR GSX - 86 *
;**********************************************************************
; 27/07/83 15:00 WF
;
DDRIVER CSEG
PUBLIC GRRESET,GRSLV,GRSYNC,GRPITCH
PUBLIC GRZOOM
PUBLIC GRCSRFORM,GRCLEAR
PUBLIC GRSTART
PUBLIC GRTEXTW,GRWRITE,GRVECTW
PUBLIC GRVECTE,GRMASK,GRTEXTE
PUBLIC GRCSRO,GRGDCC1,GRGDCC
PUBLIC DDINIT
PUBLIC GRFXON,GRFXOFF
BDOS EQU 0E0H
;
;
;**********************************************************************
;Initilize 7220 chip
DDINIT:
Mov GRCOLR,0 ;clear the color variable
Call GRFXON ;turn on the grafix screen
Ret
;
;**********************************************************************
;* (X,Y) TO SCREEN MEMORY ADDRESS CONVERT *
;* INPUT CX = XAD OUTPUT DX = EAD *
;* DX = YAD CL = DAD *
;**********************************************************************
GRXYCV:
MOV AX,CX
AND CX,000FH
PUSH CX
MOV CL,4
SAR AX,CL
MOV CX,Y_MAX
SUB CX,DX
PUSH AX
MOV AX,PITCH
MUL CX
POP CX
ADD AX,CX
ADD AX,GRSAD1
MOV DX,AX
POP AX
MOV CL,4
SHL AX,CL
MOV CL,AL
RET
;
;**********************************************************************
;* ALL SCREEN MEMORY CLEAR *
;**********************************************************************
GRCLEAR:
Xor AX,AX ;get a zero
Mov GRCOLR,AX ;set the color to green
MOV GRZOOMP,AL ;set zoom to 0
CALL GRZOOM ;
GRCLR010:
Xor DX,DX ;make a zero
CALL GRCSRW ;set cursor
MOV GRMASK_W,0FFFFH
CALL GRMASK ;set mask
MOV CX,3
GRCLR020:
PUSH CX
MOV GRVECTP1,2H ;DIRECTION = 2
MOV GRVECTP2,7FFFH ;LENGTH = 16K
MOV CX,3
CALL GRVECTW ;SEND PARAMETER TO GDC
MOV GRWRT,22H ;SET RESET MODE
MOV GRATTRIB,022H ;
MOV GRWRTP1,0FFH
MOV GRWRTP2,0FFH
MOV CX,2
CALL GRWRITE ;WDAT
POP CX
LOOP GRCLR020 ;
RET
;
;
;
ALCLEAR:
MOV AL,1AH ;CLEAR SCREEN
PUSH AX
PUSH ES
push DI
PUSH SI
PUSH DX
PUSH CX
PUSH BX
XOR DH,DH
MOV DL,AL
MOV cl,2
INT BDOS
pop BX
POP cx
pop DX
POP SI
POP DI
POP ES
POP AX
RET
;
;
;**********************************************************************
;* MULTI COMMAND OUTPUT ROUTINE *
;* INPUT BX = ADDRESS OF COMMAND AND PARAMETERS *
;* CX = NUMBER OF PARAMETERS *
;**********************************************************************
GRMOUT:
CALL GRGDCC1 ; GDC STATUS CHECK
MOV AL,[BX] ;
OUT GRCMD,AL ; COMMAND OUTPUT
CMP CX,0 ; IF NO PARAMETER
JE GRMOUTRET ;
GRMOUT010:
INC BX ;
MOV AL,[BX] ;
OUT GRPARA,AL ; PARAMETER OUTPUT
Call GRGDCC1 ; wait till empty
LOOP GRMOUT010 ;
GRMOUTRET:
RET ; RETURN
;**********************************************************************
GRRESET:
CALL GRGDCC1 ; GDC FIFO EMPTY CHECK
MOV AL,RESETCMD ;
OUT GRCMD,AL ; RESET COMMAND OUTPUT
RET
;**********************************************************************
GRMSTR:
CALL GRGDCC1 ; GDC FIFO EMPTY CHECK
MOV AL,MSTRCMD ;
OUT GRCMD,AL ; MASTER COMMAND OUTPUT
RET
;**********************************************************************
GRSLV:
CALL GRGDCC1 ; GDC FIFO EMPTY CHECK
MOV AL,SLVCMD ;
OUT GRCMD,AL ; SLAVE COMMAND OUTPUT
RET
;**********************************************************************
GRSTART:
CALL GRGDCC1 ; GDC FIFO EMPTY CHECK
MOV AL,STARTCMD ;
OUT GRCMD,AL ; DISPLAY ENABLE
RET
;**********************************************************************
GRSTOP:
CALL GRGDCC1 ; GDC FIFO EMPTY CHECK
MOV AL,STOPCMD ;
OUT GRCMD,AL ; DISPLAY DISABLE
RET
;**********************************************************************
GRVECTE:
CALL GRGDCC1 ; GDC FIFO EMPTY CHECK
MOV AL,VECTECMD ;
OUT GRCMD,AL ; VECTOR EXECUTE
RET
;**********************************************************************
GRTEXTE:
CALL GRGDCC1 ; GDC FIFO EMPTY CHECK
MOV AL,TEXTECMD ;
OUT GRCMD,AL ; TEXT EXECUTE
RET
;**********************************************************************
GRSYNC:
MOV CX,8
MOV BX,DASYNC
CALL GRMOUT ;
RET
;**********************************************************************
GRCSRO:
MOV CX,XAD ;
MOV DX,YAD ;
CALL GRXYCV ;
GRCSRW:
PUSH BX
ADD DX,GRCOLR
MOV GREAD,DX ;
MOV GRDAD,CL ;
MOV CX,3
MOV BX,DACSRW ;
CALL GRMOUT
POP BX
RET
;**********************************************************************
GRMASK: ;SET MASK
PUSH BX
MOV CX,2 ;
MOV BX,DAMASK ;
CALL GRMOUT
POP BX
RET
;**********************************************************************
GRWRITE:
PUSH BX
MOV AL,GRATTRIB ;
AND AL,03H ;
And GRWRT,0FCH ; mask out any old mode bits
Or GRWRT,AL ;
MOV BX,DAWRITE ;
CALL GRMOUT ;
POP BX
RET
;*********************************************************************
GRCSRFORM:
MOV CX,3 ; NUMBER OF PARAMETERS
MOV BX,DACSRFORM ;
CALL GRMOUT
RET
;**********************************************************************
GRZOOM:
MOV CX,1 ;
MOV BX,DAZOOM ;
CALL GRMOUT ;
RET
;**********************************************************************
GRPITCH:
MOV CX,1 ;
MOV BX,DAPITCH ;
CALL GRMOUT ;
RET
;**********************************************************************
GRTEXTW: ;PRAM COMMAND
PUSH BX
MOV CX,8 ;
MOV BX,DATEXTW ;
CALL GRMOUT ;
POP BX
RET
;**********************************************************************
GRVECTW:
PUSH BX
Or GRVECTP2,04000H ;turn on mixed mode flag
MOV BX,DAVECTW ;
CALL GRMOUT ;
POP BX
RET
;
;**********************************************************************
;* GDC STATUS CHECK ROUTINES *
;**********************************************************************
GRGDCC:
IN AL,GRSTATUS ; GDC STATUS READ
TEST AL,08H ; DRAWING (DB3)
JNZ GRGDCC ; IF NOT READY
NOT AL ; VERTICAL SYNC (DB5)
TEST AL,24H ; FIFO EMPTY (DB2)
JNZ GRGDCC ; IF NOT READY
RET ; RETURN IF GDC IS READY
;
GRGDCC1:
IN AL,GRSTATUS ; GDC STATUS READ
TEST AL,04H ; FIFO EMPTY (DB2)
JZ GRGDCC1 ; IF NOT EMPTY
RET ; RETURN IF GDC FIFO IS EMPTY
;*********************************************************************
GRFXON:
Call GRSTOP ;DISABLE DISPLAY
Mov BX,offset GRAPHICS_PARTITION
Mov CX,8 ;number of arguments
Call GRMOUT ;send command and params
CALL GRCLEAR ;CLEAR SCREEN
CALL DELAY
GRFXON1:
IN AL,GRSTATUS ;GDC STATUS READ
TEST AL,20H
JZ GRFXON1
Call GRSTART ;ENABLE DISPLAY
Ret
GRFXOFF:
Call GRSTOP ;DISABLE DISPLAY
Mov BX,offset ALPHA_PARTITION
Mov CX,8 ;number of arguments
Call GRMOUT
CALL ALCLEAR ;CLEAR SCREEN (CHARACER MODE)
CALL DELAY
GRFXOFF1:
IN AL,GRSTATUS ;GDC STATUS READ
TEST AL,20H
JZ GRFXOFF1
Call GRSTART ;ENABLE DISPLAY
Ret
;
DELAY:
MOV CX,4
DELAY1:
IN AL,GRSTATUS
TEST AL,20H
JZ DELAY1
DELAY2:
IN AL,GRSTATUS
TEST AL,20H
JNZ DELAY2
LOOP DELAY1
RET
;
;**********************************************************************
;* GRAPHIC DISPLAY DATA AREA *
;**********************************************************************
DSEG
;
;
EXTRN Y_MAX:WORD,X_MAX:WORD
;
PUBLIC GRTEXTP1,GRTEXTP2,GRATTRIB
PUBLIC GRTEXTP_W
PUBLIC GRVECTP1,GRVECTP2,GRVECTP4,GRVECTDC,GRVECTD
PUBLIC GRVECTD2
PUBLIC GRVECTD1,GRVECTDM
PUBLIC GRATTRIB
PUBLIC XAD,YAD
PUBLIC GRCOLR
PUBLIC GRWRT,GRWRTP
PUBLIC GRMASK_L
PUBLIC GRMASK_W
;
PUBLIC GRWRTW
PUBLIC GRZOOMP
;
XAD DW 0 ;
YAD DW 0 ;
X_SKIP DB 1 ;
Y_SKIP DB 1 ;
GRATTRIB DB 80H ;
;
DASYNC EQU OFFSET $
DB 00H ;
DB 16H ;16 flashless mode/ 06 flash mode
DB 26H ;
DB 46H ;
DB 0EH ;
DB 03H ;
DB 13H ;
DB 0DBH ;
DB 91H ;
;
DAPITCH EQU OFFSET $
DB 47H ;
DB PITCH ;
;
DAZOOM EQU OFFSET $
DB 46H ;
GRZOOMP DB 00H ;
;
DACSRFORM EQU OFFSET $
DB 4BH ;
DB 00H ;
DB 40H ;
DB 00H ;
;
DAMASK EQU OFFSET $
DB 4AH ;
GRMASK_L DB 0FFH ;
GRMASK_H DB 0FFH ;
GRMASK_W EQU word ptr GRMASK_L
;
DACSRW EQU OFFSET $;SET CURSOR
DB 49H ;
GREAD DW 0000H ;
GRDAD DB 00H ;
GRCOLR DW 0H
;
DASCROLL EQU OFFSET $
DB 70H ;
GRSAD1 DW 0000H ;
GRSL1 DW 1DB0H ;
GRSAD2 DW 0000H ;
GRSL2 DW 0000H ;
;
DATEXTW EQU OFFSET $;PARAMETER RAM
DB 78H ;
GRTEXTP1 DB 00H
GRTEXTP2 DB 00H
GRTEXTP3 DB 00H
GRTEXTP4 DB 00H ;
GRTEXTP5 DB 00H ;
GRTEXTP6 DB 00H ;
GRTEXTP7 DB 00H ;
GRTEXTP8 DB 00H ;
GRTEXTP_W EQU word ptr GRTEXTP1
;
DAVECTW EQU OFFSET $;FIGS
DB 4CH ;
GRVECTP1 DB 00H ;
GRVECTDC:
GRVECTP2 DW 0000H ;
GRVECTD:
GRVECTP4 DW 0000H ;
GRVECTD2:
GRVECTP6 DW 0000H ;
GRVECTD1:
GRVECTP8 DW 0000H ;
GRVECTDM:
GRVECTP10 DW 0000H ;
;
DAWRITE EQU OFFSET $
GRWRT DB 00H ;
GRWRTP1 DB 00H ;
GRWRTP2 DB 00H ;
GRWRTP EQU word ptr GRWRTP1
;
;
RESETCMD EQU 00H ;
STARTCMD EQU 0DH ;
STOPCMD EQU 0CH ;
MSTRCMD EQU 6FH ;
SLVCMD EQU 6EH ;
VECTECMD EQU 6CH ;
TEXTECMD EQU 68H ;
SCROLLCMD EQU 70H ;
GRWRTW EQU 20H ;
GRWRTL EQU 30H ;
GRWRTH EQU 38H ;
GRREADW EQU 0A0H ;
GRREADL EQU 0B0H ;
GRREADH EQU 0B8H ;
CSRRCMD EQU 0E0H ;
;
PITCH EQU 28H ;
GRCMD EQU 0A1H ;
GRPARA EQU 0A0H ;
GRSTATUS EQU 0A0H ;
GRRDATA EQU 0A1H ;
;
GRAPHICS_PARTITION DB 070H
DW 0H ;part 1 start
DW 5900H ;part 1 length
DW 0h ;part 2 start
DW 0H ;part 2 length
;
ALPHA_PARTITION DB 070H
DW 0H ;part 1 start
DW 1900H ;part 1 length
DW 0h ;part 2 start
DW 0H ;part 2 length
;
END