; GT40 demo program.
; Jim Darby, June 1988.

; Constants about machine.

COREND	= 8.*1024.	; First unusable word
WIDTH	= 1024.		; Height of display
HEIGHT	= 768.		; Width of display

; Address of registers.

DPC     = 172000        ; VT40 Program counter
DSR     = 172002        ; VT40 Status register
XSR     = 172004        ; X status register
YSR     = 172006        ; Y status register

; Recommended mnemomics

CHAR    = 100000        ; Character mode
SHORTV  = 104000        ; Short vector mode
LONGV   = 110000        ; Long vector mode
POINT   = 114000        ; Point mode
GRAPHX  = 120000        ; Graphplot X mode
GRAPHY  = 124000        ; Graphplot Y mode
RELATV  = 130000        ; Relative point mode

INT0    = 2000          ; Intensity modes
INT1    = 2200
INT2    = 2400
INT3    = 2600
INT4    = 3000
INT5    = 3200
INT6    = 3400
INT7    = 3600

LPOFF   = 100           ; Light pen off
LPON    = 140           ; and on

BLKOFF  = 20            ; Blink off
BLKON   = 30            ; and on

LINE0   = 4             ; Solid line
LINE1   = 5             ; Long dash
LINE2   = 6             ; Short dash
LINE3   = 7             ; Dot dash

DJMP    = 160000        ; Display jump
DNOP    = 164000        ; Display NOP

STATSA  = 170000        ; Load status A
DSTOP   = 173400        ; Display stop and interrupt

SINON   = 1400          ; Stop interrupt on
SINOFF  = 1000          ; Stop interrupt off
LPLITE  = 200           ; Light pen hit on
LPDARK  = 300           ; and off

ITAL0   = 40            ; Italics off
ITAL1   = 60            ; and on

SYNC    = 4             ; Halt and resume in Sync

STATSB  = 174000        ; Load status B
INCR    = 100           ; Graphplot increment

INTX    = 40000         ; Intensify vector or point
MAXX    = 1777          ; Max delta-x
MAXY    = 1377          ; Max delta-y

MINUSX  = 20000         ; -ve delta-x
MINUSY  = 20000         ; -ve delta-y

MAXSX   = 17600         ; Max delta-x in short mode
MAXSY   = 77            ; Max delta-y

MISVX   = 20000         ; -ve delta-x
MISVY   = 100           ; -ve delta-y

        .PSECT

;       Simple PDP-11 program

	MOV	#COREND-2,SP	; Set up stack
	MOV	#INTR,@#320	; Set up INTR routine
	MOV	#5,R3
	MOV	R3,R2

LOOP:   MOV     #DPROG,@#DPC    ; Start graphics processor
	WAIT			; Mouch about...
	
	SUB	#1,R2
	BNE	LOOP
	MOV	R3,R2
	MOV	MARTX,R1	; Where is message?
	BEQ	HACKIT
	CMP	R1,#WIDTH
	BNE	DOIT
HACKIT:	NEG	XINC
	MOV	MARTY,R4
	BEQ	HACKY
	CMP	R4,#HEIGHT
	BNE	DOY
HACKY:	NEG	YINC
DOY:	ADD	YINC,MARTY
DOIT:	ADD	XINC,MARTX
	BR	LOOP

INTR:	RTI			; Lots to do!

;       Display program

DPROG:

        ; Set up, point mode, intensity 4, no light pen or
        ; blink and solid lines. Move to (500, 500). Enter
        ; long vector mode

        POINT+INT2+LPOFF+BLKOFF+LINE0
        STATSA+SINOFF+LPDARK
        
DLOOP:

        POINT
        811.
        384.
        LONGV
        INTX+149.+MINUSX
        259.
        INTX+300.+MINUSX
        0.
        INTX+150.+MINUSX
        259.+MINUSY
        INTX+149.
        260.+MINUSY
        INTX+300.
        0.
        INTX+150.
        260.

	POINT
	440.
	420.
	

        STATSA+ITAL1
        CHAR+BLKON

	.ASCII 'Hello Martin! '


	POINT+BLKOFF
MARTX:	450.
MARTY:	350.

	STATSA+ITAL0
	CHAR

	.ASCII 'From Jim....'
	        
	DSTOP

XINC:	.WORD	1
YINC:	.WORD	1

        .END
