{ Level 1 graphics routine specs added }    %end %of %list

@16_C00000%integerarray FRAME(0:32767)
@16_C20000%byte ENABLE REG
@16_C20001%byte COLOUR REG
@16_C20002%short ORIGIN REG

%constinteger YPIXELS=512, XPIXELS= 688
%constinteger BLACK=0,RED=1,GREEN=2,BLUE=4
%constinteger YELLOW=red+green,MAGENTA=red+blue,CYAN=blue+green
%constinteger WHITE=red+green+blue

%routine SET OFFSET(%integer x,y)
  origin reg = (x)>>4&63+(y-1+ypixels)<<6
%end

%routine SET COLOUR(%integer c)
  colour reg = c
%end

%routine SETUP GRAPHICS
!@16_480000%short MAPREG4
!  mapreg4 = 16_40; !Map reg 4 -> 004xxxxx
  enable reg = 15
  set offset(0,0)
  set colour(white)
%end

@16_11B4%routine PLOT(%integer x,y)
@16_1170%routine LINE(%integer x1,y1,x2,y2)
@16_11A8%routine FILL(%integer x1,y1,x2,y2)

! The following routines are special, since the primitive version require
! that all the parameters are held in registers, which the compiler won't do.
%routine paint(%integer%name s, %record(*)%name ll, tr, %integer st, be)
  *move.l d5,-(sp)
  *move.l d0,d4
  *move.l d1,d5
  *move.l (a1)+,d0
  *move.l (a1),d1
  *move.l (a2)+,d2
  *move.l (a2),d3
  *move.l #16_11a0,a1
  *jsr    (a1)
  *move.l (sp)+,d5
%end

%routine triangle(%record(*)%name p1,p2,p3)
  *move.l d5,-(sp)
  *move.l (a0)+,d0
  *move.l (a0),d1
  *move.l (a1)+,d2
  *move.l (a1),d3
  *move.l (a2)+,d4
  *move.l (a2),d5
  *move.l #16_1178,a0
  *jsr (a0)
  *move.l (sp)+,d5
%end

%routine trapeze(%record(*)%name s1,s2)
  *move.l d5,-(sp)
  *move.l (a0)+,d0
  *move.l (a0)+,d1
  *move.l (a0),d2
  *move.l (a1)+,d3
  *move.l (a1)+,d4
  *move.l (a1),d5
  *move.l #16_1174,a0
  *jsr (a0)
  *move.l (sp)+,d5
%end

%list
