@LE}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!1  Y0@R !L` D  C D     %1 Udߥ$9%: !0 S$% DD˙`  }J)Lr ;***************************;* ACTION! runtime package *;* Jeff Reister 4/18/87 *;* 400 S LaVenture #83 *;* Mt V}ernon, WA 98273 *;***************************PROC _CPYPRM=*()SET $4EE = _CPYPRM;Called when subroutine has more;than }2 bytes of parameters.[$85$A0$86$A1$84$A2$18$68$85$84$69$03$A8$68$85$85$69$00$48$98$48$A0$01$B1$84$85$82$C8$B1$84$85$83$C8}$B1$84$A8$B9$A0$00$91$82$88$10$F8$60]PROC _CHGSGN=*();utility for math routines.[$85$C0$86$C1$38$A9$00$E5$C0$48$A9$00$E}5$C1$AA$68$60]PROC _FIXSGN=*();utility for math routines.[$86$C2$E0$00$10$03$20 _CHGSGN $85$82$86$83$A5$85$45$C2$85$C2$A }6$85$10$09$A5$84$20 _CHGSGN $85$84$86$85$60]PROC _FIXRES=*();utility for math routines.[$A5$86$A6$87$A4$C2$10$03$4C _CHG }SGN$60]PROC _MUL=*()SET $4E8 = _MUL;integer multiplication.[$20 _FIXSGN $A9$00$85$86$85$87$A5$82$D0$04$A5$83$F0$22$A5$ }84$D0$04$A5$85$F0$1A$46$85$66$84$90$0D$18$A5$86$65$82$85$86$A5$87$65$83$85$87$06$82$26$83$38$B0$D6$4C _FIXRES]PROC _DIV= }*()SET $4EA = _DIV;integer division.[$20 _FIXSGN $A9$00$85$86$85$87$85$C1$A9$01$85$C0$A5$82$D0$04$A5$83$F0$5F$A5$84$D0$0 }4$A5$85$F0$57$A5$82$C5$84$A5$83$E5$85$90$0F$A5$C1$30$0B$06$84$26$85$06$C0$26$C1$38$B0$E7$A5$C0$D0$04$A5$C1$F0$36$A5$82$D0$}04$A5$83$F0$2E$A5$82$C5$84$A5$83$E5$85$90$19$38$A5$82$E5$84$85$82$A5$83$E5$85$85$83$A5$86$05$C0$85$86$A5$87$05$C1$85$87$4}6$85$66$84$46$C1$66$C0$38$B0$C2$4C_FIXRES]PROC _MODOP=*()SET $4EC = _MODOP;MOD operation. Actually just;remainder of di}vision.[$20 _DIV $A5$82$A6$83$60]PROC _RSHOP=*()SET $4E6 = _RSHOP;RSH operation.[$A4$84$F0$0A$86$86$46$86$6A$88$D0$FA$}A6$86$60]PROC _LSHOP=*()SET $4E4 = _LSHOP;LSH operation.[$A4$84$F0$0A$86$86$0A$26$86$88$D0$FA$A6$86$60]PROC _ERROU=*(});Error routine.[$A9$70$AA$A9$0C$9D$42$03$20$56$E4$8A$38$E9$10$D0$F1$6C$0A$00]PROC _ERRVEC=*()[_ERROU]PROC _DEVIC=*()}[$00]MODULECARD Error=_ERRVECBYTE device=_DEVICPROC _GOCIO=*();JSR to CIO routine and check;for errors.[$20$56$E4$1}0$1A$C0$88$F0$06$68$68$98$6C _ERRVEC $48$8A$48$4A$4A$4A$4A$AA$A9$01$9D$C0$05$68$AA$68$60]PROC _LODCHN=*();Check A reg fo}r illegal IOCB #.;If ok, X reg = A reg * 16.[$C9$08$90$07$68$68$A9$86$6C _ERRVEC$0A$0A$0A$0A$AA$60]PROC _STONAM=*();I/O} utility.[$18$69$01$9D$44$03$98$69$00$9D$45$03$60]PROC _SHFTR=*();I/O utility.[$48$8A$A8$68$AA$AD _DEVIC $60]PROC _CL}REOL=*();Clear EOL flag.[$48$A9$00$85$A5$68$60]PROC _SETEOL=*();Set EOL flag.[$48$A9$01$85$A5$68$60]PROC _PRECON=*()};I/O utility.[$8A$48$98$AA$68$A0$03$84$A3$A0$FD$60]PROC _DOPRNT=*();Print a string.[$86$A3$84$A4$20 _LODCHN $A9$00$9D$49}$03$A8$B1$A3$F0$1A$9D$48$03$18$A5$A3$69$01$9D$44$03$A5$A4$69$00$9D$45$03$A9$0B$9D$42$03$20 _GOCIO $A5$A5$F0$12$A9$00$9D$4}8$03$9D$49$03$A9$0B$9D$42$03$A9$9B$20 _GOCIO $60]PROC StrC=*(CARD c, s)[$85$D4$86$D5$84$A2$20$AA$D9$20$E6$D8$A0$00$B1$F3}$30$06$C8$91$A2$38$B0$F6$29$7F$C8$91$A2$98$A0$00$91$A2$60]PROC StrB=*(BYTE b CARD s)[$84$A3$48$8A$A8$A2$00$68$4C StrC]P}ROC StrI=*(INT i CARD s)[$E0$00$30$03$4C StrC $49$FF$85$A2$8A$49$FF$AA$E6$A2$D0$01$E8$A5$A2$20StrC $A0$00$18$B1$A2$69$01}$91$A2$A8$88$B1$A2$C8$91$A2$88$88$D0$F7$C8$A9$2D$91$A2$60]PROC _DOPRNC=*();Print a CARD.[$48$20 _PRECON $20 StrC $68$A2}$FD$A0$03$4C _DOPRNT]PROC DOPRNI=*();Print an INT.[$48$20 _PRECON $20 StrI $68$A2$FD$A0$03$4C _DOPRNT]PROC PrintCD=*(}BYTE d CARD c)[$20 _CLREOL $4C _DOPRNC]PROC PrintC=*(CARD c)[$20 _SHFTR $4C PrintCD]PROC PrintCDE=*(BYTE d CARD c)[$20 } _SETEOL $4C _DOPRNC]PROC PrintCE=*(CARD c)[$20 _SHFTR $4C PrintCDE]PROC PrintBD=*(BYTE d, b)[$A0$00$4C PrintCD]PROC !}PrintB=*(BYTE b)[$20 _SHFTR $4C PrintBD]PROC PrintBDE=*(BYTE d, b)[$A0$00$4C PrintCDE]PROC PrintBE=*(BYTE b)[$20 _SHFT"}R $4C PrintBDE]PROC PrintID=*(BYTE d INT i)[$20 _CLREOL $4C _DOPRNI]PROC PrintI=*(INT i)[$20 _SHFTR $4C PrintID]PROC #}PrintIDE=*(BYTE d INT i)[$20 _SETEOL $4C _DOPRNI]PROC PrintIE=*(INT i)[$20 _SHFTR $4C PrintIDE]PROC PrintD=*(BYTE d CAR$}D s)[$20 _CLREOL $4C _DOPRNT]PROC Print=*(CARD s)[$20 _SHFTR $4C PrintD]PROC PrintDE=*(BYTE d CARD s)[$20 _SETEOL $4C %}_DOPRNT]PROC PrintE=*(CARD s)[$20 _SHFTR $4C PrintDE]PROC _HEXSTR=*();Convert a number to a hex string;for PrintF.[$8&}5$84$86$85$A9$FD$85$A2$A9$03$85$A3$A0$00$A9$05$91$A2$C8$A9$24$91$A2$A9$00$A2$04$06$84$26$85$2A$CA$D0$F8$69$30$C9$3A$90$02$'}69$06$C8$91$A2$C0$05$D0$E5$60]PROC PrintF=*(CARD s,a,b,c,d,e,f,g)[$85$82$86$83$84$A2$AD _DEVIC $0A$0A$0A$0A$85$C1$A0$00$(}84$87$84$C0$B1$82$F0$4C$85$86$E6$C0$F0$46$A4$C0$C4$86$F0$02$B0$3E$B1$82$C9$25$D0$3E$E6$C0$C8$C4$86$F0$02$B0$35$B1$82$C9$25)}$F0$2F$C9$45$F0$29$A8$A6$87$E0$0E$B0$D4$B5$A2$48$B5$A3$E8$E8$86$87$AA$68$C0$43$F0$15$C0$49$F0$34$C0$48$F0$3C$C0$53$F0$3F$*}38$B0$1D$60$38$B0$B2$A9$9B$A8$A6$C1$A9$00$9D$48$03$9D$49$03$A9$0B$9D$42$03$98$20 _GOCIO $38$B0$E4$A0$03$84$A3$A0$FD$20 Str+}C $38$B0$0F$A0$03$84$A3$A0$FD$20 StrI $38$B0$03$20 _HEXSTR $A9$FD$A2$03$85$84$86$85$A6$C1$A9$00$9D$49$03$A8$B1$84$F0$B5$9,}D$48$03$18$A5$84$69$01$9D$44$03$A5$85$69$00$9D$45$03$A9$0B$9D$42$03$20_GOCIO $38$B0$98]PROC PutD=*(BYTE d, c)[$86$A0$20 -}_LODCHN $A9$00$9D$48$03$9D$49$03$A9$0B$9D$42$03$A5$A0$20 _GOCIO$60]PROC PutDE=*(BYTE d)[$A2$9B$4C PutD]PROC Put=*(BYTE.} c)[$AA$AD _DEVIC $4C PutD]PROC PutE=*()[$A9$9B$4C Put]BYTE FUNC ValB=*(CARD a)CARD FUNC ValC=*(CARD a)INT FUNC ValI=/}*(CARD a)[$85$A2$86$A3$A9$00$85$A0$85$A1$85$A5$A8$B1$A2$85$A4$C8$B1$A2$C9$20$F0$F9$C9$2D$D0$0B$C6$A5$C8$C4$A4$F0$02$B0$310}$B1$A2$38$E9$30$90$2A$C9$0A$B0$26$48$06$A0$26$A1$A5$A0$A6$A1$0A$26$A1$0A$26$A1$18$65$A0$85$A0$8A$65$A1$85$A1$18$68$65$A0$81}5$A0$90$CD$E6$A1$38$B0$C8$A5$A5$F0$0D$38$A9$00$E5$A0$85$A0$A9$00$E5$A1$85$A1$60]PROC _DOINPT=*();Called by all input rou2}tines.[$86$A4$84$A5$20 _LODCHN $18$A5$A4$69$01$9D$44$03$A5$A5$69$00$9D$45$03$A5$A3$F0$18$9D$48$03$A9$00$9D$49$03$A9$05$9D3}$42$03$20 _GOCIO $BD$48$03$F0$03$38$E9$01$A0$00$91$A4$A5$A6$F0$07$A5$A4$A6$A5$4C ValC $60]BYTE FUNC InputBD=*(BYTE d)CAR4}D FUNC InputCD=*(BYTE d)INT FUNC InputID=*(BYTE d)[$48$A9$78$85$A3$A9$01$85$A6$68$A2$FD$A0$03$4C _DOINPT]BYTE FUNC Input5}B=*()CARD FUNC InputC=*()INT FUNC InputI=*()[$AD _DEVIC$4C InputCD]PROC InputMD=*(BYTE d CARD s BYTE l)[$48$A9$00$85$A66}$68$4C _DOINPT]PROC InputSD=*(BYTE d CARD s)[$48$A9$FF$85$A3$68$4C InputMD]PROC InputS=*(CARD s)[$20 _SHFTR $4C InputSD7}]CHAR FUNC GetD=*(BYTE d)[$20 _LODCHN $A9$00$9D$48$03$9D$49$03$A9$07$9D$42$03$20 _GOCIO$85$A0$60]PROC Open=*(BYTE d CA8}RD s BYTE m, a)[$86$A1$20 _LODCHN $A5$A1$20 _STONAM $A5$A3$9D$4A$03$A5$A4$9D$4B$03$A9$03$9D$42$03$20 _GOCIO $8A$4A$4A$4A$9}4A$AA$A9$00$9D$C0$05$60]PROC Close=*(BYTE d)[$20 _LODCHN $A9$0C$9D$42$03$20_GOCIO $60]PROC XIO=*(BYTE d,z,c,a1,a2 CARD :}s)[$20 _LODCHN $98$9D$42$03$A5$A3$9D$4A$03$A5$A4$9D$4B$03$A5$A5$A4$A6$20_STONAM $20 _GOCIO $60]PROC Note=*(BYTE d CARD s;}, o)[$86$A1$84$A2$20 _LODCHN $A9$26$9D$42$03$20 _GOCIO $A0$00$BD$4C$03$91$A1$BD$4E$03$91$A3$BD$4D$03$C8$91$A1$60]PROC Po<}int=*(BYTE d CARD s BYTE o)[$86$A1$20 _LODCHN $A5$A1$9D$4C$03$98$9D$4D$03$A5$A3$9D$4E$03$A9$25$9D$42$03$20 _GOCIO $60]PR=}OC Graphics=*(BYTE m)[$48$A2$60$A9$0C$9D$42$03$20$56$E4$68$9D$4B$03$49$10$09$0C$9D$4A$03$A9$53$85$A0$A9$3A$85$A1$A9$A0$9D$>}44$03$A9$00$9D$45$03$A9$03$9D$42$03$20 _GOCIO$60]PROC SetColor=*(BYTE r, h, l)[$C9$05$B0$13$85$A0$8A$0A$0A$0A$0A$85$A1$?}98$29$0F$05$A1$A6$A0$9D$C4$02$60]PROC Position=*(CARD x BYTE y)[$85$55$86$56$84$54$60]PROC Plot=*(CARD x BYTE y)[$20 Po@}sition $A9$06$AE$FD$02$4CPutD]PROC DrawTo=*(CARD x BYTE y)[$20 Position $A2$60$A9$11$9D$42$03$AD$FB$02$8D$FD$02$20 _GOCIA}O$60]PROC Fill=*(CARD x BYTE y)[$20 Position $A2$60$A9$12$9D$42$03$AD$FB$02$8D$FD$02$20 _GOCIO$60]BYTE FUNC Locate=*(B}CARD x BYTE y)[$20 Position $A9$06$4C GetD]PROC Sound=*(BYTE c, p, d, v)[$C9$04$B0$25$86$A1$0A$AA$A9$00$8D$08$D2$A9$03$8C}D$0F$D2$A5$A3$29$0F$85$A3$98$29$0E$0A$0A$0A$0A$05$A3$9D$01$D2$A5$A1$9D$00$D2$60]PROC SndRst=*()[$A9$00$A2$07$9D$00$D2$CAD}$10$FA$60]BYTE FUNC Paddle=*(BYTE p)[$29$07$AA$BD$70$02$85$A0$60]BYTE FUNC PTrig=*(BYTE p)[$29$07$AA$BD$7C$02$85$A0$60]E}BYTE FUNC Stick=*(BYTE p)[$29$03$AA$BD$78$02$85$A0$60]BYTE FUNC STrig=*(BYTE p)[$29$03$AA$BD$84$02$85$A0$60]INT FUNC F}SCompare=*(CARD s1, s2)[$85$A4$86$A5$84$A2$A0$00$84$A0$84$A1$B1$A4$85$A6$B1$A2$85$A7$C4$A6$F0$15$C4$A7$F0$11$C8$B1$A4$D1$AG}2$F0$F1$90$03$E6$A0$60$C6$A0$C6$A1$60$A5$A6$C5$A7$F0$F9$B0$F0$90$F1]PROC SCopy=*(CARD d, s)[$85$A0$86$A1$84$A2$A0$00$B1$H}A2$A8$B1$A2$91$A0$C0$00$F0$04$88$38$B0$F4$60]PROC SCopyS=*(CARD d, s BYTE b, e)[$85$A0$86$A1$84$A2$A0$00$84$A6$B1$A2$C5$I}A5$B0$02$85$A5$A5$A4$F0$15$C5$A5$F0$02$B0$0F$A4$A4$E6$A4$B1$A2$E6$A6$A4$A6$91$A0$38$B0$E7$A5$A6$A0$00$91$A0$60]PROC SAssJ}ign=*(CARD d, s BYTE b, e)[$85$A0$86$A1$84$A2$A5$A4$F0$3B$C5$A5$F0$02$B0$35$85$A7$C6$A7$A0$00$84$A8$B1$A0$85$A9$B1$A2$85$AK}A$A5$A7$C5$A5$B0$15$A5$A8$C5$AA$B0$0F$E6$A8$A4$A8$B1$A2$E6$A7$A4$A7$91$A0$38$B0$E5$A5$A7$C5$A9$90$04$A0$00$91$A0$60]BYTEL} FUNC Rand=*(BYTE r)[$85$A2$C6$A2$A9$01$C5$A2$B0$05$38$2A$38$B0$F7$85$A3$AD$0A$D2$25$A3$C5$A2$F0$04$90$02$B0$F3$85$A0$60]M}PROC Poke=*(CARD a BYTE v)[$85$A0$86$A1$98$A0$00$91$A0$60]PROC PokeC=*(CARD a, v)[$20 Poke $C8$A5$A3$91$A0$60]BYTE FUNN}C Peek=*(CARD a)CARD FUNC PeekC=*(CARD a)[$85$A2$86$A3$A0$00$B1$A2$85$A0$C8$B1$A2$85$A1$60]PROC SetBlock=*(CARD a, l, v)O}[$85$A0$86$A1$84$A2$A0$00$A5$A2$D0$04$A5$A3$F0$16$A5$A4$91$A0$C8$D0$02$E6$A1$C6$A2$A5$A2$C9$FF$D0$E7$C6$A3$38$B0$E2$60]P}PROC Zero=*(CARD a, l)[$48$A9$00$85$A4$68$4C SetBlock]PROC MoveBlock=*(CARD d, s, l)[$85$A0$86$A1$84$A2$A0$00$A5$A4$D0$04Q}$A5$A5$F0$18$B1$A2$91$A0$C8$D0$04$E6$A1$E6$A3$C6$A4$A5$A4$C9$FF$D0$E5$C6$A5$38$B0$E0$60]MODULEd$<_CPYPRM$_CHGSGN$_FIXSGN,$$_FIXRES<$$_MULK$$,$_DIVZ$$,$_MODOPi$K$_RSHOPv$S}_LSHOP$_ERROU$_ERRVEC$$_DEVIC$Error$$device$$_GOCIO$$_LODCHN$$_STONAMT}$_SHFTR%$_CLREOL%_SETEOL"%_PRECON0%_DOPRNTB%$$StrCM%StrBZ%B%StrIg%B%_DOPRNCU}{%"%B%0%_DOPRNI%"%Z%0%PrintCD%%g%PrintC%$%PrintCDE%%g%PrintCE%$%PrintBD%%PrintBV}%$%PrintBDE &%PrintBE&$%PrintID-&%{%PrintI>&$&PrintIDEQ&%{%PrintIEc&$>&PrintDW}t&%0%Print&$c&PrintDE&%0%PrintE&$&_HEXSTR&PrintF&$$B%Z%&PutD&$$PutDE&&X}Put&$&PutE'&ValB'ValC'ValI%'_DOINPT9'$$'InputBDI'%'InputCDY'%'InputIDi'Y}%'InputBz'$I'InputC'$I'InputI'$I'InputMD'%'InputSD''InputS'$'GetD'$$OpenZ}'$$$Close'$$XIO ($$$Note($$Point,($$Graphics=($SetColorL(Position[(Plo[}tj(L(&DrawTo{(L($Fill(L($Locate(L('Sound(SndRst(Paddle(PTrig(Stick(ST\}rig(SCompare(SCopy)SCopyS )SAssign)Rand&)Poke1)PokeC?)&)PeekJ)PeekCV)Se]}tBlocke)Zeror)V) MoveBlock'j(${(',(i'9'z'I''Y''''(r) ('((?)J)[((&)1)L(t&%%% &%%%%c&&&&-&^}&>&Q&&&&&) )(()(V)=((((M%B%Z%''''e)K$v$Z$<$i$$)hihiHHȱȱ` Fj_}`p B V8l T* Vhhlh*HHJJJJhh`hhlh* `iDiE`Hhj*`Hh` *IH`}iDiE B k*HI B k*`ԆՄ ؠ0ȑ8)ȑ`0L*II襢 *iȑȩa}-` *L* *LQ+ȩ$&*i0:iȑ`j* LFĆ>%>Ć5%b}/E)ԵH膇hCI4H2L2=22>2=2LA32M2 2M2L!322h2g2 k2222 2L!3q}`g2m2h2m22222`9LK3G3G3AL_3FG3G30Lx39G3Lx3``3L3}3}3I_%}3AL3Z}3r}}3aL3z}3L3``60]L333?2 23L3`LX63L43I=L33L43I*L4L 4_MUL42?s} -`L43I/LA4L04_DIV4+2? -`L43I$LS43L43I'Le43L43I"Lw43L43I;L43L43 ~3Lt}4333?23LX63IL43I*L4>23=23LX63IL43 H3L4>23=23LX63IL 53LX63Iu}L)53I"L&53LX63ILX53I"LE53LU5>23=23LX63ILt53ILq53LX63ILX63 ~3 3 H3v}L5333?2LX6>23=23?2L5MOD52? -L5L5_MODOP5բ2? -LW6L5LSH52? -L#6Lw}6_LSHOP6 2? -LW6L*6RSH6&2? -LW6LJ6_RSHOP6C2? -`L3`l ROLe6`6Lw6 Error #%U%E`66k +`6x}IL6a6a6L6a6 -a6L6 ]6L6\6`$A5$L666\666 Z-\6L(7>2=2L(7 3?2L%72? y}-.666 6L%766 */L6 -`<,.7ose=*(BYTE d)(7&i7[$20 _<HN $A9$0L_7 *U7U7V7Y7Z7Z7MY7Lz}7Y7L8L8Z7U7mZ7V7iI L8Z7[7Y777[7L8$8[7Z7iU7eV7iU7m[7V7i[7L{}78Y7Z7iY7L8Ly7Y7_Y7IL?8U7iV7iI:>Y7L8U7iV7iI:L8U7iV7iI:L|}8Y7[7Y7iY7[7L8[7iU7eV7iU7m[7V7i8[7[7L8L8D1:8ЮV7U7 -U7V7Y7}}[7U7V7[7U7m[7V7iI Lt9U7m[7V7i.[7X7[7W7X7[7qW7V7U7 -L9L9~}U7m[7V7iI.L9L9[7L9`L9d6i*c6h*P7Q7/7.7T7T7L:T7i mP7*(mQ7T7 mP7}*(mQ7iȱiT7L9 )0`0FL:L::}Ρ:" W+Lh:#(for public domain runtime library):D W+ }},L:Enter input file names ...:u W+T7T7 L ;T7 mP7*(mQ7::? v,:: >-::L;L:A}CT::: \7T7L;L ;L:T7LP;L0;Enter output file name ...; W+? v,72 >-27LP;T7`6LU;Lh;%EMore (Y/N)?%E;}X + -Lz;K:;w Z- D-Q; -Q;IN Q;InL; ]6`TL; 9 :T7L< },;T7;;ͯ;LO<$L;Scanning} %S%E8; mP7*(mQ7; +8; mP7*(mQ7 6;L;\6Lg<%EWriting %}S%E72XSTRI!STRI}HX*RXVALB!VALN\XVALC!VALNfXVALI!VALNpX*zXRAND!RANDX*XPEEK!PEEKXPEEKC!PEEKXPOKE!POKE}XPOKEC!POKECX*XZERO!ZEROXSETBLOCK!SETBLOCKXMOVEBLOCK!MOVEBLOCKX*XCOPYPARMS!COPYPARMSX*EI } X* X*$ >D:MATH.ASM. >D:IO1.ASM8 >D:IO2.ASMB >D:GRAPHICS.ASML >D:STRING.ASMV >D:MISC.ASM` X*j X*t }BLOCKS~ X* RESIDENT &X* Code to make the runtime package X* resident above DOS. X* DOSINI MEMLO} INITQDOSINI PRESET QDOSINI PRESET Q>4RESET PDOSINI Q>5RESET PDOSINI !SKIP RESET }( SKIPQ>4NEWLO2 PMEMLO< Q>5NEWLOF PMEMLOP :Z NEWLOd n X*x CODEEND (X* CODEEND is the address abo}ve which #X* you must compile your ACTION! #X* program when using RTIME.COM. X* RESIDENT  INIT  X*} @X* --------X* MATH.ASMX* --------X*(X* At the start of an ACTION! program X* put the following SETs ...$ }X*. X* SET $4E4 = (addr of LSH)8 X* SET $4E6 = (addr of RSH)B%X* SET $4E8 = (addr of MULTIPLY)L#X* SET $4EA = (a }ddr of DIVIDE)V X* SET $4EC = (addr of MOD)`X*j"X* Peforms OP0 op OP1 where ...tX*~X* upon callX* OP0 low }byte is in AX* OP0 hi byte is in XX* OP1 is in IR1X*X* upon return&X* result low byte is left in }A%X* result hi byte is left in XX*&X* Works only on INT types so large$X* CARD values ( >32767 ) will be#X* in }terpreted as negative INTs.X*%X* These are the locations used by &X* the math routines in the ACTION!X* cartridge. }X*(IR0;;INT reg 02IR1;;INT reg 1<IR2;;INT reg 2FIR3;;INT reg 3P SGNFLGZX*dX*nX*xBLOCK }S CHNGSGN#X* Change sign of integer in A,XPIR3 &IR3;Q>SIR35Q> SIR3> }7:X*"X*,X*6BLOCKS@JT FIXSGNS^(X* Store OP0 in IR0. Change both OPsh(X* to positive and keep } track of signrX* of result.| &SGNFLG(> IFIXS1 CHNGSGNFIXS1PIR0 &IR0 QIR1 NSGNFLG PSGN }FLG $IR1 IFIXS2QIR1 CHNGSGNPIR1 &IR1 FIXS2:X*&X*0X*:BLOCKSDNX FIXRESb }$X* Get result of * or / from IR2.lX* Change sign if necessary.vQIR2 $IR2 %SGNFLG IFIXR1 !CHNGSGN FIXR }1:X*X*X*BLOCKS MULTIPLYX* OP0 * OP1 FIXSGNS Q>;;Clear result.PIR2  PIR2* }MUL0QIR0;;If OP0=04HMUL1;;or OP1=0 then>QIR0;;done.H FMULENDR MUL1QIR1\ HMUL2f QIR1p FMULENDzMUL2 }VIR1;;If lsb of OP1WIR1;;set thenDMUL3;;add OP0 to ,;;result.QIR2OIR0PIR2 QIR2 OIR0 P }IR2MUL3TIR0;;Multiply OP0UIR0;;by 2 and loop.; EMUL0 MULEND!FIXRES X* X*$ X*. BLOCKS8  }B L DIVIDEV X* OP0 / OP1` FIXSGNSj Q>t PIR2;;Clear result~ PIR2;;and initialize PIR3;;power of 2. } Q> PIR3 QIR0 HDIV0;;If OP0=0 or QIR0;;OP1=0 then FDIVEND;;done. DIV0QIR1 HDIV1 QIR1 FDI }VEND DIV1QIR0;;While OP0>=OP1 RIR1;;and msb of QIR0;;power of 2 SIR1;;clear, shift DDIV2;;OP1 and power }( QIR3;;of 2 left.2 GDIV2< TIR1F UIR1P TIR3Z UIR3d ;n EDIV1x DIV2QIR3;;If power of 2 HDIV3;;= 0 } or OP0 QIR3;;= 0 then done. FDIVEND DIV3QIR0 HDIV4 QIR0 FDIVEND DIV4QIR0;;If OP0>=OP1 RIR1;; }subtract OP1 QIR0;;from OP0 and SIR1;;add power of 2 DDIV5;;to result. ; QIR0 SIR1 PIR0" QIR0, } SIR16 PIR0@ QIR2J LIR3T PIR2^ QIR2h LIR3r PIR2| DIV5VIR1;;Shift OP1 and WIR1;;power }of 2 VIR3;;right. WIR3 ; EDIV2 DIVEND!FIXRES X* X* X* BLOCKS   MOD X* OP0 mod OP }1 DIVIDE QIR0;;Get remainder.& $IR00 :: X*D X*N X*X BLOCKSb l v RSH X* OP0 rsh OP1 %IR1 } FRSHDONE &IR2 RSHLOOPVIR2 W? 1 HRSHLOOP $IR2 RSHDONE: X* X* X* BLOCKS   LSH*  }X* OP0 lsh OP14 %IR1> FLSHDONEH &IR2R LSHLOOPT?\ UIR2f 1p HLSHLOOPz $IR2 LSHDONE: X* X* X* $X* This }routine copies subroutine #X* parameters to an address that #X* is stored 1 byte past the JSR "X* to this routine. The nu }mber %X* of parms is stored 3 bytes past X* the JSR. Called whenever !X* there are more than 2 bytes $X* of parameters }to a subroutine. X*$X* SET $4EE = (addr of COPYPARMS)"X* at start of ACTION! program.X*$"X* The routine in the cart }ridge.X* checks for the break key8X* but this doesn't.BX*LPARMPTRIR1VPARMDESTIR0`ORIGPRMSjX*tBLOC }KS~COPYPARMSPORIGPRMS&ORIGPRMS'ORIGPRMS,7 PPARMPTRO>?7PPARMPTRO }>5 C5%>(Q@PARMPTR72 PPARMDEST<3FQ@PARMPTR7PPPARMDESTZ3dQ@PARMPTR7n?xCPYPRMLPQORIGPR }MS8P@PARMDEST71 ICPYPRMLP: ' X* -------------X* file IO1.ASMX* -------------X*%X* These are the variables used byX* the library routi}nes.$X*. PARMS8RESULTPARMSB EOFLX*V#X* These are the equates for the`X* CIO system.jX*t CIOVV~} ICCOMB ICSTACICBADRDICBLENH ICAX1J ICAX2K ICAX3L ICAX4M ICAX5NX* }COPEN CGETR CGETC CPUTC  CCLOSE  CPOINT% CNOTE&(X*2 EOFERR<BADIOCBFX*P E}OLZX*dIOBUFF;;Use cassetten&X* ;buffer for I/O.xX*X*BLOCKS ERROUTINE}"X* This is the replacable errorX* handling routine.#X* All it does is close channelsX* 1-7 and jump to DOS.X* }DOSVEC X*Q>p ERRLOOP> Q>CCLOSE PICCOM9" CIOV,A6;@S>J HERRLOOPT !@DOSVEC:^X*hX*rX*|}BLOCKS ERROR&X* Storage location for the addressX* of the error routine. ERROUTINEX*X*X*}BLOCKS DEVICE"X* Byte containing the default X* channel number for I/O. &X*0X*:X*DBL}OCKSNXb CALLCIOl$X* JSR CIOV and check for errors.v'X* If error is EOF then set flag for(X* that channel an}d return to caller.%X* If other error then pull return$X* address from stack and jump toX* error routine. CIOV I}CALLEND )>EOFERR FSETEOF77C !@ERROR: SETEOF5A 5V? V?*V?4V?>>HQ>R PEOF9\7f>p}7z CALLEND:X*X*X*BLOCKS LOADCHAN'X* Check A for legal IOCB #. If ok,&X* X=A*16. If not,} pull return addr!X* off stack and jump to errorX* handler.R> DCHANOK 7 7 Q>BADIOCB$ !@ERROR:. CHANOK}T?8 T?B T?L T?V >` :j X*t X*~ X* BLOCKS   STONAME #X* Add 1 to file name pointer in "X* A and Y }and store in ICBADR. , O> PICBADR9 C O> PICBADR9 : X* X* X*( BLOCKS2 < F SHFTRP "}X* Shift X to Y, A to X and putZ X* DEVICE in A.d 5n Ax ? 7 > QDEVICE : X* X* X* BLOCKS  } CLREOL X* Clear the EOL flag. EOLFLGPARMS 5 Q> PEOLFLG" 7, :6 X*@ X*J X*T BLOCKS^ h r} SETEOL| X* Set the EOL flag. 5 Q> PEOLFLG 7 : X* X* X* BLOCKS   PREPCONV $X* Prepa}re for jump to conversion X* routine. A 5& C0 >: 7D %>5IOBUFFN 'PARMSX %>4IOBUFFb :l X*v X* X* X* }BLOCKS   DOPRINT 'X* Called by all the print routines. X* PRTSTRPARMS X* &PRTSTR 'PRTSTR} LOADCHAN Q> PICBLEN9 ? Q@PRTSTR7* FPRNTEOF4 PICBLEN9> ,H QPRTSTRR O>\ PICBADR9f QPRTSTR}p O>z PICBADR9 Q>CPUTC PICCOM9 CALLCIO PRNTEOFQEOLFLG FPRNTEND Q> PICBLEN9 PICBLEN9 }Q>CPUTC PICCOM9 Q>EOL CALLCIO PRNTEND:X*X*X*$%X* PROC StrB(BYTE b, BYTE ARRAY s).%X* PROC StrC(CARD }c, BYTE ARRAY s)8X*BSTRCPTRPARMSLX*VX* These are parts of the OS`$X* floating point package used inj"X* conve}rting numbers to ASCII.tX*~IFP;;INT to FP.FASC;;FP to ASCII. FR0Ԝ INBUFFX*BLOCKS} STRCPFR0 &FR0 'STRCPTR IFP FASC%> STRC1Q@INBUFF7 GSTRC23(P@STRCPTR72;< ESTRC}1F STRC2M>P3ZP@STRCPTR7dCn%>xP@STRCPTR7:X*BLOCKSSTRB'PARMS5A?$}>7 !STRCX*X*X*$X* PROC StrI(INT i, BYTE ARRAY s)"X*,BLOCKS6@J STRI(>T GSTRI1^ !S}TRChSTRI1N>;;Neg so takerPSTRCPTR;;2's complement.|AN>> #STRCPTR HSTRI22#STRI2QSTRCPTR;;Conver}t to str, STRC;;shift result%>;;and add - sign.,Q@STRCPTR7O>P@STRCPTR7?1STRI3Q@STRCPTR7}3&P@STRCPTR701:1D HSTRI3N3XQ> -bP@STRCPTR7l:vX*X*X*X* PROC PrintC(CARD d)#X* PROC PrintCD(BYT}E ch, CARD d)X* PROC PrintCE(CARD d)$X* PROC PrintCDE(BYTE ch, CARD d)X*BLOCKS DOPRNTC5 PRE}PCONV STRC7  $>4IOBUFF %>5IOBUFF  !DOPRINT*X*4BLOCKS>HRPRINTCD CLREOL\ !DOPRNTCfX*p}BLOCKSzPRINTC SHFTR !PRINTCDX*BLOCKSPRINTCDE SETEOL !DOPRNTCX*BL}OCKSPRINTCE SHFTR !PRINTCDEX*$X*.X*8X* PROC PrintB(BYTE d)BX* PROC PrintBD(BYTE ch, d)LX* }PROC PrintBE(BYTE d)VX* PROC PrintBDE(BYTE ch, d)`X*jBLOCKSt~PRINTBD%> !PRINTCDX*BLOCKS}PRINTB SHFTR !PRINTBDX*BLOCKSPRINTBDE%>  !PRINTCDEX*BLOCKS(}2<PRINTBE SHFTRF !PRINTBDEPX*ZX*dX*nX* PROC PrintI(INT d)x"X* PROC PrintID(BYTE ch, INT d)X* PROC Prin}tIE(INT d)#X* PROC PrintIDE(BYTE ch, INT d)X*BLOCKS DOPRNTI5 PREPCONV STRI7 $>4IOBUF}F %>5IOBUFF !DOPRINTX*BLOCKS",PRINTID CLREOL6 !DOPRNTI@X*JBLOCKST^hPRIN}TI SHFTRr !PRINTID|X*BLOCKSPRINTIDE SETEOL !DOPRNTIX*BLOCKSPRINTIE }SHFTR !PRINTIDEX*X*X*X* PROC Print(BYTE ARRAY s)(X* PROC PrintD(BYTE ch, BYTE ARRAY s)&X* PROC PrintE(BYT}E ARRAY s)0)X* PROC PrintDE(BYTE ch, BYTE ARRAY s):X*DBLOCKSNXbPRINTD CLREOLl !DOPRINTvX*BLOC}KSPRINT SHFTR !PRINTDX*BLOCKSPRINTDE SETEOL !DOPRINTX*BLOCKS} PRINTE SHFTR  !PRINTDE*X*4X*>X*HBLOCKSR\f HEXSTRp%X* Convert integer in A and X into}zX* hex string in IOBUFFX*HXSTRGPARMSHEXNUMIR1X* PHEXNUM&HEXNUM Q>4IOBUFF PHXSTRG Q>}5IOBUFFPHXSTRG%>Q> P@HXSTRG73Q> $ P@HXSTRG7$HEXLOOPQ>.$>8HEXROLTHEXNUMBUHEXNUM}LU?V0` HHEXROLjO> 0t R> 9~ DHEXOK O> A 9 HEXOK3 P@HXSTRG7)> HHEXLOOP:X*X*X*}X*)X* PROC PrintF(BYTE ARRAY ctlstr,...) X*!CTRLSTRIR0;;Control string. TMPSTRIR1CTRLLENIR2!PARMNUM}IR2;;Parameter #.(STRINDXIR32TMPCHANIR3<X*FBLOCKSPZdPRINTFPCTRLSTRn&CTRLSTRx '}PARMS QDEVICET?T?T?T? PTMPCHAN%>'PARMNUM;;Parm #.'STRINDX;;ctlstr index.Q@CTRLSTR7 F}PRFENDPCTRLLEN;;ctlstr length.PRFLOOP#STRINDX FPRFEND %STRINDX )CTRLLEN" FPRFCONT1, EPRFEND6PRFCONT1}Q@CTRLSTR7@R> %;;Control char?JHPRFPUT;;No.T #STRINDX^3;;If % is lasth)CTRLLEN;;char in stringrFPRFCONT2;;pri}nt it.| EPRFPUTPRFCONT2Q@CTRLSTR7 R> %;;%? FPRFPUT R> E;;EOL? FPRFEOL?;;Need a parm. $PARMNUM(>;;}>7th parm?.EPRFLOOP;;Yes so ignore.QPARMS95QPARMS922 &PARMNUM>&70)> C;;Char?: FPRFPUTD})> I;;Integer?N FPRFINTX )> H;;Hex?b FPRFHEXl)> S;;String?v FPRFSTR;EPRFCARD;;Card by default. PRFEND:}X* PRFJMP; EPRFLOOPX*PRFEOLQ>EOLPRFPUT?;;Char to put $TMPCHANQ> PICBLEN9PICBLEN9 Q>CP}UTC  PICCOM9C  CALLCIO*;4 EPRFJMP>X*HPRFCARD%>5IOBUFFR 'PARMS\ %>4IOBUFFf STRCp;z EPRFNUMX}*PRFINT%>5IOBUFF 'PARMS %>4IOBUFF STRI; EPRFNUMX*PRFHEX HEXSTRX*PRFNUMQ>4IOBUFF $>5}IOBUFFX*PRFSTRPTMPSTR&TMPSTR $TMPCHAN$Q>.PICBLEN98?B Q@TMPSTR7L FPRFJMPV PICBLEN9`,j }QTMPSTRtO>~ PICBADR9QTMPSTRO>PICBADR9 Q>CPUTC PICCOM9 CALLCIO; EPRFJMPX*X*}X*X* PROC Put(BYTE d)X* PROC PutE() X* PROC PutD(BYTE ch, d)X* PROC PutDE(BYTE ch)%X* NOTE: to be consistant wit}h the(&X* routines in the cartridge, PutDE2#X* only takes one parameter, the<%X* channel number, even though theF&X* docu}mentation says it takes two.PX*ZPUTTEMPPARMSdX*nBLOCKSxPUTD&PUTTEMP LOADCHANQ> PIC}BLEN9PICBLEN9 Q>CPUTC PICCOM9 QPUTTEMP CALLCIO:X*BLOCKSPUTDE$>EOL" !PUTD,}X*6BLOCKS@JTPUT>^ QDEVICEh !PUTDrX*|BLOCKSPUTEQ>EOL!PUTX*X*X*|?X* -------------X* file IO2.ASMX* -------------X*X* BYTE FUNC ValB()X* CARD FUNC ValC()}$X* INT FUNC ValI().X*8VALSTRPARMSBVALLENPARMSLVALSGNPARMSVX*`BLOCKSjt~}VALNPVALSTR&VALSTRQ> PRESULTPRESULT PVALSGN? Q@VALSTR7PVALLEN;;String length. VALN1}3 Q@VALSTR7R> ;;Ignore spaces. FVALN1R> -;;Minus sign.  HVALN2 "VALSGN VALN33( )VALLEN2 FVALN4< EV}ALN5FVALN4Q@VALSTR7P VALN2;ZS> 0;;Convert char todDVALN5;;binary.n R> x EVALN55TRESULT;;Multiply * 1}0.URESULT QRESULT$RESULTT?URESULTT?URESULT, ORESULT PRESULTAORESULT}PRESULT,;;Add new digit."7, ORESULT6 PRESULT@ DVALN3J#RESULTT;^ EVALN3hVALN5QVALSGNr FVALEND| };;;Negate result.Q> SRESULT PRESULTQ>SRESULTPRESULT VALEND:X*X*X*X* BYTE FUNC  }InputB()X* CARD FUNC InputC()X* INT FUNC InputI() X* BYTE FUNC InputBD(BYTE ch) X* CARD FUNC InputCD(BYTE ch)X*  }INT FUNC InputID(BYTE ch)&X*0X* PROC InputS():%X* PROC InputSD(BYTE ch, )D2X* PROC InputMD(BYTE ch, , BYTE length)NX*XINLENPARMSbINSTRPARMSlNUMFLGPARMSvX*BLOCKSDOINPUT& }INSTR 'INSTR LOADCHAN, QINSTRO> PICBADR9 QINSTRO>PICBADR9 QINLEN  FINPTSEND }PICBLEN9 Q>*PICBLEN94 Q>CGETR> PICCOM9H CALLCIOR QICBLEN9\ FINPTSENDf;pS>zINPTSEND%> P@IN}STR7 QNUMFLG FINPTDONE QINSTR $INSTR !VALN INPTDONE:X*BLOCKS INPUTND5Q>x }PINLEN Q> PNUMFLG$ 7. $>4IOBUFF8 %>5IOBUFFB !DOINPUTL X*V BLOCKS` j t INPUTNQDEVICE~ !INPUT}ND X* BLOCKS   INPUTMD5 Q> PNUMFLG 7 !DOINPUT X* BLOCKS   INPUTSD5 Q>} PINLEN( 72 !INPUTMD< X*F BLOCKSP Z d INPUTS SHFTRn !INPUTSDx X* X* X* X* CHAR FUNC GetD(BY}TE ch) X* BLOCKS   GETD LOADCHAN Q> PICBLEN9 PICBLEN9 Q>CGETC PICCOM9 CALLCIO }PRESULT :" X*, X*6 X*@ 3X* PROC Open(BYTE ch, , BYTE mode, ax2)J X*T OPENMODEPARMS^ OPENAX2PARMS}h OPENTEMPPARMSr X*| BLOCKS   OPEN&OPENTEMP LOADCHAN QOPENTEMP STONAME QOPENMODE }PICAX19 QOPENAX2 PICAX29 Q>COPEN PICCOM9 CALLCIO A V? V?& V?0 V?: >D Q>N PEOF9X :b X*l X*v }X* X* PROC Close(BYTE ch) X* BLOCKS   CLOSE LOADCHAN Q>CCLOSE PICCOM9 CALLCIO : X* X}* X* ,X* PROC XIO(BYTE ch,0,cmd,ax1,ax2,) X* XIOAX1PARMS XIOAX2PARMS* XIONAMEPARMS4 X*> }BLOCKSH R \ XIO LOADCHANf Cp PICCOM9z QXIOAX1 PICAX19 QXIOAX2 PICAX29 QXIONAME %XIONAME} STONAME CALLCIO : X* X* X* BX* PROC Note(BYTE ch, CARD POINTER sector, BYTE POINTER offset) X*NOTESECT}PARMSNOTEOFFPARMSX*$BLOCKS.8BNOTE&NOTESECTL'NOTESECTV LOADCHAN` Q>CNOTEj PI}CCOM9t CALLCIO~%> QICAX39P@NOTESECT7 QICAX59P@NOTEOFF7 QICAX493P@NOTESECT7:X*X*X*}3X* PROC Point(BYTE ch, CARD sector, BYTE offset)X* PONTSECTPARMSPONTOFFPARMSX*(BLOCKS2<}FPOINT&PONTSECTP LOADCHANZ QPONTSECTd PICAX39nCx PICAX49 QPONTOFF PICAX59 Q>CPOINT PICCOM9 }CALLCIO:X*X*X* X* -----------------X* file GRAPHICS.ASMX* -----------------&X* These are the additional equates'X* needed f!}or the graphics sound andX* game controller routines.$X*.ATACHR8 COLORBCOLOR0L ROWCRSTV COLCRS"}U`X*j CDRAWt CFILL~X*AUDCTLҒ SKCTLҜ AUDFҦ AUDCҰX* PADp STKx PTRG#}| STRGX*X*X*X* PROC Graphics(BYTE mode) X*X*SNAMEPARMS(X*2BLOCKS<FP GRAPHI$}CS5Z$>`d Q>CCLOSEn PICCOM9x CIOV7PICAX29;;modeN>;;Invert bit 4.L> ;;Set bits 2&3. PICAX19Q> S%} PSNAMEQ> : PSNAME Q>4SNAME PICBADR9 Q>5SNAMEPICBADR9 Q>COPEN PICCOM9 CALLCIO":,X*6&}X*@X*JX* PROC SetColor(BYTE r,h,l)TX*^BLOCKShr|SETCOLORR> ESETEND PPARMSAT?T?T'}?T? PPARMSCM> LPARMS $PARMS PCOLOR09 SETEND:X*X*&X*0"X* PROC Position(CARD x BYTE y)(}:X*DBLOCKSNXbPOSITIONPCOLCRSl&COLCRSv 'ROWCRS:X*X*X*X* PROC Plot(CARD x BYTE y))}X*BLOCKSPLOT POSITIONQ> $COLOR !PUTDX* X*X*  X* PROC DrawTo(CARD x BYTE y)*X**}4BLOCKS>HRDRAWTO POSITION\$>`f Q>CDRAWp PICCOM9z QATACHR PCOLOR CALLCIO:X*X*X+}*X* PROC Fill(CARD x BYTE y)X*BLOCKSFILL POSITION$>` Q>CFILL PICCOM9 QATACHR$ PC,}OLOR. CALLCIO8 :B X*L X*V X*` %X* BYTE FUNC Locate(CARD x BYTE y)j X*t BLOCKS~   LOCATE POSITION -}Q> !GETD X* X* X* !X* PROC Sound(BYTE c, p, d, v) X* BLOCKS   SOUNDR> ESONDEND &PARM.}S T?( >;;Channel.2 Q>< PAUDCTL;;Initialize POKEY.F Q>P PSKCTLZ QPARMS;;Volume.d M>n PPARMSx C;;/}Distortion. M> T? T? T? T? LPARMS PAUDC9 QPARMS;;Pitch. PAUDF9 SONDEND: X* X* X* X* 0}PROC SndRst() X* BLOCKS" , 6 SNDRSTQ>@ $>J SNDR1PAUDF9T 0^ ISNDR1h :r X*| X* X* X* BYTE F1}UNC Paddle(BYTE p) X* BLOCKS   PADDLEM> > QPAD9 PRESULT : X* X* X* X* BYTE FUNC PTri2}g(BYTE p) X*& BLOCKS0 : D PTRIGM>N >X QPTRG9b PRESULTl :v X* X* X* X* BYTE FUNC Stick(BYTE p)3} X* BLOCKS   STICKM> > QSTK9 PRESULT : X* X* X* X* BYTE FUNC STrig(BYTE p) X** 4}BLOCKS4 > H STRIGM>R >\ QSTRG9f PRESULTp :z X* X* X*MX* ---------------X* file STRING.ASMX* ---------------X*0X* INT FUNC SCompare(BYTE POINTER str1, str2)X*6}$SCMPSTR1PARMS.SCMPSTR2PARMS8SCMPLEN1PARMSBSCMPLEN2PARMSLX*VBLOCKS`jtSCO7}MPAREPSCMPSTR1~&SCMPSTR1 'SCMPSTR2%> 'RESULT'RESULTQ@SCMPSTR17 PSCMPLEN1Q@SCMPSTR27 PS8}CMPLEN2SCMPLOOP)SCMPLEN1 FSCMPEQU )SCMPLEN2 FSCMPEQU3 Q@SCMPSTR17R@SCMPSTR27 FSCMPLOOP( DRETNEG29}RETPOS#RESULT<:FRETNEG"RESULTP"RESULTZ SCMPEND:dSCMPEQUQSCMPLEN1n RSCMPLEN2x FSCMPEND ERETPOS :}DRETNEGX*X*X*+X* PROC SCopy(BYTE POINTER dest, source)X*SCPYDESTPARMSSCPYSRCPARMSX*BLOC;}KSSCOPYPSCPYDEST&SCPYDEST 'SCPYSRC"%>,Q@SCPYSRC76?@SCPYLOOPQ@SCPYSRC7JP@SCPYDEST<}7T)>^ FSCPYENDh1r;| ESCPYLOOP SCPYEND:X*X*X*=X* PROC SCopyS(BYTE POINTER dest, source BYTE start, s=}top)X*SCPSDESTPARMSSCPSSRCPARMSSCPSTARTPARMSSCPSTOPPARMSSCPSLENPARMSX*BL>}OCKSSCOPYSPSCPSDEST&&SCPSDEST0 'SCPSSRC:%>D 'SCPSLENNQ@SCPSSRC7X RSCPSTOPb ESCPSLOOPl?} PSCPSTOPvSCPSLOOPQSCPSTART FSCPSEND RSCPSTOP FSCPSCONT ESCPSENDSCPSCONT%SCPSTART #SCPSTARTQ@SC@}PSSRC7 #SCPSLEN %SCPSLENP@SCPSDEST7; ESCPSLOOPSCPSENDQSCPSLEN%> P@SCPSDEST7: X**X*4X*>A}>X* PROC SAssign(BYTE POINTER dest, source BYTE start, stop)HX*RSSDESTPARMS\SSRCPARMSfSSTARTPARMSpSB}STOPPARMSzSSTEMPYPARMSSSDIDXPARMSSSIDXPARMSSSDLENPARMS SSLENPARMS X*BLC}OCKSSASSIGNPSSDEST&SSDEST 'SSRC QSSTART FSSEND RSSTOP FSSCONT ESSEND$ SSCONTPSD}SDIDX. "SSDIDX8 %>B 'SSIDXL Q@SSDEST7V PSSDLEN` Q@SSRC7j PSSLENt SSLOOPQSSDIDX~ RSSTOP ESLOOPEND QSE}SIDX RSSLEN ESLOOPEND #SSIDX %SSIDX Q@SSRC7 #SSDIDX %SSDIDX P@SSDEST7 ; ESSLOOP SLOOPENDQSSDF}IDX RSSDLEN DSSEND %>( P@SSDEST72 SSEND:< X*F X*P X*E"X* -------------X* file MISC.ASMX* -------------X* X* BYTE FUNC Rand(BYTE range)X*$RANDOM .RANG!H}EPARMS8MASKPARMSBX*LBLOCKSV`jRANDPRANGEt "RANGE~Q>RANDLP1RRANGE ERNDSKP;!I}U?; ERANDLP1RNDSKPPMASKRANDLP2QRANDOM MMASK RRANGE FRANDEND DRANDEND ERANDLP2 RANDENDPRE!J}SULT:X*(X*2X*<#X* PROC Poke(CARD addr BYTE val)FX*PBLOCKSZdnPOKEPPARMSx &PARMSC%>!K} P@PARMS7:X*X*X* X* PROC PokeC(CARD addr, val)X*BLOCKSPOKEC POKE3 QPARMS!L} P@PARMS7":,X*6X*@X*JX* BYTE FUNC Peek(CARD addr)T X* CARD FUNC PeekC(CARD addr)^X*hBLOCKSr|!M}PEEKPPARMS &PARMS%>Q@PARMS7 PRESULT3Q@PARMS7PRESULT:X*X*X*,X* PR!N}OC SetBlock(CARD addr, len BYTE val)X*BLOCKPARMSSETLENPARMS&SETVALPARMS0X*:BLOCKSDN!O}XSETBLOCKPBLOCKb &BLOCKl 'SETLENv%>SETLOOPQSETLEN HSETSKP1QSETLEN FSETBENDSETSKP1QSET!P}VAL P@BLOCK73 HSETSKP2 #BLOCKSETSKP2"SETLEN QSETLENR> HSETLOOP"SETLEN ; ESETLOOP !Q} SETBEND:*X*4X*>X*HX* PROC Zero(CARD addr, len)RX*\BLOCKSfpz ZERO5Q> PPARMS7 !S!R}ETBLOCKX*X*X*,X* PROC MoveBlock(CARD dest, source, len)X*MOVDESTPARMSMOVSRCPARMSMOVLENPARM!S}SX* BLOCKS  $ MOVEBLOCKPMOVDEST. &MOVDEST8 'MOVSRCB %>L MOVLOOPQMOVLENV HMOVSKP1` Q!T}MOVLENj FMOVENDt MOVSKP1Q@MOVSRC7~ P@MOVDEST7 3 HMOVSKP2 #MOVDEST #MOVSRC MOVSKP2"MOVLEN QM!U}OVLEN R> HMOVLOOP "MOVLEN ; EMOVLOOP MOVEND: X* X* X* P;RTIME.H;HEADER FILE FOR THE RUNTIME PACKAGEMODULEBYTE device=$2500CARD Error=$2501SET $4E8 = $2503 ;MULTIPLYSET $4%W}EA = $2506 ;DIVIDESET $4EC = $2509 ;MODSET $4E6 = $250C ;RSHSET $4E4 = $250F ;LSHSET $4EE = $25DB ;COPY PARMSPROC %X}Print=$2512(CARD s)PROC PrintE=$2515(CARD s)PROC PrintD=$2518(BYTE d CARD s)PROC PrintDE=$251B(BYTE d CARD s)PROC PrintB%Y}=$251E(BYTE b)PROC PrintBE=$2521(BYTE b)PROC PrintBD=$2524(BYTE d, b)PROC PrintBDE=$2527(BYTE d, b)PROC PrintC=$252A(CAR%Z}D c)PROC PrintCE=$252D(CARD c)PROC PrintCD=$2530(BYTE d CARD c)PROC PrintCDE=$2533(BYTE d CARD c)PROC PrintI=$2536(INT i%[})PROC PrintIE=$2539(INT i)PROC PrintID=$253C(BYTE d INT i)PROC PrintIDE=$253F(BYTE d INT i)PROC PrintF=$2542(CARD s,a,b,%\}c,d,e,f,g)PROC Put=$2545(BYTE c)PROC PutE=$2548()PROC PutD=$254B(BYTE d, c)PROC PutDE=$254E(BYTE d)BYTE FUNC InputB=$2%]}551()BYTE FUNC InputBD=$2554(BYTE d)CARD FUNC InputC=$2557()CARD FUNC InputCD=$255A(BYTE d)INT FUNC InputI=$255D()INT FU%^}NC InputID=$2560(BYTE d)PROC InputS=$2563(CARD s)PROC InputSD=$2566(BYTE d CARD s)PROC InputMD=$2569(BYTE d CARD s BYTE l%_})CHAR FUNC GetD=$256C(BYTE d)PROC Open=$256F(BYTE d CARD s BYTE m, a)PROC Close=$2572(BYTE d)PROC XIO=$2575(BYTE d, z, %`}c, a1, a2, CARD s)PROC Note=$2578(BYTE d CARD s, o)PROC Point=$257B(BYTE d CARD s BYTE o)PROC Graphics=$257E(BYTE m)PROC%a} SetColor=$2581(BYTE r, h, l)PROC Plot=$2584(CARD x BYTE y)PROC DrawTo=$2587(CARD x BYTE y)PROC Fill=$258A(CARD x BYTE y)%b}PROC Position=$258D(CARD x BYTE y)BYTE FUNC Locate=$2590(CARD x BYTE y)PROC Sound=$2593(BYTE c, p, d, v)PROC SndRst=$2596%c}()BYTE FUNC Paddle=$2599(BYTE p)BYTE FUNC PTrig=$259C(BYTE p)BYTE FUNC Stick=$259F(BYTE p)BYTE FUNC STrig=$25A2(BYTE p)%d}INT FUNC SCompare=$25A5(CARD s1, s2)PROC SCopy=$25A8(CARD d, s)PROC SCopyS=$25AB(CARD d, s BYTE b, e)PROC SAssign=$25AE(C%e}ARD d, s BYTE b, e)PROC StrB=$25B1(BYTE b CARD s)PROC StrC=$25B4(CARD c CARD s)PROC StrI=$25B7(INT i CARD s)BYTE FUNC V%f}alB=$25BA(CARD a)CARD FUNC ValC=$25BD(CARD a)INT FUNC ValI=$25C0(CARD a)BYTE FUNC Rand=$25C3(BYTE r)BYTE FUNC Peek=$25C%g}6(CARD a)CARD FUNC PeekC=$25C9(CARD a)PROC Poke=$25CC(CARD a BYTE v)PROC PokeC=$25CF(CARD a, v)PROC Zero=$25D2(CARD a, l%q}BNRUNTIME ACTB3RRTSCAN COMBRUNTIME ASMB"MATH ASMBCIO1 ASMBIO2 ASMB GRAPHICSASMB5STRING ASMBGMISC ASMBVRUNTIME H B;rRECORDS ASMB:RECORDS ACTB RECUTILSACTBFILESCANACTBRTSCAN ACTB(README B%EDOS SYSB*jDUP SYSB!STARTUP BASBAUTORUN SYS)PROC SetBlock=$25D5(CARD a, l, v)PROC MoveBlock=$25D8(CARD d, s, l)MODULE$O$'X;This file contains the definitions$X;for records used in determining$X;which routines from the runtime)s}X;are needed.X;$)X;There is one record for each routine.)X;in the runtime library. Each record8"X;has the following fi)t}elds (theB&X;parentheses contain the number ofLX;bytes used by a field).VX;`(X; string length (1), id string (??)jX;)u} number of calls (2)tX; next record pointer (2)~X; dependency list (??)X;%X;The dependency list is a list of)X;)v}pointers to the records for routines(X;called indirectly and is ended withX;2 bytes of 0's ($0000).X;X;X;_C)w}PYPRM =A_CPYPRMA  _CHGSGN X; _CHGSGN =A_CHGSGNA  _FIXSGN( 2X;<_FIXSGN =A_FIXSG)x}NAF P _FIXRESZ _CHGSGN=dX;n_FIXRES =A_FIXRESAx  _MUL _CHGSGN=X;_MUL =A_MULA )y} _DIV _FIXSGN=_FIXRES=X;_DIV =A_DIVA  _MODOP _FIXSGN=_FIXRES=X;_MODOP =A_MODOP)z}A  _RSHOP" _DIV=,X;6_RSHOP =A_RSHOPA@ J _LSHOPT ^X;h_LSHOP =A_LSHOPAr | _ERRO){}U X;_ERROU =A_ERROUA  _ERRVEC X;_ERRVEC =A_ERRVECA  _DEVIC _ERROU=X;)|}_DEVIC =A_DEVICA  ERROR &X;0ERROR =AErrorA: D DEVICEN _ERRVEC=XX;bDEVICE =Ad)}}eviceAl v _GOCIO _DEVIC=X;_GOCIO =A_GOCIOA  _LODCHN _ERRVEC=X;_LODCHN =A_LODC)~}HNA  _STONAM _ERRVEC=X;_STONAM =A_STONAMA   _SHFTR  X;*_SHFTR =A_SHFTRA4 >)} _CLREOLH _DEVIC=RX;\_CLREOL =A_CLREOLAf p _SETEOLz X;_SETEOL =A_SETEOLA  _PRECO)}N X;_PRECON =A_PRECONA  _DOPRNT X;_DOPRNT =A_DOPRNTA  STRC  _LODCHN=_GOCI)}O= X;$ STRC =AStrCA.  8 STRBB  L X;V STRB =AStrBA`  j STRIt STRC=~ X; STRI =AStrIA)}   _DOPRNC STRC= X; _DOPRNC =A_DOPRNCA   _DOPRNI  _PRECON=STRC=_DOPRNT= X; _DOPRNI )}=A_DOPRNIA   PRINTCD  _PRECON=STRI=_DOPRNT= X; PRINTCD =APrintCDA(  2 PRINTC<  _CLREOL=_DOP)}RNC=F X;P PRINTC =APrintCAZ  d PRINTCDEn  _SHFTR=PRINTCD=x X; PRINTCDE =APrintCDEA   PRINTC)}E  _SETEOL=_DOPRNC= X; PRINTCE =APrintCEA   PRINTBD  _SHFTR=PRINTCDE= X; PRINTBD =APrintB)}DA   PRINTB  PRINTCD= X; PRINTB =APrintBA"  , PRINTBDE6  _SHFTR=PRINTBD=@ X;J PRINTBDE =)}APrintBDEAT  ^ PRINTBEh  PRINTCDE=r X;| PRINTBE =APrintBEA   PRINTID  _SHFTR=PRINTBDE= X; )}PRINTID =APrintIDA   PRINTI  _CLREOL=_DOPRNI= X; PRINTI =APrintIA   PRINTIDE  _SHFTR=PR)}INTID= X; PRINTIDE =APrintIDEA  & PRINTIE0  _SETEOL=_DOPRNI=: X;D PRINTIE =APrintIEAN  X PR)}INTDb  _SHFTR=PRINTIDE=l X;v PRINTD =APrintDA   PRINT  _CLREOL=_DOPRNT= X; PRINT =APrintA )}  PRINTDE  _SHFTR=PRINTD= X; PRINTDE =APrintDEA   PRINTE  _SETEOL=_DOPRNT= X; PRINTE )}=APrintEA   _HEXSTR*  _SHFTR=PRINTDE=4 X;> _HEXSTR =A_HEXSTRAH  R PRINTF\  f X;p PRINTF =A)}PrintFAz   PUTD  _DEVIC=_GOCIO=STRC  STRI=_HEXSTR= X; PUTD =APutDA   PUTDE  _LODCHN=_G)}OCIO= X; PUTDE =APutDEA    PUT PUTD=X;PUT =APutA $ PUTE. _DEVIC=PUTD=8X;B)}PUTE =APutEAL V VALB` PUT=jX;tVALB =AValBA~  VALC X;VALC =AValCA  VALI)} X;VALI =AValIA  _DOINPT X; _DOINPT =A_DOINPTA  INPUTBD( _LODCHN=_GOCIO=V)}ALC=2X;<INPUTBD =AInputBDAF P INPUTCDZ _DOINPT=dX;nINPUTCD =AInputCDAx  INPUTID _DO)}INPT=X;INPUTID =AInputIDA  INPUTB _DOINPT=X;INPUTB =AInputBA  INPUTC _DEVIC)}=INPUTCD=X;INPUTC =AInputCA  INPUTI" _DEVIC=INPUTCD=,X;6INPUTI =AInputIA@ J INPUTM)}DT _DEVIC=INPUTCD=^X;hINPUTMD =AInputMDAr | INPUTSD _DOINPT=X;INPUTSD =AInputSDA )} INPUTS INPUTMD=X;INPUTS =AInputSA  GETD _SHFTR=INPUTSD=X;GETD =AGetDA  )}OPEN _LODCHN=_GOCIO=&X;0OPEN =AOpenA: D CLOSEN _LODCHN=_STONAMX _GOCIO=bX;lCLOSE =AClo)}seAv  XIO _LODCHN=_GOCIO=X;XIO =AXIOA  NOTE _LODCHN=_STONAM _GOCIO=X;NOTE)} =ANoteA  POINT _LODCHN=_GOCIO=X; POINT =APointA   GRAPHICS* _LODCHN=_GOCIO=4X;>)}GRAPHICS =AGraphicsAH R SETCOLOR\ _GOCIO=fX;pSETCOLOR =ASetColorAz  POSITION X;P)}OSITION =APositionA  PLOT X;PLOT =APlotA  DRAWTO POSITION=PUTD=X;DRAWTO =)}ADrawToA  FILL$ POSITION=_GOCIO=.X;8FILL =AFillAB L LOCATEV POSITION=_GOCIO=`X;jLOC)}ATE =ALocateAt ~ SOUND POSITION=GETD=X;SOUND =ASoundA  SNDRST X;SNDRST =AS)}ndRstA  PADDLE X;PADDLE =APaddleA   PTRIG (X;2PTRIG =APTrigA< F STICKP )}ZX;dSTICK =AStickAn x STRIG X;STRIG =ASTrigA  SCOMPARE X;SCOMPARE =AS)}CompareA  SCOPY X;SCOPY =ASCopyA  SCOPYS "X;,SCOPYS =ASCopySA6 @ SASSIGN)}J TX;^SASSIGN =ASAssignAh r RAND| X;RAND =ARandA  POKE X;POKE =APoke)}A  POKEC X;POKEC =APokeCA  PEEK POKE=X;&PEEK =APeekA0 : PEEKCD N)}X;XPEEKC =APeekCAb l SETBLOCKv X;SETBLOCK =ASetBlockA  ZERO X;ZERO =AZeroA)}  MOVEBLOCK SETBLOCK=X;MOVEBLOCK  =AMoveBlockA    X; X;*X;4>"X;This is a )}list of pointers toH(X;the records for the runtime libraryR X;routines that may be called\#X;directly from a user's progra)}mfX;(plus the math routines).p$X;It is in ascending alphabeticalz&X;order so that a binary search can X;be done on the )}identifiers.X;X; CLOSE DRAWTO ERROR FILL GETD GRAPHICS INPUTB INPUTBD INPUTC IN)}PUTCD INPUTI INPUTID INPUTMD$ INPUTS. INPUTSD8 LOCATEB MOVEBLOCKL NOTEV OPEN` PTRIGj PADD)}LEt PEEK~ PEEKC PLOT POINT POKE POKEC POSITION PRINT PRINTB PRINTBD PRINTBDE PR)}INTBE PRINTC PRINTCD PRINTCDE  PRINTCE PRINTD PRINTDE( PRINTE2 PRINTF< PRINTIF PRINTIDP )}PRINTIDEZ PRINTIEd PUTn PUTDx PUTDE PUTE RAND SASSIGN SCOMPARE SCOPY SCOPYS STRIG )} SETBLOCK SETCOLOR SNDRST SOUND STICK STRB STRC STRI VALB" VALC, VALI6 XIO@ ZERO)}J _DIVT _LSHOP^ _MODOPh _MULr _RSHOP| DEVICE(>DEFINE RECADR = "$2400"SET $0E = RECADRSET $491 = RECADRPROC IdRecs=*();NOTE: must be compiled at RECADR;Block cont-}aining records for each;routine in the runtime library.;Records are in the form ...; id length -- 1 byte; ident-}ifier -- ?? bytes; used? -- 1 byte; next rec pointer -- 2 bytes; dependency list -- ?? bytes;The-} dependency list is a list of;pointers to routines needed by the;this routine, followed by 2 bytes;of zeros ($0000).[$07 -}$5F $43 $50 $59 $50 $52 $4D $01 $00 $0E $24 $00 $00 $07 $5F $43 $48 $47 $53 $47 $4E $00 $00 $1C $24 $00 $00 $07 $5F $46 $4-}9 $58 $53 $47 $4E $00 $00 $2C $24 $0E $24 $00 $00 $07 $5F $46 $49 $58 $52 $45 $53 $00 $00 $3C $24 $0E $24 $00 $00 $04 $5F-} $4D $55 $4C $00 $00 $4B $24 $1C $24 $2C $24 $00 $00 $04 $5F $44 $49 $56 $00 $00 $5A $24 $1C $24 $2C $24 $00 $00 $06 $5F -}$4D $4F $44 $4F $50 $00 $00 $69 $24 $4B $24 $00 $00 $06 $5F $52 $53 $48 $4F $50 $00 $00 $76 $24 $00 $00 $06 $5F $4C $53 $-}48 $4F $50 $00 $00 $83 $24 $00 $00 $06 $5F $45 $52 $52 $4F $55 $00 $00 $90 $24 $00 $00 $07 $5F $45 $52 $52 $56 $45 $43 $0-}0 $00 $A0 $24 $83 $24 $00 $00 $06 $5F $44 $45 $56 $49 $43 $00 $00 $AD $24 $00 $00 $05 $45 $72 $72 $6F $72 $00 $00 $BB $24 -}$90 $24 $00 $00 $06 $64 $65 $76 $69 $63 $65 $00 $00 $CA $24 $A0 $24 $00 $00 $06 $5F $47 $4F $43 $49 $4F $00 $00 $D9 $24 $-}90 $24 $00 $00 $07 $5F $4C $4F $44 $43 $48 $4E $00 $00 $E9 $24 $90 $24 $00 $00 $07 $5F $53 $54 $4F $4E $41 $4D $00 $00 $F-}7 $24 $00 $00 $06 $5F $53 $48 $46 $54 $52 $00 $00 $06 $25 $A0 $24 $00 $00 $07 $5F $43 $4C $52 $45 $4F $4C $00 $00 $14 $25-} $00 $00 $07 $5F $53 $45 $54 $45 $4F $4C $00 $00 $22 $25 $00 $00 $07 $5F $50 $52 $45 $43 $4F $4E $00 $00 $30 $25 $00 $00 -}$07 $5F $44 $4F $50 $52 $4E $54 $00 $00 $42 $25 $D9 $24 $CA $24 $00 $00 $04 $53 $74 $72 $43 $00 $00 $4D $25 $00 $00 $04 $5-}3 $74 $72 $42 $00 $00 $5A $25 $42 $25 $00 $00 $04 $53 $74 $72 $49 $00 $00 $67 $25 $42 $25 $00 $00 $07 $5F $44 $4F $50 $52-} $4E $43 $00 $00 $7B $25 $22 $25 $42 $25 $30 $25 $00 $00 $07 $5F $44 $4F $50 $52 $4E $49 $00 $00 $8F $25 $22 $25 $5A $25 -}$30 $25 $00 $00 $07 $50 $72 $69 $6E $74 $43 $44 $00 $00 $A1 $25 $06 $25 $67 $25 $00 $00 $06 $50 $72 $69 $6E $74 $43 $00 $-}00 $B2 $25 $F7 $24 $8F $25 $00 $00 $08 $50 $72 $69 $6E $74 $43 $44 $45 $00 $00 $C5 $25 $14 $25 $67 $25 $00 $00 $07 $50 $72-} $69 $6E $74 $43 $45 $00 $00 $D7 $25 $F7 $24 $B2 $25 $00 $00 $07 $50 $72 $69 $6E $74 $42 $44 $00 $00 $E7 $25 $8F $25 $00 -}$00 $06 $50 $72 $69 $6E $74 $42 $00 $00 $F8 $25 $F7 $24 $D7 $25 $00 $00 $08 $50 $72 $69 $6E $74 $42 $44 $45 $00 $00 $09 $-}26 $B2 $25 $00 $00 $07 $50 $72 $69 $6E $74 $42 $45 $00 $00 $1B $26 $F7 $24 $F8 $25 $00 $00 $07 $50 $72 $69 $6E $74 $49 $4-}4 $00 $00 $2D $26 $06 $25 $7B $25 $00 $00 $06 $50 $72 $69 $6E $74 $49 $00 $00 $3E $26 $F7 $24 $1B $26 $00 $00 $08 $50 $72-} $69 $6E $74 $49 $44 $45 $00 $00 $51 $26 $14 $25 $7B $25 $00 $00 $07 $50 $72 $69 $6E $74 $49 $45 $00 $00 $63 $26 $F7 $24 $-}3E $26 $00 $00 $06 $50 $72 $69 $6E $74 $44 $00 $00 $74 $26 $06 $25 $30 $25 $00 $00 $05 $50 $72 $69 $6E $74 $00 $00 $84 $2-}6 $F7 $24 $63 $26 $00 $00 $07 $50 $72 $69 $6E $74 $44 $45 $00 $00 $96 $26 $14 $25 $30 $25 $00 $00 $06 $50 $72 $69 $6E $74-} $45 $00 $00 $A7 $26 $F7 $24 $84 $26 $00 $00 $07 $5F $48 $45 $58 $53 $54 $52 $00 $00 $B5 $26 $00 $00 $06 $50 $72 $69 $6E -}$74 $46 $00 $00 $CC $26 $A0 $24 $CA $24 $42 $25 $5A $25 $A7 $26 $00 $00 $04 $50 $75 $74 $44 $00 $00 $DB $26 $D9 $24 $CA $-}24 $00 $00 $05 $50 $75 $74 $44 $45 $00 $00 $E9 $26 $CC $26 $00 $00 $03 $50 $75 $74 $00 $00 $F7 $26 $A0 $24 $CC $26 $00 $00-} $04 $50 $75 $74 $45 $00 $00 $04 $27 $E9 $26 $00 $00 $04 $56 $61 $6C $42 $00 $00 $0F $27 $00 $00 $04 $56 $61 $6C $43 $00 -}$00 $1A $27 $00 $00 $04 $56 $61 $6C $49 $00 $00 $25 $27 $00 $00 $07 $5F $44 $4F $49 $4E $50 $54 $00 $00 $39 $27 $D9 $24 $-}CA $24 $0F $27 $00 $00 $07 $49 $6E $70 $75 $74 $42 $44 $00 $00 $49 $27 $25 $27 $00 $00 $07 $49 $6E $70 $75 $74 $43 $44 $0-}0 $00 $59 $27 $25 $27 $00 $00 $07 $49 $6E $70 $75 $74 $49 $44 $00 $00 $69 $27 $25 $27 $00 $00 $06 $49 $6E $70 $75 $74 $42-} $00 $00 $7A $27 $A0 $24 $49 $27 $00 $00 $06 $49 $6E $70 $75 $74 $43 $00 $00 $8B $27 $A0 $24 $49 $27 $00 $00 $06 $49 $6E $-}70 $75 $74 $49 $00 $00 $9C $27 $A0 $24 $49 $27 $00 $00 $07 $49 $6E $70 $75 $74 $4D $44 $00 $00 $AC $27 $25 $27 $00 $00 $0-}7 $49 $6E $70 $75 $74 $53 $44 $00 $00 $BC $27 $9C $27 $00 $00 $06 $49 $6E $70 $75 $74 $53 $00 $00 $CD $27 $F7 $24 $AC $27-} $00 $00 $04 $47 $65 $74 $44 $00 $00 $DC $27 $D9 $24 $CA $24 $00 $00 $04 $4F $70 $65 $6E $00 $00 $ED $27 $D9 $24 $E9 $24 -}$CA $24 $00 $00 $05 $43 $6C $6F $73 $65 $00 $00 $FD $27 $D9 $24 $CA $24 $00 $00 $03 $58 $49 $4F $00 $00 $0D $28 $D9 $24 $E-}9 $24 $CA $24 $00 $00 $04 $4E $6F $74 $65 $00 $00 $1C $28 $D9 $24 $CA $24 $00 $00 $05 $50 $6F $69 $6E $74 $00 $00 $2C $28-} $D9 $24 $CA $24 $00 $00 $08 $47 $72 $61 $70 $68 $69 $63 $73 $00 $00 $3D $28 $CA $24 $00 $00 $08 $53 $65 $74 $43 $6F $6C -}$6F $72 $00 $00 $4C $28 $00 $00 $08 $50 $6F $73 $69 $74 $69 $6F $6E $00 $00 $5B $28 $00 $00 $04 $50 $6C $6F $74 $00 $00 $-}6A $28 $4C $28 $CC $26 $00 $00 $06 $44 $72 $61 $77 $54 $6F $00 $00 $7B $28 $4C $28 $CA $24 $00 $00 $04 $46 $69 $6C $6C $0-}0 $00 $8A $28 $4C $28 $CA $24 $00 $00 $06 $4C $6F $63 $61 $74 $65 $00 $00 $9B $28 $4C $28 $CD $27 $00 $00 $05 $53 $6F $75 -}$6E $64 $00 $00 $A7 $28 $00 $00 $06 $53 $6E $64 $52 $73 $74 $00 $00 $B4 $28 $00 $00 $06 $50 $61 $64 $64 $6C $65 $00 $00 $-}C1 $28 $00 $00 $05 $50 $54 $72 $69 $67 $00 $00 $CD $28 $00 $00 $05 $53 $74 $69 $63 $6B $00 $00 $D9 $28 $00 $00 $05 $53 $5-}4 $72 $69 $67 $00 $00 $E5 $28 $00 $00 $08 $53 $43 $6F $6D $70 $61 $72 $65 $00 $00 $F4 $28 $00 $00 $05 $53 $43 $6F $70 $79-} $00 $00 $00 $29 $00 $00 $06 $53 $43 $6F $70 $79 $53 $00 $00 $0D $29 $00 $00 $07 $53 $41 $73 $73 $69 $67 $6E $00 $00 $1B -}$29 $00 $00 $04 $52 $61 $6E $64 $00 $00 $26 $29 $00 $00 $04 $50 $6F $6B $6 $00 $00 $31 $29 $00 $00 $05 $50 $6F $6B $65 $4-}3 $00 $00 $3F $29 $26 $29 $00 $00 $04 $50 $65 $65 $6B $00 $00 $4A $29 $00 $00 $05 $50 $65 $65 $6B $43 $00 $00 $56 $29 $00-} $00 $08 $53 $65 $74 $42 $6C $6F $63 $6B $00 $00 $65 $29 $00 $00 $04 $5A $65 $72 $6F $00 $00 $72 $29 $56 $29 $00 $00 $09 -}$4D $6F $76 $65 $42 $6C $6F $63 $6B $00 $00 $00 $00 $00 $00 ]PROC Sorted=*();Pointers to the records for routines;from -}the runtime library that may;legally be called from a user's;program. These are in ascending;alphabetical order so a bina-}ry;search can be done on the;identifiers.[$ED $27 $6A $28 $AD $24 $7B $28 $CD $27 $2C $28 $69 $27 $39 $27 $7A $27 $49 $2-}7 $8B $27 $59 $27 $9C $27 $BC $27 $AC $27 $8A $28 $72 $29 $0D $28 $DC $27 $C1 $28 $B4 $28 $3F $29 $4A $29 $5B $28 $1C $28-} $26 $29 $31 $29 $4C $28 $74 $26 $E7 $25 $D7 $25 $F8 $25 $09 $26 $A1 $25 $8F $25 $B2 $25 $C5 $25 $63 $26 $84 $26 $96 $26 -}$B5 $26 $2D $26 $1B $26 $3E $26 $51 $26 $E9 $26 $CC $26 $DB $26 $F7 $26 $1B $29 $0D $29 $E5 $28 $F4 $28 $00 $29 $D9 $28 $5-}6 $29 $3D $28 $A7 $28 $9B $28 $CD $28 $4D $25 $42 $25 $5A $25 $04 $27 $0F $27 $1A $27 $FD $27 $65 $29 $4B $24 $76 $24 $5A-} $24 $3C $24 $69 $24 $BB $24 ]MODULEDEFINE NUMIDS="74"CARD ARRAY idptrs=Sorted,ZCARD FUNC BinSearch(BYTE ARRAY idstr);Does a binary search in the array;idptrs for identifier idstr. INT hi, lo, mid,1} comp hi=NUMIDS-1 lo=0 WHILE hi>=lo DO mid=(hi+lo) RSH 1 comp=SCompare(idstr,idptrs(mid)) IF comp=0 THEN 1} RETURN(idptrs(mid)) ELSEIF comp<0 THEN hi=mid-1 ELSE lo=mid+1 FI ODRETURN(0)PROC MarkList(1}BYTE ARRAY rec);Given the address of an id record,;mark it and all id's in its;dependency list. BYTE stktop=[0] CA1}RD ARRAY stack(10) CARD POINTER calls, depend calls=rec+rec(0)+1 calls^==+1 depend=calls+4 DO IF depen1}d^=0 THEN EXIT ELSE stktop==+1 stack(stktop)=depend MarkList(depend^) depend=stack(stktop)1} stktop==-1 depend==+2 FI ODRETURNPROC ClrRecs();Zeros the # of calls to each;routine (except _CPYPRMS1} = 1) BYTE ARRAY s CARD POINTER next, calls s=IdRecs calls=s+s(0)+1 calls^=1 next=calls+2 DO IF ne1}xt^=0 THEN EXIT ELSE s=next^ calls=s+s(0)+1 calls^=0 next=calls+2 FI ODRETURNPROC1} PrintList();Print the records marked used. BYTE i BYTE ARRAY s CARD POINTER next, calls s=IdRecs cal1}ls=s+s(0)+1 next=calls+2 DO IF calls^ THEN PrintF("%S",s) FOR i=s(0) TO 11 DO Put(' ) OD 1} PrintF("(%U)%E",calls^) FI IF next^=0 THEN EXIT ELSE s=next^ calls=s+s(0)+1 next=call1}s+2 FI ODRETURN0MODULEDEFINE EOL="$9B", INFILE="2", BUFFLEN="4096"INT tmpcharBYTE ARRAY idname(40), buffer(BUFFLEN)INT FUNC 5}BGetD=*(BYTE ch CARD addr, len);Get len (0=0 THEN c=tmpchar 5} tmpchar=-1 ELSE IF bindx=blen THEN bindx=0 blen=BGetD(INFILE,buffer,BUFFLEN) IF blen=0 THEN 5} EOF(INFILE)=1 RETURN(0) FI FI c=buffer(bindx) bindx==+1 FIRETURN(c)BYTE FUNC HexDigit(BYTE c5});Returns a non-zero number if;c is a legal hex digit. IF (c>='A AND c<='F) OR (c>='0 AND c<='9) THEN RETURN(1) FI5}RETURN(0)BYTE FUNC IdChar(BYTE c);Returns a non-zero number if;c is a legal id char (not a digit). IF (c='_) OR (c>=5}'A AND c<='Z) OR (c>='a AND c<='z) THEN RETURN(1) FIRETURN(0)PROC ScanId();Reads the input stream until an;id6}entifier is found or the end;of the file is reached.BYTE state, c, idindx state=0 idindx=0 idname(0)=0 DO c=6}GetChar() IF EOF(INFILE) THEN RETURN ELSE IF state=0 THEN IF c='= THEN state=1 6}ELSEIF c='* THEN SCopy(idname,"_MUL") RETURN ELSEIF c='/ THEN SCopy(idname,"_DIV") 6} RETURN ELSEIF c='$ THEN state=2 ELSEIF c='' THEN state=3 ELSEIF c='" THEN 6} state=4 ELSEIF c='; THEN state=6 ELSEIF IdChar(c) THEN idindx==+1 idna6}me(idindx)=c state=7 FI ELSEIF state=1 THEN IF c<>'* THEN tmpchar=c FI 6} state=0 ELSEIF state=2 THEN IF HexDigit(c)=0 THEN tmpchar=c state=0 FI EL6}SEIF state=3 THEN state=0 ELSEIF state=4 THEN IF c='" THEN state=5 FI ELSEIF st6}ate=5 THEN IF c='" THEN state=4 ELSE tmpchar=c state=0 FI ELSEIF 6 }state=6 THEN IF c=EOL THEN state=0 FI ELSEIF state=7 THEN IF IdChar(c)<>0 OR HexDigit6 }(c)<>0 THEN idindx==+1 idname(idindx)=c ELSE tmpchar=c idname(0)=idindx 6 } IF SCompare(idname,"MOD")=0 THEN SCopy(idname,"_MODOP") ELSEIF SCompare(idname,"LSH")=0 THEN 6 } SCopy(idname,"_LSHOP") ELSEIF SCompare(idname,"RSH")=0 THEN SCopy(idname,"_RSHOP") FI6 } RETURN FI FI FI ODRETURNMODULEBYTE errflgPROC DOS=*();Jump to DOS through DOSVEC ($06}00A) [$6C $0A $00]PROC MyError(BYTE errnum) BYTE i PrintF("Error #%U%E",errnum) IF errnum=128 THEN ;break 6}FOR i=1 TO 7 DO Close(i) OD DOS() ELSE errflg=1 FIRETURNPROC ScanFile(BYTE ARRAY filestr);Scan the6} ids in filestr.CARD id errflg=0 Open(INFILE,filestr,4,0) IF errflg=0 THEN tmpchar=-1 WHILE EOF(INFILE)=0 D6}O ScanId() IF idname(0) THEN id=BinSearch(idname) IF id THEN MarkList(id) FI 6} FI OD FI Close(INFILE)RETURN4*;RTSCAN.ACT Jeff Reister 4/15/87;For use with public domain;ACTION! runtime library.;Utility to scan an ACTION! source:};file looking for calls to library;routines. Prints out the names of;and number of calls to runtime;library routines.I:}NCLUDE "D:RECORDS.ACT"INCLUDE "D:RUNTIME.ACT"INCLUDE "D:RECUTILS.ACT"INCLUDE "D:FILESCAN.ACT"MODULEBYTE ARRAY files(:}300), outname(30)CARD ARRAY fnames(10)BYTE numfilesPROC Normalize(BYTE ARRAY str, ext);Changes str to a standard :}file name.;Adds extension ext if there is not;one to start with.BYTE len, indx, i len=str(0);remove blanks indx=0:} DO IF (indx=len) THEN len=0 EXIT ELSE indx==+1 IF (str(indx)<>' ) THEN FOR i=indx T:}O len DO str(i-indx+1)=str(i) OD len=len-indx+1 EXIT FI FI OD;add device spec:} IF (len<2) OR (len=2 AND str(2)<>':) OR (len>2 AND str(2)<>': AND str(3)<>':) THEN i=len len==+3 WHILE (i:}) DO str(i+3)=str(i) i==-1 OD SAssign(str,"D1:",1,3) FI;add extension str(0)=len i=3 DO IF (:}i>str(0)) OR (str(i)=' ) THEN str(i)='. i==+1 SAssign(str,ext,i,i+ext(0)) EXIT ELSEIF (str(i)='.):} THEN EXIT FI i==+1 ODRETURNPROC Init() Error=MyError fnames(0)=files FOR numfiles=0 TO 8 DO fn:}ames(numfiles+1)=fnames(numfiles)+30 OD ClrRecs()RETURNPROC GetNames();Get the input and output file names.BYTE ARR:}AY f PrintE("}Ρ") PrintE("(for public domain runtime library)") PutE() PrintE("Enter input fi: }le names ...") numfiles=0 WHILE numfiles<10 DO f=fnames(numfiles) Put('?) InputS(f) IF f(0) THEN No:!}rmalize(f,"ACT") numfiles==+1 ELSE EXIT FI OD IF numfiles THEN PrintE("Enter output file name ...:"}") Put('?) InputS(outname) IF outname(0)=0 THEN numfiles=0 FI FIRETURNPROC More();Do more files?:#}BYTE c PrintF("%EMore (Y/N)?%E") Close(1) Open(1,"K:",4,0) c=GetD(1) Close(1) IF c='N or c='n THEN DOS():$} FIRETURNPROC Scan();Scan a number of source files;for calls to library routines.BYTE i DO Init() GetNam:%}es() IF numfiles THEN PutE() FOR i=1 TO numfiles DO PrintF("Scanning %S%E",fnames(i-1)) Scan:&}File(fnames(i-1)) OD errflg=0 PrintF("%EWriting %S%E",outname) Open(INFILE,outname,8,0) IF err:'}flg=0 THEN device=INFILE PrintList() device=0 FI Close(INFILE) FI More() OD8z------------------------------------------------------------------------ ACTION! Runtime Library Jeff Re>)}ister 400 S LaVenture #83 Mt. Vernon, WA 98273------------------------------------------------------------->*}-----------This disk contains a public domainrun time library for the ACTION!cartridge from OSS. Though there areno cop>+}yrights on the run timelibrary, you must still obtainpermission from OSS before sellingany run time versions of your ownp>,}rograms.The files on the front of the diskare: RUNTIME.ACT - The ACTION! source code for the run time package.>-} RTSCAN.COM - A source file scanner that will tell you what runtime library routines are necessary for your>.} ACTION! program to work without the cartridge. RUNTIME.ASM MATH.ASM IO1.ASM IO2.ASM GRAPHICS.ASM STRI>/}NG.ASM MISC.ASM - MAC/65 source code for the runtime package. RUNTIME.H - Header file used during testi>0}ng of the package. RECORDS.ASM - MAC/65 source code for the records used by the scanner program. RECORDS.ACT>1} RECUTILS.ACT FILESCAN.ACT RTSCAN.ACT - ACTION! source code for the scanner program.The back side of the disk>2} contains acouple of programs (and their sourcecode) that demonstrate use of therun time package. FEDIT.COM is afont edi>3}tor, and REVERSI.COM is areversi game. Both require ajoystick plugged into port 0.USING THE RUN TIME LIBRARY---------->4}----------------The run time library is simply acollection of code blocks thatredefine the routines built in tothe ACTIO>5}N! cartridge.To create a run time version of anACTION! program, all you have to dois add the line INCLUDE "D:RUNTIME.>6}ACT"to your program BEFORE THE FIRSTCALL TO A LIBRARY ROUTINE. Thencompile the program in the usualway. The resultant >7}object program(save it with the monitor's 'W'command) should run with or withoutthe ACTION! cartridge installed.NOTES:>8} 1) Sometimes you will get an error 61 (out of symbol table space) when compiling large programs. Removi>9}ng unnecessary routines from the run time library (see below) will usually solve this problem. 2) The r>:}un time library uses some of the Atari's floating point routines, so the floating point memory may violated>;} by a library call. 3) The cassette buffer ($3FD-47F) is used by some I/O routines. 4) The Break() proced><}ure is not supported. 5) The default Error() routine in the run time library is not the same as that in>=} the cartridge. It simply closes channels 1-7 and jumps to DOS. THE SCANNER PROGRAM RTSCAN----------------->>}---------Most programs call only a smallportion of the library routines, soyou can remove unneeded code blocksfrom the f>?}ile RUNTIME.ACT beforecompiling. RTSCAN makes this easy.After loading RTSCAN.COM from DOS,it will prompt you for the na>@}mes ofthe files making up your sourceprogram and the name of the fileyou want the output to go to. Itscans each source f>A}ile andoutputs a list of the run timelibrary routines requried by yourprogram along with the number ofcalls to each routi>B}ne. You canthen use the ACTION! editor toremove from RUNTIME.ACT all routinesnot on the list (be sure to keep acopy of t>C}he original).NOTES: 1) RTSCAN is case sensitive. 2) Many of the library routines are called indirectly by ot>D}her library routines. RTSCAN lists direct and indirect calls.<Rd M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%BF} DD˙`  }J)Lr J  ((  p L ()   JBG}L= ( L 0q A    IB JC;? D W BH} LL  ` W )LA!  ߰")-݆ p" BI} $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ`BJ}$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H BK}p h  hyhy D L> L JJ    ! LA*` BFBL}7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!LBM}EE !E^ ^ E E7EȩEdE/EȩE  DBN} .L }  ;F d  ;?F7F? ( .   Z D LL d BO} . D  L    p  E` , d)  D L) 0BM݊L݉BP} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ GBQ} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >GBR} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISKB`}.COMLu L1 L ;LHL  T`  `8  ɐ     `TU Ba} L ? .  t`GBJ ~DEHI B V0dVBb}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEhBc}DEL8HI4 0 HI,0 0  9 .G VLOBd},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D8:MEM.SAV J y08 B|DEHIBe} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHIBf} VY8 B V  @  /DE `E:D8:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO Bg}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -Bh}LLu ÝDEHILV 9 .l 9 .l  `` s$B BHBi}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu @} 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDGFk}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRESFl}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N'Fm}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx Fn}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECTFo} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DLFp}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BDFq}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.Fr}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPECFs}COPY--FROM, TO?OPTION NOT ALLOWED631 FREE SECTORS COPYING---D2:HOMETERM.SETl# 0|D .L/%#Ft}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SYFu}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E Fv}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT AFw}LLOWED IN DESTINATION 0 <.|K"(>:,)7<,7%<%%,46-&$$+"%,>6-"$J}% 6-%6-%"%- &, ( -&((>:@:7%,,%$,, @  &"&(J}@(}RUN/ENTER,gg(_+LOAD rerun menu, miniDOS, printout more, *. files print to J}screen% )6-F:B2y,%6-")"II+"&,%+"%,$%+"A',$%+"AU,$+!%,$&%%I J}%)!%)!$*$I6-%$$+ @W,&&%++!%,,$$B !&6-$&&)67,.7<%,1->7<,0J} B C7%<%,0 !67<,..)6-%=67,.7%<%%,C %9 & +-+( 7,/5J}9%V & )')7"AU*"<GV6-?:AUv,2 (ĺJ}#6-2 &$+F:,",g"6.}ˠ堭36. $#! Rr3c@9A&g(!}Ӻ (1) Unlock (2) LockJ}S*("(3) Delete (4) Rename (5) FormatS(#(6) Quit Rerun to MenuT )6-&@HH+ )!%,%+"J}&,%+"A,$%%&T6-@:7,,#!%%6-@:7%,,# &67,.7,$67<,.$36J}7<,.067%,.󠨧3$-*6. }Ԡ렭-$ + K ((J}=>#)/(5"K &%@F$+0A,A4%+B:, ,&!-06-7<,4:=6.7$%,A  !J}%E!)"%$4(堧٧;)E%[  6.67&$+!,,.+/@67J},.DOS.SYSEPU[6-$ $$(塠9  6--$ 9 &%$+F:,!,%J}$+",)6-%Ax$6-&!6-) %$D+(#CHOOSE: Enter Merge Return2):"&@D %J} &O &(}NEW8(POKE842,12:GR.0:E.>:%,FAB%L-O&+7,4SYS)7,4COM!.+ BJ}%A(}7<%, documentation/ &6-$6-F:, (!%/6-( (F:%,  &GJ} --(٠ݠ4)A"$)F:,G % %%(} &S 6-P:E6J}F((Write 'DOS.SYS' file also? =>/)96-"%F(>:&%$,@:,%)@:, %6.9$ D:NEWMENU.J}