add example action program

This commit is contained in:
Greg Gauthier 2025-01-17 22:12:50 +00:00
parent 80d00ae1c3
commit c11b09ce3b
2 changed files with 499 additions and 0 deletions

View File

@ -3,3 +3,500 @@
[**Video Series**](https://rumble.com/playlists/ZLa9d1onaE0) [**Video Series**](https://rumble.com/playlists/ZLa9d1onaE0)
This series is ongoing. It began as an attempt to teach myself Action!, but has evolved into a continuous thing. My next extension to this project will involve [Thomas Cherryholmes Fujinet!](https://fujinet.online/) Keep an eye on this page, as I will be adding explanations, code samples, and other resource links here, to support the series. This series is ongoing. It began as an attempt to teach myself Action!, but has evolved into a continuous thing. My next extension to this project will involve [Thomas Cherryholmes Fujinet!](https://fujinet.online/) Keep an eye on this page, as I will be adding explanations, code samples, and other resource links here, to support the series.
---
**Print the Action! Language Logo**
<pre class="atari">
; 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
</pre>

View File

@ -74,4 +74,6 @@ I have a love-hate relationship with BASIC. It's easy to get started, it's diffi
190 PRINT INT(P) 190 PRINT INT(P)
200 IF P > 0 THEN 90 200 IF P > 0 THEN 90
210 END 210 END
</pre> </pre>