Initial release of Maemo 5 port of gnuplot
[gnuplot] / src / corgraph.asm
diff --git a/src/corgraph.asm b/src/corgraph.asm
new file mode 100644 (file)
index 0000000..4dfc9fb
--- /dev/null
@@ -0,0 +1,167 @@
+TITLE  Corona graphics module
+;      Colin Kelley
+;      January 1987
+
+include header.mac
+
+if1
+include lineproc.mac
+endif
+
+
+_text  segment
+
+public _GrInit,_GrReset,_GrOnly,_TxOnly,_GrandTx,_Cor_line,_Cor_mask
+
+corpixel proc near
+       ror word ptr linemask,1
+       jc cont
+       ret
+cont:  push bp
+       mov bp,sp
+       push ax
+       push bx
+       push cx
+       mov es,ScSeg
+       shl bx,1                        ; y
+       mov bx,word ptr LookUp[bx] ; bx has y mem address
+       mov cl,al                       ; x
+       and cl,7
+       shr ax,1
+       shr ax,1
+       shr ax,1                        ; ax /= 8
+       add bx,ax
+       mov al,1
+       shl al,cl                       ; al contains bit mask
+       or byte ptr es:[bx],al
+       pop cx
+       pop bx
+       pop ax
+       pop bp
+       ret
+
+lineproc _Cor_line, corpixel
+
+beginproc _GrInit
+       push bp
+       mov bp,sp
+       push di
+       mov ax, [bp+X]                  ; screen number (0 - 7)
+       mov cl,11
+       shl ax,cl                       ; multiply by 2048 to get segment
+       mov ScSeg,ax                    ; save segment for later
+       push ax
+       mov es, ax
+       xor ax,ax
+       mov di,ax
+       mov cx, 4000h
+       cld
+       rep stosw
+       pop cx
+       call near ptr GrAddr
+       mov ax,es
+       pop di
+       pop bp
+       ret
+_GrInit        endp
+
+beginproc _GrReset
+       mov cx, 0
+       call near ptr GrAddr
+       ret
+_GrReset endp
+
+GrAddr proc near
+       mov dx,3b4h                     ; address of 6845
+       mov al,0ch                      ; register 12
+       out dx,al
+       inc dx
+       mov al,ch                       ; Graphics Segment High
+       out dx,al
+       dec dx
+       mov al,0dh                      ; register 13
+       out dx,al
+       mov al,cl                       ; Graphics Segment Low
+       inc dx
+       out dx,al
+       ret
+GrAddr endp
+
+beginproc _GrOnly
+       mov dx,3b8h
+       mov al,0a0h
+       out dx,al
+       ret
+_GrOnly        endp
+
+beginproc _TxOnly
+       mov dx,3b8h
+       mov al,28h
+       out dx,al
+       ret
+_TxOnly        endp
+
+beginproc _GrandTx
+       mov dx,3b8h
+       mov al,0a8h
+       out dx,al
+       ret
+_GrandTx endp
+
+beginproc _Cor_mask
+       push bp
+       mov bp,sp
+       mov ax,[bp+x]                   ; mask
+       mov linemask,ax
+       pop bp
+       ret
+_Cor_mask endp
+
+corpixel endp
+
+_text  ends
+
+_data  segment
+linemask dw -1
+ScSeg  dw 0
+_data  ends
+
+const  segment
+
+K      equ 1024
+
+mem_mac        MACRO x
+       dw x,2*K+x,4*K+x,6*K+x,8*K+x,10*K+x,12*K+x,14*K+x,16*K+x
+       dw 18*K+x,20*K+x,22*K+x,24*K+x
+       ENDM
+LookUp equ $
+       mem_mac 0
+       mem_mac 80
+       mem_mac (80*2)
+       mem_mac (80*3)
+       mem_mac (80*4)
+       mem_mac (80*5)
+       mem_mac (80*6)
+       mem_mac (80*7)
+       mem_mac (80*8)
+       mem_mac (80*9)
+       mem_mac (80*10)
+       mem_mac (80*11)
+       mem_mac (80*12)
+       mem_mac (80*13)
+       mem_mac (80*14)
+       mem_mac (80*15)
+       mem_mac (80*16)
+       mem_mac (80*17)
+       mem_mac (80*18)
+       mem_mac (80*19)
+       mem_mac (80*20)
+       mem_mac (80*21)
+       mem_mac (80*22)
+       mem_mac (80*23)
+       mem_mac (80*24)
+
+const  ends
+
+       end