mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-22 16:04:18 +00:00
446 lines
12 KiB
Plaintext
446 lines
12 KiB
Plaintext
|
||
;**********************************************************************
|
||
;* 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
|
||
|
||
|