General Information
Author: Clinton Parker
Language: ACTION!
Compiler/Interpreter: ACTION!
Published: April 13, 1983

Copyright 1983 by Action Computer Services last modified April 13, 1983

CIS Notice: I am providing the program for you to look at and maybe help you get started with ACTION!. It was written 'quick and dirty' and as such does not have many comments and is not the best of code in many places. Feel free to show it to anyone you like as long as you keep the copyright notice.

In case you are interested, this is the company logo for Action Computer Services (ACS).

- Clinton Parker 70435,625

PS: Hit ESC to exit program

; CIS Notice:
		 
; I am providing the program for you
; to look at and maybe help you get
; started with ACTION!.  It was
; written 'quick and dirty' and as
; such does not have many comments
; and is not the best of code in many
; places.  Feel free to show it to
; anyone you like as long as you keep
; the copyright notice.

; In case you are interested, this is
; the company logo for Action
; Computer Services (ACS).

;		- Clinton Parker 70435,625

; PS: Hit ESC to exit program


; Copyright 1983 by Action Computer Services

; last modified April 13, 1983

MODULE ; LOGO.ACT

DEFINE RTI = "$40",
		 PHA = "$48",
		 PLA = "$68",
		 TXA = "$8A",
		 TAX = "$AA",
		 TYA = "$98",
		 TAY = "$A8"

BYTE start
BYTE ARRAY display
CARD ARRAY yLoc(96)


PROC NMI()
  BYTE color, cnt
  BYTE COLPF1=$D017, WSYNC=$D40A,
		 VCOUNT=$D40B, COLPF2=$D018,
		 COLPF0=$D016
  BYTE ARRAY col(0)=[$68 $C $96 $38]

  [PHA TXA PHA TYA PHA]

  IF VCOUNT=7 THEN
	 color = start
	 start = start - 1
	 IF (start&$1F)=0 THEN cnt = cnt + 1 FI
  FI

  color = color - 2
  WSYNC = 1
  COLPF0 = color
  COLPF1 = color
  COLPF2 = col((cnt + VCOUNT) & 3)
[PLA TAY PLA TAX PLA RTI]


PROC Background()
  BYTE COLBK=$D01A, VCOUNT=$D40B, WSYNC=$D40A

  [PHA TXA PHA TYA PHA]
  WSYNC = 0
  IF VCOUNT>50 THEN
	 COLBK = 0
  ELSE
	 COLBK = $D6
  FI
[PLA TAY PLA TAX PLA RTI]


PROC Init7()
  BYTE i
  CARD screen, scrloc=88
 
  Graphics(23)
  SetColor(0,2,10)
  SetColor(1,0,12)
  SetColor(2,0,12)

  display = scrloc
  screen = scrloc
  i = 0
  WHILE i<96 DO
	 yLoc(i) = screen
	 screen = screen + 40
	 i = i + 1
  OD
RETURN


PROC Plot7(BYTE x, y)
  BYTE ARRAY pos, bm(0)=[$C0$30$C$3],
	 cm(0)=[$0 $55 $AA $FF]

  pos = yLoc(y)

  pos(x RSH 2) ==% (bm(x&3)&cm(color))
RETURN


PROC VLine(BYTE x, y1, y2)
  WHILE y1#y2 DO
	 Plot7(x, y1)
	 y1 = y1 + 1
  OD
RETURN


PROC HLine(BYTE x1, x2, y)
  WHILE x1#x2 DO
	 Plot7(x1, y)
	 x1 = x1 + 1
  OD
RETURN


PROC DLine(BYTE x1, x2, y1)
  BYTE incr

  incr = 1
  IF x2<x1 THEN incr = $FF FI

  WHILE x1#x2 DO
	 Plot7(x1, y1)
	 x1 = x1 + incr
	 Plot7(x1, y1)
	 y1 = y1 + 1	
  OD
RETURN


PROC Dot(BYTE x, y)
  BYTE i	

  i = 0 
  WHILE i<4 DO
	 Plot7(x+1, y)	Plot7(x+2, y)
	 IF i=1 OR i=2 THEN
		Plot7(x, y)	Plot7(x+3, y)
	 FI
	 y = y + 1
	 i = i + 1
  OD
RETURN


PROC Pad(BYTE x, y)
  BYTE i

  i = 0
  WHILE i<4 DO
	 Plot7(x, y)
	 Plot7(x+1, y)
	 Plot7(x+2, y)
	 y = y + 1
	 i = i + 1
  OD
RETURN


PROC LineX(BYTE x1, y1, x2, y2)
  Plot(x1, y1)
  DrawTo(x2, y2)
  Plot(x1+1, y1)
  DrawTo(x2+1, y2)
RETURN


PROC LineY(BYTE x1, y1, x2, y2)
  Plot(x1, y1)
  DrawTo(x2, y2)
; Plot(x1, y1+1)
; DrawTo(x2, y2+1)
RETURN


PROC Curve(BYTE x, y)
; Plot7(x-1, y-1)
  VLine(x, y-1, y+2)
  VLine(x+1, y-1, y+2)
  VLine(x+2, y-2, y+1)
  y = y - 4
  VLine(x+3, y, y+5)
  VLine(x+4, y, y+4)
  VLine(x+5, y, y+3)
  Plot7(x+6, y)	
  Plot7(x+6, y+1)
RETURN


PROC Draw()
  BYTE i, j, k 
  CARD x

; draw fingers
  i = 0
  x = 160
  WHILE i<15 DO
	 j = 0
	 WHILE j<3 DO
		k = 0
		WHILE k<4 DO
		  display(x+k) = $55
		  k = k + 1
		OD
		x = x + 40
		j = j + 1
	 OD
	 x = x + 120
	 i = i + 1
  OD

; draw the pads
  i = 64
  WHILE i<112 DO
	 Pad(i, 22)
	 i = i + 6
  OD
  Pad(142, 22)
  Pad(70, 62)
  Pad(76, 62)
  Pad(94, 62)
  Pad(106, 62)
  Pad(142, 62)

; finger 1, 15 connections
  i = 0
  WHILE i<4 DO
	 display(204+i) = $AA
	 display(3564+i) = $AA 
	 i = i + 1
  OD
  Dot(31, 3)
  Dot(29, 88)

; finger 2 connection (A3)
  LineX(16, 11, 44, 8)
  HLine(44, 105, 8)
  DLine(105, 107, 8)
  VLine(107, 10, 23)

; finger 3 connection (A2)
  LineX(16, 17, 48, 11)
  HLine(48, 99, 11)
  DLine(99, 101, 11)
  VLine(101, 13, 23)

; finger 4 connection (A1)
  LineX(16, 23, 52, 14)
  HLine(52, 93, 14)
  DLine(93, 95, 14)
  VLine(95, 16, 23)

; finger 5 connection (A0)
  LineX(16, 29, 56, 17)
  HLine(56, 87, 17)
  DLine(87, 89, 17)
  VLine(89, 19, 23)

; finger 6 connection (D4)
  HLine(16, 60, 35)
  LineY(60, 35, 71, 62)
				 
; finger 7 connection (D5)
  HLine(16, 56, 41)
  DLine(56, 58, 41)
  VLine(58, 43, 66)
  DLine(58, 60, 66)
  HLine(60, 76, 68)
  DLine(77, 75, 66)

; finger 8 connection (D2)
  HLine(16, 34, 47)
  DLine(34, 58, 47)
  HLine(58, 79, 71)
  DLine(80, 78, 70)
  VLine(80, 60, 70)
  LineY(80, 60, 71, 25)

; finger 9 connection (D1)
  HLine(16, 34, 53)
  DLine(34, 55, 53)
  HLine(55, 85, 74)
  DLine(86, 84, 73)
  VLine(86, 60, 73)
  LineY(86, 60, 77, 25)

; finger 10 connection (D0)
  HLine(16, 20, 59)
  DLine(23, 19, 56)
  HLine(24, 32, 56)
  DLine(32, 53, 56)
  HLine(53, 91, 77)
  DLine(92, 90, 76)
  VLine(92, 60, 76)
  LineY(92, 60, 83, 25)

; finger 11 connection (D6)
  HLine(16, 24, 65)
  DLine(27, 23, 62)
  Dot(26, 60)

; finger 12 connection (CS)
  DLine(107, 92, 66)
  HLine(50, 92, 80)
  DLine(40, 50, 71)
  HLine(16, 40, 71)
  VLine(95, 66, 78)

; finger 13 connection (+5)
  Plot(16, 76)
  DrawTo(50, 86)
  Plot(16, 77)
  DrawTo(50, 87)
  Plot(16, 78)
  DrawTo(50, 88)
  HLine(50, 149, 86)
  HLine(50, 149, 87)
  HLine(50, 149, 88)
  Curve(149, 86)
  i = 0
  WHILE i<4 DO
	 VLine(153+i, 47, 82)
	 DLine(143+i, 153+i, 37)
	 VLine(143+i, 22, 37)

	 HLine(142, 155, 62+i)

	 VLine(153+i, 5, 17) ; ground pad

	 i = i + 1
  OD
  HLine(143, 146, 21)
  Plot7(141, 63)
  Plot7(141, 64)
  Curve(149, 62)
  HLine(149, 153, 66)
  VLine(152, 66, 70)
  Plot7(151, 67)

; finger 14 connection (cart. select)
  HLine(16, 35, 82)
  HLine(16, 38, 83)
  HLine(16, 41, 84)

; ground pads 
  Dot(153, 3)
  Dot(153, 16)
  HLine(62, 64, 23)
  HLine(62, 64, 24)

RETURN


PROC Letter(BYTE ARRAY pts, BYTE x, y, delay)
  BYTE i, dx, dy

  WHILE 1 DO
	 dx = pts^
	 pts = pts + 1
	 dy = pts^
	 pts = pts + 1
	 IF dx=$FF THEN EXIT FI
	 Plot7(x+dx, y+dy)

;	i = 0
;	WHILE i<delay DO i==+1*1*1 OD
  OD
RETURN


PROC Logo()
  CHAR CH=$2FC
  BYTE x, NMIEN=$D40E, COLBK=$D01A
  CARD j, old, SDLST=$230, VDSLST=$200
  BYTE i
  BYTE ARRAY dlist
  BYTE ARRAY side(0)=[2 0 1 0 0 0 0 1
     0 2 1 2 2 2 2 3 2 4 1 4 0 4 4 0 4
     1 4 2 4 3 4 4 6 0 6 1 6 2 6 3 6 4
     7 0 8 1 8 2 8 3 7 4 10 0 10 1 10
     2 10 3 10 4 11 0 12 0 11 2 11 4 12
     4 18 4 18 3 19 2 19 1 20 0 21 1 21
     2 22 3 22 4 20 2 $FF]
  BYTE ARRAY copyright(0)=[5 0 4 0 3 0
     2 0 1 1 0 2 0 3 0 4 0 5 1 6 2 7 3
     7 4 7 5 7 6 6 7 5 7 4 7 3 7 2 6 1
     4 2 3 2 2 3 2 4 3 5 4 5 $FF]
  BYTE ARRAY A(0)=[0 8 1 8 0 7 1 7 0 6
     1 6 2 6 1 5 2 5 1 4 2 4 1 3 2 3 3
     3 2 2 3 2 2 1 3 1 3 0 4 0 4 1 5 0
     5 1 6 1 5 2 6 2 5 3 6 3 7 3 6 4 7
     4 6 5 7 5 6 6 7 6 8 6 7 7 8 7 7 8
     8 8 3 5 4 5 5 5 $FF]
  BYTE ARRAY C(0)=[7 2 6 2 6 1 5 1 5 0
     4 0 3 0 2 0 2 1 1 1 1 2 0 2 1 3 0
     3 1 4 0 4 0 5 1 5 0 6 1 6 1 7 2 7
     2 8 3 8 4 8 5 8 5 7 6 7 6 6 7 6 
; hier fehlt das Ende
     $FF]
  BYTE ARRAY S(0)=[6 2 5 2 5 1 4 1 4 0
     3 0 2 0 2 1 1 1 0 2 1 2 1 3 2 3 2
     4 3 4 4 4 4 5 5 5 6 6 5 6 5 7 4 7
     4 8 3 8 2 8 2 7 1 7 1 6 0 6 $FF]
  BYTE ARRAY rev(0)=[0 0 0 1 0 2 0 3 0
     4 0 5 0 6 1 6 1 5 1 4 1 3 1 2 1 1
     1 0 2 0 3 0 4 1 4 2 3 3 2 3 3 4 4
     5 4 6 7 0 8 0 7 1 8 1 7 2 8 2 7 3 
     8 3 7 4 8 4 7 5 8 5 7 6 8 6 11 0 
     10 0 9 0 10 3 9 3 11 6 10 6 9 6 14
     0 15 0 14 1 15 1 14 2 15 2 15 3 16
     3 15 4 16 4 16 5 16 6 17 6 17 5 18
     4 18 3 19 2 19 1 19 0 22 5 21 5 21
     6 22 6 27 6 28 6 27 5 28 5 27 4 28
     4 28 3 29 3 28 2 29 2 29 1 29 0 30
     0 30 1 31 2 31 3 32 4 32 5 32 6 29
     5 30 5 31 5 $FF]

  Init7()
  color = 2

  NMIEN = $40
  old = VDSLST
  VDSLST = Background
  dlist = SDLST
  dlist(6) ==% $80
  dlist(97) ==% $80
  NMIEN = $C0

  Draw()

; j = 0
; WHILE j<10000 DO j==+1 OD

  color = 3
  Letter(side, 120, 10, 50)
  Letter(rev, 105, 75, 50)
  Letter(copyright, 96, 41, 100)
  Letter(A, 109, 41, 100)
  Letter(C, 121, 41, 100)
  Letter(S, 132, 41, 100)

  j = 0
  WHILE j<2000 AND CH=$FF DO
	 i = 0
	 WHILE i<100 DO i==+1 OD
	 j = j + 1
  OD

  NMIEN = $40
  VDSLST = NMI

  start = 0

  dlist(0) ==% $80
  dlist(2) ==% $80
  i = 3
  WHILE i<101 DO
	 x = dlist(i)
	 dlist(i) = x % $80 
	 IF x#$D THEN
		i = i + 3
	 ELSE
		i = i + 1
	 FI
  OD

  NMIEN = $C0

; Draw()

  CH = $FF
  WHILE CH#$1C DO
;	SetColor(4, 0, 4)
;	COLBK = 4
  OD

  NMIEN = $40
  VDSLST = old

  GetD(7)
  Graphics(0)
RETURN