home *** CD-ROM | disk | FTP | other *** search
- ;
- ; Number Nine Revolution 512x8
- ; support routines for raster oriented graphics
- ;
- ; Tim Krauskopf July 1986
- ;
- ; National Center for Supercomputing Applications, University of Illinois
- ; 153 Water Resources Building
- ; 605 E. Springfield Ave.
- ; Champaign, IL 61820
- ; (217)244-0072
- ;
- ;
- TITLE NUMBER 9 GRAPHICS SUPPORT
- INCLUDE DOS.MAC
- SETX
- PSEG
- PUBLIC PUTCLR,PUTMAP,NO9LINE
- ;
- ; take three arrays of color table entries and transfer them to the
- ; board's Color registers at offset.
- ;
- ; usage: putclr(rmap,gmap,bmap,count,offset);
- ;
- PUTCLR PROC FAR
- PUSH BP
- MOV BP,SP
- PUSH DS
- PUSH ES
-
- MOV AX,[BP+X+2]
- MOV DS,AX ; where to get maps (seg)
- MOV AX,0C000H ; control seg for #9
- MOV ES,AX ; where to put color (seg)
-
- MOV SI,[BP+X] ; where to get red
- MOV CX,[BP+X+12] ; length of map
- MOV DI,0100H ; red map
- ADC DI,[BP+X+14] ; offset to correct entry
- REP MOVSB ; mov red
- ;
- MOV SI,[BP+X+4]
- MOV CX,[BP+X+12] ; length of map
- MOV DI,0200H ; green map
- ADC DI,[BP+X+14] ; offset to correct entry
- REP MOVSB
- ;
- MOV SI,[BP+X+8] ; blue map
- MOV CX,[BP+X+12] ; length of map
- MOV DI,0300H
- ADC DI,[BP+X+14] ; offset to correct entry
- REP MOVSB
- ;
- POP ES
- POP DS
- POP BP
- RET
-
- PUTCLR ENDP
-
- ; take three arrays of color table entries and transfer them to the
- ; board's registers
- ;
- ; usage: putmap(rmap,gmap,bmap);
- ;
- PUTMAP PROC FAR
- PUSH BP
- MOV BP,SP
- PUSH DS
- PUSH ES
- MOV AX,[BP+X+2]
- MOV DS,AX ; where to get maps (seg)
- MOV SI,[BP+X] ; where to get red
- MOV AX,0C000H ; control seg for #9
- MOV ES,AX
- MOV DI,0100H ; red map
- MOV CX,256 ; length of map
- REP MOVSB ; mov red
- ;
- MOV SI,[BP+X+4]
- MOV DI,0200H ; green map
- MOV CX,256
- REP MOVSB
- ;
- MOV SI,[BP+X+8] ; blue map
- MOV DI,0300H
- MOV CX,256
- REP MOVSB
- ;
- POP ES
- POP DS
- POP BP
- RET
-
- PUTMAP ENDP
- ;
- ; Transfer line to #9 screen, one byte per pixel
- ;
- ; usage : no9line(x,y,buf,nbytes)
- ;
- NO9LINE PROC FAR
- PUSH BP
- MOV BP,SP
- PUSH DS
- PUSH ES
- MOV AX,0C000H ; control regs
- MOV ES,AX
-
- MOV AX,[BP+X+6] ; ds of buffer
- MOV DS,AX
- MOV AX,[BP+X+2] ; y location on screen
- MOV CL,7 ; divide by 128
- SHR AX,CL
- MOV BL,AL ; make a copy
- CMP AL,CS:BANK ; is it the same bank?
- JZ OKBANK
-
- MOV CS:BANK,AL ; bank will be this one
- MOV DH,00H ; default, might be changed
- AND AL,02H ; is high bit on?
- JZ NO706
-
- MOV DH,0FFH ; setting for new bank
- NO706:
- MOV DL,00H ; default setting for 705
- MOV AL,BL ; get back copy
- AND AL,01H ; is low bit on?
- JZ NO705
-
- MOV DL,0FFH ; other portion of new bank
- NO705:
- MOV DI,0705H ; where bank reg is
- MOV AX,DX
- STOSW ; sets both bytes, lo then hi
- ;
- ; READY TO PUT THE LINE
- ;
- OKBANK:
- MOV AX,0A000H ; data buffer
- MOV ES,AX
- MOV SI,[BP+X+4] ; where data will come from
- MOV AX,[BP+X+2] ; get y value again
- MOV CL,9
- SHL AX,CL ; get 16 bit pointer for this bank
- ADD AX,[BP+X] ; x value of where on screen added in
- MOV DI,AX ; prepare for movs
- MOV CX,[BP+X+8] ; how many bytes?
- BLAST:
- REP MOVSB
-
- POP ES
- POP DS
- POP BP
- RET
- BANK DB 0FFH ; current bank number
- NO9LINE ENDP
- ENDPS
- END
-