CPW.img $8L xC)pJJJJ IH(ȱH:=IH[H`@H^H 2 9 @   I/H`JLNGȄBȄF aK ' faaFF  RJm# KKJ qJ )J ۈJJm  JFȱJGJKaȄM ' 5aaNNJFLGJ`a  XL LG &PRODOS`DaElH$?EGvѶK+`L XX LU ŠϠĠӥS)*+,+`F)) (*=GJFjJJA QE'+ '== `@ STSP8QSS8 m P o R(8RCPWg,a#' @CLIBRARY5 7 LANGUAGES LIB.SOURCE/ 3 LIBRARIESdMACROS)ORCA.HOST +ORCA.SYSTEM &PRODOS};-RELEASE.NOTES=w/ / SMALL.CSYSTEM+UTILITIESE: CLIBRARYvg+' '"PC2ya6 "; )PC.MACROS: Ѭ(Ѭ(*PC.SYSCLEQF!?7 ";"STgBɀ5 "7)ST.MACROS٬7 ٬7 *ST.SUPPORTu-٬ ٬   !"#$%&'()*+,-./0123456789 LIST OFF SYMBOL OFF 65816 ON KEEP A..PCODE MCOPY PC.MACROS **************************************************************** * * PCODE - Pcode Interpreter For Small C * * This is the 65816 multi_bank version of the pcode interperter. * Code and stack have been seperated and now reside in different * banks. * * By Phil Montoya and Mike Westerfield * * Copright (c) 1986 * By The Byte Works Inc. * All rights reserved * **************************************************************** * COMMON DATA PC GEQU $54 program counter MP GEQU $58 mark pointer; start of stack frame SYSESTMIN GEQU $5C stack minimum SYSESTMAX GEQU $60 stack maximum SP GEQU $64 stack/ stack frame pointer SYSFREE GEQU $68 pointer to free heap area SYSUSED GEQU $6C pointer to used heap area WR0 GEQU $70 working registers MR1 GEQU $A4 math registers MR2 GEQU $A8 MR3 GEQU $AC MR4 GEQU $B0 END **************************************************************** * * SYSPCODE - P-Code Interpreter for Small C * **************************************************************** * SYSPCODE START BASE EQU $30000 SIZE EQU $3FFFF 384k CLC switch into full native mode XCE LONG I,M ; ; Initialize the interpreter. ; LDA # 255 bytes of stack frame * * Inputs: * (PC) - # bytes to reserve * **************************************************************** * SYSCENTW START *** LONGA ON LONGI ON SEC LDA SP SBC [PC] STA SP INC PC INC PC RTS ; JMP SYSCSTK END **************************************************************** * * SYSCEQL - Test for Equal * **************************************************************** * SYSCEQL START *** LONGA ON LONGI ON JSR SYSCLOD2 JSL ~CMP4 JNE SYSCFALSE JMP SYSCTRUE END **************************************************************** * * SYSCFJPW - Jump if TOS = False * * Inputs: * (PC) - jump address * **************************************************************** * SYSCFJPW START *** LONGA ON LONGI ON LDY #2 LDA [SP],Y ORA [SP] TAY PHP JSR SYSCPOPI update stack pointer JSR SYSCGET2 PLP BNE RTS STA PC RTS RTS END **************************************************************** * * SYSCGEQ - Test for Signed Greater Than or Equal * **************************************************************** * SYSCGEQ START *** LONGA ON LONGI ON JSR SYSCLOD2 JSL ~CMP4 JGE SYSCTRUE JMP SYSCFALSE END **************************************************************** * * SYSCGRT - Test for Signed Greater Than * **************************************************************** * SYSCGRT START *** LONGA ON LONGI ON JSR SYSCLOD2 JSL ~CMP4 JGT SYSCTRUE JMP SYSCFALSE END **************************************************************** * * SYSCINCI - Increment Integer * **************************************************************** * SYSCINCI START *** LONGA ON LONGI ON CLC LDA [SP] ADC #1 STA [SP] BCC RTS LDY #2 LDA [SP],Y ADC #0 STA [SP],Y RTS RTS END **************************************************************** * * SYSCINDC - Indirect Load of a Character * **************************************************************** * SYSCINDC START *** LONGA ON LONGI ON LDA [SP] STA WR0 LDY #2 LDA [SP],Y STA WR0+2 LDA [WR0] AND #$00FF JMP SYSCBOOL DC R'SYSCFALSE' END **************************************************************** * * SYSCINDI - Indirect Load of an Integer * **************************************************************** * SYSCINDI START *** LONGA ON LONGI ON LDA [SP] STA WR0 LDY #2 LDA [SP],Y STA WR0+2 LDX #0 LDA [WR0] STA [SP] BPL LB1 DEX LB1 TXA LDY #2 STA [SP],Y RTS END **************************************************************** * * SYSCINDL - Indirect Load of Long Integer * **************************************************************** * SYSCINDL START *** LONGA ON LONGI ON LDA [SP] STA WR0 LDY #2 LDA [SP],Y STA WR0+2 LDA [WR0] STA [SP] LDA [WR0],Y STA [SP],Y RTS END **************************************************************** * * SYSCIOR - Bitwise OR * **************************************************************** * SYSCIOR START *** LONGA ON LONGI ON JSR SYSCIBOP LDY #2 LDA [SP],Y ORA [WR0],Y STA [SP],Y LDA [SP] ORA [WR0] STA [SP] RTS END **************************************************************** * * SYSCLAOB - Load Address of Value on Stack Frame * * Inputs: * (PC) - disp * **************************************************************** * SYSCLAOB START *** LONGA ON LONGI ON SEC back up stack pointer LDA SP SBC #4 STA SP JSR SYSCGET1 STA WR0 LDY #2 SEC LDA MP SBC WR0 STA [SP] LDA MP+2 STA [SP],Y RTS ; JMP SYSCSTK END **************************************************************** * * SYSCLAOW - Load Address of Value on Stack Frame * * Inputs: * (PC) - disp * **************************************************************** * SYSCLAOW START *** LONGA ON LONGI ON SEC back up stack pointer LDA SP SBC #4 STA SP JSR SYSCGET2 STA WR0 LDY #2 SEC LDA MP SBC WR0 STA [SP] LDA MP+2 STA [SP],Y RTS ; JMP SYSCSTK END **************************************************************** * * SYSCLDCA - Load Integer Constant Address * * Inputs: * (PC) - low address (high address assumed to be in code bank) * **************************************************************** * SYSCLDCA START *** LONGA ON LONGI ON SEC back up stack pointer LDA SP SBC #4 STA SP JSR SYSCGET2 STA [SP] LDY #2 LDA #^MAIN STA [SP],Y RTS ; JMP SYSCSTK END **************************************************************** * * SYSCLDCI - Load Integer Constant * * Inputs: * Y - op code*2 (also is the constant * 2) * **************************************************************** * SYSCLDCI START *** LONGA ON LONGI ON SEC back up stack pointer LDA SP SBC #4 STA SP TYA LSR A JSR SYSCBOOL RTS ; JMP SYSCSTK DC R'SYSCFALSE' END **************************************************************** * * SYSCLDCIB - Load Integer Constant * * Inputs: * (PC) - byte value * **************************************************************** * SYSCLDCIB START *** LONGA ON LONGI ON SEC back up stack pointer LDA SP SBC #4 STA SP JSR SYSCGET1 JSR SYSCBOOL RTS ; JMP SYSCSTK DC R'SYSCFALSE' END **************************************************************** * * SYSCLDCIW - Load Integer Constant * * Inputs: * (PC) - word value * **************************************************************** * SYSCLDCIW START *** LONGA ON LONGI ON SEC back up stack pointer LDA SP SBC #4 STA SP JSR SYSCGET2 LDX #0 STA [SP] TAY BPL LB1 DEX LB1 TXA LDY #2 STA [SP],Y RTS ; JMP SYSCSTK END **************************************************************** * * SYSCLDCIL - Load Long Integer Constant * * Inputs: * (PC) - word value * **************************************************************** * SYSCLDCIL START *** LONGA ON LONGI ON SEC back up stack pointer LDA SP SBC #4 STA SP LDA [PC] STA [SP] LDY #2 LDA [PC],Y STA [SP],Y CLC update the PC LDA PC ADC #4 STA PC RTS ; JMP SYSCSTK END **************************************************************** * * SYSCLDOCW - Load Character, Absolute * * Inputs: * (PC) - addr * **************************************************************** * SYSCLDOCW START ??? LONGA ON LONGI ON SEC back up stack pointer LDA SP SBC #4 STA SP JSR SYSCGET2 get address of character STA WR0 LDA #^MAIN STA WR0+2 LDA [WR0] load value AND #$00FF JSR SYSCBOOL RTS ; JMP SYSCSTK DC R'SYSCFALSE' END **************************************************************** * * SYSCLDOIW - Load Integer, Absolute * * Inputs: * (PC) - addr * **************************************************************** * SYSCLDOIW START ??? LONGA ON LONGI ON SEC back up stack pointer LDA SP SBC #4 STA SP JSR SYSCGET2 STA WR0 LDA #^MAIN STA WR0+2 LDX #0 LDA [WR0] STA [SP] BPL LB1 DEX LB1 TXA LDY #2 STA [SP],Y RTS ; JMP SYSCSTK END **************************************************************** * * SYSCLDOLW - Load Long Integer, Absolute * * Inputs: * (PC) - addr * **************************************************************** * SYSCLDOLW START ??? LONGA ON LONGI ON SEC back up stack pointer LDA SP SBC #4 STA SP JSR SYSCGET2 STA WR0 LDA #^MAIN STA WR0+2 LDA [WR0] STA [SP] LDY #2 LDA [WR0],Y STA [SP],Y RTS ; JMP SYSCSTK END APPEND PC.SYSCLEQ ;<=>?@ABCDE MACRO &LAB DBNE &R,&BP AIF "&R"="X",.L1 AIF "&R"="Y",.L1 &LAB DEC &R BNE &BP MEXIT .L1 &LAB DE&R BNE &BP MEND MACRO &LAB JGE &BP &LAB BLT *+5 BRL &BP MEND MACRO &LAB JGT &BP &LAB BEQ *+7 BLT *+5 BRL &BP MEND MACRO &LAB JLE &BP &LAB BEQ *+4 BGE *+5 BRL &BP MEND MACRO &LAB JLT &BP &LAB BGE *+5 BRL &BP MEND MACRO &LAB JNE &BP &LAB BEQ *+5 BRL &BP MEND MACRO &LAB LONG &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB "&A"="M" &I SETB "&A"="I" AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.&M &I SETB ("&B"="I").OR.&I .A &LAB REP #&M*32+&I*16 AIF .NOT.&M,.B LONGA ON .B AIF .NOT.&I,.C LONGI ON .C MEND MACRO &LAB SHORT &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB "&A"="M" &I SETB "&A"="I" AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.&M &I SETB ("&B"="I").OR.&I .A &LAB SEP #&M*32+&I*16 AIF .NOT.&M,.B LONGA OFF .B AIF .NOT.&I,.C LONGI OFF .C MEND MACRO &LAB PUT2 &N1,&F1,&CR &LAB ANOP LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A AIF C:&F1,.B LCLC &F1 &F1 SETC #0 .B ~LDX &F1 ~LDA "&N1" AIF C:&CR,.C CLC AGO .D .C SEC .D JSL ~PUT2 AIF (&LA+&LI)=2,.I SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.H LONGA OFF .H AIF &LI,.I LONGI OFF .I MEND MACRO &LAB PUTS &N1,&F1,&CR &LAB ANOP LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A AIF C:&F1,.B LCLC &F1 &F1 SETC #0 .B ~LDX &F1 LCLC &C &C AMID &N1,1,1 AIF "&C"="#",.E AIF "&C"="{",.C AIF "&C"="[",.D LDA #&N1 LDY #^&N1 AGO .F .C &N1 AMID &N1,2,L:&N1-2 LDA &N1 ~A&SYSCNT LDY #^~A&SYSCNT AGO .F .D &N1 AMID &N1,2,L:&N1-2 LDA &N1 LDY &N1+2 AGO .F .E LDY #^~A&SYSCNT LDA #~A&SYSCNT AIF C:&N1>127,.E1 BRA ~C&SYSCNT AGO .E2 .E1 BRL ~C&SYSCNT .E2 ~A&SYSCNT DC 2I1"L:~B&SYSCNT" &N1 AMID "&N1",2,L:&N1-1 ~B&SYSCNT DC C&N1 ~C&SYSCNT ANOP .F AIF C:&CR,.G CLC AGO .H .G SEC .H JSL ~PUTS AIF (&LA+&LI)=2,.J SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.I LONGA OFF .I AIF &LI,.J LONGI OFF .J MEND MACRO ~LDX &N LCLC &C &C AMID &N,1,1 AIF "&C"<>"{",.A &N AMID &N,2,L:&N-2 &N SETC (&N) AGO .B .A AIF "&C"="[",.B LDX &N MEXIT .B LDA &N TAX MEND MACRO ~LDA &N LCLC &C &C AMID &N,1,1 AIF "&C"<>"{",.A &N AMID &N,2,L:&N-2 &N SETC (&N) .A LDA &N MEND MACRO &LAB FINDBUFF &ADR,&LEN &LAB ANOP LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A LDA #&ADR LDX &LEN JSL ~FBUF AIF (&LA+&LI)=2,.I SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.H LONGA OFF .H AIF &LI,.I LONGI OFF .I MEND MACRO &LAB PRINT &STR AIF C:&STR=0,.A &LAB JSR SYSCRITE DC C'&STR' DC H'0D 00' MEXIT .A LDA #$D JSL ~COUT MEND MACRO &LAB PRINT2 &STR &LAB JSR SYSCRITE DC C'&STR' DC H'00' MEND MACRO &LAB DBPL &R,&BP AIF "&R"="X",.L1 AIF "&R"="Y",.L1 &LAB DEC &R BPL &BP MEXIT .L1 &LAB DE&R BPL &BP MEND MACRO &LAB PRHEX &NUM &LAB SEC XCE LDA &NUM+1 JSR $FDDA LDA &NUM JSR $FDDA CLC XCE AIF .NOT.(S:LONGA+S:LONGI),.A REP #S:LONGA*32+S:LONGI*16 .A MEND MACRO &LAB RDKEY &NOCURSOR &LAB SEC XCE JSR $FD AIF C:&NOCURSOR=0,.A DC H"98" AGO .B .A DC H"99" .B DS 2 CLC XCE AIF .NOT.(S:LONGA+S:LONGI),.A REP #S:LONGA*32+S:LONGI*16 AND #$00FF .A MEND MACRO &LAB ADD4 &N1,&N2,&N3 &LAB CLC AIF C:&N3,.A LCLC &N3 .A ~ADD &N1,&N2,&N3,ADC,BCC,INC MEND MACRO &LAB SUB4 &N1,&N2,&N3 &LAB SEC AIF C:&N3,.A LCLC &N3 .A ~ADD &N1,&N2,&N3,SBC,BCS,DEC MEND MACRO ~ADD &N1,&N2,&N3,&ADC,&BCC,&INC LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A LCLB &IN LCLC &C LCLC &N12 LCLC &N22 LCLC &N32 &C AMID &N1,1,1 AIF "&C"="#",.D AIF "&C"="{",.B AIF "&C"="[",.C &N12 SETC &N1+2 AGO .E .B &N1 AMID &N1,2,L:&N1-2 &N1 SETC (&N1) .C &IN SETB 1 &N12 SETC "&N1,Y" AGO .E .D &N12 AMID &N1,2,L:&N1-1 &N12 SETC #^&N12 .E &C AMID &N2,1,1 AIF "&C"="#",.H AIF "&C"="{",.F AIF "&C"="[",.G &N22 SETC &N2+2 AGO .I .F &N2 AMID &N2,2,L:&N2-2 &N2 SETC (&N2) .G &IN SETB 1 &N22 SETC "&N2,Y" AGO .I .H &N22 AMID &N2,2,L:&N2-1 AIF (C:&N3=0).AND.(&N22<65536).AND.(.NOT.&IN),.P &N22 SETC #^&N22 .I AIF C:&N3,.J LCLC &N3 &N3 SETC &N1 &N32 SETC "&N12" AGO .N .J &C AMID &N3,1,1 AIF "&C"="#",.M AIF "&C"="{",.K AIF "&C"="[",.L &N32 SETC &N3+2 AGO .N .K &N3 AMID &N3,2,L:&N3-2 &N3 SETC (&N3) .L &IN SETB 1 &N32 SETC "&N3,Y" AGO .N .M &N32 AMID &N3,2,L:&N3-1 &N32 SETC #^&N32 .N AIF .NOT.&IN,.O LDY #2 .O LDA &N1 &ADC &N2 STA &N3 LDA &N12 &ADC &N22 STA &N32 AGO .Q .P LDA &N1 &ADC &N2 STA &N1 &BCC ~&SYSCNT &INC &N12 ~&SYSCNT ANOP .Q AIF (&LA+&LI)=2,.S SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.R LONGA OFF .R AIF &LI,.S LONGI OFF .S MEND GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef**************************************************************** * * SYSCLEQ - Test for Signed Less Than or Equal * **************************************************************** * SYSCLEQ START *** LONGA ON LONGI ON JSR SYSCLOD2 JSL ~CMP4 JLE SYSCTRUE JMP SYSCFALSE END **************************************************************** * * SYSCLES - Test for Signed Less Than * **************************************************************** * SYSCLES START *** LONGA ON LONGI ON JSR SYSCLOD2 JSL ~CMP4 JLT SYSCTRUE JMP SYSCFALSE END **************************************************************** * * SYSCLND - Logical AND * **************************************************************** * SYSCLND START *** LONGA ON LONGI ON CLC C indicates if its an AND or an OR BCC LB1 SYSCLOR ENTRY SEC LB1 PHP JSR SYSCIBOP get operand addressed LDY #2 convert one operand to boolean LDA #0 LB2 ORA [WR0],Y ORA [WR0] TAY BEQ LB3 LDA #1 LB3 STA WR0 LDY #2 convert second operand to boolean LDA #0 LB4 ORA [SP],Y ORA [SP] TAY BEQ LB5 LDA #1 LB5 PLP get operation type BCC LB6 ORA WR0 do an OR JMP SYSCBOOL LB6 AND WR0 do an AND JMP SYSCBOOL DC R'SYSCFALSE' END **************************************************************** * * SYSCMOD - Mod Operation * **************************************************************** * SYSCMOD START *** LONGA ON LONGI ON JSR SYSCLOD2 JSL ~DIV4 LDA MR4 STA [SP] LDA MR4+2 LDY #2 STA [SP],Y RTS END **************************************************************** * * SYSCMPI - Signed Multiplication * **************************************************************** * SYSCMPI START *** LONGA ON LONGI ON JSR SYSCLOD2 JSL ~MUL4 LDA MR3 STA [SP] LDA MR3+2 LDY #2 STA [SP],Y RTS END **************************************************************** * * SYSCMST - Mark Stack * **************************************************************** * SYSCMST START *** SEC back up stack pointer LDA SP SBC #4 STA SP LDY #2 LDA MP STA [SP],Y RTS ; JMP SYSCSTK END **************************************************************** * * SYSCNEQ - Test for Not Equal * **************************************************************** * SYSCNEQ START *** LONGA ON LONGI ON JSR SYSCLOD2 JSL ~CMP4 JNE SYSCTRUE JMP SYSCFALSE END **************************************************************** * * SYSCNGI - Negation * **************************************************************** * SYSCNGI START *** SEC LDA #0 SBC [SP] STA [SP] LDY #2 LDA #0 SBC [SP],Y STA [SP],Y RTS END **************************************************************** * * SYSCNOT - Logical NOT * **************************************************************** * SYSCNOT START *** LONGA ON LONGI ON LDY #2 LDA #0 LB1 ORA [SP],Y ORA [SP] TAY BEQ LB2 LDA #0 JMP SYSCBOOL LB2 LDA #1 JMP SYSCBOOL DC R'SYSCFALSE' END **************************************************************** * * SYSCOCP - One's Complement * **************************************************************** * SYSCOCP START *** LDY #2 LDA [SP],Y EOR #$FFFF STA [SP],Y LDA [SP] EOR #$FFFF STA [SP] RTS END **************************************************************** * * SYSCPOPI - Pop Value from TOS * * Note: assumes that the stack doesn't straddle bank boundry * **************************************************************** * SYSCPOPI START *** LONGA ON LONGI ON CLC LDA SP ADC #4 STA SP RTS END **************************************************************** * * SYSCSBI - Signed Subtraction * **************************************************************** * SYSCSBI START *** LONGA ON LONGI ON JSR SYSCIBOP SEC LDA [SP] SBC [WR0] STA [SP] LDY #2 LDA [SP],Y SBC [WR0],Y STA [SP],Y RTS END **************************************************************** * * SYSCSHL - Shift Left * **************************************************************** * SYSCSHL START *** LONGA ON LONGI ON JSR SYSCLOD2 get operands LDA MR2 if shifting by more than 256 AND #$FF00 bits, the rseult must be ORA MR2+2 0 (false) BEQ LB1 JMP SYSCFALSE LB1 LDX MR2 get # bits to shift BEQ LB3 LB2 ASL MR1 shift the bits ROL MR1+2 DBNE X,LB2 LB3 LDA MR1 return result STA [SP] LDA MR1+2 LDY #2 STA [SP],Y RTS END **************************************************************** * * SYSCSHR - Shift Right * **************************************************************** * SYSCSHR START *** LONGA ON LONGI ON JSR SYSCLOD2 get operands LDA MR2 branch if shifting by < 256 bits AND #$FF00 ORA MR2+2 BEQ LB2 LDX #0 result determined by sign bit LDA MR1+2 BPL LB1 DEX LB1 STX MR1 STX MR1+2 BRA LB4 LB2 LDX MR2 get # bits to shift BEQ LB4 LB3 LDA MR1+2 shift the bits ASL A ROR MR1+2 ROR MR1 DBNE X,LB3 LB4 LDA MR1 return result STA [SP] LDA MR1+2 LDY #2 STA [SP],Y RTS END **************************************************************** * * SYSCTJPW - Jump if TOS = True * * Inputs: * (PC) - jump address * **************************************************************** * SYSCTJPW START *** LONGA ON LONGI ON LDY #2 LDA #0 ORA [SP],Y ORA [SP] TAY PHP JSR SYSCPOPI JSR SYSCGET2 PLP BEQ RTS STA PC RTS RTS END **************************************************************** * * SYSCUJPW - Unconditional Jump * **************************************************************** * SYSCUJPW START *** LONGA ON LONGI ON JSR SYSCGET2 STA PC RTS END **************************************************************** * * SYSCULE - Test for Unsigned Less Than or Equal * **************************************************************** * SYSCULE START *** LONGA ON LONGI ON JSR SYSCUTST JLE SYSCTRUE JMP SYSCFALSE END **************************************************************** * * SYSCULT - Test for Unsigned Less Than * **************************************************************** * SYSCULT START *** LONGA ON LONGI ON JSR SYSCUTST JLT SYSCTRUE JMP SYSCFALSE END **************************************************************** * * SYSCUGE - Test for Unsigned Greater Than or Equal * **************************************************************** * SYSCUGE START *** LONGA ON LONGI ON JSR SYSCUTST JGE SYSCTRUE JMP SYSCFALSE END **************************************************************** * * SYSCUGT - Test for Unsigned Greater Than * **************************************************************** * SYSCUGT START *** LONGA ON LONGI ON JSR SYSCUTST JGT SYSCTRUE JMP SYSCFALSE END **************************************************************** * * SYSCXJP - Indexed Jump * * Inputs: * TOS - addr of default lab * TOS-1 - disp to end of table * TOS-2 - disp into jump table * **************************************************************** * SYSCXJP START ??? LONGA ON LONGI ON LDY #8 see if disp is past end of list LDA [SP],Y LDY #4 CMP [SP],Y BGE LB2 LDY #8 no -> index into table CLC LDA [SP],Y ADC PC STA WR0 LDA PC+2 STA WR0+2 LDA [WR0] STA PC BRA LB3 LB2 LDA [SP] yes -> use default label STA PC LB3 CLC remove old stuff from stack LDA SP ADC #12 STA SP RTS END **************************************************************** * * SYSCXOR - Bitwise Exclusive OR * **************************************************************** * SYSCXOR START *** JSR SYSCIBOP LDY #2 LDA [WR0],Y EOR [SP],Y STA [SP],Y LDA [WR0] EOR [SP] STA [SP] RTS END **************************************************************** * * SYSCFALSE - Save a False Result * SYSCTRUE - Save a True Result * SYSCBOOL - Save a Byte Result * **************************************************************** * SYSCFALSE START *** LONGA ON LONGI ON LDA #0 BEQ LB1 SYSCTRUE ENTRY LDA #1 SYSCBOOL ENTRY LB1 STA [SP] LDA #0 LDY #2 STA [SP],Y RTS END **************************************************************** * * SYSCGET1 - Get a Byte From the Code Stream * * Inputs: * PC - location to get byte from * * Outputs: * PC - updated * A - byte * **************************************************************** * SYSCGET1 START *** LONGA ON LONGI ON LDA [PC] AND #$00FF INC PC RTS END **************************************************************** * * SYSCGET2 - Get a Word From the Code Stream * * Inputs: * PC - location to get word from * * Outputs: * PC - updated * A - byte * **************************************************************** * SYSCGET2 START *** LONGA ON LONGI ON LDA [PC] INC PC INC PC RTS END **************************************************************** * * SYSCUTST - Unsigned Test * **************************************************************** * SYSCUTST START *** LONGA ON LONGI ON JSR SYSCLOD2 LDY #2 LB1 LDA [SP],Y CMP [WR0],Y BNE LB2 LDA [SP] CMP [WR0] LB2 RTS END **************************************************************** * * SYSCLOD2 - Load Two Operands * * Inputs: * SP - stack pointer * * Outputs: * SP - result addr * MR1 - first operand * MR2 - second operand * **************************************************************** * SYSCLOD2 START *** LONGA ON LONGI ON JSR SYSCIBOP set up for binary op LDA [SP] STA MR1 LDA [WR0] STA MR2 LDY #2 LDA [SP],Y STA MR1+2 LDA [WR0],Y STA MR2+2 RTS END **************************************************************** * * SYSCIBOP - Set Up for Binary Operation * * Inputs: * SP - current eval stack pointer * * Outputs: * SP - points to first operand, result location * WR0 - points to second operand * * NOTE: Assumes stack will not stradle bank boundry * **************************************************************** * SYSCIBOP START *** LONGA ON LONGI ON CLC LDA SP STA WR0 ADC #4 STA SP LDA SP+2 STA WR0+2 RTS END **************************************************************** * * SYSCRNEG - Save a Negative Result * **************************************************************** * SYSCRNEG START *** LONGA ON LONGI ON LDA #$FFFF STA [SP] LDY #2 STA [SP],Y RTS END **************************************************************** * * SYSCSTK - Check for Stack Overflow * * Inputs: * SP - stack pointer * SPMAX - max allowed SP * **************************************************************** * SYSCSTK START *** LONGA ON LONGI ON LDA SP+2 CMP SYSESTMAX+2 BNE ST1 LDA SP CMP SYSESTMAX ST1 BLT ERR RTS ERR PRINT2 'Program Stack Overflow' SEC XCE JMP JMP JMP END **************************************************************** * * SYSCRITE - Write a String * * Inputs: * return addr+1 points to zero terminated string * **************************************************************** * SYSCRITE START *** LONGA ON LONGI ON PLA fetch return addr STA WR0 LB1 INC WR0 get the next char LDA (WR0) AND #$00FF BEQ LB2 branch if done (zero terminator) JSL ~COUT print character BRA LB1 next char LB2 INC WR0 set return addr JMP (WR0) return to caller END **************************************************************** * * SYSSTKBP - Update SP * **************************************************************** * SYSSTKBP START *** LONGA ON LONGI ON SEC LDA SP SBC #4 STA SP RTS END hijklmnopqrstuvwxyz{|}~ LIST OFF SYMBOL OFF 65816 ON KEEP A..CLIB MCOPY ST.MACROS **************************************************************** * * CLIB - 65816 Standard Libraries for Small C * * By Phil Montoya and Mike Westerfield * * Copright (c) 1986 * By The Byte Works Inc. * All rights reserved * **************************************************************** * COMMON DATA PC GEQU $54 program counter MP GEQU $58 mark pointer; start of stack frame SYSESTMIN GEQU $5C stack minimum SYSESTMAX GEQU $60 stack maximum SP GEQU $64 stack/ stack frame pointer SYSFREE GEQU $68 pointer to free heap area SYSUSED GEQU $6C pointer to used heap area WR0 GEQU $70 working registers WR1 GEQU $71 WR2 GEQU $72 WR3 GEQU $73 WR4 GEQU $74 WR5 GEQU $75 WR6 GEQU $76 WR7 GEQU $77 MR1 GEQU $A4 math registers MR2 GEQU $A8 MR3 GEQU $AC MR4 GEQU $B0 END **************************************************************** * * CALLOC - Allocates A Region Of Memory Large Enough To Hold * An Array of TOS-1 elements of size TOS. * This routine also clears memory allocated to 0. * * Inputs: * TOS - size of elements * TOS-1 - # of elements * * Outputs: * TOS - pointer to memory allocated 0 if no memory found. * **************************************************************** * CALLOC START LONGA ON LONGI ON NOP switch to machine code LDA [SP] SYSS1 = TOS STA MR1 LDY #2 LDA [SP],Y STA MR1+2 INY SYSS2 = TOS-1 INY LDA [SP],Y STA MR2 INY INY LDA [SP],Y STA MR2+2 JSL ~MUL4 SYSS1 = SYSS1 * SYSS2 LDA MR3 STA WR0 LDA MR3+2 STA WR0+2 JSR SYSCNEW allocate WR0 bytes JSR SYSCLEARN clear the storage allocated LDA WR0 return the result STA [SP] LDY #2 LDA WR0+2 STA [SP],Y RET END **************************************************************** * * CFREE - Deallocates Region Of Memory Previously Allocated by * CALLOC * * Inputs: * TOS - pointer to memory * **************************************************************** * CFREE START LONGA ON LONGI ON NOP switch to machine code LDA [SP] WR0 = TOS STA WR0 LDY #2 LDA [SP],Y STA WR0+2 JSR SYSDEALOC de-allocate memory RET END **************************************************************** * * FCLOSE - Close a File * * Inputs: * TOS - reference number of file to close * * Outputs: * TOS - 0 if no error, else EOF (-1) * **************************************************************** * FCLOSE START LONGA ON LONGI ON NOP switch to machine code LDA [SP] get ref number (ok to store 2 byte num) STA CL_REF CLOSE CL_DCB close the file AND #$00FF BEQ LB1 set return code LDA #$FFFF LB1 STA [SP] save it on stack LDY #2 STA [SP],Y RET CL_DCB DC I1'1' CL_REF DS 2 extra byte for 2 byte store END **************************************************************** * * FGETC - Get a Character * * Inputs: * TOS - file reference number * * Outputs: * TOS - character read (EOF if at end of file) * * NOTE : THIS ROUTINE WILL ONLY WORK IN BANK 0 * **************************************************************** * FGETC START LONGA ON LONGI ON NOP switch to machine code LDA [SP] set ref # AND #$00FF BEQ STDIN SHORT M STA RD_REF LONG M RELEASE #CH,#1 read a character READ RD_DCB AND #$00FF PHA RESERVE #CH,#1 PLA BNE LB1 branch if error LDA CH save char on TOS AND #$00FF JSR SYSCBOOL RET LB1 LDA #$FFFF set error (TOS = EOF) STA [SP] LDY #2 STA [SP],Y RET STDIN SEC XCE JSR IN get char from standard input CLC XCE LONG I,M AND #$007F JSR SYSCBOOL RET IN JMP ($38) RD_DCB DC I1'4' RD_REF DS 1 DC A'CH' DC I'1' DS 2 CH DS 1 DC R'SYSCFALSE' END **************************************************************** * * FOPEN - Open a File * * Inputs: * TOS-1 - pointer to the file name * TOS - pointer to a type code: * "r" - open a file for reading * "w" - create and open a new file for writing * * Outputs: * TOS - file reference number * * NOTE : THIS ROUTINE WILL ONLY WORK IN BANK 0 * **************************************************************** * FOPEN START LONGA ON LONGI ON NOP switch to machine code LDY #4 get the file name LDA [SP],Y STA WR0 INY INY LDA [SP],Y STA WR0+2 SHORT I,M copy over the file name LDY #0 LB1 LDA [WR0],Y BEQ LB2 INY STA FNAME,Y CPY #65 BNE LB1 LB2 STY FNAME LONG I,M LDA [SP] split on open type STA WR0 LDY #2 LDA [SP],Y STA WR0+2 LDA [WR0] AND #$00FF CMP #'R' BEQ READ CMP #'r' BEQ READ CMP #'W' BEQ WRITE CMP #'w' BNE IOERR ; ; WRITE - Open a file for output. ; WRITE GET_INFO GI_DCB see if the file exists AND #$00FF BNE WT1 DESTROY DS_DCB yes - destroy it WT1 CREATE CR_DCB create the file AND #$00FF BNE IOERR ; ; READ - Open an existing file. ; READ FINDBUFF OP_BUFF,#1024 open the file BCC IOERR OPEN OP_DCB AND #$00FF BNE IOERR LDA OP_REF AND #$00FF JSR SYSCBOOL RET IOERR JSR SYSCFALSE RET ; ; Local Data Areas ; OP_DCB DC I1'3' DC A'FNAME' OP_BUFF DS 2 OP_REF DS 1 CR_DCB DC I1'7' DC A'FNAME' DC H'C3' DC H'B0' DC H'01 00' DC I1'1' CR_TIME DS 4 DS_DCB DC I1'1' DC A'FNAME' GI_DCB DC I1'10' DC A'FNAME' DS 15 FNAME DS 65 END **************************************************************** * * FPUTC - Put a Character * * Inputs: * TOS-1 - character to put * TOS - file reference number * * Outputs: * TOS - character read (EOF if error) * **************************************************************** * FPUTC START LONGA ON LONGI ON NOP switch to machine code SHORT I,M LDA [SP] set ref number STA WR_REF LDY #4 get character to put LDA [SP],Y STA BUFF LONG I,M WRITE WR_DCB write a character AND #$00FF BEQ RTS branch if no error JSR SYSCRNEG RET RTS JSR SYSCFALSE RET WR_DCB DC I1'4' WR_REF DS 1 WR_BUFF DC A'BUFF' DC I'1' DS 2 BUFF DS 1 END **************************************************************** * * FREAD - Read from a file * * Inputs: * TOS-3 - pointer to buffer * TOS-2 - size_of_ptr * TOS-1 - count * TOS - file reference number * * Outputs: * TOS - # of characters written * **************************************************************** * FREAD START TRANSIZE EQU 1024 size of transfer buffer BYREAD EQU WR0 bytes read (return value) BYTOREAD EQU WR4 bytes to read DATABUFF EQU $2 data buffer USEBUFF EQU $6 transfer buffer LONGA ON LONGI ON ; ; Retrieve the inputs ; NOP switch to machine code SHORT M LDA [SP] set ref number STA RD_REF LONG M LDX #4 LDY #4 FW1 LDA [SP],Y get TOS-1 and TOS-2 STA WR0-4,Y INY INY DEX BNE FW1 MUL4 WR0,WR4,BYTOREAD compute # of bytes to read LDY #12 get buffer pointer LDA [SP],Y STA DATABUFF INY INY LDA [SP],Y STA DATABUFF+2 STZ BYREAD initialize the bytes read STZ BYREAD+2 (this is used as the return value) ; ; Do the write ; FINDBUFF USEBUFF,#TRANSIZE find the transfer buffer JCC RETURN LDA USEBUFF STA RD_DATA LDA BYTOREAD see if there are any bytes to write ORA BYTOREAD+2 JEQ RETURN FW2 LDA BYTOREAD+2 CMP #^TRANSIZE BNE FW2A LDA BYTOREAD CMP # S2 * - - if S1 < S2 * * Note: strings are compared both lexiographically and * length wise. * **************************************************************** * STRCMP START LONGA ON LONGI ON NOP LDY #0 LDX #4 ST LDA [SP],Y get the addresses STA WR0,Y INY INY DEX BNE ST LDY #0 do comparison S1 to S2 ST1 SHORT M LDA [WR4],Y CMP [WR0],Y BNE DIFFERENT CMP #0 BEQ EQUAL INY BRA ST1 EQUAL LONG M JSR SYSCFALSE strings are equal return a 0 RET DIFFERENT LONG M BLT LESS JSR SYSCTRUE S1 is greater than S2 return positive RET LESS JSR SYSCRNEG S1 is less than S2 return negative RET END **************************************************************** * * STRCPY - Copies S2 to S1 * * Inputs: * TOS - pointer to S2 * TOS-1 - pointer to S1 * * Outputs: * S1 - pointer to first character of S1 * **************************************************************** * STRCPY START LONGA ON LONGI ON NOP LDY #0 LDX #4 ST LDA [SP],Y get the addresses STA WR0,Y INY INY DEX BNE ST LDY #0 SHORT M ST1 LDA [WR0],Y BEQ RTS STA [WR4],Y INY BRA ST1 RTS STA [WR4],Y set null terminator LONG M LDA WR4 return pointer to S1 STA [SP] LDY #2 LDA WR4+2 STA [SP],Y RET END **************************************************************** * * STRLEN - Returns The Length of String 1 * * Inputs: * TOS - pointer to S1 * * Outputs: * length of S1 * **************************************************************** * STRLEN START LONGA ON LONGI ON NOP LDA [SP] get the string pointer STA WR0 LDY #2 LDA [SP],Y STA WR0+2 LDY #0 LN1 LDA [WR0],Y check for null terminator AND #$00FF BEQ RTS INY advance counter BRA LN1 RTS STY WR0 store low order JMP SYSRETWR0 END **************************************************************** * * STRNCAT - Concatonate String S2 to String S1 for N Characters * * Inputs: * TOS - number of charcaters to append * TOS-1 - S2 (string1) * TOS-2 - S1 (string2) * **************************************************************** * STRNCAT START LONGA ON LONGI ON NOP LDA [SP] get the length of string STA MR1 if num = 0 or num < 0 then quit BMI RTS BEQ RTS LDY #4 LDA [SP],Y STA WR4 INY INY LDA [SP],Y STA WR4+2 INY INY LDA [SP],Y get pointer to S1 STA WR0 INY INY LDA [SP],Y STA WR0+2 LDY #0 get to the end of S1 ST1 LDA [WR0],Y AND #$00FF BEQ ST2 INY BRA ST1 ST2 STY MR2 S1 index STZ MR3 S2 index ST2A LDY MR3 copy over the strings LDA [WR4],Y AND #$00FF BEQ ST5 LDY MR2 SHORT M STA [WR0],Y LONG M INC MR2 INC MR3 DEC MR1 move n bytes BNE ST2A ST5 LDA #0 LDY MR2 set the null terminator SHORT M STA [WR0],Y LONG M RTS RET END **************************************************************** * * STRNCMP - String Compare Function * * Inputs: * TOS - length to compare (0 indicates null compare) * TOS-1 - S2 (string1) * TOS-2 - S1 (string2) * * Outputs: * 0 - if strings are equal * + - if S1 > S2 * - - if S1 < S2 * * Note: strings are compared both lexiographically and * length wise. * **************************************************************** * STRNCMP START LONGA ON LONGI ON NOP LDA [SP] get the length STA MR1 if num = 0 or num < 0 then strings BMI EQUAL are equal BEQ EQUAL LDY #4 LDA [SP],Y get pointer to S2 STA WR4 INY INY LDA [SP],Y STA WR4+2 INY INY LDA [SP],Y get pointer to S1 STA WR0 INY INY LDA [SP],Y STA WR0+2 LDY #0 do comparison S1 to S2 ST1 SHORT M LDA [WR0],Y CMP [WR4],Y LONG M BLT LESS BGT GREATER TAX check for end of string if string is BEQ EQUAL short INY ST2 DEC MR1 BNE ST1 EQUAL JSR SYSCFALSE strings are equal return a 0 RET GREATER JSR SYSCTRUE S1 is greater than S2 return positive RET LESS JSR SYSCRNEG S1 is less than S2 return negative RET END **************************************************************** * * TOINT - Convert Character to Integer * * Inputs: * TOS - character * * Outputs: * TOS - integer * **************************************************************** * TOINT START LONGA ON LONGI ON NOP LDA [SP] AND #$00FF CMP #'0' BLT ERROR CMP #'9'+1 BLT DIGIT CMP #'A' BLT ERROR CMP #'F'+1 BLT HEX CMP #'a' BLT ERROR CMP #'f'+1 BLT HEXL ERROR JSR SYSCRNEG return a negative value RET HEXL AND #%11011111 convert to upper case HEX SEC SBC #'A'-'9'-1 convert to DIGIT AND #$0F JSR SYSCBOOL RET END **************************************************************** * * TOUPPER - Change Char to Uppercase * * Inputs: * TOS - character to change * * Outputs: * TOS - uppercase character * **************************************************************** * TOUPPER START LONGA ON LONGI ON NOP switch to machine code LDA [SP] quit if it's not lowercase AND #$00FF CMP #'a' BLT RTS CMP #'z'+1 BGE RTS AND #%11011111 change it to uppercase STA [SP] save it RTS RET END APPEND ST.SUPPORT MACRO &LAB CLOSE &DCB &LAB PHP SEC XCE JSR $BF00 DC H"CC" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB CREATE &DCB &LAB PHP SEC XCE JSR $BF00 DC H"C0" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB DESTROY &DCB &LAB PHP SEC XCE JSR $BF00 DC H"C1" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB FINDBUFF &ADR,&LEN &LAB ANOP LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A LDA #&ADR LDX &LEN JSL ~FBUF AIF (&LA+&LI)=2,.I SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.H LONGA OFF .H AIF &LI,.I LONGI OFF .I MEND MACRO &LAB GET_INFO &DCB &LAB PHP SEC XCE JSR $BF00 DC H"C4" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB OPEN &DCB &LAB PHP SEC XCE JSR $BF00 DC H"C8" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB WRITE &DCB &LAB PHP SEC XCE JSR $BF00 DC H"CB" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB LONG &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB "&A"="M" &I SETB "&A"="I" AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.&M &I SETB ("&B"="I").OR.&I .A &LAB REP #&M*32+&I*16 AIF .NOT.&M,.B LONGA ON .B AIF .NOT.&I,.C LONGI ON .C MEND MACRO &LAB SHORT &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB "&A"="M" &I SETB "&A"="I" AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.&M &I SETB ("&B"="I").OR.&I .A &LAB SEP #&M*32+&I*16 AIF .NOT.&M,.B LONGA OFF .B AIF .NOT.&I,.C LONGI OFF .C MEND MACRO &LAB RET &LAB JMP SYSCRET MEND MACRO &LAB RESERVE &START,&LEN &LAB ANOP LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A LDA &START LDX &LEN JSL ~RESV AIF (&LA+&LI)=2,.I SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.H LONGA OFF .H AIF &LI,.I LONGI OFF .I MEND MACRO &LAB RELEASE &START,&LEN &LAB ANOP LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A LDA &START LDX &LEN JSL ~RELS AIF (&LA+&LI)=2,.I SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.H LONGA OFF .H AIF &LI,.I LONGI OFF .I MEND MACRO &LAB READ &DCB &LAB PHP SEC XCE JSR $BF00 DC H"CA" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB PRINT &STR AIF C:&STR=0,.A &LAB JSR SYSCRITE DC C'&STR' DC H'0D 00' MEXIT .A LDA #$D JSL ~COUT MEND MACRO &LAB BGT &BP &LAB BEQ *+4 BGE &BP MEND MACRO &LAB JEQ &BP &LAB BNE *+5 BRL &BP MEND MACRO &LAB RDKEY &NOCURSOR &LAB SEC XCE JSR $FD AIF C:&NOCURSOR=0,.A DC H"98" AGO .B .A DC H"99" .B DS 2 CLC XCE AIF .NOT.(S:LONGA+S:LONGI),.A REP #S:LONGA*32+S:LONGI*16 AND #$00FF .A MEND MACRO &LAB PRHEX &NUM &LAB SEC XCE LDA &NUM+1 JSR $FDDA LDA &NUM JSR $FDDA CLC XCE AIF .NOT.(S:LONGA+S:LONGI),.A REP #S:LONGA*32+S:LONGI*16 .A MEND MACRO &LAB ADD4 &N1,&N2,&N3 &LAB CLC AIF C:&N3,.A LCLC &N3 .A ~ADD &N1,&N2,&N3,ADC,BCC,INC MEND MACRO &LAB SUB4 &N1,&N2,&N3 &LAB SEC AIF C:&N3,.A LCLC &N3 .A ~ADD &N1,&N2,&N3,SBC,BCS,DEC MEND MACRO ~ADD &N1,&N2,&N3,&ADC,&BCC,&INC LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A LCLB &IN LCLC &C LCLC &N12 LCLC &N22 LCLC &N32 &C AMID &N1,1,1 AIF "&C"="#",.D AIF "&C"="{",.B AIF "&C"="[",.C &N12 SETC &N1+2 AGO .E .B &N1 AMID &N1,2,L:&N1-2 &N1 SETC (&N1) .C &IN SETB 1 &N12 SETC "&N1,Y" AGO .E .D &N12 AMID &N1,2,L:&N1-1 &N12 SETC #^&N12 .E &C AMID &N2,1,1 AIF "&C"="#",.H AIF "&C"="{",.F AIF "&C"="[",.G &N22 SETC &N2+2 AGO .I .F &N2 AMID &N2,2,L:&N2-2 &N2 SETC (&N2) .G &IN SETB 1 &N22 SETC "&N2,Y" AGO .I .H &N22 AMID &N2,2,L:&N2-1 AIF (C:&N3=0).AND.(&N22<65536).AND.(.NOT.&IN),.P &N22 SETC #^&N22 .I AIF C:&N3,.J LCLC &N3 &N3 SETC &N1 &N32 SETC "&N12" AGO .N .J &C AMID &N3,1,1 AIF "&C"="#",.M AIF "&C"="{",.K AIF "&C"="[",.L &N32 SETC &N3+2 AGO .N .K &N3 AMID &N3,2,L:&N3-2 &N3 SETC (&N3) .L &IN SETB 1 &N32 SETC "&N3,Y" AGO .N .M &N32 AMID &N3,2,L:&N3-1 &N32 SETC #^&N32 .N AIF .NOT.&IN,.O LDY #2 .O LDA &N1 &ADC &N2 STA &N3 LDA &N12 &ADC &N22 STA &N32 AGO .Q .P LDA &N1 &ADC &N2 STA &N1 &BCC ~&SYSCNT &INC &N12 ~&SYSCNT ANOP .Q AIF (&LA+&LI)=2,.S SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.R LONGA OFF .R AIF &LI,.S LONGI OFF .S MEND MACRO &LAB JCC &BP &LAB BCS *+5 BRL &BP MEND MACRO &LAB MUL4 &N1,&N2,&N3 AIF C:&N3,.A LCLC &N3 &N3 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~MUL4" ~LOAD 4,&N1 ~LOAD 4,&N2 ~STORE 4,&N3 MEND MACRO ~LOAD &L,&N LCLC &C &C AMID "&N",1,1 AIF "&C"<>"{",.A &C AMID "&N",L:&N,1 AIF "&C"<>"}",.F &N AMID "&N",2,L:&N-2 DC I1"16+&L",I4"&N" MEXIT .A AIF "&C"<>"[",.B &N AMID "&N",2,L:&N-2 DC I1"32+&L",I4"&N" MEXIT .B AIF "&C"<>"#",.E AIF &L=0,.D &N AMID "&N",2,L:&N-1 &C AMID "&N",1,1 AIF "&C"<>"'",.C LCLA &I &N AMID "&N",2,L:&N-2 &I SETA "&N" &N SETC &I .C AIF (&L<>2).OR.(&N>255),.C1 &L SETC 1 .C1 DC I1"48+&L",I&L"&N" MEXIT .D DC I1"48",2I1"L:~&SYSCNT" &N AMID "&N",3,L:&N-3 ~&SYSCNT DC C"&N" MEXIT .E DC I1"&L",I4"&N" MEXIT .F MNOTE "Missing closing '}'",16 MEND MACRO ~STORE &L,&N LCLC &C &C AMID &N,1,1 AIF "&C"<>"{",.A &C AMID &N,L:&N,1 AIF "&C"<>"}",.C &N AMID &N,2,L:&N-2 DC I1"144+&L",I4"&N" MEXIT .A AIF "&C"<>"[",.B &N AMID &N,2,L:&N-2 DC I1"160+&L",I4"&N" MEXIT .B DC I1"128+&L",I4"&N" MEXIT .C MNOTE "Missing closing '}'",16 MEND MACRO &LAB GET_MARK &DCB &LAB PHP SEC XCE JSR $BF00 DC H"CF" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB SET_MARK &DCB &LAB PHP SEC XCE JSR $BF00 DC H"CE" DC I"&DCB" CLC XCE PLP MEND **************************************************************** * * SYSCLEARN - Clears The Space Allocated To 0 * * Outputs: * WR0 - pointer to space to clear * WR0-4 - pointer to # of bytes to clear * **************************************************************** * SYSCLEARN START LONGA ON LONGI ON SEC get length LDA WR0 SBC #4 STA WR4 LDA WR0+2 SBC #0 STA WR4+2 LDA [WR4] will not clear more than 64k TAY DEY BMI EXIT LDA #0 SHORT M LB1 STA [WR0],Y DEY BPL LB1 LONG M EXIT RTS END **************************************************************** * * SYSCNEW - Allocate A New Storage Area * * Inputs: * WR0 - number of bytes to allocate * * Outputs: * WR0 - pointer to begining of memory allocated * * Note: This routine assumes that the heap does not straddle * a bank boundry. * **************************************************************** * SYSCNEW START LONGA ON LONGI ON NEEDED EQU WR0 LAST EQU WR4 THIS EQU MR1 NEWP EQU MR2 NEWLEN EQU MR3 LDA SYSFREE last = free STA LAST LDA SYSFREE+2 STA LAST+2 LDY #2 this = free[0] LDA [SYSFREE] STA THIS LDA [SYSFREE],Y STA THIS+2 LOOP1 LDA THIS while (this) ORA THIS+2 JEQ OUT1 LDY #6 if (this[4] >= needed) LDA [THIS],Y CMP NEEDED+2 BNE LOOP1A DEY DEY LDA [THIS],Y CMP NEEDED LOOP1A BLT LAB1 SEC newlen = this[4]-needed-8 LDY #4 LDA [THIS],Y SBC NEEDED SBC #8 STA NEWLEN INY INY LDA [THIS],Y SBC NEEDED+2 STA NEWLEN+2 LDA NEWLEN+2 if (newlen >= 0) BMI LAB2 ADD4 THIS,NEEDED,NEWP newp = this+needed+8 ADD4 NEWP,#8 LDY #2 newp[0] = this[0] LDA [THIS] STA [NEWP] LDA [THIS],Y STA [NEWP],Y INY newp[4] = newlen INY LDA NEWLEN STA [NEWP],Y INY INY LDA NEWLEN+2 STA [NEWP],Y LDY #2 this[0] = newp LDA NEWP STA [THIS] LDA NEWP+2 STA [THIS],Y INY this[4] = needed INY LDA NEEDED STA [THIS],Y INY INY LDA NEEDED+2 STA [THIS],Y LAB2 LDY #2 LDA [THIS] last[0] = this[0] STA [LAST] LDA [THIS],Y STA [LAST],Y LDA THIS newp = this STA NEWP LDA THIS+2 STA NEWP+2 JMP ALOCAT LAB1 LDA THIS last = this STA LAST LDA THIS+2 STA LAST+2 LDY #2 this = this[0] LDA [THIS],Y TAX LDA [THIS] STA THIS STX THIS+2 JMP LOOP1 OUT1 LDA SYSESTMAX newp = sysestmax STA NEWP LDA SYSESTMAX+2 STA NEWP+2 ADD4 SYSESTMAX,NEEDED sysestmax = sysestmax+needed+8 ADD4 SYSESTMAX,#8 JSR SYSCSTK check for overflow LDY #4 newp[4] = needed LDA NEEDED STA [NEWP],Y INY INY LDA NEEDED+2 STA [NEWP],Y ALOCAT LDA #0 newp[0] = 0 LDY #2 STA [NEWP] STA [NEWP],Y LDA SYSUSED this = used STA THIS LDA SYSUSED+2 STA THIS+2 LOOP2 LDY #2 LDA [THIS] while (this[0]) ORA [THIS],Y BEQ OUT2 LDA [THIS],Y this = this[0] TAX LDA [THIS] STA THIS STX THIS+2 BRA LOOP2 OUT2 LDY #2 this[0] = newp LDA NEWP STA [THIS] LDA NEWP+2 STA [THIS],Y ADD4 NEWP,#8,NEEDED return newp+4 RTS END **************************************************************** * * SYSDEALOC - De-allocates storage previously allocated by * the storage allocation routines * * Inputs: * WR0 - pointer to previously allocated storage * * Outputs: * Storage is returned to the free pool. * * Note: This routine assumes that the heap does not straddle * a bank boundry. * **************************************************************** * SYSDEALOC START LONGA ON LONGI ON PTR EQU WR0 THIS EQU WR4 TEMP EQU $0 LDA PTR ORA PTR+2 BNE DP1 PRINT 'Disposing of Nill Pointer' should never happen ERROR JMP ERROR DP1 LDA SYSUSED this = used STA THIS LDA SYSUSED+2 STA THIS+2 SUB4 PTR,#8,TEMP LOOP1 LDY #2 while (this[0] != ptr-8) LDA [THIS],Y CMP TEMP+2 BNE LOOP1A LDA [THIS] CMP TEMP BEQ OUT1 LOOP1A LDA [THIS] if (! this[0]) heap damaged ORA [THIS],Y BNE DP2 PRINT 'Heap Damaged' BRA ERROR DP2 LDY #2 this = this[0] LDA [THIS],Y TAX LDA [THIS] STA THIS STX THIS+2 this = this[0] BRA LOOP1 OUT1 JMP SYSDUMP dump(this) END **************************************************************** * * SYSDUMP - Dump storate * * Inputs: * WR4 - pointer to dump * **************************************************************** * SYSDUMP START LONGA ON LONGI ON LINK EQU WR4 OLD EQU WR0 THIS EQU $0 TEMP EQU $4 COMB EQU MR1 LDY #2 LDA [LINK] old = link[0] STA OLD LDA [LINK],Y STA OLD+2 LDA [OLD] link[0] = old[0] STA [LINK] LDA [OLD],Y STA [LINK],Y LDA [SYSFREE] this = free[0] STA THIS LDA [SYSFREE],Y STA THIS+2 ORA THIS JEQ ELSE1 if (this) LDA OLD+2 if (old < this) CMP THIS+2 BNE DP1 LDA OLD CMP THIS DP1 BGE ELSE2 LDY #2 free[0] = old LDA OLD STA [SYSFREE] LDA OLD+2 STA [SYSFREE],Y LDA THIS old[0] = this STA [OLD] LDA THIS+2 STA [OLD],Y LDA OLD combine(old) STA COMB LDA OLD+2 STA COMB+2 JSR SYSCOMBN JMP IF2 ELSE2 LDY #2 while (this[0] && (this[0] < old)) LDA [THIS],Y CMP OLD+2 BNE EL1 LDA [THIS] CMP OLD EL1 BGE SKIP1 LDY #2 LDA [THIS] ORA [THIS],Y BEQ SKIP1 LDA [THIS],Y this = this[0] TAX LDA [THIS] STA THIS STX THIS+2 BRA ELSE2 SKIP1 LDY #2 old[0] = this[0] LDA [THIS] STA [OLD] LDA [THIS],Y STA [OLD],Y LDA OLD this[0] = old STA [THIS] LDA OLD+2 STA [THIS],Y LDA OLD combine (old) STA COMB LDA OLD+2 STA COMB+2 JSR SYSCOMBN LDA THIS combine (this) STA COMB LDA THIS+2 STA COMB+2 JSR SYSCOMBN BRA IF2 ELSE1 LDY #2 free[0] = old LDA OLD STA [SYSFREE] LDA OLD+2 STA [SYSFREE],Y LDA #0 old[0] = 0 STA [OLD] STA [OLD],Y IF2 LDY #2 LDA [SYSFREE],Y CMP SYSESTMAX+2 BNE EXIT LDA [SYSFREE] if (free[0] == SYSESTMAX) CMP SYSESTMAX BNE EXIT LDY #2 this = free[0] LDA [SYSFREE] STA THIS LDA [SYSFREE],Y STA THIS+2 INY INY SYSESTMAX = SYSESTMAX-free[4]-8 LDA [SYSFREE],Y STA TEMP INY INY LDA [SYSFREE],Y STA TEMP+2 SUB4 SYSESTMAX,TEMP SUB4 SYSESTMAX,#8 LDY #2 free[0] = this[0] LDA [THIS] STA [SYSFREE] LDA [THIS],Y STA [SYSFREE],Y EXIT RTS END **************************************************************** * * SYSCOMBN - Combine Storage * * Inputs: * ptr - current free space pointer * this - pointer to free space to combine * **************************************************************** * SYSCOMBN START LONGA ON LONGI ON PTR EQU MR1 THIS EQU MR2 TEMP EQU $8 CLC temp1 = ptr[4] + ptr + 8 LDY #4 LDA [PTR],Y ADC PTR ADC #8 STA TEMP INY INY LDA [PTR],Y ADC PTR+2 STA TEMP+2 LDY #2 if (ptr[0] == temp1) LDA [PTR],Y CMP TEMP+2 BNE RTS LDA [PTR] CMP TEMP BEQ DOC RTS RTS DOC LDY #2 this = ptr[0] LDA [PTR] STA THIS LDA [PTR],Y STA THIS+2 CLC ptr[4] = ptr[4]+this[4]+8 LDY #4 LDA [PTR],Y ADC [THIS],Y ADC #8 STA [PTR],Y INY INY LDA [PTR],Y ADC [THIS],Y STA [PTR],Y LDY #2 ptr[0] = this[0] LDA [THIS] STA [PTR] LDA [THIS],Y STA [PTR],Y RTS END **************************************************************** * * SYSRETWR0 - Return 2 Byte Answer in WR0 * * Outputs: * TOS - WR0..WR1 * **************************************************************** * SYSRETWR0 START LONGA ON LONGI ON LDA WR0 return WR0 STA [SP] LDA #0 LDY #2 STA [SP],Y RET END LANGUAGESvg+' '(ASM65816='  ' "CC.| &LINKED<8u  &LINKERtJ;/ / L:<-.  wxy{|}~%%b%>%*!n%N!& # !~!#^#%B''B!"%!.#>"r!""$# " Z!ADC Z'AND !CMP b"EOR B$LDA %ORA !SBC F#ASL 6$LSR  #ROR  "#ROL  *'BIT  'CPX  'CPY Z$DEC &INC !LDX &LDY  STA 'STX "STY  JMP %JSR  STZ TRB #TSB #JSL !JML !COP !MVN $MVP #PEA  &PEI !&"REP ""SEP #"PER $z"BRL %$BRA &"BEQ 'R&BMI ("BNE )%BPL *"BVC +f$BVS ,%BCC -!BCS . CLI /$CLV 0'DEX 1"DEY 2 INX 3 INY 4f!NOP 5&PHA 6"PLA 7!PHP 8PLP 9j#RTI :RTS ;:#SEC v#TAX ? TAY @#TSX A#TXA B&TXS C$TYA D:&BRK E$CLC F%CLD Gj&PHX H#PHY IPLX J~$PLY K.&DEA Lv&INA M%PHB N%PHD OF&PHK Pr$PLB QN$PLD RWDM S$RTL T"&STP UTCD V$TCS W$TDC XTSC YN'TXY Z$TYX [WAI \XBA ]&XCE ^CPA _BLT `$BGE a#GBLA (b%GBLB (c%GBLC (d&LCLA (eLCLB (f&%LCLC (g2%SETA $hV%SETB $i"SETC $jJ%AMID $k!ASEARCH $ln"AINPUT $mAIF nn'AGO noV"ACTR .pMNOTE q#ANOP /r$DS /sz%ORG Ot &OBJ /u&EQU v'GEQU w*$MERR oxSETCOM oyEJECT ozERR o{r'GEN o|MSB o}'LIST o~%SYMBOL o"PRINTER f'65C02 o65816 o'LONGA o&LONGI o&IEEE o~'CASE oOBJCASE oABSADDR oINSTIME oTRACE o'EXPAND oDC /^&USING 'ENTRY R#OBJEND /&DATA 2"PRIVDATAEND ,'ALIGN oSTART J"PRIVATE 6'MEM TITLE oRENAME OKEEP O!COPY oAPPEND o'MCOPY o#MDROP oMLOAD oMACRO  MEXIT 6!MEND v <*( 1 Copyright (c) 1986_By the Byte Works, Inc._All Rights Reserved(P  @ 4ɿiŭ+p xIϧ@Gɀ鍀Q~0;;0 WJ ? ;- F( E A +L DC F A L DC , A ]> F HGHit any key to continue,00xT0 8xo47*zq49* <*** 1* ;U8 ;()8 ;,N2*2*8 )* ;U8 ;()88l;001*8 *(0;0}U58` B ^E2ɒ+ ,,++ '+t+ɓ'ɔ5ɐ1ɕ-ɑ)  |B A` {ME2ɛɚᜪ+<< `ͭ+// / > > =ʈ > 0 >4  >>`ʚ;@B'd  `` G &&&8`b `bܥ)8 ` Z+0;?o3T08 H;2 <2F ;G0;20 F HG errors found1* F HG was highest error level HG 0+0 F HG source lines0,0 F HG macros expanded0+0 F HG lines generated , =`Global HG ORCA/M ASM65+;+ HG02 V4.1 Phase 3 D9 3 HGC02 V4.1 Phase 3 D9 HG816 V4.1 Phase 3 D9 F J4 =|N *+JN *+8 AA ,+ =001 A?01111dhdlj11n11q4o411r+1&1dp)1$1^11d\115u4\35y4`35}4d354h354l3s45Z3w45^3{45b345f345j3 R.dl3..i ..i..i . .i.  5t5v0At tgttvwtt5i55i5 8 )*0**T@<*T@1T5T1**,*5.*03*;*8 D 7**9** 4*+5*+6*+3* 5 W Z`XSYSCNT ,x8`.1 /1`0.1T080@8<*T08 D ,9x.9z , 09+0.1"#00*9.10 |Bx1x xyzxyzxx+ P` +` ~** `8 B)`l8$     1 C1C1 C1`C1 C1`1 E2 L |BE2` G J eeffff)``)8 `+" , , = ;G, , `0dd¥  ~ ȷ ƥ ȥʥAЧąԠҷą jDȅʅ¥ąƅąȥƅʠ ĪȷąƆĂ ȷ  ȷ0` Ԑ )  `*E <*( 0("08 (()8( (0o4xT00("#08 ((H0("Q0hLp0(xyy0 (( 0yy( x (*8 *(0o4xT0 B` HGCould not open  DE HGError reading <*<* = =E8`L: Bo30c<*-Tx+T)1pT. T 1lT0`0)1pT0 ,--<*0@-<*T08 D0c-<*T00+xT0+! HGPass 2: p3 =o3 HG dd =40 4 = ` =` B ^E2ɔ)ɐ%ɕ!ɑ {M1 E2ɛɚ |B A`HJJJJ Fh) 0:i =`8 G`G.CONSOLE8 .G-G-G`2G.PRINTER AG AG HG `hXhYXGȱX,GPXZȱX[!XiX !XiX 0XZ0eXXYZ =G. = ,$,, + =, , KlXhXhY X ddd G8` .. .. %=  `  ;G HG@o3 HG Symbols =`I C  .0..):/0// /`Im/ iͨ+ =`I/GQ 8.bI..dI. . F. F. F =`Ii`I// =`I`Iͨ+`Į+`I = =`Į+eI`I = =`II` HG Out of memoryL: HG Unable to write to object moduleL: HGKeep file could not be openedL: HGFile could not be openedL:8  0 K4T0`0 4 44T0) K44JjJJJJ eiKi4J K44 # K44:4 K 0444`8 i 0 0` `JanFebMarAprMayJunJulAugSepOctNovDec,( HGPage 0 ,0 F F HG<, HG ` ~*m1~**m1**m1**m1* ` Se1/,G/E2ɔ ɐɕɑ=00o3T0+' HG HGPass 1: p3 =o3 HG `0E2w862, +  + Se0:0 00/T0 OE2vw/)q /^\0~* /T0,* 8~*A2 /*C2/ /m=2 //m?2/ /. /.  B1 E2ɚɛ O ^F2)@  B O8`1*M1M0;2M0*Ho3 +Lh*1MM1*M10M;20E2ɛɚ , L ,8`M 1 O oN8`+ N`mF2ȍE28`*;!.> jNlN nN+ nN/ nN/ jNlN (`1 ;2 11*1*`0dd/): / )?N/ )?JJ Neޥmm 0`*O00/T0OJ ET  `0O0) U0):0 /T/):0N20ii0)HO Uz N2  /T0 N0Om.m.m.m.//O U0 /  8`+ ET8 ET`1>++.^0-:0 #00/T0 O/ 11 BE2ɒ+!1+,0+ +F2)`,0 F +d = HG@4 =+* F* F* F =8* F~* F =d "T0 T0+ 1 =1 = ,0+ =+  =1 = G+hE2a0 T01QM F+"m*H*iH*i Fh Fh F =~*eH*i Fh F F "T =1I HG *** ERROR: Q 1 8eQ!iQ HG@ =`Missing OperationInvalid OperandDuplicate Label Label Syntax5Missing OperandOperand SyntaxAddress Length Not ValidNest Level Exceeded10Numeric Error in OperandRel Branch Out of RangeUnidentified OperationToo Many MACRO LibsUnresolved Label not AllowedMisplaced StatementNo END18Set Symbol Type MismatchSequence Symbol Not FoundACTR Count ExceededUndefined Symbolic ParameterAddressing Error24Expression Too ComplexToo Many Positional ParametersDuplicate Ref in MACRO OperandSubscript ExceededLength ExceededMACRO Operand Syntax Error3132 Undefined Directive in Attribute34Operand Value Not Allowed141 F =` F`Z0*U UT0 N0Um.m.m.m.+)/) /8 / 40 N0 ȷ UT0. UT08+ /8/(z`hehj jj͉1a`leln nn1C`\e\^^^1"`tetvvv21t01`0W@UUñ UUUUU3* ,U`hhU` [W*V+V*Vސ ^e [W ^ W ]T n^8 W()8 ]8 W()8`UHU U U U) XU XU XU XU XUUUUhHZWW?28 U()8" Ui@UUiU ZWZWh`h [W ^0UTUUUT0 W8 U()8 Ui@UUiU U*8 *(*) *д*U*8 *(0UWT0WNWnWnW0WT8~*"W*$W U08 U()8*0*T08 *( [WG2X-1NM2nL2nK2nJ2-1>YJ2 BYYJ2*V+V*Vސ ^YY-H ^h Wh W /L+' W W W0ZTT0// ]0ZT0jZ W^-1 W-1 W W W W W WQ  U)V8 (V(U` [W ^ W ]3* n^3* ]8 V()8FV)x8 %V()8b8 (0VT08 V()800V"0 8 V()8 V*U` [W+U0: 0 F2) +)E2ɔɐɕɑ ^00/T0 OE2v Ɏ, w F2)H W ]/ W/ Wh  , WE2v+) w Ɏ',"/)[ W / W W^ [WU])I[] ,a],c]+e]+g] U*8 *( *U*UUU *VZW0@U P3u]T0)0) i7s]UU06I] W00/T0 ], [W ^ W WJ2 WM0@1UT0U>>.U譮UU莵UU`/Z/ /ȭ+ / W/a{) Wh/` [W ^ WJ2 W [W ^ Um1UUm1U [WH ^ Wh W W W W Wi0@1UT0U;;^UUAU/UݵU`.ROOTAU ]8 V()8ήU`*V W+V W*V`UUU`_11_+ & + __ ٮ+ +_F2 a mF2ȍE2 `_`_+ 80S+ _&:+ _/_ F2) !F2)+: d1+& +80 П 8$A[_a {~`8` {`O3p`8 Np`8+O3O3 叐O3  Pܩ +`O3p`o`p`o`пl` +o` ٨8 ( *b :b}*`a{`0ȷ0`ȹ+ _%/ȹ+ _J //+`8/`ȍE2mF21#1H2 34M4M4) 6 40  ` 8_0  +% &N_ӭ+ 'H^E2F2 E2 E2#1`1` M` q`LB 8888 +& d1+& 8H2 4444 8 `48` q` *b :b}*+ 8`+  `+  `8`+&c B11c`Ȍc c1 i i c c +(AZ0 cT0z Z0 cT0z1J2cK2 L2 M2Z+.Ȍc 1 11 // 1Y!1͵c c: c +!1͵c  Bc` mce c8`!1cѩ"1c iic e "1  "1 `dLB+// / R0D1F1vt0  N. `0s4T0  N `LB dd Yd` d`  dT  ȷ dd  0d T0d`77 Lb1|7 1Y7AZ  z =0݈4 748 7;ddd Ӡ Re7ȷӝ80Re777`E211110 11M// ^1 M`F2) فE2b [/ 1׮E2$o+TI2 +5E2.*+8 8I2611&E2  9LB( "I21I21 E2):  eii I2$1С{Л+ 8I2I21`41E2 zW1)쬕1141" jYG271E2I2}fih1fiRi1` I2I2LB1xE2I2I2`71+1`I2 1E2&1 $'1,6 8~*A2*C2m=2m?2m1m1 $ ~*m1*m18 8J251L271 1=611810 71 6151*07161510 B 2h1ʊ7 2h51 zW161 zW`1E28$i1h410ﮖ+5141 zW b I2LB1N/sz*  ࢰ` 2LBb0PpXʈHh(@`8xZz: K+Bk[{;22444 344565745566 2 67 6566 8 455 344566745566 36 568 5 6 35 6 6 ** * (((<(<<PPPP63322222222222222234346622222222272233442234345263222222332im}yeuraqscogw)-=9%52!13#/?'7IM]YEURAQSCO_GW  JN^FVjn~fv*.>&6,<$4:Ll|\ "dt "\TDE2h%8b88    -o6 7o -o J2oL2o Ao 1X5Z oo z`j) 7o 㐭J2o+LB Ao 1YLBo` 7o zl? 7o A Vo ooo Vo ooo7 78J2쌨84 7o A7878 VoLB A Vo -o oo88778i8i!J2i8 =7٩70J2  J2J2oooo Ao 1Z"LBn , b A7 7%n HG@7 9 8󈌨84 88)ep er&1 $1 ۬8p8p0 pT0089T0 ^098T0@0p T8 )eppr0 8 48 [n 7o 㐭J2 K2 L2 M2* Vop 7o 111 -o ooJ2`q1hh` bhhLB+&hhLB Lb׹+,hhLBȹ+ `K2 L2 M2 G2 J2hhLBhhLB bLBlp+ {+ `GpQp/ [lplpmplp+ { ;mplpLBlp+ `Gp< Zp$p[p%plplp #pmp+,Ȍlp  LB`ABCDFHIRSABCDFHIKLm{{{(|,||H~p|m{ [ bLB =7ALBZ0@71T0z+  E2>*4;*;*`* , 0@11T03*5 W Z`LB ,+[0"00"Q00@<*T0.1ȭ/1ȥxȥyȥz+0.10 , + + O 1* 8 *()80@1<*T08҂؂7 1* 8 *()8* , 1** `N ?*LB* * !iA 0@1T0E2ɜr * >` [ b `  &LB",` ,A,0  [ XX, ,+욍,0s4i5tu4i5v t:tȗtȗt0 , ,,++ NF28.F2 ONF2F2+0uo3T0 H}P/ [ b 㐭G2LB+*,0@0 B0?00 P3P3Q3T0 b6 `l  d0 P3P3Q3T0/  /P33*(u5 Z3* Z , u+ \+ B+`LBLB ,@@O [ b 㐭G2<+,5 J2uL2u 㐭G2+   u u LB@ [0 777T0 b A07,T0`LBLBLBLB+ , b =Z0 444T0z77 H274 `E2ɢ7+,О =+  Џ7 4M4M4) 6 7  6 ȱ7 ! ȱ   77 `44M4M4) 6 6 Ƚ7 7 `Local E2t+" 11I2  B`E2t10J21T0S/ [0414151T0O/ [+6G2, ,, , , ,J2,*`LBLBLB b+* 㐭G2湯+  ~*mJ2~**mL2**mJ2**mL2* ^u$ [~*A2J2=2,G2`LBx,0J2 /T0G/ [/IG2  /`J20*` [K2 L2 M2 J2Q}*`LB [{ ,zi b =+  7 LB7wE2~4*`5* `{6*`8E2{+ `ςE`I+` +`OFFON@$$0 T0` д)@FffffffFffffff8㨥i;8bJJJ8ۨʈ)Fffffffe٥eإeץe֥eեeԥeӢ @`0 ҥ҂0J2T0 Ffff#LB`+ ,+ + + +LB0J2+T0OzPzQzRz NL2nJ2 8.Oz.Qz Oz-*Pz-*Qz-*Rz-*****` +L2 +J2 #LBdddd NL2nJ28&& d 8~*KzOz*MzQz =Kz`I=KzKz08KzeMze8Oz1Qz1414151T00,) D1s4F1u401Z321\3t5v5(`xU.Qz+ zdx   zݜ6+6x `6LBhh`8+ < 8 A7.878̨784++  LB`0թT0хӥЅЩѩҥ0 ҂@`+152o+ 叐EO3ȩd+ O301'J& {ȂȦ * {8` B` zWZ1 141z 1 `+ 叐-O3ȭ+JjI + O3 ȹ+O3  {Ȃ8` B`8+N3+ 叐.O3 ` {N3+ O3,Ȃ8` B`+ 叐!O3 :b ` Z :b+,O38` B`+ 叐DO3ȹ+ `O3! (    {ȥ {8` B`)}}+<>^ }ȹ+ 叐jO3 :ba 㐭1Z J2}L2}} N}n} }} {8}-1} jY :b+O3,Н8` B`)+ 台O3Z0``aT0zd :b++- :b+ {Y :b+ { b~N`A`0:8``` {+,yO38` B` B :b+ {+1 952+)0ЩT0 `uЕeЅ`i``@$8㨥IE E@`фҢӕڔ }Fffffff Fffffff }+8ߥޥݥܥۥ&&&&&&&&&&&&&ҥѐ`M" ` X8808)Z88z8) i 0` Y8888 8)i  ` Z88` bLB+&LBLB `/؀/؀ 88 8+ M,A(= 㐭100xT0 * !iA  D (L:01xT0n3爩n31舭1 B a `E2ɟ |Bx axH2Jȩ 4/4/ N0m.m./)i  Uxzȧ/)/0 |BxW0䈠xT0爍n3舍1鈍1 B0o411o4q411q40@<*<*` ,= bLB A77 9 HG77+, ;2 㐭J21*1*` $`$` $`E0 %E ` %Fffffffӕڔ8 ӕ8LFfffffffffffff+e٥eإeץe֥eեeԥeӈЖ0_`eҥeI`dddd+ {/ddd  `C+)eLB`0:`8`J2K2L2M2(11I21 bFE2851618E2ӊ zWՊ zW`TDLBE2E8E2ӊ zW 㐹+,+ -J2H b -J261h51`-11LB ;A+  I21` ;#<+<>^ ׍1I21+#1+ 1+1<&>61517161-1715161-1+ ` `LB([ ׍ ; 'I21,(1 1I2`p(1J1I2`,=+ ` 3+ `X,1I2,(1 1I2`p(1J1 I2`LBY 1I2,(10-p(1J1 I2`SթI21,(10 p(1J`LBg ׍+ ` C+ J(10J,(1pg[I21`1g[ I2`I2`+,g[?+ `X:+ J*+ ` I21,(1p0Q(1J1 I2`LBLBS+ J칲+,平+ `Y۹+0,(1p0I21(1J`LB+ J+,Ъ+ `YР+ ` Ж1,(1p0̭g[ I2(1J`1+<|!@> (11 Z0J251T0z1"G2L2M2(1 K2(1`+ `  (`Hg(h]`h)8`  `ѥ ѥH Ehd&a&`faLB`)@D) )%iِ0;T0@)|| E000=T0IFffӠ 6f0`T0`)@.) [ ѥ#N0T0f҂= j 0 fҥ0ޏT0fff0`T0`'"`&&&&&&&&&&&&&`0 R8) U Sz088`␢7O3+ 台Y JO3!+ > :,6 ֐7 叐ۍO3ֹ+ &O3ٰ+O3+ ֐7в78``O3 + ֐O3 ȹ+ ֐O3蝨7`n `` Ò +-*/|-.NOT..AND..OR..EOR.<=>=<><>=()+ `SHȹ+&I `@Z OzhL/`T/`C`LBZ |zhC T`hLB hb1 ` ChC B`hL"1`T 1`CЩ!1`Z0 ///T0z+ _ /;{/M/M/) 7 &6 /0  !LB{` {Ɍ{8{+I`0/)H Uz/T/)elln0`  `G2 C 0 C 1` LB J2L2 `HE   h ee * 8  `C >J03 &&& ffffdddddddd 8  ѕI ѕ%p ѕ` ѕEP  =7 0) $"    ddd  N2`dddd+ `  &&&& LB`/ `@Z Oz< .. /) 8 `/)`LB1///Z |z`` HH NC?0/0 O  /) hhii s  ``|EkM2cH CQ QM2 G2FB iW8`8` B`08``8` _ `dddd+ _+: Uddd8` 8` { ;8`$ 8`&*Z0T0z cZ0T0z8` 叐2 A(+JjI778` B`%"ȹ+108&&&&LB8`@4  +08&&&&ӈ)8`*М 8~** 8`N2`9` ͙G2`LBK0T00"0D0"Q0N29-1Z0lT0z``H0T00"#0N290lT0h` ӝ ; B 4 c`  1Z 5z` , , s4u4 횭ȷ P#蚑 O+9TxT n3 B Y Ϟ1: ͢ 1, ͢ |Bx" ^E2ɡɠ , +L L L` n" `  / "     ``ҝѝ,ҝ0ҝѝ* `0.m.m0')J  08`ȷ,,, B` q`+ `  /J // N0TxT0 P0#:蚤T RD1tF1v Sz08`"+ E&B %" ͢ `/N2 /N2 nN284N28!1 ͢`LB ,,, F2 O,`+ G b`7+ `I`﹯+  O7 %1C ͢ b+ 8Ȁ84 ͢7 c0T0!1 `7+&LB %1mG+ , ͢ bMH+ @ 9,7+   台 ,=;ٯ+ n  pGHx"mH  `7!7 c1F  A 7 7+  ,HO+  B&SYSOPR  , m# `0,) s4u4݊5 ݈5dd0` . ("1 !1  i i ?LB 90 R T T!1) i  U SzD1 %F1 " ȥ ȥ /D1F1ȷ  ȥ T987T0d!17虨8̨8 ii 0!1) i : 9   T ` 4!1b+($bȹ+) ,4+,)LB·4` Ab77)Ψ774ȹ78̨7ʎ47!1`̢ PZ0#:Ts4i u4i횇0z,n3Z0蚠xT0z B,11110`0N+9+90`0d"}=X斥ŗ(8kdƘ(k0e日日"}I=XXƗ(k0e日日"}XXƗ(kHJJJh)8jk !"#$%&'()*+,-./0123456789:;L*0"Q"%D4$ ]V""%@'A>5[3 ]Hg\z]Hg!v5\z]{\{]5&W‹++Fg+++Ћ++֋+ڋ+؋+ԋ+ҋ+̋++S] "R+ދS]>5Q]>5Q]>5Q.-#,.-Z,.- ,.-",.-e#,.-Z,)؋4 .)؋-ʑ,)֋4 .)֋-ʑ,.Zf- f,.-,2)ԋL4".]"- G4!.-%,.-s0,3!.] "- G4+!.-%,.-s0,3!.]"- G4G!.-%,.-s0,3!.]"- G4c!.-%,.-s0,3!.]"- G4x!.-7,3!.]"- G4!.-$,3!.]("- G4!.-?,3!.]0"- G4!.-_%,3!.]6"- G4!.-h%,3!.]>"- G4!.-q%,3!.]D"- G4!.-%,3!.-),.-G,3 2charintshortlong#asm#include#define#list#source#keep#org0)L4S"2.)ʋ-:,"Q"%)D4".-.\," Q""%A'@4".]{""%@'A5$ <-H,"%B"%)G:4". '-@,. -@,3". ,-@,3t"3`"S20.]W#-@,]Hg\ZZzH4V#Z 5$C4K#.Z-@,.-?\,"Z 5$Z 5$>5QZ 5$B4'#""%7Q3;#""%]Z 5$>5%7Q."%-H,. -@,Z5\3"2sysccom data )Ћ4r#.-A,. -,.)ҋ-H,.]#-:,)ҋ4#. -,2 errors in compilation.0 .-;,S܋SƋ.-,.Zf]$- ^+؋B4#Sԋ.-A,Zf4$"Zf[Sȋ"Y$4$)ȋ"Y$ B5Sȋ""Y@[3#2r0.-G,.]Z$- G42$"Q3P$.]]$- G4E$"Q3P$"Q.-A,.-;,"%2onoff0.-G,.- "C4v$2.-;," Q..--.- /BN.- .BN4$" % AD4$"Y" " %@'A5.-R.-;,3$"Y" %5R.- "C4$2.-;," %20C."E-a$L4$.-A,2."E-юC49%SFg"GQ"E"G%5$4-%]f"G%5"E"G"G%@'A5$R3 %]f"G%5R3V%."E]]%- ^+ڋB4V%Sڋ.-A,.-;,2r.-$SDg2.-$S܋20A))BgLO4%."E-a$4%."E-,3%.-A,3%)4%.-A,3%.-A,20.-G,."-X,.]%-IG,.">5Y-H,. -@,">5Y\‹.-;,2org 0 .-84&2" Q.]&-[G4&" Q3&" Q."-@:L45&.-A,.-?8,."-4G&."-8,.]&-[G4k&" .-n'Q" %4g&" Q3k&" Q."" %"%" %-8,3&.]&-[GL4&23%2*[,0 .-84&2.]h'-[G4&" Q3&" Q."-@:L4&.-A,.-?8,."-X4&."-8,.]j'-[G4'" .-n'Q" %4'" Q" " %]"%>5%7Q3'" Q" Q39'" %B4,'" Q39'" ]"%>5%Q)̋" %5S̋."" %"%)̋-i9,3W'.]l'-[GL4d'23&2*[,0.]'-[G4}'2."-XL4'. -A,">5[">5YD4'. -A,">5">5Y?[.]'-8,">5Y2]].-G,.- 'B4'.-;,. '-+Y C4'3'.-G,.- "B4"(.-;,. "-+Y C4(3 (.-G,.- }B)ԋ:44( }2.- {B4B( {2.-;,3'20S.-' {B4("Q.-;,"%4(.-' {B4(""%@Q3(""%AQ.-;,3g(3(. -A,S20" Q" Q"Q" %D4("Y" %5$BZf" %" %55$ BO4("Q3("Y" %5$Zf" %" %55$C4(3(" " %@Q3(" %B4 )"Q"%4v)" %BZf" %" %55$ CO4s)" " %5QZf" %5$ C4s)" QZf" %" %55$4p)Zf" %" " %@'A55Zf" %" %55$R3A)30)3)Zf" " %@'A5$ C4)3v)Zf" %5$L4)3)3("%20."-@:L4). -A,.-;,2Zf$4)."-(L4).-L(,2)ȋASȋ)4_*)Bg4*.Zf]-- ^+֋B4*Sԋ. -A,.]--IG,.]&--IG,Z‹47*.]2--IG,.Z‹-H,. -@,.]7--IG,.]G--@,.]W--IG,.]]--IG,S.-:Sʋ)DgL4v*."-:,"."-V4*"Y 5$C4*."-8,3*"Y 5$B4*."-8,3*"Y 5R3*."-8,.]b--[GL4*.-A,."-@,.]d--IG,.]k--IG,S΋.]z--[GL4]+."-@:4+)΋5S΋3#+.-A,.-?8,.-G,.])R5]|-- L4O+.]~--[GL4O+.-A,.-84Z+3]+3*]Hg!v5\zS̋")΋Q)΋4+.]-- G4+.--,.-s0,3+.]-- G4+.--,.-s0,3+.]-- G4+.--,.-s0,3+.]-- G4+.--,.-s0,3+. )-A,3+3q+.]--[G4,)Ћ@SЋ.-B)ԋO4,2.]-- G42,.-&,.-s0,3,.]-- G4N,.-&,.-s0,3,.]-- G4j,.-&,.-s0,3,.]-- G4,.-&,.-s0,3,3,3,.)̋6"%6- \,.]--[GL4,)ԋ4,2.-k.,3,)ЋASЋ.-\,3,.-A,S̋]Hg!v5\z.-\,.-I",.]--IG,Zf$4-)ȋB4-)ڋ4-.)ڋ-ʑ,SڋSԋ2wlist off symbol off org mcopy c.macros syscmain start init end (start using sysccom )),charintshortlong{charintshortlong}end 0 )΋B4-2.]e.-[G4-"Q3-"Q."-@:L4-.-A,.-?8,."-X4-."-8,.]g.-[G4$..-; ]C4 ..-84.3 .3."Q)΋6S΋)̋5S̋.""%"%)̋-i9,.-84N.2.]i.-[GL4a..-A,3-2*[,.-B)ԋO4z.2.]$0-[G4..-0,3 0.]&0- G4..-0,S3 0.])0- G4..-)1,S3 0.]/0- G4..-1,S3 0.]20- G4..-2, S3 0.]60- G4/.--3,.-s0,S3 0.]=0- G40/.-D3,.-s0,S3 0.]C0- G4O/.-d3,.-s0,S3 0.]L0-[G4]/3 0.]N0- G4v/.-7,S3 0.]S0-[G4/.-_%,3 0.]Y0- G4/.-7, S.-s0,3 0.]^0- G4/.-3, S3 0.]e0- G4/.-6,S3 0.]n0- G4/.-5, S3 0.-94 0.-^7, S3 0.-I,.-s0,S. -\,)2{ifwhiledoforreturnbreakcontinue;#asm#listgotoswitchdefault:case.]0-[GL40.-A,2;)Ћ@SЋ.]0-[GL40)ԋ402.-k.,30)ЋASЋ2}0"ZzQ".-:Q."%- X,.-k.,"%\z.]$1- GL40."%- \,2." .-:'- \,."%- \,.-k.,"%\z." %- \,2else0">5.-:Q">5.-:Q."-:,.">5%- \,.">5%- X,.-k.,.">5%- \,.">5%- \,.-9;,20" >5.-:Q" >5.-:Q".-:Q." -:,."%- \,.-k.,.] 2- GL41.-A,." >5%- \,."%- X,." >5%- \,.-9;,2while0" >5.-:Q" >5.-:Q".-:Q".-:Q." -:,.]#3-8,.]%3-[GL4k2.-I,. -\,.-s0,." >5%- \,.]'3-[GL42.-I,." >5%- \,.-s0,32." >5%- \,."%- \,."%- \,.])3-[GL42.-I,. -\,.]+3-8,." >5%- \,."%- \,.-k.,."%- \,." >5%- \,.-9;,2(;;)).-8L4<3.-I,.-\,20".-L;VB4T32."Y>5%- \,20".-L;VB4t32."Y>5%- \,21#>5Q#>5.-:Q.#-:," )'43")Q")Q" )Q#Q#%)D4333##%@Q33##%>5]#%>5YQ3334SSS.-:S.]5-8,.-I,.]5-8,.#.-:'- \,.-k.,.#>5%- \,.#%- \,)4?5. ]>5Y- \,.-\,. - \,.-\,. ])6>5Y]>5Y657- \,. -)-\,. 7-\,#!Q#Q#%)D4<534##%5Q34#]#%>5Y]>5Y6Q#%#%6645. 8)- \,##%@Q34##%@Q. 8]#%5>5Y- \,343F5. -\,.#>5%- \,)L4f5.)- \," %+45"%S"%S" %S#Q#%)D4535##%@Q35]#%>5##%>5%[35.-9;,2()0."-XL45."-YL45. -A,">5[.]6-[GL45.-A,)46) D46" Q" %)D]" %>5Y">5YDO496" " %5Q36]" %>5Y">5YB" %)DO4^6.-A,2" )Q" %" %G46]" %5>5]" %>5Y[]" %5>5]" %5>5Y[" " %6Q3d6)5S]" %>5">5Y[.]" %5>5.-:V- \,36.-A,36.-A,2:)47)47.-A,37S.)- \,37.-A,20 ." -@:4P7. 0" - \,." -X." -N4M7.-A,3W7.-A,.-\,20 ." -@:,. 1" - \,.]7-[G,.-\,.-k.,2:Sދ.-;,.]7-[G)ԋ:4737.]-@,. -@,37.-;,Sދ2#endasm0" Q.-G,. /-\,.])R5]98- B4 8.-8473 8.-I," " %5Q.];8-[GB483 837.]=8-8,." %5"Y-\,2),)..-;-4e8..--4b8.-;,3L838..--B48.-B4838.-;,3e8.-G,2.-G,.])R5]8- .- B:2;.-A,."Y-:,. -,2."Y-[GB48.-A,20."Y-W48Z2Zz]Hg!h5K4 9.-A,2"ZzV\.""Y@VA""Y@VA$&-40939Z 5" $RZ 5"$RZ 5RZ 5"%RZ 5"%=RZz5\zZ20."Y-XW4}9Z2Zz]Hg!56K49.-A,2"ZzV\.""Y@VA""Y@VA$&-4939Z 5" $RZ 5"$RZ 5RZ 5"%RZ 5"%=RZz5\zZ20.-G,..--֓B4:2"Q.])R"%55$-40:""%@Q3:])R"%55$ :B20.-G,..--֓B4Y:2" Q..--" %FO4:"Y" " %@'A5.-;R3]:"Y" %5R..--4:.-;,3:2)Ƌ@+Ƌ2.]:-@,."%-H,2syscc0" Q"Y" %5$4:."Y" " %@'A5$-,3:. -,20Z{]{ d56B4;.-A,2" Q" %D48;Z{@@W{AA"Y" " %@'A>5%Q3;2.-L;4K;Z{>6\{2Z{]{B4_;.-A,2Z{>622.-B4t;2])R55$ <22.-B4;2])R@+RA5$ <22SR])R5R2.-B4;)ԋ4;2.-;,.-Y=,3;.-;2.-B4;.-;,)ԋ4;2.-;20.-@,.-;,)ԋ4 <2)@S)ڋ4'<".)ڋ- ..--8=,.-;,.- "C4=.-B4=. -A,3=.- \B4=..-;-8=,..-;-8=,3=.-;,. "-8=,3?.- 'B4{>. '-8=,.-;,.- 'C4j>.-B4F>. !-A,3j>.- \B4\>..-;-8=,..-;-8=,3&>.-;,. '-8=,3?.- /B.-h; *BO4>.-;,.-;,.- *B.-h; /BOL4>.-B4>.-;,3>.-;,)ԋ4>3>3>.-;,.-;,3?..--4?..--4 ?..-;-8=,3>3?..--4?"Q..--4O?"%D4F?"""%@'A5.-R.-;,3 ?""%5R"."-'4?"]""%@'A5$&4?."$-8=,3d?3?"Q""""%@'A5$&4?."$-8=,3?3?..-;-8=,3j=.-8=,)T PG4?. "-A,+TSR])R@+RA5])T@+TA5$&4?3?SR20 ." -@:L4@.-A,.-;,2"Q." ""%@'A5$-j@43@3@.- B4G@.-;,33@..-;-j@4W@3G@)!G4i@. #-A,2])5"$R)!D4@)@+A,"$2"$B4@2)֋4@."$)֋- j < B4@.)֋-ʑ,. $-A,"$20" Q."Y" " %@'A5$-@4@3@20"!["Y$ <B4A)ڋ4 A.)ڋ-ʑ,SڋSԋ20. *-,. *-,. *-,.]-:," !Q" " %@'A)RD4SA. -,39A. ^-,"%3eC.]C-:,3C.]D-:,3C.]D-:,3C.]5D-:,3C.]CD-:,3C.]`D-:,3C.]{D-:,3C.]D-:,3C.]D-:,3C.]D-:,3C.]D-:,3C.]D-:,3C.]E-:,3C.]0E-:,3C.]=E-:,3C.]JE-:,3C.]XE-:,3C.]eE-:,3C.]vE-:,3C.]E-:,3C.]E-:,3C.]E-:,3C.]E-:,3C.]E-:,3C.]E-:,3C.]F-:,3C.]F-:,3C.]%F-:,3C.]BF-:,3C.]^F-:,3C.]uF-:,3C.]F-:,3C.]F-:,3C.]F-:,3C.]F-:,3C.]F-:,3C.]F-:,3C.]F-:,3C.]F-:,3C.]G-:,3C.]%G-:,3C.]:G-:,3C."%-H,3C6> T]YCUaAmAyAAAAAAAAAAAA BB!B-B9BEBQB]BiBuBBBBBBBBBBBBCCC)C5CACMC)ҋ@Sҋ.-@,.- C)ԋLO4C.-@,3C2missing closing bracketopen failure on source file'on' or 'off' expectedbad file nameopen failure on include filemultiple keeps not allowedkeep must come before first functionillegal symbol namemust be constantnegative size illegalno function body foundillegal function or declarationkeep file could not be opened'(' expected',' expectedmissing block';' expected'while' expected':' expectedthis label already useddefault label already usedtoo many case labelsnot valid outide switchname conflictlabel name expectedalready definedmissing bracketglobal symbol table overflowlocal symbol table overflowtoo many active whilesno active whilesexpected quote''' expectedline too longmacro table overflowoutput file errorcan't subscriptundeclared variableinvalid expressionstring space exhaustedwrong number of argsmust be lvalue. -@,."Y-@,20.-G," .])R5"Y- '4G)R" %5SR220.-G,".])R5"Y" %-H'4G)R"%5SR..--4G.-;,3G22.-B4G.-;,.-Y=,)ԋ4G3G3G.- B4H.-;,3H23G20 "["["YD4-H""Y?[]""Y@VA5 -R"YB4GH]""Y@VA5 0R3H" [" Y"Y 8F4bH" " Y 7[3KH" Y4H""Y" Y8 05R"$ 0C" YB:"Y:4H"[]""Y@VA5"$R""Y" Y9[" " Y 8[3bH]"Y5R20."Y-H," Q]" %5$4H.]" " %@'A5$-@,3H20."Y-H," Q]" %5$4I.]" " %@'A5$-,3H20." -2I41I." -W,20 " ."Y-IQ.]~I-[G4yI" %B4\I. *-A,2."-2I4nI."-W,."Y-W,2" %22=0 " ."Y-IQ.-G,.])R5]I- L4I" %2" %4I."Y-W,.]I-[G4I."-I4I."-W,.-\,3I23I2||||0 " ."Y-YJQ.-G,.])R5]SJ- L4J" %2" %4%J."Y-W,.]VJ-[G4MJ."-YJ4BJ."-W,. -\,3OJ23%J2&&&&0 " ."Y-JQ.-G,.- |C4{J" %2.])R5]J- 4J" %2" %4J."Y-W,.]J-[G4J."-J4J."-W,.-\,3J23J2|||0 " ."Y-2KQ.-G,.- ^C4J" %2" %4K."Y-W,.]0K-[G4*K."-2K4 K."-W,.-\,3,K23K2^0 " ."Y-KQ.-G,.- &C4TK" %2.])R5]K- 4jK" %2" %4yK."Y-W,.]K-[G4K."-K4K."-W,.-\,3K23yK2&&&0 " ."Y-WLQ.-G,.])R5]KL- L.])R5]NL- LO4K" %2" %4K."Y-W,.]QL-[G4L."-WL4L."-W,. #-\,3GL.]TL-[G4EL."-WL4:L."-W,. $-\,3GL23K2==!===!=0 " ."Y- OQ.-G,.])R5]N- L.])R5]N- LO.])R5]N- LO.])R5]N- LO4L" %2.])R5]N- 4L" %2.])R5]N- 4L" %2" %4L."Y-W,.]N-[G4^M."- O4 M."-W,"Y>5YW40MZ 5$B40M. *-\,3L">5YW4SMZ 5$B4SM. *-\,3L. '-\,3N.]O-[G4M."- O4{M."-W,"Y>5YW4MZ 5$B4M. ,-\,3L">5YW4MZ 5$B4M. ,-\,3L. (-\,3N.])R5]O- .])R5]O- LO4ZN.-;,."- O4N."-W,"Y>5YW4,NZ 5$B4,N. )-\,3L">5YW4ONZ 5$B4ON. )-\,3L. %-\,3N.])R5]O- .])R5] O- LO4N.-;,."- O4N."-W,"Y>5YW4NZ 5$B4N. +-\,3L">5YW4NZ 5$B4N. +-\,3L. &-\,3N23L2<><=>=>><<<=>=<<<>>>0 " ."Y-OQ.-G,.])R5]O- L.])R5]O- LO4HO" %2" %4WO."Y-W,.]O-[G4~O."-O4tO."-W,.-\,3O.]O-[G4O."-O4O."-W,.-\,3O23WO2>><<>><<0 " ."Y-PQ.-G,.- +C.- -CO4O" %2" %4O."Y-W,.]P-[G4=P."-P4P."-W,"Y>5YW43PZ 5$B43P.Z 5$-M\,.-\,3P.]P-[G4P."-P4ZP."-W,"Y>5YW4PZ 5$B4P.Z 5$-M\,.-\,3P23O2+-0 " ."Y-WQQ.-G,.- *C.- /CO.- %CO4P" %2" %4P."Y-W,.]QQ-[G4P."-WQ4P."-W,.-\,3MQ.]SQ-[G4$Q."-WQ4Q."-W,.-\,3MQ.]UQ-[G4KQ."-WQ4AQ."-W,.-\,3MQ23P2*/%0.]T-[G4Q" ."Y-WQ'L4}Q. *-A,2"Y>5Y4Q."Y>5Y-M[,."Y-W,. !-\,""Y>5Y["Y 5$B"Y 5$BO4Q. !-\,."Y-W,2.]T-[G4YR" ."Y-WQ'L4Q. *-A,2"Y>5Y4R."Y>5Y-M[,."Y-W,. "-\,""Y>5Y["Y 5$B"Y 5$BO4NR. "-\,."Y-W,2.]T-[G4R" ."Y-WQQ" %4~R."Y-W,.-\,2.]T-[G4R" ."Y-WQQ" %4R."Y-W,.-\,2.]T-[G4R" ."Y-WQQ" %4R."Y-W,.-\,2.]T-[G48S" ."Y-WQQ" %4S."Y-W,"Y>5[""Y>5YV4-S"Y>5"Y 5$["Y>5[2.]T-[G4S" ."Y-WQQ" %B4`S. +-A,2"Y>5Y4mS2. .""Y>5YV- \,"Y>5"Y 5$[23T" ."Y-TQ.]T-[G4;T" %B4S. *-A,2"Y>5Y4S."Y>5Y-M[,."Y-W,. !-\,""Y>5Y["Y 5$B"Y 5$BO4 T. !-\,."Y-W,. "-\,"Y 5$B"Y 5$BO49T. "-\,2.]T-[G4T" %B4XT. *-A,2"Y>5Y4qT."Y>5Y-M[,."Y-W,. "-\,""Y>5Y["Y 5$B"Y 5$BO4T. "-\,."Y-W,. !-\,"Y 5$B"Y 5$BO4T. !-\,2" %22++--~!-*&++--0" ."Y-VQ""Y>5Y[.-G,.- [B.- (B:4U.]V-[G4U"YL4PU. %-A,.-?8,.]V-8,2"Y 5$B4gU."Y-W,3~U"Y 5$C4~U. %-A," Q.-I,.]V-8,."Y 5$-M\,.-\,"Y>5["Y>5"Y 5$[" Q3U.]V-[G4U."Y-7," "Y>5VQ3U" %23%U"YL4U" %2"Y 5$B4 V. ."Y- \,2" %2[]](0.]W-[G45" Y["Y>5" Y 5$[" Y 5$B4V"Y>5[" Y 5$B4V22" ."-V4V" Y 5$C4V"Y>5" Y["Y>5[" Y 5$C4V2. ." Y- \,"Y>5" Y 5$[2.-G,.- (B4 W" ."-8[3@W" ."-i9[. &-A,.-Z,.]W-@,."-@,. -@,"Y>5" Y["Y>5[2."-?X4rW"Y>5"Y>5VV2. '-A,. - \,.-?8,22()variable name: "Y>5YB4W."Y>5Y-j[,3W."Y>5Y-[,2"Y>5YC"Y>5YBO4W."Y>5Y-Z,3X."Y>5Y-[,2.];X-8,.-I,.]=X-8," %40X. 2"%- \,3:X."%- \,2()."Y-X4\X. "Y>5Y- \,3X."Y-Y4yX. "Y>5Y- \,3X."Y-Y4X. -)ʋ"Y>5Y-\,3X220" "'[" Y4X" [.]'Y-[G4X" [.])Y-[G4X""%?Q" [3X..--L4X2..--4Y".-;R" " Y 7"$ 065[3X" " Y"%7["Y>5" Y[2+-0.- \B4Y.-;," .-;R" $ bB4QY2" $ tB4\Y 2" $ nB4gY 2" $ vB4rY 2" $ fB4}Y 2" $ rB4Y 2" $2.-"$B.-LN4Y.-;, 2.-;20" Q.]Y-[GL4Y2" . '-+Y& C4Y" " %>" $ <5Q3Y"Y>5" %[2'0.]-[GL4Z2"Y>5)[" . "-+Y& C4pZ.-B4+Z3pZ)!G4]Z. (-A,. "-+Y CL4[Z.-B4XZ3[Z3=Z2]{)@+A5" $R3Z]{)@+A5R2. ;-@,2.]Z-:,2 Small-C Compiler 2.0 (Cortland version) .]Z-IG,)Fg4Z.]Z-IG,.]f-@,. -@,2end append "Y 5$B4 [. 9"Y- \,3L["Y 5$3=[."Y- \,3L[."Y- \,3L[. 9"Y- \,3L[6>]L[U["[/[2."Y 5$ <"Y 5$ <>5- \,2"Y 5$B4[. :"Y- \,3["Y 5$3[."Y- \,3[."Y- \,3[. :"Y- \,3[6>][U[[[2"$3[.-\,3[. -\,3[. ;-\,3[6>][U[[[2"$3\. -\,3-\. -\,3-\. <-\,3-\6>]-\U[ \\2.]8\-IG,2dc i1'.]I\-IG,2ds "%3u\. - \,.-\,2. - \,.-\,3\6>]\US\c\20"Q]V"%>5Y4\.]V"%>5Y]V"%5>5Y]V"%5>5Y-a,]V"%>5[""%5Q3\2."Y-\,2."Y" Y-\,20"Q]V"%>5Y4 ]""%5Q3\"%8G4@].]V>5Y]V>5Y]V>5Y-a,.-],"Q]V"%>5"Y[]V"%5>5" Y[]V"%5>5"Y["Q"%4]""'Q]V"%>5Y4]."%-]4]""%@Q""%5Q3|]3o]2"%D4]]V"%>5]V"%5>5Y[""%@Q3]20" ]V"%>5YQ]V"%5>5Y B4\^" %B" %BN4\^]V"%5>5Y" %B4\^]V"%>5]V"%5>5Y[]V"%5>5]V"%5>5Y[]V"%5>5]V"%5>5Y[2]V"%5>5Y B45_" % B4^]V"%>5 3[."%5-],2" %B4^]V"%>5 4[."%5-],2" % ;B4^]V"%>5 >[."%5-],2" %B4^]V"%>5 5[."%5-],2" %B4_]V"%>5 6[."%5-],2" % :B45_]V"%>5 =[."%5-],2" % B44a]V"%5>5Y B4s`" ]V"%5>5YQ" %B4_]V"%5>5]V"%5>5Y]V"%5>5Y5[."%5-],."%5-],2" %B4_]V"%5>5]V"%5>5Y]V"%5>5Y6[."%5-],."%5-],2" %B4,`]V"%5>5]V"%5>5Y]V"%5>5Y7[."%5-],."%5-],2" %B4q`]V"%5>5]V"%5>5Y]V"%5>5Y8[."%5-],."%5-],22]V"%5>5YB4`."%5-],]V"%5>5]V"%5>5Y?[32a]V"%5>5YB4 a" ]V"%5>5YQ" %B" %BN4`."%-],."%-],2" %B4 a."%-],]V"%>5[22]V"%5>5YB42a."%-],."%-],22" %B" %BN4a]V"%5>5YC]V"%5>5Y 1CO]V"%5>5YCO4a."%5-],222"Y3e.]e-IG,." Y-H,. ,-@,."Y-@,3e." Y-:,.]e-IG,2.]e-IG,." Y-@,3e.]e-IG,." Y-@,3e.]e-IG,." Y-H,3e.]e-IG,." Y-@,3e.]e-IG,." Y-@,3e.]e-IG,2.]e-IG,2.]e-IG,2.]e-IG,2.]e-IG,." Y-H,3e.]e-IG,2.]e-IG,2.]e-IG,." Y-:,3e.]e-IG,." Y-:,3e.]e-IG,." Y-H,3e.]e-IG,2.]e-IG,2.]e-IG,2.]f-IG,2.]f-IG,2.] f-IG,2.]f-IG,2.]f-IG,2.]f-IG,2.]!f-IG,2.]&f-IG,2.]+f-IG,2.]0f-IG,2.]5f-IG,2.]:f-IG,2.]@f-IG,2.]Ff-IG,2.]Lf-IG,2.]Qf-IG,2.]Vf-IG,2.][f-IG,2.]`f-IG,2.]ef-IG,2.]jf-IG,2.]of-IG,2.]tf-IG,2.]yf-IG,2.]~f-IG,." Y-:,. +-@,."Y-H,3e.]f-IG,." Y-@,3e.]f-IG,2.]f-IG,." Y-@,3e." Y-@,.]f-IG,2.]f-IG,." Y-:,3e.]f-IG,2.]f-IG,2.]f-IG,." Y-@,3e.]f-IG,." Y-@,3e.]f-IG,2.]f-IG,." Y-:,3e.]f-IG,." Y-@,3e.]f-IG,." Y-@,3e.]f-IG,2.]f-IG,2.]f-IG,." Y-@,3e.]f-IG,26> |]eUaaaaabb+b5b?bIbSbhbrb|bbbbbbbbbbc ccc)c3c=cGcQc[cecocyccccccccccdd#d6dKdUd_dtddddddddd. -@,2cup anop ldoc ldoi lao croc croi cpoc cpoi indc indi ldci popi ret ujp fjp ent shl adi sbi mpi dvi mod ior xor andi shr ngi not ocp lor land inci deci eql neq les grt leq geq ult ule ugt uge ldca ldca mst ujp anop tjp stoi stoc sroi sroc xjp adr ldol crol cpol indl srol stol 8 !p"qp2p1#p$qpp%p&qpҍpҍ2ffffҍff*BgCgDgEg+Dg0Lה d(( Lה8Nȹ*)!"#$ҍ%& dpdr0*Bgp0Lה dpdr0p8 T0Y 6Lה dpȷdr0p8 d8  0Lה dpdrHgtvtz }tit .LהtdvdLהdpdrwtvtz }tit .LהtdvdLה8ddR) 6Lהixdpdrtvtx }  LҐ .Lה 8t鞃dvdLהt)8ett`dp p t 6Lהdifipd) } 6Lה p tp p) +t)a{A[_ 0:8``d8 ()ddLהd)G V ]"`8 U()H]"h ]) 6LהddLה8 R0) 6Lהl8]dpȷdr0pș)A)0dpdrp)R=r8WwW8 () 8 (8 ())"$8 () ) 6Lה .Lה))ð) )0dd08 ˘() Lה .Lהd)0:A[_a{ .Lה 3Lהd)A[_a{ .Lה 3Lהd)0: .Lה 3Lהd)"ؚLה0hjnb^fZhi\X8d֔d TVhili`hT)Tɀ W L| L|lTJTd Bad op code ($8e d 0)"ؚL#/8XXXTXHdXdXXdhX`d Run time error #$8e d 0 at $8W V 08U T 0 "ؚh8`????????????????????????????????JVnԖn&S?NהkWw,kB\3U̘ɘ~ȖӗΖ, xpgddpwdd` xp7ddp'dd` Ln Ln Lndpȷdr dp xpdpd` ԖLn Ln Iprdp` Iprdpdp` AedX8pfr IHTphT`8dd dd` a"dd` Ap8dpdL8dTdTTL a"L3dd n I(T` a"L.did did`dpdrp)L6dpdrpdʊd`dpdrpdpd` xdpddpd` Ϛ Ap8XpdZdL Ϛ Ip8XpdZdL Ϛ IddL ϚJ 6L Ϛ A 6L Ϛ IdʊdL Ϛ IprpdʊdL Ϛ IprpdpdL a"|L. a"mL.8 xpppdd(pL6%pL6 a"dd` a"edd` ϚXdL a"L.8dddd`ddL6L6did` x8dpddpd` a)L.&dd` a)ʆ ffdd` IT` P@L. P5L.dddeTpVrpTdTdi d`dd`T)T`TTT` adpdp` xdpdp`dpidfr`dd`d`` Program Stack Overflow8Lhppp)"ؚplp8dd`8H h(kl6EŦkŪŨk@k"" &&&8娪媐欈*8娰e欈셰8嬅宅k"' vOJ eeffff` vdFejf󅮥)@k8嬅宅k8夅妅ddd8娅媅Ƥk0d"=X斥ŗ(8kdƘ(k0e日日"I=XXƗ(k0e日日"XXƗ(kHJJJh)8jk=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrsL0A.-)!,)Ci<4 .-Q,.-d,."EZ5i- n,)Ci#-,.-u4". -&,2 errors found during link. was the highest error level. Last segment starts at $ and is $ bytes long. .]xm-C4#.]xm]#- O+qB4x#.-B,Sq3#..]xm-?x-uL4#.-B,Sq3#.)q-TJ,)qSq.Z5i]xm- n,3#Sq2r0G.]xm-C4t$.]xm]u$- O+qB4#.-B,3t$..]xm-?x-uL4$.-B,3t$.-V,".)q-ˀ[" )qQ."KZ5i- n,.Z5i]xm- n,.)q-TJ,)qSq.-d,.-R,.Z5i"K- n,.-Q," %Sq.-%. -B,3D%.-\2,20C.]m-C4%."E]m- n,."E-g,."E-G+qL4}%."E-^Sq"G.]m-v'L4%.-B,3%"G% C4%. -B,3%.]m-<[,20E.]xm-C4&.]m]xm- n,."G]m- n,."G-G+qL4%."G-^Sq.]m]&-,"I.]m-v'L4&.-B,3&"I% C4(&. -B,3&.]m-<[," AR"$ [F4i&3N&""$@&A,36&."$-b/,.]m-vL4f&3i&3B&"$ AB4s&2""$AR""$R"$ AG4&3&""$A&@,3&."$-b/,.]m-v C4&. -B,3&.]m-<[,3&2.ROOT0 Sq.-f4'" Z r["(qR""$R"$ AG4'3'""$A&@,3&."$-b/,.]m-v C40'.]m-,.]'-,3'.]m]'- OSq." Y-y," Y4^'.)q" Y-," [".)q-ˀ[.)q-v,.-&.4'.]n]r -L4')^k4'.-h=,3'.-:,3'."$"Y- lg,.)qZn- ~xP^'.)q-TJ,3&.-PP&2 is not an object file. r0)EiB4(".-AQQ"%!C4("%SVk2.-!E\r.ZrZr- [,Zr\r2Z7r4G(.-U,ZrZr5Zr6\r3N(. -B,20)Ci5%4-.- J,3%.]nq)q6>5%]nq)q6>5%N4%.]nq)q6>5Q.- J,20"R)^kL49/(nC(nCO4L..-B,"R(n E(nEN(nDNZnLN4s..-B,"R39/Zn4."ZnQ"%5Y-,."VY>5Y-y,.)q-v,)^k43(o @5]p)q6>5Y]p)q6>5Y5[]nq)q6>5%]nq)q6>5%O4@5.- J,]nq)q6>5%]nq)q6>5%N4w5(q4j5.- J,]nq)q6>5Q)qASq3:]p)q6>5]p)q6>5Y]p)q6>5Y6[]nq)q6>5%]nq)q6>5%O45]nq)q6>5Q35]nq)q6>5%]nq)q6>5%(qON45.- J,)qASq3:]p)q6>5]p)q6>5Y]p)q6>5Y7[.--,)qASq3:]p)q6>5]p)q6>5Y]p)q6>5Y8[.--,)qASq3:]p)q6>5]p)q6>5Y]p)q6>5Y9[.--,)qASq3:]p)q6>5]p)q6>5Y?[.--,3:(q46.- J,Tq]p)q6>5YTq]p)q6>5Y\Zq]nq)q6>5%47.- J,]p)q6>5YD4J7]p)q6>5]p)q6>5Y]p)q6>5Y?=[3o7]p)q6>5]p)q6>5Y]p)q6>5Y>[)qASq3:]p)q6>5]p)q6>5Y]p)q6>5YO[.--,)qASq3:]p)q6>5]p)q6>5Y]p)q6>5YN[.--,)qASq3:]p)q6>5Y]p)q6>5Y;48]p)q6>5[38]p)q6>5[.--,)qASq3:]p)q6>5]p)q6>5YL[.--,3:]p)q6>5]p)q6>5Y]p)q6>5YF[.--,)qASq3:]p)q6>5]p)q6>5Y]p)q6>5YG[.--,)qASq3:]p)q6>5]p)q6>5Y]p)q6>5YC[.--,)qASq3:]p)q6>5]p)q6>5Y]p)q6>5YD[.--,)qASq3:]p)q6>5]p)q6>5Y]p)q6>5YE[.--,)qASq3:]p)q6>5]p)q6>5Y]p)q6>5YB[.--,)qASq3:]p)q6>5]p)q6>5Y]p)q6>5Y<[.--,)qASq3:]p)q6>5]p)q6>5Y]p)q6>5Y:[.--,)qASq3:]p)q6>5]p)q6>5Y]p)q6>5Y;[.--,)qASq3:]p)q6>5]p)q6>5YM[.--,)qASq3:.- J,3:6> *]b:U456:6p666y777/8R8888*9`999:8:20.--,)`k4:S`k"Zr[.-I~,".]n-uR"$(o (] =U;< = =#<#)qL4O>".)q-ˀZq5[ZrZq5\r.)q"Y-,3^>.Zq)q)q-/,3BZq3fB.]q(n)q(n-g{,ZrZrZq95\r3B.]q(n)q(n-g{,ZqE4>ZbqZq5\bqZrZq5\r3>ZrZq5ZqD4>.- J,3>ZrZq5\r".)q-ˀ[.)q"YZq5-,3BTo.]o(n)q-|,.]o-uL4)?.]o- J,3Y?(o (][BUg>>[B[B>\???@[B[BH@@@A??ABH@3>ZbqZn5\bqZrZn5\r2)^k4B2)qD4B)q@Sq)q@Sq]q)q>5"%Q]q)q>5)qQ3B]q>5!Q]q>5Q2+Zk*q*qSq.)q-Wq46CZq D4-C.-4,33C.-E,3 C]p)q6>5Y\^q]nq)q6>5%Tq)qC4dC.- J,2.-g,.-DuB4wC2]vk)q@+qA5$ <220.-g," " 'Q..-Du-.-Du /BN.-Du .BN42D.-Du /B4C" Q" % AD4C"Y" " %@'A5.-eCR" %B..-Du-ALO" % AGN4D.-B,2" % AD4 D"Y" " %@'A5.-DuR.-eC," " %@'A,3C"Y" %5R" %B4LD.-B,2" %20"Q]#i"%5$L"% DO4tD""%@'A,3VD"% D4D"%2220.-g,.-Du )B4D2.-Du ,B4D.-eC,.-g," Q..-Du-g.-Du ~BN4E" %B..-Du-ALO" %!GN4D. -B,2"Y" " %@'A5.-eCR3D"Y" %5R" %B4E.-B,2" %20"[.-g,.-Du $B4}E.-eC,..-Du-مL4WE.-B,!2..-Du-م4zE""Y7..-eC-d5[3WE3E..-Du-L4E.-B,!2..-Du-4E""Y 7..-eC-d5[3E"Y20Zq3G.Zr- ,SZk3G.]q(n)q(n-g{,.Zq- ,3G.]o(n)q-|,.]o-gL4F.- ,3%F.Zo- ,3G.]o(n)q-|,.]o-gL(o DN4TF.]o- J,(o GC4jF.Zo- ,3tF.Zo- ,)^k4F"Z3r["Y5(o:R3G.]o(n)q-|,.]o-gL(o DN4F.]o- J,.(o- ,)^k4F"Z3r["Y5(o:R3G.]o(n)q-|,.]o-gL(o DN4 G.]o- J,.(o- ,)^k4+G"Z3r["Y5(o:R3G.]o(n)q-|,.]o-gL(o DN4[G.- ,3cG.- ,)^k.]o-uO4G"Z3r["Y5(o:R3G.]q(n)q(n-g{,.ZqZq5Zq5- ,SZk3G.- J,3G 6>]GUEEE(FFF.GG20" Q"Z?r["Y4H."Y>5"Y- 3L4H" %2" " %@'A,""Y>5Y[3G20 ZGrB42H".- WGr[3OH."Y-u4?H2".- [Z3r"Y[Wo\o".."Y-5- [" Q" %."Y-D4H3H" " %@'A,3lH"Y" %5"Y" %5$R3~H"Y."Y-5R"Y\o"]o[" Q" %D4H3H" " %@'A,3H"Y" %5"Y" %5$R3H22.-g,.-Du *B4I.-eC,..-Du-4I2)qA+q@,20" R" Z;r[" $L" YO4VI." Y>5"Y -L4HI" R" " Y>5Y[3%I" $2.)q-,.-y,.)q-v,.]n"Y- 3B4I2.)qZn- ~xPlI20"Q"Y4I"Y>5Y"YB"Y>5Y" YBO4I"%2""Y>5Y[""%@'A,3I2"%D4J]r" %5 -R" ."%?" %5- IQ3;J"% G4J" ."% 8" %- IQ]r" %5"% 9 05R]r" %55R" %522]vk)q5]wl)q5&&+qSq2]#i"%5$L4J]i"%5$4J.]fh"%>5Y]h"%>5Y]i"%5$-,.]i"%5$-,3J.]fh"%>5Y-,]#i"%5R2]h"%>5Y220)q@Sq)VkL)Ci *]LU/K?KOK_KoKKKKKKKKKKLL/L?LOL_LoL"%)qE4L"%Sq" Y4L"%B4L.]O-,3L.]O-,." Y-,. -&,2Error at past , PC = : Duplicate label Undefined opcode ORG location has been passed MEM location has been passed Expression syntax error Unresolved reference Addressing error Data area not found Address is not in zero page Address is not in current bank Relative address out of rangeLinker version mismatch Evaluation stack overflow Module header ORG not allowed in REL linker Segment header MEM directive not allowed Invalid operation on relocatable expression Only JSL can reference dynamic segment Code exceeds code bank size Data exceeds data bank size Shift operator is not allowed on JSL to dynamic segment Illegal banksize Data area: Label: 0"Q"."Y" Y- '4P".-PDQ.]P" Y- 3L.]P" Y- 3LN4P]h"%>5[]i"%5"%R]h"%>5]h"%>5XV[]fh"%>5X[3P]h"%>5]h"%>5]h"%>5."%-lvVV[]fh"%>5.]h"%>5Y- VL4dP.]P-,.]fh"%>5Y]h"%>5Y"%- ,."%-,]i"%5R],i"%5R]h"%>5[]#i"%5R"%2wWout of memory .-h,.-V,.-d,.-=/)qLO4P.-P,3P2](r$4 Q.]r-_,.(n](r- 0,.]r](r- n,](rR222Z7r4@Q.-U,ZrZr5Zr6\r3#Q2.]kQ-,4PQ2.]nQ-,4_Q2.-B,!22ONOFF)qL4Q.-PDSq],i)q5R]#i)q5R]h)q>5]h)q>5XV[]fh)q>5X[]h)q>5]h)q>5V[)q2.Z5i]R- O+qB4R.] R-,.Z5i-,. -&,.-(s,2rCould not open source file: .-#Q,.]m]R- O+qL4FR.-B,2.]m)q)q-\|,.-rQL4eR.-B,+`kSNk)^kL4R.)q-TJ,Sq3R. E)q- ~, @\fqWbq\jq2w)Ci &]TURTST%STTTTTESeSTTSTTT3T)q)TkLO4'U.-h,.-V,.-d,.-=/)qLO4IU.-P,33U3R2APPENDCOPYEJECTKEEPLIBRARYLINKLINK/ALLLISTOBJOBJENDORGPRINTERSELECTSELECT/SCANSEGMENTSEGMENT/STATICSEGMENTSOURCESYMBOL0Z7r4VZ7r>5Y\rZ7r>5Y\r"Z7r>5Y[.Z7r-,"Y\7r20)^k4V2"Q"%)qF4W33V""%@Q3V"!Q"%]q"%>5%D4bV3WV""%@Q39V. -&,3MV.]W-,]q"%>5%3W.]W-,3W.] X-,3W.] X-,3W.]2X-,3W.]JX-,3W.]cX-,3W.]yX-,3W.]X-,3W.]X-,3W.]X-,3W.]X-,3W.]X-,3W.]Y-,3W.]Y-,3W.]=Y-,3W.][Y-,3W.]Y-,3W.]Y-,3W.]Y-,3W.]Y-,3W.]Y-,3W.]Z-,3W.]*Z-,3W.]FZ-,3W.]VZ-,3W.]hZ-,3W!6> 6]WUWWxVVVVVVVVVVVVWW W,W8WDWPW\WhWtWWWW3)V2^ Illegal command. File name expected. Number expected. Segment name expected. 'ON' or 'OFF' expected. Could not open file. Cannot change languages. Invalid file name. File must be of type OBJ. Expected '('. Invalid segment name. Segment is not in module. OBJ not currently active. ORG location has been passed. Multiple KEEP's not allowed. Dictionary file could not be opened. Linker version mismatch. Illegal header value. Value is out of range. Invalid file type discriptor. Selected segment is already defined. Segment name is too long. Illegal segment structure. Out of memory. File read error. Maximum Error Per Line Exceeded. )Vk4Z.Zo- z,. -&,.Zn- z,(n4Z.]Z-,3Z.]Z-,.]n-,. -&,3Z)Ci5YC4[."Y>5Y-Z,."Y-|,"Y>5YC4;[."Y>5Y-Z,2."Y][- OSq.-y,.)q-v,.-&.4w[)^k4q[.-h=,3w[.-:,.)qZn- ~xPQ[.)q-TJ,2r0"Z7r[. - \7rZ7r>5"Y[Z7r>5" Y[Z7r>5"Y[20"."%- IQ""%Q"%" %F4[3[""%@'A,3[. -&,3["Q"%"%D4*\3\""%@'A,3\.]r"%5$-&,3 \2)^k4Z\)o)nC4J\."%" %- _,3Z\)PkL4Z\."%-b,20"%4']Zbq D4\.Zbq"%- ~,ZjqZbq5\jq3']" ."%-ˀ[."%Zfq-,Zjq4\. "%- ,.Zjq"%-@,."%" Y-,. "%- ,.Zbq"%-@,."%-ˀ\fq3]. "%- ,.Zbq"%-@,."%" Y-," Y\fq."%- ~,\jq\bq20."YZq6!5!8)q-@,.)q-@,.Zr)q-@,(q B4u].)q- ,3](q4].)q)q- ,3](qL4].)|n)q- ,3]. )|n:)q- ,. )q- ,.)q- ,.)q- ,.Zn)q-@,.)q-@,.Zq)q-@,.Z~n)q-@,.(n)q- ,.(n)q- ,.)n)q-@,.Zn)q-@,. ,)q-@,. @)q-@," Q];n" %5$" % DO4{^.];n" %5$)q- ," " %@'A,3M^" % D4^. )q- ," " %@'A,3{^" Q" % D4^3^" " %@'A,3^. )q- ,3^ZrZq6ZnEZnO4^.- J,ZnXE4^.- J,20 "Q" .."Y- 5- [" Y>5[." Y>5"Y- n,Z?rB4?_" Y>5"%[" Y\?r3_"Z?r[""%@'A,"Y>5Y4p_""Y>5Y[""%@'A,3N_"Y>5" Y["Y>5"%["%20 " .."Y-5- [" Y>5[." Y>5"Y- n,Z;rB4_" Y\;r3_"Z;r["Y>5Y4_""Y>5Y[3_"Y>5" Y[20" % C(oO4 `.- J,3a" % B(oO4Ha".)oZ^qZCr-I["YL4`"[ZCrB4i`. - \CrZCr>5[ZCr>5)o[ZCr>5Z^q[3`"ZCr[""Y@VA,"Y>5Y4`""Y@VA,""Y>5Y[3x`"Y>5. - [""Y>5Y["Y>5["Y>5)o["Y>5Z^q[""Y7 5[)q4Ea. )q- ,."%)q- ,.(q)q- ,(q4a.- J,.Zr)q-@,.)q-@,.)q)q-@,."Y)q-@,3a)q4a. )q- ,."%)q- ,.(q)q- ,.Zr)q-@,.)q-@,.)o)q-@,(q4a.ZZq)q-@,3a.Z^q)q-@,2)q4b.)q-@,.)q-@,."Y>5Y)q-@,."Y>5Y)q-@,. ")q- ,.)q-@,Zr5\r2)q4rb. )q- ,."%)q- ,.(q)q- ,.Zr)q-@,(q4eb.ZZq)q-@,3rb.Z^q)q-@,20ZCr4b.!]b- 0,"ZCr[.)q-@,.)q-@,"Y4b."Y-a,""Y>5Y[3b.)q-@,Zr 5\r.)q- ,2 0"%4c"" [(nL4ac"Q"%"%D4^c3c""%@'A,3c"Y"%5$L42cZbq@WbqA,3[cZbq4Ac."%-[\,Zjq@WjqA,."Y"%5$"%- ,3c3c""%Q"%E4c3~c""%A'@,3gc"Y"%65$L4cZbq@WbqA,3cZbq4c."%-[\,Zjq@WjqA,."Y"%65$"%- ,3rcZr"%5\r20 ""Y["Y>5Y!B4c2""Y>5Y[" " Y"Y5["" Y$R"R"$"$D48d3#d""$@&A,3 d]n"$5" Y"$55$R3d]n"$5R20 " [."%- B4d.]q(n"%(n-g{," .Zq5- VL4d.-B,3d." YZq"%-ZqC4d.-B," [3d"Zq" Y5["Q"%D4d3d""%@'A,3d"Y"%5 R3d3d.-B," Y20.-]eUeeeeeee3~e20.]xmZ5i- n,.]mZ5i- n,.]m]>g-,".]m-v'L4jf.]m-,.]Dg-,.-(s,"% C4f.]m-,.]Qg-,.-(s,.]m]jg- OSq.-y,.)q-v,.-&.4f.(n]n- 0,)^k4f.-h=,3f.-:,.)q-TJ, ATq(q [F4g3f(q@*qA,3f.(q-b/,.]m-vL4g3g3f(q AB4g2(qATq.]r]n- n,](rW;rW rR2.ROOT not found. is not an object file. r](r$L4g.]n-IL4g"$Tq" Y\ r.](r]n- n,2.-Du B4g)q@Sq3g2."Y-uL4g2(oL4g2.(o-y220" ."Y-Q" %4h"Y" %5$ .B4g"Y" %5R2" " %A'@,3g20)^kL]vk$O4eh)q@Sq)Tk)qN4eh.)q- [,. -&,"Q.]wl""%@'A5$-& C4Wh3=h.-\u4eh.-(s,28 sLZr8spsqpspsspsqpspsspsqpEtpEt5is6i9is:iE=it>isAisCisEisGisHiBiDiWkFiHi7i;i?i8i}}=fk 0 RL0 WLꭩ}Lqz}~& ~~ 8 ~(~": RL~ͫ}8~":8 ~()з~"h}~i}Lqz}m}}}}pp)v}p)ɲcir0@r}pt}/ݯ}}p}t} dpdr }p}p0 WLd)dipfr00 p8 0L0>{8 ={>{8 ={0LA{.CONSOLE8 Z{0L^{.PRINTERd dtȷdvfh}hphh}hrd RLH}hhhh!:$:+:7d ptptptpt WL pt dpptptd ptpt pt dd !pdrdȷd  RLp 0 ȩ WLd|d|dpȷdr0pș}}08 ç|() WL RL}}}}T0}d >}}fkfk0Ldd) p ȷ) "pp "ppȷr8s r 08q p 0 "8 0 " "}} } "L} }}}} 葩oLd rd prfh}hhh}hpfhhhh}hhhh}hhhh Ld dpfh}hthh}hvhephhhݰhhݮh hhhhp 0t L꜁d hݰhhݮh ddL`fh}hphh}hrhhp) ddL`d dfh}hphh}hrhhhݰhhݮh hhhh p  ddL`꜐ddpȷdrȷdȷd hepthervhvht8hhphhrfh}hthh}hvp 0t hephherhpdrdL`dpȷdrȷd hrhpphrh RL WLd hdhdLdpdr0p"Ȁ)L(s0Lꮶq dnq dpȷdpqLd Lfh}hphh}hrdtȷdvd}hhhhݰhhݮh hhhhn tvvtd tpvp.tp vp tp  tp Ld8 ()ddLdpȷdr0pș߂A߂0dpdrp)R=r8WwW8 ͂() 8 ʂ(8 ())"8 ȸ() ) ZL RL߂߂ð߂ ߂ d dl"=~ptt dȷddpdr"I tv;vtL ȃ"i8ttvLt ȃpdrdL 8 (H)  ʱpmprh)` d dl"=~ptt dȷddpdr"Itv;vtL "i8ttvLpt pdrdL)  ʷ8 (Hpmprh)`dpdr Ld)0:A[a{ RL WLd)A[a{ RL WLd)0:A[_a{ RL WLd)0: RL WLd)   RL WLd)0:AGag RL WLdpdr pdrdLd)"Ldp tpȀ RL  WL Ldp ptȀt tdvdLdpdrp)ȀpLd0PNdtȷdvȷdpȷdrp)Ȁdt) p Ƥ p Ld042dtȷdvȷdpȷdr pt Ƥ RL WL Ld)0:!AGag L)8) ZLd)a {)dLhtjvhhrpv8pȷr0Geperi檠ȥȥȥpȥrttLtvLɇ`b`ep`berb`i`b pȥrln ipir`pr! ёDisposing of Nill Pointer Lltnv8prtt'tt ёHeap Damaged tttvLYtptrptpthh{rp!phrhpppr SLrp ݠppprpr S SphrhpphbAh`;hhȷhȷh8``bb8``bhh`eiȷe  `wiȷw`pddL0hjhi\ji^hiXjiZ8XdZfd TVhiljinli`nibhT)Tɀ > =L) NL)lTJTd ёBad op code ($8e d 0)"LЋ/8XXXTXHdXdXXdhX`d ёRun time error #$8e d 0 ё at $8W V 08U T 0 "h8`k~=BGb}  ! ??Vݍ0E6RkƏÏ1+{uG+7ݎQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ pgddpwdd` p7ddp'dd` =L} BL} GL}dpȷdr dp pdpd` L} L} L} mpr dp ` mprdp` mprdpdp` eedX8pfr mHTphT`8dd dd` t"dd` ep8dpd` t"4LWdd } m(T` t"LR t"LRdid did`dpdrp)LZdpdrpdʊd`dpdrpdpd` dpddpd`8dd ep8XpdZd`8dd mdd`8ddJ Z`8dd e Z`8dd mdʊd`8ddTdTdTiT`8dd mprp) Z`8dd mprpdʊd`8dd mprpdpd` t"LR t"LR8 pppdd(pLZ%pLZ t"dd` t"~dd`8ddXd` t"LR8dddd`ddLZLZdIddId`did` 8dpddpd` t)LR&dd` t)ʆ ffdd`dd } m(T` mT`dddeTpVrpTdTdi d` pWddpGdd`dd`T)T`TTT` dpdp`dpidfr`dd`fbd`` ёProgram Stack Overflow8LΑhppp)"plp8dd`8H h(kl6EŦkŪŨk@k"" &&&8娪媐欈*8娰e欈셰8嬅宅k"' OJ eeffff` dFejf󅮥)@k8嬅宅k8夅妅ddd8娅媅Ƥk0hhȷid敉) `) i)8e)最 月~iڧ)$J)朂F月3%iiH)ɰ.i)ɐ \ " )0h) h)ɰ#)J 月ƕHH(k0d"=X斥ŗ(8kdƘ(k0e日日"I=XXƗ(k0e日日"XXƗ(kHJJJh)8jkuvwxyz{|}~0 F -C FL>.]1Z1]1\10`W @Z1Z1 N< ;Z1Z1A<`W W #MSNC3Ь/Ь/**************************************************************** * * COMMON - Common Global Equates * **************************************************************** * COMMON START ; ; Zero page equates ; ~SEED GEQU $80 random number working seed ~EOL GEQU $90 end of line flag ~EOF GEQU $92 end of file flag ~TOOL GEQU $94 16 byte work space for ~ORCA_TOOLS ~SAVE GEQU ~TOOL+4 address to save result to ~OPERANDS GEQU ~TOOL+16 operands and work space for subs ! (uses 56 bytes) ~TEMP GEQU $2E0 temp string build area (22 bytes) END  LIST OFF SYMBOL OFF MCOPY I2.MACROS KEEP C816.INT2 65816 ON LONGA ON LONGI ON **************************************************************** * * Two byte integer math libraries. * * By Mike Westerfield * * Copyright October 1985, All rights reserved * By the Byte Works, Inc. * **************************************************************** EJECT COPY COMMON **************************************************************** * * ~RANX - Pseudo Random Number Generator * * Creates a 16 byte sequence of pseudo-random bits for use by * the format dependent random number generation routines. * * Outputs: * ~RANX+2 - 16 byte pseudo-random bit sequence * * * Notes: * 1) Entry at ~RANX2 initializes the random number * generator. For this call, the input is a two * byte seed contained in A. * 2) The pseudo-random sequence proceeds from most to * least random. * 3) The method is adapted from Arthur Matheny, * "Random Number Generation for the Apple," * August 1982 Micro, pp 57-60. * **************************************************************** * ~RANX START RN1 PHP set to long A, X LONG I,M CLC randomize the bit stream LDX #12 LDA ~SEED+14 RN2 ADC ~SEED,X STA ~SEED,X DEX DEX BPL RN2 LDX #14 RN3 INC ~SEED,X BNE RN4 DEX DEX BPL RN3 RN4 PLP reset status flags RTL ~RANX2 ENTRY initialize the random bit stream PHP set to long A, X LONG I,M LDX #14 init the seed SD1 STA ~SEED,Y DEX DEX BPL SD1 PLP reset status bits RTL END **************************************************************** * * ~CMP2 - Two Byte Signed Integer Compare * * Inputs: * A - first argument * X - second argument * * Outputs: * C - set if A >= X, else clear * Z - set if A = X, else clear * * Notes: * 1) Assumes long A and X on entry. * **************************************************************** * ~CMP2 START NUM1 EQU ~OPERANDS NUM2 EQU ~OPERANDS+2 STX NUM2 TAY EOR NUM2 branch if both numbers have the same BPL CP1 sign STY NUM1 do a comparison of oppositely signed CPX NUM1 numbers RTL CP1 CPY NUM2 do a comparison of numbers with the RTL same sign END **************************************************************** * * ~SQR2 - Two Byte Integer Square Root * * Inputs: * A - argument * * Outputs: * A - result * * Notes: * 1) If the argument is negative, the result is the input, * and the overflow flag is set. * 2) Uses ~DIV2, ~MUL2. * 3) Assumes long A and X on entry. * **************************************************************** * ~SQR2 START GUESS EQU ~OPERANDS+8 LAST EQU ~OPERANDS+10 N EQU ~OPERANDS+12 ; ; Create an initial guess ; PHP set up long index registers LONG I TAX check for a negative argument BPL CG1 ERR PLP SEP #%01000000 SEV RTL CG1 BEQ FS2 quit if zero STA N N = input number LDX #0 last = 0 STX LAST CG2 INX the initial guess is the largest power LSR A of two that is <= the answer LSR A BNE CG2 DEX CG3 SEC CG4 ROL A DEX BPL CG4 STA GUESS ; ; Iterate to a final solution ; FS1 LDX GUESS while GUESS <> LAST do CPX LAST BEQ FS2 STX LAST LAST = GUESS LDA N GUESS = (GUESS+N/GUESS)/2 JSL ~DIV2 CLC ADC GUESS LSR A STA GUESS TAX if GUESS*GUESS > N then JSL ~MUL2 CMP N BLT FS1 BEQ FS1 DEC GUESS GUESS = GUESS-1 BRA FS1 FS2 TXA endwhile PLP CLV RTL END **************************************************************** * * ~DIV2 - Two Byte Signed Integer Divide * * Inputs: * X - denominator * A - numerator * * Outputs: * A - result * X - remainder * V - set for division by zero * * Notes: * 1) Assumes long A and X on entry. * **************************************************************** * ~DIV2 START NUM1 EQU ~OPERANDS numerator NUM2 EQU ~OPERANDS+2 denominator SIGN EQU ~OPERANDS+4 sign flag LDY #0 make all arguments positive BIT #$8000 start with A BEQ DV1 EOR #$FFFF INC A INY DV1 STA NUM1 TXA now do X BEQ ERR BPL DV2 DEY EOR #$FFFF INC A DV2 STA NUM2 STY SIGN LDA #0 initialize the remainder LDY #16 16 bits to go DV3 ASL NUM1 roll up the next number ROL A SEC subtract the digit SBC NUM2 BCS DV4 ADC NUM2 digit is 0 DEY BNE DV3 BRA DV5 DV4 INC NUM1 digit is 1 DEY BNE DV3 DV5 TAX save the remainder LDA NUM1 get the result LDY SIGN set the sign BEQ DV6 EOR #$FFFF INC A DV6 CLV clear the error flag RTL ERR SEP #%01000000 SEV RTL END **************************************************************** * * ~MUL2 - Two Byte Signed Integer Multiply * * Inputs: * A - multiplicand * X - multipier * * Outputs: * A - result * V - set if an overflow occurred * * Notes: * 1) Assumes long A and X on entry. * **************************************************************** * ~MUL2 START NUM1 EQU ~OPERANDS NUM2 EQU ~OPERANDS+4 SIGN EQU ~OPERANDS+6 LDY #0 make all arguments positive BIT #$8000 start with A BEQ ML1 EOR #$FFFF INC A INY ML1 STA NUM1+2 TXA now do X BPL ML2 DEY EOR #$FFFF INC A ML2 STA NUM2 STY SIGN LDY #16 do 16 bit multiply LDA #0 set up the high byte of the result ML3 LSR NUM1+2 test the LSB BCC ML4 br if it is off CLC add in partial product ADC NUM2 ML4 ROR A multiply answer by 2 ROR NUM1 DEY loop BNE ML3 TAX check for overflow BNE OVFL LDA NUM1 BMI OVFL LDY SIGN if result is to be neg, reverse sign BEQ ML5 EOR #$FFFF INC A ML5 CLV RTL OVFL SEP #%01000000 SEV RTL END **************************************************************** * * ~SGN2 - Two Byte Signed Integer SIGN Function * * Produces a result from the following table: * * input output * * <0 -1 * 0 0 * >0 1 * * Inputs: * A - argument * * Outputs: * A - result * * Notes: * 1) Assumes long A and X on entry. * **************************************************************** * ~SGN2 START PHP LONG I TAX BEQ SG2 BPL SG1 LDA #-1 PLP RTL SG1 LDA #1 SG2 PLP RTL END MACRO &LAB CALL &S &LAB JSR &S MEND MACRO &LAB LONG &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB "&A"="M" &I SETB "&A"="I" AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.&M &I SETB ("&B"="I").OR.&I .A &LAB REP #&M*32+&I*16 AIF .NOT.&M,.B LONGA ON .B AIF .NOT.&I,.C LONGI ON .C MEND MACRO &LAB RETURN &LAB RTS MEND  LIST OFF SYMBOL OFF KEEP D816.INT4 65816 ON LONGA ON LONGI ON **************************************************************** * * Four byte integer math libraries. * * By Mike Westerfield * * Copyright October 1985, All rights reserved * By the Byte Works, Inc. * **************************************************************** EJECT COPY COMMON **************************************************************** * * ~ABS4 - Four byte absolute value * * Inputs: * NUM1 - argument * * Outputs: * NUM2 - result * **************************************************************** * ~ABS4 START NUM1 EQU ~OPERANDS NUM2 EQU ~OPERANDS+4 LDA NUM1+2 BMI AB1 STA NUM2+2 LDA NUM1 STA NUM2 RTL AB1 SEC LDA #0 SBC NUM1 STA NUM2 LDA #0 SBC NUM1+2 STA NUM2+2 RTL END **************************************************************** * * ~ADD4 - Four byte add * * Inputs: * NUM1 - first argument * NUM2 - second argument * * Outputs: * NUM3 - result * **************************************************************** * ~ADD4 START NUM1 EQU ~OPERANDS NUM2 EQU ~OPERANDS+4 NUM3 EQU ~OPERANDS+8 CLC LDA NUM1 ADC NUM2 STA NUM3 LDA NUM1+2 ADC NUM2+2 STA NUM3+2 RTL END **************************************************************** * * ~CMP4 - Four Byte Signed Integer Compare * * Inputs: * NUM1 - first argument * NUM2 - second argument * * Outputs: * C - set if NUM1 >= NUM2, else clear * Z - set if NUM1 = NUM2, else clear * **************************************************************** * ~CMP4 START NUM1 EQU ~OPERANDS arguments NUM2 EQU ~OPERANDS+4 LDA NUM1+2 branch if both numbers have the same EOR NUM2+2 sign BPL CP1 LDA NUM2+2 do a comparison of oppositely signed CMP NUM1+2 numbers RTL CP1 LDA NUM1+2 do a comparison of numbers with the CMP NUM2+2 same sign BNE CP2 LDA NUM1 CMP NUM2 CP2 RTL END **************************************************************** * * ~RAN4 - Four byte random number * * Outputs: * NUM1 - random number * **************************************************************** * ~RAN4 START NUM1 EQU ~OPERANDS JSL ~RANX LDA ~RANX+2 STA NUM1 LDA ~RANX+4 STA NUM1+2 RTL END **************************************************************** * * ~SQR4 - Four Byte Integer Square Root * * Inputs: * NUM1 - argument * * Outputs: * NUM2 - result * V - set if argument is negative * * Notes: * Uses ~DIV4, ~MUL4, ~SIG4. * **************************************************************** * ~SQR4 START NUM1 EQU ~OPERANDS arguments NUM2 EQU ~OPERANDS+4 ANS EQU ~OPERANDS+8 GUESS EQU ~OPERANDS+16 current guess LAST EQU ~OPERANDS+20 last guess N EQU ~OPERANDS+24 input number ; ; Create an initial guess ; LDA NUM1+2 check for a negative argument BPL CG0 SEP #%01000000 RTL CG0 ORA NUM1 zero is a special case BNE CG1 STZ NUM2 STZ NUM2+2 CLV RTL CG1 STZ GUESS the initial guess is the largest power STZ GUESS+2 of two that is <= the answer SEC LDA NUM1+2 BEQ CG3 ROR GUESS+2 CG2 ASL A BCS FS0 LSR GUESS+2 BRA CG2 CG3 ROR GUESS LDA NUM1 CG4 ASL A BCS FS0 LSR GUESS BRA CG4 ; ; Iterate to a final solution ; FS0 STZ LAST LAST = 0 STZ LAST+2 LDA NUM1 N = input number STA N LDA NUM1+2 STA N+2 FS1 LDA GUESS+2 while GUESS <> LAST do CMP LAST+2 BNE FS1A LDA GUESS CMP LAST BEQ FS2 FS1A LDA GUESS LAST = GUESS STA LAST GUESS = (GUESS+N/GUESS)/2 STA NUM2 LDA GUESS+2 STA LAST+2 STA NUM2+2 LDA N STA NUM1 LDA N+2 STA NUM1+2 JSL ~DIV4 CLC LDA ANS ADC GUESS TAX LDA ANS+2 ADC GUESS+2 LSR A STA NUM1+2 STA NUM2+2 STA GUESS+2 TXA ROR A STA NUM1 STA NUM2 STA GUESS JSL ~MUL4 if GUESS*GUESS > N then LDA ANS+2 GUESS = GUESS-1 CMP N+2 BNE FS1D LDA ANS CMP N FS1D BLT FS1 BEQ FS1 LDA GUESS BNE FS1E DEC GUESS+2 FS1E DEC GUESS BRA FS1 FS2 LDA GUESS endwhile STA NUM2 LDA GUESS+2 STA NUM2+2 CLV RTL END **************************************************************** * * ~SUB4 - Four byte subtract * * Inputs: * NUM1 - first argument * NUM2 - second argument * * Outputs: * NUM3 - result * **************************************************************** * ~SUB4 START NUM1 EQU ~OPERANDS NUM2 EQU ~OPERANDS+4 NUM3 EQU ~OPERANDS+8 SEC LDA NUM1 SBC NUM2 STA NUM3 LDA NUM1+2 SBC NUM2+2 STA NUM3+2 RTL END **************************************************************** * * ~MOD4 - Four Byte Signed Integer Modulo Operation * * Inputs: * NUM1 - denominator * NUM2 - numerator * * Outputs: * ANS - result * V - set for division by zero * * Notes * 1) Uses ~DIV4, ~SIGN. * **************************************************************** * ~MOD4 START NUM1 EQU ~OPERANDS NUM2 EQU ~OPERANDS+4 ANS EQU ~OPERANDS+8 REM EQU ~OPERANDS+12 JSL ~DIV4 LDA REM STA ANS LDA REM+2 STA ANS+2 RTL END **************************************************************** * * ~DIV4 - Four Byte Signed Integer Divide * * Inputs: * NUM1 - denominator * NUM2 - numerator * * Outputs: * ANS - result * REM - remainder * V - set for division by zero * * Notes * 1) Uses ~SIGN. * **************************************************************** * ~DIV4 START SIGN EQU ~OPERANDS sign of answer NUM1 EQU ~OPERANDS arguments NUM2 EQU ~OPERANDS+4 ANS EQU ~OPERANDS+8 answer REM EQU ~OPERANDS+12 remainder ; ; Initialize ; LDA NUM2 check for division by zero ORA NUM2+2 BNE DV1 SEP #%01000000 division by zero RTL DV1 JSL ~SIGN convert to positive numbers LDA NUM1+2 do 16 bit divides separately ORA NUM2+2 BEQ DV5 ; ; 32 BIT DIVIDE ; LDY #32 32 bits to go DV3 ASL ANS roll up the next number ROL ANS+2 ROL ANS+4 ROL ANS+6 SEC subtract for this digit LDA ANS+4 SBC NUM2 TAX LDA ANS+6 SBC NUM2+2 BCC DV4 branch if minus STX ANS+4 turn the bit on STA ANS+6 INC ANS DV4 DEY next bit BNE DV3 BEQ DV9 go do the sign ; ; 16 BIT DIVIDE ; DV5 LDA #0 initialize the remainder LDY #16 16 bits to go DV6 ASL ANS roll up the next number ROL A SEC subtract the digit SBC NUM2 BCS DV7 ADC NUM2 digit is 0 DEY BNE DV6 BEQ DV8 DV7 INC ANS digit is 1 DEY BNE DV6 DV8 STA ANS+4 save the remainder ; ; SET SIGN ; DV9 LDA SIGN branch if positive BEQ DV10 SEC negate the result LDA #0 SBC ANS STA ANS LDA #0 SBC ANS+2 STA ANS+2 DV10 CLV RTL END **************************************************************** * * ~MUL4 - Four Byte Signed Integer Multiply * * Inputs: * NUM1,NUM2 - operands * * Outputs: * ANS - result * V - set for overflow * * Notes * 1) Uses ~SIGN. * **************************************************************** * ~MUL4 START SIGN EQU ~OPERANDS sign of answer NUM1 EQU ~OPERANDS arguments NUM2 EQU ~OPERANDS+4 ANS EQU ~OPERANDS+8 answer ; ; Initialize the sign and split on precision. ; JSL ~SIGN LDA ANS+2 BEQ ML3 ; ; Do a 32 bit by 32 bit multiply. ; LDY #32 32 bit multiply JSR ML1 BRL ML7 ML1 LDA ANS SYSS1*SYSS1+2+SYSS1+2 -> SYSS1,SYSS1+2 LSR A BCC ML2 CLC add multiplicand to the partial product LDA ANS+4 ADC NUM2 STA ANS+4 LDA ANS+6 ADC NUM2+2 STA ANS+6 ML2 ROR ANS+6 shift the interem result ROR ANS+4 ROR ANS+2 ROR ANS DEY loop til done BNE ML1 RTS ; ; Do and 16 bit by 32 bit multiply. ; ML3 ORA NUM2+2 branch if 16x16 is possible BEQ ML4 LDY #16 set up for 16 bits JSR ML1 do the multiply LDA ANS+2 move the answer STA ANS LDA ANS+4 STA ANS+2 LDA ANS+6 STA ANS+4 STZ ANS+6 BRL ML7 ; ; Do a 16 bit by 16 bit multiply. ; ML4 LDY #16 set the 16 bit counter LDX ANS move the low word STX ANS+2 ML5 LSR ANS+2 test the bit BCC ML6 branch if the bit is off CLC ADC NUM2 ML6 ROR A shift the answer ROR ANS DEY loop BNE ML5 STA ANS+2 save the high word ; ; Check for overflows and set the sign bit for all multiply precisions. ; ML7 LDA ANS+2 check for an overflow AND #$8000 ORA ANS+4 ORA ANS+6 BEQ ML8 SEP #%01000000 overflow RTL ML8 LDA SIGN set the sign BEQ ML9 SEC LDA #0 SBC ANS STA ANS LDA #0 SBC ANS+2 STA ANS+2 ML9 CLV normal return RTL END **************************************************************** * * ~SGN4 - Four Byte Signed Integer SIGN Function * * Produces a result from the following table: * * input output * * <0 -1 * 0 0 * >0 1 * * Inputs: * NUM1 - argument * * Outputs: * NUM2 - result * **************************************************************** * ~SGN4 START NUM1 EQU ~OPERANDS NUM2 EQU ~OPERANDS+4 STZ NUM2 STZ NUM2+2 LDA NUM1 ORA NUM1+2 BEQ SG2 LDA NUM1+2 BPL SG1 DEC NUM2 DEC NUM2+2 RTL SG1 INC NUM2 SG2 RTL END **************************************************************** * * ~SIGN - Obtain the Sign for Four Byte Integer Operations * * Inputs: * NUM1 - first number * NUM2 - second number * * Outputs: * ANS - ABS(NUM1) * NUM2 - ABS(NUM2) * ANS+4,ANS+6 - 0 * SIGN - 0 if NUM1*NUM2 > 0, else non-zero * **************************************************************** * ~SIGN START SIGN EQU ~OPERANDS sign of answer NUM1 EQU ~OPERANDS arguments NUM2 EQU ~OPERANDS+4 ANS EQU ~OPERANDS+8 answer ; ; Make the first number positive. ; LDA NUM1+2 BPL SG1 SEC LDA #0 SBC NUM1 STA ANS LDA #0 SBC NUM1+2 STA ANS+2 LDA #1 STA NUM1 BRA SG2 SG1 STA ANS+2 LDA NUM1 STA ANS ; ; Initialize ; STZ NUM1 SG2 STZ ANS+4 STZ ANS+6 ; ; Make second number positive. ; LDA NUM2+2 BPL SG3 SEC LDA #0 SBC NUM2 STA NUM2 LDA #0 SBC NUM2+2 STA NUM2+2 DEC SIGN SG3 RTL END  LIST OFF SYMBOL OFF MCOPY I8.MACROS KEEP E816.INT8 65816 ON LONGA ON LONGI ON **************************************************************** * * Eight byte integer math libraries. * * By Mike Westerfield * * Copyright October 1985, All rights reserved * By the Byte Works, Inc. * **************************************************************** EJECT COPY COMMON **************************************************************** * * ~ABS8 - Eight byte absolute value * * Inputs: * NUM1 - argument * * Outputs: * NUM1 - result * **************************************************************** * ~ABS8 START NUM1 EQU ~OPERANDS NUM2 EQU ~OPERANDS+8 LDA NUM1+6 BMI AB1 MOVE NUM1,NUM2,#8 RTL AB1 SEC LDA #0 SBC NUM1 STA NUM2 LDA #0 SBC NUM1+2 STA NUM2+2 LDA #0 SBC NUM1+4 STA NUM2+4 LDA #0 SBC NUM1+6 STA NUM2+6 RTL END **************************************************************** * * ~ADD8 - Eight byte add * * Inputs: * NUM1 - first argument * NUM2 - second argument * * Outputs: * NUM3 - result * **************************************************************** * ~ADD8 START NUM1 EQU ~OPERANDS NUM2 EQU ~OPERANDS+8 NUM3 EQU ~OPERANDS+16 CLC LDA NUM1 ADC NUM2 STA NUM3 LDA NUM1+2 ADC NUM2+2 STA NUM3+2 LDA NUM1+4 ADC NUM2+4 STA NUM3+4 LDA NUM1+6 ADC NUM2+6 STA NUM3+6 RTL END **************************************************************** * * ~CMP8 - Eight Byte Signed Integer Compare * * Inputs: * NUM1 - first argument * NUM2 - second argument * * Outputs: * C - set if NUM1 >= NUM2, else clear * Z - set if NUM1 = NUM2, else clear * **************************************************************** * ~CMP8 START NUM1 EQU ~OPERANDS arguments NUM2 EQU ~OPERANDS+8 LDA NUM1+6 branch if both numbers have the same EOR NUM2+6 sign BPL CP1 LDA NUM2+6 do a comparison of oppositely signed CMP NUM1+6 numbers RTL CP1 LDA NUM1+6 do a comparison of numbers with the CMP NUM2+6 same sign BNE CP2 LDA NUM1+4 CMP NUM2+4 BNE CP2 LDA NUM1+2 CMP NUM2+2 BNE CP2 LDA NUM1 CMP NUM2 CP2 RTL END **************************************************************** * * ~RAN8 - Eight byte random number * * Outputs: * NUM1 - random number * **************************************************************** * ~RAN8 START NUM1 EQU ~OPERANDS JSL ~RANX MOVE ~RANX+2,NUM1,#8 RTL END **************************************************************** * * ~SQR8 - Eight Byte Integer Square Root * * Inputs: * MR16 - argument * * Outputs: * MR24 - result * V - set if argument is negative * * Notes: * Uses ~DIV8, ~MUL8, ~SIG8. * **************************************************************** * ~SQR8 START NUM1 EQU ~OPERANDS arguments NUM2 EQU ~OPERANDS+8 ANS EQU ~OPERANDS+16 result GUESS EQU ~OPERANDS+32 current guess LAST EQU ~OPERANDS+40 last guess N EQU ~OPERANDS+48 input number ; ; Create an initial guess ; LDA NUM1+6 check for a negative argument BPL CG0 SEP #%01000000 RTL CG0 ORA NUM1 zero is a special case ORA NUM1+2 ORA NUM1+4 BNE CG1 STZ NUM2 STZ NUM2+2 STZ NUM2+4 STZ NUM2+6 CLV RTL CG1 STZ GUESS the initial guess is the largest power STZ GUESS+2 of two that is <= the answer STZ GUESS+4 STZ GUESS+6 LDX #6 CG2 LDA NUM1,X BNE CG3 DEX DEX BRA CG2 CG3 SEC ROR GUESS,X CG4 ASL A BCS FS0 LSR GUESS,X BRA CG4 ; ; Iterate to a final solution ; FS0 STZ LAST LAST = 0 STZ LAST+2 STZ LAST+4 STZ LAST+6 MOVE NUM1,N,#8 N = input number FS1 LDA GUESS+6 while GUESS <> LAST do CMP LAST+6 BNE FS1A LDA GUESS+4 CMP LAST+4 BNE FS1A LDA GUESS+2 CMP LAST+2 BNE FS1A LDA GUESS CMP LAST BEQ FS2 FS1A LDX #6 LAST = GUESS FS1B LDA GUESS,X GUESS = (GUESS+N/GUESS)/2 STA LAST,X STA NUM2,X LDA N,X STA NUM1,X DEX DEX BPL FS1B JSL ~DIV8 CLC LDA ANS ADC GUESS STA GUESS LDA ANS+2 ADC GUESS+2 STA GUESS+2 LDA ANS+4 ADC GUESS+4 STA GUESS+4 LDA ANS+6 ADC GUESS+6 LSR A STA GUESS+6 ROR GUESS+4 ROR GUESS+2 ROR GUESS LDX #6 if GUESS*GUESS > N then FS1C LDA GUESS,X GUESS = GUESS-1 STA NUM1,X STA NUM2,X DEX DEX BPL FS1C JSL ~MUL8 LDA ANS+6 CMP N+6 BNE FS1D LDA ANS+4 CMP N+4 BNE FS1D LDA ANS+2 CMP N+2 BNE FS1D LDA ANS CMP N FS1D BLT FS1 BEQ FS1 LDA GUESS BNE FS1E LDA GUESS+2 BNE FS1F LDA GUESS+4 BNE FS1G DEC GUESS+6 FS1G DEC GUESS+4 FS1F DEC GUESS+2 FS1E DEC GUESS BRL FS1 FS2 MOVE GUESS,NUM2,#8 endwhile CLV RTL END **************************************************************** * * ~SUB8 - Eight byte subtract * * Inputs: * NUM1 - first argument * NUM2 - second argument * * Outputs: * NUM3 - result * **************************************************************** * ~SUB8 START NUM1 EQU ~OPERANDS NUM2 EQU ~OPERANDS+8 NUM3 EQU ~OPERANDS+16 SEC LDA NUM1 SBC NUM2 STA NUM3 LDA NUM1+2 SBC NUM2+2 STA NUM3+2 LDA NUM1+4 SBC NUM2+4 STA NUM3+4 LDA NUM1+6 SBC NUM2+6 STA NUM3+6 RTL END **************************************************************** * * ~MOD8 - Eight Byte Signed Integer Modulo Operation * * Inputs: * NUM1 - denominator * NUM2 - numerator * * Outputs: * NUM3 - result * V - set for division by zero * * Notes * 1) Uses ~DIV8, ~SIG8. * **************************************************************** * ~MOD8 START NUM1 EQU ~OPERANDS NUM2 EQU ~OPERANDS+8 NUM3 EQU ~OPERANDS+16 REM EQU ~OPERANDS+24 JSL ~DIV8 MOVE REM,NUM3,#8 RTL END **************************************************************** * * ~DIV8 - Eight Byte Signed Integer Divide * * Inputs: * SIGN - denominator * NUM2 - numerator * * Outputs: * ANS - result * REM - remainder * V - set for division by zero * * Notes * 1) Uses ~SIG8. * **************************************************************** * ~DIV8 START SIGN EQU ~OPERANDS sign of answer NUM2 EQU ~OPERANDS+8 ANS EQU ~OPERANDS+16 answer REM EQU ~OPERANDS+24 remainder ; ; Initialize ; LDA NUM2 check for division by zero ORA NUM2+2 ORA NUM2+4 ORA NUM2+6 BNE DV1 SEP #%01000000 division by zero RTL DV1 JSL ~SIG8 convert to positive numbers ; ; 64 BIT DIVIDE ; LDY #64 64 bits to go DV3 ASL ANS roll up the next number ROL ANS+2 ROL ANS+4 ROL ANS+6 ROL ANS+8 ROL ANS+10 ROL ANS+12 ROL ANS+14 SEC subtract for this digit LDA ANS+8 SBC NUM2 TAX LDA ANS+10 SBC NUM2+2 STA SIGN+2 LDA ANS+12 SBC NUM2+4 STA SIGN+4 LDA ANS+14 SBC NUM2+6 BCC DV4 branch if minus STX ANS+8 save partial numerator STA ANS+14 LDA SIGN+2 STA ANS+10 LDA SIGN+4 STA ANS+12 INC ANS turn the bit on DV4 DEY next bit BNE DV3 ; ; SET SIGN ; LDA SIGN branch if positive BEQ DV10 SEC negate the result LDA #0 SBC ANS STA ANS LDA #0 SBC ANS+2 STA ANS+2 LDA #0 SBC ANS+4 STA ANS+4 LDA #0 SBC ANS+6 STA ANS+6 DV10 CLV RTL END **************************************************************** * * ~MUL8 - Eight Byte Signed Integer Multiply * * Inputs: * SIGN,NUM2 - operands * * Outputs: * ANS - result * V - set for overflow * * Notes * 1) Uses ~SIG8. * **************************************************************** * ~MUL8 START SIGN EQU ~OPERANDS sign of answer NUM2 EQU ~OPERANDS+8 ANS EQU ~OPERANDS+16 answer ; ; Initialize the sign and split on precision. ; JSL ~SIG8 ; ; Do a 64 bit by 64 bit multiply. ; LDY #64 64 bit multiply ML1 LDA ANS LSR A BCC ML2 CLC add multiplicand to the partial product LDA ANS+8 ADC NUM2 STA ANS+8 LDA ANS+10 ADC NUM2+2 STA ANS+10 LDA ANS+12 ADC NUM2+4 STA ANS+12 LDA ANS+14 ADC NUM2+6 STA ANS+14 ML2 ROR ANS+14 shift the interem result ROR ANS+12 ROR ANS+10 ROR ANS+8 ROR ANS+6 ROR ANS+4 ROR ANS+2 ROR ANS DEY loop til done BNE ML1 ; ; Check for overflows and set the sign bit. ; LDA ANS+6 check for an overflow AND #$8000 ORA ANS+8 ORA ANS+10 ORA ANS+12 ORA ANS+14 BEQ ML8 SEP #%01000000 overflow RTL ML8 LDA SIGN set the sign BEQ ML9 SEC LDA #0 SBC ANS STA ANS LDA #0 SBC ANS+2 STA ANS+2 LDA #0 SBC ANS+4 STA ANS+4 LDA #0 SBC ANS+6 STA ANS+6 ML9 CLV normal return RTL END **************************************************************** * * ~SGN8 - Eight Byte Signed Integer SIGN Function * * Produces a result from the following table: * * input output * * <0 -1 * 0 0 * >0 1 * * Inputs: * NUM1 - argument * * Outputs: * NUM2 - result * **************************************************************** * ~SGN8 START NUM1 EQU ~OPERANDS NUM2 EQU ~OPERANDS+8 STZ NUM2 STZ NUM2+2 STZ NUM2+4 STZ NUM2+6 LDA NUM1 ORA NUM1+2 ORA NUM1+4 ORA NUM1+6 BEQ SG2 LDA NUM1+6 BPL SG1 DEC NUM2 DEC NUM2+2 DEC NUM2+4 DEC NUM2+6 RTL SG1 INC NUM2 SG2 RTL END **************************************************************** * * ~SIG8 - Obtain the Sign for Eight Byte Integer Operations * * Inputs: * NUM1 - first number * NUM2 - second number * * Outputs: * ANS - ABS(NUM1) * NUM2 - ABS(NUM2) * ANS+8..ANS+15 - 0 * SIGN - 0 if NUM1*NUM2 > 0, else non-zero * **************************************************************** * ~SIG8 START SIGN EQU ~OPERANDS sign of answer NUM1 EQU ~OPERANDS arguments NUM2 EQU ~OPERANDS+8 ANS EQU ~OPERANDS+16 answer ; ; Make the first number positive. ; LDA NUM1+6 BPL SG1 SEC LDA #0 SBC NUM1 STA ANS LDA #0 SBC NUM1+2 STA ANS+2 LDA #0 SBC NUM1+4 STA ANS+4 LDA #0 SBC NUM1+6 STA ANS+6 LDA #1 STA SIGN BRA SG2 SG1 MOVE NUM1,ANS,#8 ; ; Initialize ; STZ SIGN SG2 STZ ANS+8 STZ ANS+10 STZ ANS+12 STZ ANS+14 ; ; Make second number positive. ; LDA NUM2+6 BPL SG3 SEC LDA #0 SBC NUM2 STA NUM2 LDA #0 SBC NUM2+2 STA NUM2+2 LDA #0 SBC NUM2+4 STA NUM2+4 LDA #0 SBC NUM2+6 STA NUM2+6 DEC SIGN SG3 RTL END  MACRO &LAB MOVE &AD1,&AD2,&LEN &LAB ANOP LCLB &LA LCLB &LI LCLC &C AIF C:&LEN,.A1 LCLC &LEN &LEN SETC #2 .A1 &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A &C AMID &LEN,1,1 AIF "&C"<>"#",.D &C AMID &LEN,2,L:&LEN-1 AIF &C<>2,.D &C AMID &AD1,1,1 AIF "&C"<>"{",.B &AD1 AMID &AD1,2,L:&AD1-2 &AD1 SETC (&AD1) .B LDA &AD1 &C AMID &AD2,1,1 AIF "&C"<>"{",.C &AD2 AMID &AD2,2,L:&AD2-2 &AD2 SETC (&AD2) .C STA &AD2 AGO .G .D &C AMID &AD1,1,1 AIF "&C"="#",.F &C AMID &LEN,1,1 AIF "&C"<>"{",.E &LEN AMID &LEN,2,L:&LEN-2 &LEN SETC (&LEN) .E &C AMID &LEN,1,1 AIF "&C"="#",.E1 LDA &LEN DEC A AGO .E2 .E1 LDA &LEN-1 .E2 LDX #&AD1 LDY #&AD2 MVN &AD1,&AD2 AGO .G .F LDA &AD1 STA &AD2 LDA &LEN-1 LDX #&AD2 LDY #&AD2+1 MVN &AD2,&AD2 .G AIF (&LA+&LI)=2,.I SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.H LONGA OFF .H AIF &LI,.I LONGI OFF .I MEND  LIST OFF SYMBOL OFF MCOPY IO.MACROS KEEP B816.IO 65816 ON LONGA ON LONGI ON **************************************************************** * * Input/Output libraries. * * By Mike Westerfield * * Copyright October 1985, All rights reserved * By the Byte Works, Inc. * **************************************************************** EJECT COPY COMMON **************************************************************** * * ~GET2 - Get a Two Byte Integer * * Inputs: * CR - CR flag * * Outputs: * NUM - result * V - set for number overflow * * Notes: * 1) The integer ends with the first non-blank, non- * numeric character. * 2) Leading signs are allowed. * 3) Uses ~NMID, ~MUL2. * **************************************************************** * ~GET2 START CRIN EQU ~OPERANDS input CR OUTNUM EQU ~OPERANDS+2 output number CR EQU ~OPERANDS+8 carriage return flag NUM EQU ~OPERANDS+10 number LSIGN EQU ~OPERANDS+12 leading sign flag TEMP EQU ~OPERANDS+14 temp register RETURN EQU $0D RETURN key code STZ LSIGN initialize the sign, line counter and STZ NUM number LDA CRIN STA CR RD0 JSL ~KBIN handle leading signs CMP #' ' BEQ RD0 CMP #RETURN BEQ RD0 CMP #'+' BEQ RD1 CMP #'-' BNE RD2 INC LSIGN RD1 JSL ~KBIN RD2 JSL ~NMID quit if this character is not a number BCC RD3 AND #$000F STA TEMP LDA NUM multiply the old result by 10 LDX #10 JSL ~MUL2 BVS ERTS CLC add in the new digit ADC TEMP STA NUM BPL RD1 next digit ERTS SEP #%01000000 overflow RTL RD3 JSL ~CRBP negate the number if there was a leading LDA LSIGN minus sign BEQ RD4 SUB2 #0,NUM,NUM RD4 LDA CR if CR=T, skip to EOL BEQ RD6 RD5 LDA ~EOL BNE RD6 JSL ~KBIN BRA RD5 RD6 CLV LDA NUM STA OUTNUM RTL END **************************************************************** * * ~GET4 - Get a Four Byte Integer * * Inputs: * NUM1 - CR flag * * Outputs: * NUM1+2 - result * V - set for number overflow * * Notes: * 1) The integer ends with the first non-blank, non- * numeric character. * 2) Leading signs are allowed. * 3) Uses ~NMID, ~MUL4. * **************************************************************** * ~GET4 START NUM1 EQU ~OPERANDS operands for ~MUL4 NUM2 EQU ~OPERANDS+4 ANS EQU ~OPERANDS+8 result from MUL4 CR EQU ~OPERANDS+16 carriage return flag NUM EQU ~OPERANDS+18 output number LSIGN EQU ~OPERANDS+22 leading sign flag TEMP EQU ~OPERANDS+24 temp register RETURN EQU $0D RETURN key code STZ LSIGN initialize the sign, line counter, STZ NUM number, and CR flag STZ NUM+2 LDA NUM1 STA CR RD0 JSL ~KBIN handle leading signs CMP #' ' BEQ RD0 CMP #RETURN BEQ RD0 CMP #'+' BEQ RD1 CMP #'-' BNE RD2 INC LSIGN RD1 JSL ~KBIN RD2 JSL ~NMID quit if this character is not a number BCC RD3 AND #$000F STA TEMP LDA #10 multiply the old result by 10 STA NUM1 STZ NUM1+2 LDA NUM STA NUM2 LDA NUM+2 STA NUM2+2 JSL ~MUL4 BVS ERTS add in the new digit CLC LDA TEMP ADC ANS STA NUM LDA #0 ADC ANS+2 STA NUM+2 BPL RD1 ERTS SEP #%01000000 SEV RTL RD3 JSL ~CRBP put back unused character LDA LSIGN negate the number if there was a leading BEQ RD4 minus sign SEC LDA #0 SBC NUM STA NUM LDA #0 SBC NUM+2 STA NUM+2 RD4 LDA NUM save the result STA NUM1+2 LDA NUM+2 STA NUM1+4 LDA CR if CR=T, skip to EOL BEQ RD6 RD5 LDA ~EOL BNE RD6 JSL ~KBIN BRA RD5 RD6 CLV RTL END **************************************************************** * * ~GET8 - Get an Eight Byte Integer * * Inputs: * NUM1 - CR flag * * Outputs: * NUM1+2 - result * V - set for number overflow * * Notes: * 1) The integer ends with the first non-blank, non- * numeric character. * 2) Leading signs are allowed. * 3) Uses ~NMID, ~MUL8. * **************************************************************** * ~GET8 START NUM1 EQU ~OPERANDS operands for ~MUL8 NUM2 EQU ~OPERANDS+8 ANS EQU ~OPERANDS+16 result from MUL8 CR EQU ~OPERANDS+32 carriage return flag NUM EQU ~OPERANDS+34 output number LSIGN EQU ~OPERANDS+42 leading sign flag TEMP EQU ~OPERANDS+44 temp register RETURN EQU $0D RETURN key code STZ LSIGN initialize the sign, line counter, STZ NUM number, and CR flag STZ NUM+2 STZ NUM+4 STZ NUM+6 LDA NUM1 STA CR RD0 JSL ~KBIN handle leading signs CMP #' ' BEQ RD0 CMP #RETURN BEQ RD0 CMP #'+' BEQ RD1 CMP #'-' BNE RD2 INC LSIGN RD1 JSL ~KBIN RD2 JSL ~NMID quit if this character is not a number BCC RD3 AND #$000F STA TEMP LDA #10 multiply the old result by 10 STA NUM1 STZ NUM1+2 STZ NUM1+4 STZ NUM1+6 MOVE NUM,NUM2,#8 JSL ~MUL8 BVS ERTS add in the new digit CLC LDA TEMP ADC ANS STA NUM LDA #0 ADC ANS+2 STA NUM+2 LDA #0 ADC ANS+4 STA NUM+4 LDA #0 ADC ANS+6 STA NUM+6 BPL RD1 ERTS SEP #%01000000 SEV RTL RD3 JSL ~CRBP put back unused character LDA LSIGN negate the number if there was a leading BEQ RD4 minus sign SEC LDA #0 SBC NUM STA NUM LDA #0 SBC NUM+2 STA NUM+2 LDA #0 SBC NUM+4 STA NUM+4 LDA #0 SBC NUM+6 STA NUM+6 RD4 MOVE NUM,NUM1+2,#8 save the result LDA CR if CR=T, skip to EOL BEQ RD6 RD5 LDA ~EOL BNE RD6 JSL ~KBIN BRA RD5 RD6 CLV RTL END **************************************************************** * * ~GETC - Get a Character * * Inputs: * CR - carriage return flag * * Outputs: * CH - character read * **************************************************************** * ~GETC START CR EQU ~OPERANDS carriage return flag CH EQU ~OPERANDS+2 character read RETURN EQU $0D RETURN key code JSL ~KBIN CMP #RETURN BNE GC1 LDA #' ' GC1 STA CH LDA CR BEQ GC3 GC2 LDA ~EOL BNE GC3 JSL ~KBIN BRA GC2 GC3 RTL END **************************************************************** * * ~GETS - String Input * * Inputs: * ADR - address of string * **************************************************************** * ~GETS START ADR EQU ~SAVE address of string LEN EQU ~OPERANDS length of string LDA [ADR] get length of string INC ADR AND #$00FF STA LEN BEQ GT2 SHORT M LDY #1 place string in output buffer GT1 JSL ~KBIN STA [ADR],Y LDA ~EOL BNE GT3 INY CPY LEN BLT GT1 GT2 JSL ~KBIN if not at end, skip to eol LDA ~EOL BEQ GT2 GT3 DEY set the length of the string TYA STA [ADR] LONG M RTL END **************************************************************** * * ~PUT2 - Format a Two Byte Integer for Output * * Inputs: * C - carriage return flag * X - size of output field * A - number to format * * Notes: * 1) Uses ~DIV2, ~PRBL, ~COUT. * **************************************************************** * ~PUT2 START NUM EQU ~OPERANDS+8 number to format CC EQU ~OPERANDS+10 length of string NZ EQU ~OPERANDS+12 non-zero flag TR1 EQU ~OPERANDS+14 temp work space STRING EQU ~TEMP 7 byte string build space DEN EQU 10000 largest divisor RETURN EQU $0D RETURN key code PHP save inputs STA NUM PHX CMP #$8000 handle the smallest negative number BNE PT1 as a special case MOVE BSTR,STRING,#L:BSTR LA CC,L:BSTR BRL PT7 PT1 STZ NZ variable initialization STZ CC LDX #DEN STX TR1 LDA NUM set leading sign BPL PT2 INC CC LDA #'-' STA STRING SUB2 #0,NUM,NUM PT2 LDA NUM get a digit JSL ~DIV2 TAY save the digit BNE PT3 LDY NZ BEQ PT4 PT3 LDY CC ORA #'0' STA STRING,Y INC NZ INC CC PT4 STX NUM form the new denominator PT5 LDA TR1 LDX #10 JSL ~DIV2 STA TR1 TAX loop if non-zero BNE PT2 PT7 LDA CC check for zero BNE PT7A LDA #'0' STA STRING INC CC PT7A SEC print blanks to right justify the PLA output SBC CC BEQ PT8 BCC PT8 TAX JSL ~PRBL PT8 LDY #0 write the number PT9 LDA STRING,Y JSL ~COUT INY CPY CC BLT PT9 PLP BCC PT10 LDA #RETURN JML ~COUT PT10 RTL BSTR DC C'-32768' END APPEND IO.1  **************************************************************** * * ~PUT4 - Format a Four Byte Integer for Output * * Inputs: * C - carriage return flag * X - size of output field * Y,A - number to format * * Notes: * 1) Uses ~DIV4, ~SIGN, ~PRBL, ~COUT. * **************************************************************** * ~PUT4 START NUM1 EQU ~OPERANDS arguments for DIV4 NUM2 EQU ~OPERANDS+4 ANS EQU ~OPERANDS+8 result from DIV4 REM EQU ~OPERANDS+12 remainder from DIV4 NUM EQU ~OPERANDS+16 number to format CC EQU ~OPERANDS+20 length of string NZ EQU ~OPERANDS+22 non-zero flag TR1 EQU ~OPERANDS+24 temp work space STRING EQU ~TEMP 12 byte string build space DEN EQU 1000000000 largest divisor RETURN EQU $0D RETURN key code PHP save the inputs PHX STA NUM STY NUM+2 CPY #$8000 handle the smallest negative number BNE PT1 as a special case TAY BNE PT1 MOVE BSTR,STRING,#L:BSTR LA CC,L:BSTR BRL PT7 PT1 STZ NZ variable initialization STZ CC LDA #DEN STA TR1 LDA #^DEN STA TR1+2 LDA NUM+2 set leading sign BPL PT2 INC CC LDA #'-' STA STRING SEC LDA #0 SBC NUM STA NUM LDA #0 SBC NUM+2 STA NUM+2 PT2 LDA NUM get a digit STA NUM1 LDA NUM+2 STA NUM1+2 LDA TR1 STA NUM2 LDA TR1+2 STA NUM2+2 JSL ~DIV4 LDA ANS save the digit BNE PT3 LDX NZ BEQ PT4 PT3 LDX CC ORA #'0' STA STRING,X INC NZ INC CC LDA REM save the remainder STA NUM LDA REM+2 STA NUM+2 PT4 LDA TR1 form the new denominator STA NUM1 LDA TR1+2 STA NUM1+2 LDA #10 STA NUM2 STZ NUM2+2 JSL ~DIV4 LDA ANS quit if zero STA TR1 ORA ANS+2 BEQ PT7 LDA ANS+2 STA TR1+2 BRA PT2 next digit PT7 LDA CC set the end marker BNE PT7A LDA #'0' STA STRING INC CC PT7A SEC print blanks to right justify the PLA output SBC CC BEQ PT8 BCC PT8 TAX JSL ~PRBL PT8 LDY #0 write the number PT9 LDA STRING,Y JSL ~COUT INY CPY CC BLT PT9 PLP BCC PT10 LDA #RETURN JML ~COUT PT10 RTL BSTR DC C'-2147483648' END **************************************************************** * * ~PUT8 - Format an Eight Byte Integer for Output * * Inputs: * NUM1 - carriage return flag * NUM1+2 - size of output field * ANS - number to format * * Notes: * 1) Uses ~DIV4, ~SIGN, ~PRBL, ~COUT. * **************************************************************** * ~PUT8 START NUM1 EQU ~OPERANDS arguments for DIV8 NUM2 EQU ~OPERANDS+8 ANS EQU ~OPERANDS+16 result from DIV8 REM EQU ~OPERANDS+24 remainder from DIV8 CR EQU ~OPERANDS+32 carriage return flag FW EQU ~OPERANDS+34 field width NUM EQU ~OPERANDS+36 number to format CC EQU ~OPERANDS+44 length of string NZ EQU ~OPERANDS+46 non-zero flag TR1 EQU ~OPERANDS+48 temp work space STRING EQU ~TEMP 22 byte string build space RETURN EQU $0D RETURN key code LDA NUM1 save the inputs STA CR LDA NUM1+2 STA FW MOVE NUM1+4,NUM,#8 LDA NUM+6 handle the smallest negative number CMP #$8000 as a special case BNE PT1 LDA NUM ORA NUM+2 ORA NUM+4 BNE PT1 MOVE BSTR,STRING,#L:BSTR LA CC,L:BSTR BRL PT7 PT1 STZ NZ variable initialization STZ CC MOVE DEN,TR1,#8 LDA NUM+6 set leading sign BPL PT2 INC CC LDA #'-' STA STRING SEC LDA #0 SBC NUM STA NUM LDA #0 SBC NUM+2 STA NUM+2 LDA #0 SBC NUM+4 STA NUM+4 LDA #0 SBC NUM+6 STA NUM+6 PT2 MOVE NUM,NUM1,#8 get a digit MOVE TR1,NUM2,#8 JSL ~DIV8 LDA ANS save the digit BNE PT3 LDX NZ BEQ PT4 PT3 LDX CC ORA #'0' STA STRING,X INC NZ INC CC MOVE REM,NUM,#8 save the remainder PT4 MOVE TR1,NUM1,#8 form the new denominator LDA #10 STA NUM2 STZ NUM2+2 STZ NUM2+4 STZ NUM2+6 JSL ~DIV8 LDA ANS quit if zero ORA ANS+2 ORA ANS+4 ORA ANS+6 BEQ PT7 MOVE ANS,TR1,#8 BRA PT2 next digit PT7 LDA CC set the end marker BNE PT7A LDA #'0' STA STRING INC CC PT7A SEC print blanks to right justify the LDA FW output SBC CC BEQ PT8 BCC PT8 TAX JSL ~PRBL PT8 LDY #0 write the number PT9 LDA STRING,Y JSL ~COUT INY CPY CC BLT PT9 LDA CR BEQ PT10 LDA #RETURN JML ~COUT PT10 RTL BSTR DC C'-9223372036854775808' DEN DC I8'1000000000000000000' END **************************************************************** * * ~PUTB - Format a Boolean Variable * * Inputs: * C - carriage return flag * X - size of output field * A - boolean value to format * * Notes: * 1) Uses ~PRBL, ~COUT. * **************************************************************** * ~PUTB START FW EQU ~OPERANDS field width STRADR EQU ~OPERANDS+2 address of string to use RETURN EQU $0D RETURN key code PHP save operands PHA STX FW PHB save data bank reg PHK use local data bank PLB LDY #0 decide which string to use LA STRADR,TRUE LDX #-4 PLA BNE PT1 LA STRADR,FALSE DEX PT1 CLC print blanks to right justify the TXA string in the output field ADC FW BMI PT2 TAX JSL ~PRBL PT2 LDA (STRADR),Y output the string AND #$00FF BEQ PT3 JSL ~COUT INY BNE PT2 PT3 PLB restore data bank PLP BCC PT4 LDA #RETURN JML ~COUT PT4 RTL TRUE DC C'true',H'00' FALSE DC C'false',H'00' END **************************************************************** * * ~PUTC - Format a Character for Output * * Inputs: * C - carriage return flag * X - size of output field * A - character value to format * * Notes: * 1) Uses ~PRBL, ~COUT. * **************************************************************** * ~PUTC START RETURN EQU $0D RETURN key code PHP PHA CPX #0 print blanks to right justify the BEQ PC1 character in the print field DEX BEQ PC1 JSL ~PRBL PC1 PLA print the character JSL ~COUT PLP BCC PC2 LDA #RETURN JML ~COUT PC2 RTL END **************************************************************** * * ~PUTS - String Output * * Inputs: * C - carriage return flag * X - size of output field * Y,A - address of the string * * Notes: * 1) Uses ~PRBL, ~COUT. * **************************************************************** * ~PUTS START ADR EQU ~OPERANDS address of the string LEN EQU ~OPERANDS+4 length of the string RETURN EQU $0D RETURN key code PHP save the inputs PHX STY ADR+2 STA ADR LDY #1 print enough blanks to right justify LDA [ADR],Y the output AND #$00FF STA LEN SEC PLA SBC LEN BEQ PT1 BCC PT1 TAX JSL ~PRBL PT1 LDX LEN get the length of the string and its BEQ PT3 starting address INC ADR INC ADR LDY #0 PT2 LDA [ADR],Y write the string JSL ~COUT INY DBNE X,PT2 PT3 PLP BCC PT4 LDA #RETURN JML ~COUT PT4 RTL END **************************************************************** * * ~PRBL - Print Blanks * * Inputs: * X - number of blanks to print * **************************************************************** * ~PRBL START PHP save status SHORT A use short accumulator LDA #' ' write the blanks LB1 JSL ~COUT DBNE X,LB1 PLP restore status RTL END **************************************************************** * * ~KBIN - Keyboard Input Routine * * Outputs: * A - character read * ~EOL - end of line flag * ~EOF - end of file flag (always false) * * Notes: * 1) Entry at ~KBPT puts back a character * 2) This routine runs in native mode for //c and before. * **************************************************************** * ~KBIN START CTRLX EQU $18 CTRL X key code RETURN EQU $0D RETURN key code LARROW EQU $08 left arrow key code RARROW EQU $15 right arrow key code CV EQU $25 vertical position of cursor CH EQU $24 horizontal position of cursor WNDW EQU $21 window width LINE EQU $200 input buffer LONGA OFF LONGI OFF ; ; Initialization ; NOP leave room for redirection patch NOP NOP NOP PHP switch to emulation mode SEC XCE STX LX save the registers STY LY LM (~EOL,~EOL+1,~EOF,~EOF+1),#0 initialize the input flags LDA LFLAG skip line read if old characters are JNE GC1 left ; ; Input a fresh line ; KB0 LDY #0 initialize the line LDA #' ' KB0A STA LINE,Y DBNE Y,KB0A LDX #0 enter a line STX CC KB1 JSL ~CRIN SEC XCE CMP #RETURN handle end of line BNE KB2 LDX CC STA LINE,X JSL ~COUT BRL KB9 KB2 CMP #LARROW handle a left arrow BNE KB4 LDX CC BEQ KB1 DEC CC DEC CH BPL KB1 DEC CV LDX WNDW DEX STX CH GOTOXY CH,CV BRL KB1 KB4 CMP #CTRLX start over BNE KB5 KB4A LDA #'\' JSL ~COUT LDA #RETURN+$80 JSL ~COUT BRL KB0 KB5 CMP #RARROW handle a right arrow BNE KB6 LDX CC LDA LINE,X KB6 LDX CC handle normal keys STA LINE,X JSL ~COUT INC CC BNE KB7 DEC CC BNE KB4A KB7 LDX CC CPX #$78 BLT KB8 PHA BELL PLA KB8 BRL KB1 KB9 INC LFLAG finish the line LM CC,#0 ; ; Get a key code ; GC1 LDX CC get the key code LDA LINE,X CMP #RETURN check for a RETURN key BNE GC2 DEC LFLAG DEC CC INC ~EOL GC2 INC CC LDX LX LDY LY CLC switch back to native mode XCE LONG M AND #$00FF PLP RTL LONGA OFF ; ; Putback routine ; ~CRBP ENTRY NOP leave room for redirection patch NOP NOP NOP PHP switch to emulation mode SEC XCE STX LX PHA LM (~EOL,~EOF),#0 PLA DEC CC LDX CC STA LINE,X LDX #1 STX LFLAG LDX LX CLC switch back to native mode XCE PLP RTL ; ; Local variables ; CC DS 1 character counter LFLAG DC I1'0' flag indicating if the input buffer ! has a line in it LX DS 1 temporary storage for registers LY DS 1 LONGA ON LONGI ON END **************************************************************** * * ~COUT - Character Output * * Inputs: * $36 - pointer to current character output routine * A - character to output * **************************************************************** * ~COUT START LONGA OFF LONGI OFF OUT EQU $36 output hook PHP return to emulation mode SEC XCE PHA write the character ORA #$80 JSR COUT PLA CLC reset status XCE PLP RTL COUT JMP (OUT) LONGA ON LONGI ON END **************************************************************** * * ~CRIN - Character Input * * Inputs: * $38 - pointer to current character input routine * * Outputs: * A - character read * **************************************************************** * ~CRIN START SYSIN EQU $38 input hook PHP return to emulation mode SEC XCE JSR IN read character CLC return to native mode XCE LONG M and out high bits AND #$7F PLP reset status RTL IN JMP (SYSIN) END  !"#$ MACRO &LAB BELL &LAB LDA #$07 JSL ~COUT MEND MACRO &LAB GOTOXY &X,&Y &LAB LDA #$1E JSL ~COUT CLC LDA &X ADC #32 JSL ~COUT CLC LDA &Y ADC #32 JSL ~COUT MEND MACRO &LAB SUB2 &N1,&N2,&N3 &LAB ANOP LCLB &LA AIF S:LONGA,.A REP #%00100000 LONGA ON &LA SETB 1 .A LCLC &C &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.Y &N1 AMID &N1,L:&N1-2,2 &N1 SETC (&N1) .B &C AMID &N2,1,1 AIF "&C"<>"{",.C &C AMID &N2,L:&N2,1 AIF "&C"<>"}",.Y &N2 AMID &N2,L:&N2-2,2 &N2 SETC (&N2) .C AIF C:&N3>0,.D LCLC &N3 &N3 SETC &N1 AGO .E .D &C AMID &N3,1,1 AIF "&C"<>"{",.E &C AMID &N3,L:&N3,1 AIF "&C"<>"}",.Y &N3 AMID &N3,L:&N3-2,2 &N3 SETC (&N3) .E SEC LDA &N1 SBC &N2 STA &N3 AIF &LA=0,.F SEP #%00100000 LONGA OFF .F MEXIT .Y MNOTE "Missing closing '}'",16 MEND MACRO &LAB DBNE &R,&BP AIF "&R"="X",.L1 AIF "&R"="Y",.L1 &LAB DEC &R BNE &BP MEXIT .L1 &LAB DE&R BNE &BP MEND MACRO &LAB JNE &BP &LAB BEQ *+5 BRL &BP MEND MACRO &LAB LA &AD1,&AD2 &LAB ANOP LCLA &L LCLB &LA AIF S:LONGA,.A REP #%00100000 LONGA ON &LA SETB 1 .A LDA #&AD2 &L SETA C:&AD1 .B STA &AD1(&L) &L SETA &L-1 AIF &L,^B AIF &LA=0,.D SEP #%00100000 LONGA OFF .D MEND MACRO &LAB LM &AD1,&AD2 &LAB ANOP LCLA &L LCLB &LA AIF .NOT.S:LONGA,.A SEP #%00100000 LONGA OFF &LA SETB 1 .A LDA &AD2 &L SETA C:&AD1 .B STA &AD1(&L) &L SETA &L-1 AIF &L,^B AIF &LA=0,.C REP #%00100000 LONGA ON .C MEND MACRO &LAB LONG &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB "&A"="M" &I SETB "&A"="I" AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.&M &I SETB ("&B"="I").OR.&I .A &LAB REP #&M*32+&I*16 AIF .NOT.&M,.B LONGA ON .B AIF .NOT.&I,.C LONGI ON .C MEND MACRO &LAB MOVE &AD1,&AD2,&LEN &LAB ANOP LCLB &LA LCLB &LI LCLC &C AIF C:&LEN,.A1 LCLC &LEN &LEN SETC #2 .A1 &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A &C AMID &LEN,1,1 AIF "&C"<>"#",.D &C AMID &LEN,2,L:&LEN-1 AIF &C<>2,.D &C AMID &AD1,1,1 AIF "&C"<>"{",.B &AD1 AMID &AD1,2,L:&AD1-2 &AD1 SETC (&AD1) .B LDA &AD1 &C AMID &AD2,1,1 AIF "&C"<>"{",.C &AD2 AMID &AD2,2,L:&AD2-2 &AD2 SETC (&AD2) .C STA &AD2 AGO .G .D &C AMID &AD1,1,1 AIF "&C"="#",.F &C AMID &LEN,1,1 AIF "&C"<>"{",.E &LEN AMID &LEN,2,L:&LEN-2 &LEN SETC (&LEN) .E &C AMID &LEN,1,1 AIF "&C"="#",.E1 LDA &LEN DEC A AGO .E2 .E1 LDA &LEN-1 .E2 LDX #&AD1 LDY #&AD2 MVN &AD1,&AD2 AGO .G .F LDA &AD1 STA &AD2 LDA &LEN-1 LDX #&AD2 LDY #&AD2+1 MVN &AD2,&AD2 .G AIF (&LA+&LI)=2,.I SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.H LONGA OFF .H AIF &LI,.I LONGI OFF .I MEND MACRO &LAB SHORT &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB "&A"="M" &I SETB "&A"="I" AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.&M &I SETB ("&B"="I").OR.&I .A &LAB SEP #&M*32+&I*16 AIF .NOT.&M,.B LONGA OFF .B AIF .NOT.&I,.C LONGI OFF .C MEND &'()*+,-./0123456789:;<= LIST OFF SYMBOL OFF MCOPY MS.MACROS KEEP H816.MSC 65816 ON LONGA ON LONGI ON **************************************************************** * * Misc. libraries. * * By Mike Westerfield * * Copyright October 1985, All rights reserved * By the Byte Works, Inc. * **************************************************************** EJECT COPY COMMON **************************************************************** * * ~ORCA_TOOLS - Interface between macros and libraries * * Inputs: * variable, occur at return address * **************************************************************** * ~ORCA_TOOLS START P EQU ~TOOL incoming P register value RET EQU ~TOOL+1 return address OPAD EQU ~TOOL+8 address of next operand SUB EQU ~TOOL+12 address of subroutine to call ; ; Set up. ; PHP save status LONG M,I use long registers PLA revover P, return address STA P PLA STA RET+1 LDY #1 load addr of subroutine LDA [RET],Y STA SUB+1 INY INY LDA [RET],Y STA SUB+3 (byte after SUB is not used yet) ADD2 RET,#5 LA OPAD,~OPERANDS set initial load address STZ OPAD+2 ; ; Top level control for the loading of any operands that are provided. ; LD1 LDA [RET] recover the type of the operand INC RET BIT #$0080 branch if it's a store JNE ST1 TAX AND #$00F0 JEQ AL1 CMP #$0020 JLT IL1 JEQ LL1 ; ; Immediate load. ; TXA AND #$000F BNE LD2 LDA RET string, so just get the addr STA [OPAD] LDY #2 LDA RET+2 STA [OPAD],Y ADD2 OPAD,#4 LDA [RET] AND #$00FF SEC ADC RET INA STA RET BRA LD1 LD2 CMP #2 a one byte value BGE LD3 LDA [RET] INC RET AND #$FF STA [OPAD] INC OPAD INC OPAD BRA LD1 LD3 BNE LD4 a two byte value LDY #1 BNE LD6 LD4 CMP #4 a four byte value BNE LD5 LDY #2 BNE LD6 LD5 LDY #4 an eight byte value LD6 LDA [RET] STA [OPAD] INC RET INC RET INC OPAD INC OPAD DEY BNE LD6 BRL LD1 ; ; Long indirect load. ; LL1 LDA [RET] fetch the address STA ~SAVE LDY #2 LDA [RET],Y STA ~SAVE+2 ADD2 RET,#4 PHX LDA [~SAVE] TAX LDY #2 LDA [~SAVE],Y STA ~SAVE+2 STX ~SAVE PLX LL1B TXA get the length AND #$000F BEQ LL4 LSR A BCC LL2 LDA [~SAVE] do a one byte fetch AND #$00FF STA [OPAD] INC OPAD INC OPAD BRL LD1 LL2 TAY do a multi byte fetch LL3 LDA [~SAVE] STA [OPAD] INC ~SAVE INC ~SAVE INC OPAD INC OPAD DEY BNE LL3 BRL LD1 LL4 LDA ~SAVE set address for string loads STA [OPAD] LDY #2 LDA ~SAVE+2 STA [OPAD],Y BRL LD1 ; ; Indirect load from the original bank. ; IL1 LDA [RET] STA ~SAVE LDY #2 LDA [RET],Y STA ~SAVE+2 ADD2 RET,#4 LDA [~SAVE] STA ~SAVE LDA RET+2 STA ~SAVE+2 BRL LL1B ; ; Absolute load. ; AL1 LDA [RET] fetch the address STA ~SAVE LDY #2 LDA [RET],Y STA ~SAVE+2 ADD2 RET,#4 BRL LL1B ; ; Fetch the store address. ; ST1 TAX set up for absolute store PHA AND #$00F0 CMP #$00B0 BEQ CA1 LDA [RET] STA ~SAVE LDY #2 LDA [RET],Y STA ~SAVE+2 ADD2 RET,#4 TXA split based on the kind of save AND #$00F0 CMP #$0090 BLT CA1 BNE ST2 patch for local-bank indirect LDA RET+2 STA ~SAVE ST2 LDA [~SAVE] load indirect address TAX LDY #2 LDA [~SAVE],Y STA ~SAVE+2 STX ~SAVE ; ; Call the subroutine. ; CA1 LM SUB,#$5C JSL SUB PHP SHORT M LDA P AND #%00110000 STA P PLA AND #%11001111 ORA P STA P LONG M ; ; Save the return value for all types but strings. ; PLA quit if the return type is a string TAX or there is no return type AND #$00F0 CMP #$00B0 BEQ RC1 TXA AND #$000F BEQ RC1 LSR A save the result BCC SV1 LDA [OPAD] do a one byte save SHORT M STA [~SAVE] LONG M BRA RC1 SV1 TAY do a multi byte save SV2 LDA [OPAD] STA [~SAVE] INC ~SAVE INC ~SAVE INC OPAD INC OPAD DEY BNE SV2 ; ; Return to the caller. ; RC1 DEC RET LDA RET+1 PHA LDA P PHA PLP RTL END **************************************************************** * * ~FBUF - Find Buffer * * Locates an area of free memory and returns its address. * * Inputs: * A - place to store result * X - amount of memory needed * * Outputs: * C - set if successful * * Notes: * 1) Assumes long A and X on entry. * **************************************************************** * ~FBUF START MR0 EQU ~TOOL MR1 EQU ~TOOL+1 MR2 EQU ~TOOL+2 MR3 EQU ~TOOL+3 MR4 EQU ~TOOL+4 BITMAP EQU $BF58 ProDOS memory bit map LONGA ON LONGI ON STA MR0 save inputs STX MR2 PHP SHORT I,M switch to short regs LDA MR2 MR3 = number of pages needed BEQ LB1 INC MR3 LB1 STZ MR2 MR2 = number of pages found LM MR4,#$BE MR4 = current page number LB2 LDA MR4 see if this page is free JSL ~MASK AND BITMAP,X BNE LB3 INC MR2 yes -> inc the page count LDA MR2 loop if this is not enough pages yet CMP MR3 BLT LB4 LDA #0 give the result to the caller STA (MR0) LDY #1 LDA MR4 STA (MR0),Y PLP SEC RTL LB3 STZ MR2 page used - start over LB4 DEC MR4 check the next page BNE LB2 PLP CLC RTL END **************************************************************** * * ~RELS - Release Memory * * Releases memory in the ProDOS system bit map. * * Inputs: * A - first location to release * X - number of bytes to release * * Notes: * 1) Assumes long A and X on entry. * **************************************************************** * ~RELS START MR0 EQU ~TOOL MR1 EQU ~TOOL+1 MR2 EQU ~TOOL+2 MR3 EQU ~TOOL+3 BITMAP EQU $BF58 ProDOS memory bit map LONGA ON LONGI ON STA MR0 save inputs STX MR2 PHP switch to short regs SHORT I,M CLC update the number of bytes to release LDA MR0 based on the limitation of releasing ADC MR2 memory in units of 1 page STA MR2 BCC LB1 INC MR3 LB1 LDA MR2 compute number of pages to release BEQ LB2 INC MR3 LB2 LDA MR1 release the memory JSL ~MASK EOR #$FF AND BITMAP,X STA BITMAP,X INC MR1 DEC MR3 BNE LB2 PLP RTL END **************************************************************** * * ~RESV - Reserve Memory * * Reserves memory in the ProDOS system bit map. * * Inputs: * A - first location to reserve * X - number of bytes to reserve * * Notes: * 1) Assumes long A and X on entry. * **************************************************************** * ~RESV START MR0 EQU ~TOOL MR1 EQU ~TOOL+1 MR2 EQU ~TOOL+2 MR3 EQU ~TOOL+3 BITMAP EQU $BF58 ProDOS memory bit map LONGA ON LONGI ON STA MR0 save inputs STX MR2 PHP use short regs SHORT I,M CLC update the number of bytes to reserve LDA MR0 based on the limitation of reserving ADC MR2 memory in units of 1 page STA MR2 BCC LB1 INC MR3 LB1 LDA MR2 compute number of pages to reserve BEQ LB2 INC MR3 LB2 LDA MR1 reserve the memory JSL ~MASK ORA BITMAP,X STA BITMAP,X INC MR1 DEC MR3 BNE LB2 PLP RTL END **************************************************************** * * ~MASK - Create Bit Map Mask * * Creates the mask for a particular page in the system * memory bit mask. * * Inputs: * A - page number to create mask for * * Outputs: * A - bit mask; a 1 marks the bit used for this page * X - disp in bit mask table * * Notes: * 1) Assumes short A and X on entry. * **************************************************************** * ~MASK START LONGA OFF LONGI OFF PHA LSR A LSR A LSR A TAX PLA AND #7 TAY SEC LDA #0 MS1 ROR A DEY Y BPL MS1 RTL END **************************************************************** * * ~NMID - Number Identification * * Checks to see if a character is in '0'..'9'. * * Inputs: * A - character to check * * Outputs: * C - set if A is in '0'..'9'. * **************************************************************** * ~NMID START PHP SHORT M CMP #'0' BLT NOT CMP #'9'+1 BGE NOT PLP SEC RTL NOT PLP CLC RTL END ?@AB MACRO &LAB ADD2 &N1,&N2,&N3 &LAB ANOP LCLB &LA AIF S:LONGA,.A REP #%00100001 LONGA ON &LA SETB 1 .A LCLC &C &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.Y &N1 AMID &N1,L:&N1-2,2 &N1 SETC (&N1) .B &C AMID &N2,1,1 AIF "&C"<>"{",.C &C AMID &N2,L:&N2,1 AIF "&C"<>"}",.Y &N2 AMID &N2,L:&N2-2,2 &N2 SETC (&N2) .C AIF C:&N3>0,.D LCLC &N3 &N3 SETC &N1 AGO .E .D &C AMID &N3,1,1 AIF "&C"<>"{",.E &C AMID &N3,L:&N3,1 AIF "&C"<>"}",.Y &N3 AMID &N3,L:&N3-2,2 &N3 SETC (&N3) .E AIF &LA,.E1 CLC .E1 LDA &N1 ADC &N2 STA &N3 AIF &LA=0,.F SEP #%00100000 LONGA OFF .F MEXIT .Y MNOTE "Missing closing '}'",16 MEND MACRO &LAB JEQ &BP &LAB BNE *+5 BRL &BP MEND MACRO &LAB JLT &BP &LAB BGE *+5 BRL &BP MEND MACRO &LAB JNE &BP &LAB BEQ *+5 BRL &BP MEND MACRO &LAB LA &AD1,&AD2 &LAB ANOP LCLA &L LCLB &LA AIF S:LONGA,.A REP #%00100000 LONGA ON &LA SETB 1 .A LDA #&AD2 &L SETA C:&AD1 .B STA &AD1(&L) &L SETA &L-1 AIF &L,^B AIF &LA=0,.D SEP #%00100000 LONGA OFF .D MEND MACRO &LAB LM &AD1,&AD2 &LAB ANOP LCLA &L LCLB &LA AIF .NOT.S:LONGA,.A SEP #%00100000 LONGA OFF &LA SETB 1 .A LDA &AD2 &L SETA C:&AD1 .B STA &AD1(&L) &L SETA &L-1 AIF &L,^B AIF &LA=0,.C REP #%00100000 LONGA ON .C MEND MACRO &LAB LONG &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB "&A"="M" &I SETB "&A"="I" AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.&M &I SETB ("&B"="I").OR.&I .A &LAB REP #&M*32+&I*16 AIF .NOT.&M,.B LONGA ON .B AIF .NOT.&I,.C LONGI ON .C MEND MACRO &LAB SHORT &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB "&A"="M" &I SETB "&A"="I" AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.&M &I SETB ("&B"="I").OR.&I .A &LAB SEP #&M*32+&I*16 AIF .NOT.&M,.B LONGA OFF .B AIF .NOT.&I,.C LONGI OFF .C MEND DEFGHIJKLMNOPQRSTUVWXYZ[\] LIST OFF SYMBOL OFF MCOPY MSN.MACROS KEEP A816.MSCN 65816 ON LONGA ON LONGI ON **************************************************************** * * Number type conversions * * By Mike Westerfield * * Copyright October 1985, All rights reserved * By the Byte Works, Inc. * * Note: * Apple // specific - change for the Cortland. * **************************************************************** EJECT COPY COMMON **************************************************************** * * ~CV24 - Convert 2 byte integer to 4 byte integer * * Inputs: * NUM1 - 2 byte integer * * Outputs: * NUM2 - 4 byte integer * **************************************************************** * ~CV24 START NUM1 EQU ~OPERANDS NUM2 EQU ~OPERANDS+2 LDX #0 LDA NUM1 STA NUM2 BPL LB1 DEX LB1 STX NUM2+2 RTL END **************************************************************** * * ~CV28 - Convert 2 byte integer to 8 byte integer * * Inputs: * NUM1 - 2 byte integer * * Outputs: * NUM2 - 8 byte integer * **************************************************************** * ~CV28 START NUM1 EQU ~OPERANDS NUM2 EQU ~OPERANDS+2 LDX #0 LDA NUM1 STA NUM2 BPL LB1 DEX LB1 STX NUM2+2 STX NUM2+4 STX NUM2+6 RTL END **************************************************************** * * ~CV2S - Convert 2 byte integer to a string * * Inputs: * NUM1 - 2 byte integer * **************************************************************** * ~CV2S START OUT EQU $36 character output hook NUM1 EQU ~OPERANDS LDY #1 set the string length to 0 LDA #0 STA [~SAVE],Y LDA OUT save output address PHA LA OUT,~STRO redirect output LDA NUM1 set up inputs for ~PUT2 LDX #0 CLC JSL ~PUT2 convert the number PLA resore output address STA OUT RTL END **************************************************************** * * ~CV42 - Convert 4 byte integer to 2 byte integer * * Inputs: * NUM1 - 4 byte integer * * Outputs: * NUM2 - 2 byte integer * V - set if an overflow occurred * **************************************************************** * ~CV42 START NUM1 EQU ~OPERANDS NUM2 EQU ~OPERANDS+4 LDX #0 LDA NUM1 STA NUM2 BPL LB1 DEX LB1 CPX NUM1+2 BNE ERR CLV RTL ERR SEP #%01000000 SEV RTL END **************************************************************** * * ~CV48 - Convert 4 byte integer to 8 byte integer * * Inputs: * NUM1 - 4 byte integer * * Outputs: * NUM2 - 8 byte integer * **************************************************************** * ~CV48 START NUM1 EQU ~OPERANDS NUM2 EQU ~OPERANDS+4 LDX #0 LDA NUM1 STA NUM2 LDA NUM1+2 STA NUM2+2 BPL LB1 DEX LB1 STX NUM2+4 STX NUM2+6 RTL END **************************************************************** * * ~CV4S - Convert 4 byte integer to a string * * Inputs: * NUM1 - 4 byte integer * **************************************************************** * ~CV4S START OUT EQU $36 character output hook NUM1 EQU ~OPERANDS LDY #1 set the string length to 0 LDA #0 STA [~SAVE],Y LDA OUT save output address PHA LA OUT,~STRO redirect output LDA NUM1 set up inputs for ~PUT4 LDY NUM1+2 LDX #0 CLC JSL ~PUT4 convert the number PLA resore output address STA OUT RTL END **************************************************************** * * ~CV82 - Convert 8 byte integer to 2 byte integer * * Inputs: * NUM1 - 8 byte integer * * Outputs: * NUM2 - 2 byte integer * V - set if an overflow occurred * **************************************************************** * ~CV82 START NUM1 EQU ~OPERANDS NUM2 EQU ~OPERANDS+8 LDX #0 LDA NUM1 STA NUM2 BPL LB1 DEX LB1 CPX NUM1+2 BNE ERR CPX NUM1+4 BNE ERR CPX NUM1+6 BNE ERR CLV RTL ERR SEP #%01000000 SEV RTL END **************************************************************** * * ~CV84 - Convert 8 byte integer to 4 byte integer * * Inputs: * NUM1 - 8 byte integer * * Outputs: * NUM2 - 4 byte integer * V - set if an overflow occurred * **************************************************************** * ~CV84 START NUM1 EQU ~OPERANDS NUM2 EQU ~OPERANDS+8 LDX #0 LDA NUM1 STA NUM2 LDA NUM1+2 STA NUM2+2 BPL LB1 DEX LB1 CPX NUM1+4 BNE ERR CPX NUM1+6 BNE ERR CLV RTL ERR SEP #%01000000 SEV RTL END **************************************************************** * * ~CV8S - Convert 8 byte integer to a string * * Inputs: * NUM1 - 8 byte integer * **************************************************************** * ~CV8S START OUT EQU $36 character output hook NUM1 EQU ~OPERANDS CR EQU ~OPERANDS carriage return flag FW EQU ~OPERANDS+2 field width NUM EQU ~OPERANDS+4 number to write LDY #1 set the string length to 0 LDA #0 STA [~SAVE],Y LDY #NUM+7 set up inputs for ~PUT8 LDX #NUM1+7 LDA #7 MVP NUM1,NUM STZ CR STZ FW LDA OUT save output address PHA LA OUT,~STRO redirect output JSL ~PUT8 convert the number PLA resore output address STA OUT RTL END **************************************************************** * * ~CVS2 - Convert string to 2 byte integer * * Inputs: * ADIN - address of string to convert * * Outputs: * NUM - number * **************************************************************** * ~CVS2 START ADIN EQU ~OPERANDS addr of string to convert NUM EQU ~OPERANDS number CR EQU ~OPERANDS CR flag ADDR EQU ~OPERANDS+52 address of string to read from CC EQU ~OPERANDS+56 # chars read so far LDA ADIN set the read address STA ADDR LDA ADIN+2 STA ADDR+2 STZ CC no chars so far STZ CR don't look for CR when done LDA JML patch the input routine STA >~KBIN LDA JML+2 STA >~KBIN+2 LDA RTL STA >~CRBP JSL ~GET2 convert the string LDA NOP restore patched code STA >~KBIN STA >~KBIN+2 STA >~CRBP LDA ADIN+2 set number STA NUM RTL RTL JML JML ~STRR patches NOP NOP NOP END **************************************************************** * * ~CVS4 - Convert string to 4 byte integer * * Inputs: * ADIN - address of string to convert * * Outputs: * NUM - number * **************************************************************** * ~CVS4 START ADIN EQU ~OPERANDS addr of string to convert NUM EQU ~OPERANDS number CR EQU ~OPERANDS CR flag ADDR EQU ~OPERANDS+52 address of string to read from CC EQU ~OPERANDS+56 # chars read so far LDA ADIN set the read address STA ADDR LDA ADIN+2 STA ADDR+2 STZ CC no chars so far STZ CR don't look for CR when done LDA JML patch the input routine STA >~KBIN LDA JML+2 STA >~KBIN+2 LDA RTL STA >~CRBP JSL ~GET4 convert the string LDA NOP restore patched code STA >~KBIN STA >~KBIN+2 STA >~CRBP LDA ADIN+2 set number STA NUM LDA ADIN+4 STA NUM+2 RTL RTL JML JML ~STRR patches NOP NOP NOP END **************************************************************** * * ~CVS8 - Convert string to 8 byte integer * * Inputs: * ADIN - address of string to convert * * Outputs: * NUM - number * **************************************************************** * ~CVS8 START ADIN EQU ~OPERANDS addr of string to convert NUM EQU ~OPERANDS number CR EQU ~OPERANDS CR flag ADDR EQU ~OPERANDS+52 address of string to read from CC EQU ~OPERANDS+56 # chars read so far LDA ADIN set the read address STA ADDR LDA ADIN+2 STA ADDR+2 STZ CC no chars so far STZ CR don't look for CR when done LDA JML patch the input routine STA >~KBIN LDA JML+2 STA >~KBIN+2 LDA RTL STA >~CRBP JSL ~GET8 convert the string LDA NOP restore patched code STA >~KBIN STA >~KBIN+2 STA >~CRBP MOVE ADIN+2,NUM,#8 set number RTL RTL JML JML ~STRR patches NOP NOP NOP END **************************************************************** * * ~STRO - String output * * Inputs: * ~SAVE - address of the string * A - character to save * **************************************************************** * ~STRO START CLC (called in emulation mode) XCE LONGA OFF (all regs are short) LONGI OFF PHY save index PHA save the character LDY #1 get the length LDA [~SAVE],Y CMP [~SAVE] check for overflow BGE LB1 INC A update the length STA [~SAVE],Y TAY INY PLA save the character STA [~SAVE],Y PLY reset index SEC switch back to emulation XCE RTS LB1 PLA error return PLY SEC XCE RTS LONGA ON LONGI ON END **************************************************************** * * ~STRR - String read * * Inputs: * ADDR - address of string to read from * CC - number of bytes read so far * * Outputs: * A - character read * **************************************************************** * ~STRR START ADDR EQU ~OPERANDS+52 address of string to read from CC EQU ~OPERANDS+56 # chars read so far STZ ~EOL clear flags STZ ~EOF PHY save critical register PHP save reg lengths SHORT M,I use short accum LDA CC check length LDY #1 CMP [ADDR],Y BGE LB1 INC CC next char LDY CC INY LDA [ADDR],Y LONG M AND #$007F LONGA OFF PLP PLY RTL LB1 INC ~EOL flag eol LONG M LDA #' ' PLP PLY RTL END *MSN.MACROS_ƬƬ`abc MACRO &LAB LA &AD1,&AD2 &LAB ANOP LCLA &L LCLB &LA AIF S:LONGA,.A REP #%00100000 LONGA ON &LA SETB 1 .A LDA #&AD2 &L SETA C:&AD1 .B STA &AD1(&L) &L SETA &L-1 AIF &L,^B AIF &LA=0,.D SEP #%00100000 LONGA OFF .D MEND MACRO &LAB MOVE &AD1,&AD2,&LEN &LAB ANOP LCLB &LA LCLB &LI LCLC &C AIF C:&LEN,.A1 LCLC &LEN &LEN SETC #2 .A1 &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A &C AMID &LEN,1,1 AIF "&C"<>"#",.D &C AMID &LEN,2,L:&LEN-1 AIF &C<>2,.D &C AMID &AD1,1,1 AIF "&C"<>"{",.B &AD1 AMID &AD1,2,L:&AD1-2 &AD1 SETC (&AD1) .B LDA &AD1 &C AMID &AD2,1,1 AIF "&C"<>"{",.C &AD2 AMID &AD2,2,L:&AD2-2 &AD2 SETC (&AD2) .C STA &AD2 AGO .G .D &C AMID &AD1,1,1 AIF "&C"="#",.F &C AMID &LEN,1,1 AIF "&C"<>"{",.E &LEN AMID &LEN,2,L:&LEN-2 &LEN SETC (&LEN) .E &C AMID &LEN,1,1 AIF "&C"="#",.E1 LDA &LEN DEC A AGO .E2 .E1 LDA &LEN-1 .E2 LDX #&AD1 LDY #&AD2 MVN &AD1,&AD2 AGO .G .F LDA &AD1 STA &AD2 LDA &LEN-1 LDX #&AD2 LDY #&AD2+1 MVN &AD2,&AD2 .G AIF (&LA+&LI)=2,.I SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.H LONGA OFF .H AIF &LI,.I LONGI OFF .I MEND MACRO &LAB SHORT &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB "&A"="M" &I SETB "&A"="I" AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.&M &I SETB ("&B"="I").OR.&I .A &LAB SEP #&M*32+&I*16 AIF .NOT.&M,.B LONGA OFF .B AIF .NOT.&I,.C LONGI OFF .C MEND MACRO &LAB LONG &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB "&A"="M" &I SETB "&A"="I" AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.&M &I SETB ("&B"="I").OR.&I .A &LAB REP #&M*32+&I*16 AIF .NOT.&M,.B LONGA ON .B AIF .NOT.&I,.C LONGI ON .C MEND LIBRARIESvg+' ')A..CLIB.Ae#Dd*A..PCODE.AJd+A816.MSCN.Ad)B816.IO.A d+C816.INT2.A d+D816.INT4.A d+E816.INT8.A d*H816.MSC.Adfghijklmnopqrstuvwxyz{|}~8,= CALLOCddȷdȷd"~MUL4 pr SYSCNEW  SYSCLEARN pdrdLSYSCRET pr SYSCNEW  SYSCLEARN pdrdLSYSCRET pr SYSCNEW  SYSCLEARN pdrdLSYSCRET pr SYSCNEW  SYSCLEARN pdrdLSYSCRET pr SYSCNEW  SYSCLEARN pdrdLSYSCRET pr SYSCNEW  SYSCLEARN pdrdLSYSCRET pr SYSCNEW  SYS,< CFREE dpdr  SYSDEALOCLSYSCRET,< CFREE dpdr  SYSDEALOCLSYSCRET,< CFREE dpdr  SYSDEALOCLSYSCRET,< CFREE dpdr  SYSDEALOCLSYSCRET,< CFREE dpdr  SYSDEALOCLSYSCRET,< CFREE dpdr  SYSDEALOCLSYSCRET,< CFREE dpdr  SYSDEALOCLSYSCRET,< CFREE d',= FCLOSEd%8 $()ddLSYSCRETd%8 $()ddLSYSCRETd%8 $()ddLSYSCRETd%8 $()ddLSYSCRETd%8 $()ddLSYSCRETd%8 $()ddLSYSCRETd%8 $()ddLSYSCRETm,< FGETC d)G e l"~RELS8 d()Hl"~RESVh l) SYSCBOOLLSYSCRET ddLSYSCRET8 a0) SYSCBOOLLSYSCRETl8l SYSCFALSESYSCBOOLLSYSCRETl8l SYSCFALSESYSCBOOLLSYSCRETl8l SYSCFALSESYSCBOOLLSYSCRETl8l SYSCFALSESYSCBOOP ,< FOPENdpȷdr0pșA-0dpdrp)R=r8WwW8 () 8  (8  ())"~FBUF 8  () ) SYSCBOOLLSYSCRET  SYSCFALSELSYSCRETð YSCRETð YSCRETð 7,< FPUTC0d/d6 08 . () SYSCRNEGLSYSCRET  SYSCFALSELSYSCRET6LSYSCRET  SYSCFALSELSYSCRET6LSYSCRET  SYSCFALSELSYSCRET6LSYSCRET  SYSCFALSELSYSCRET6LSYSCRET  SYSCFALSELSYSCRET6LSYSCRET  SYSCFALSELSYSCRET6,< FREAD d dl" ~ORCA_TOOLS~MUL4'ptt dȷddpdr"~FBUFItv;vtL "i8ttvL_t  pdrdLSYSCRET8 (H)  ʱpm prh)`)  ʱpm prh)`)  ʱpmD,< FSEEKdd.d?d@ȷd@8 > ()  SYSCFALSELSYSCRET SYSCRNEGLSYSCRET  SYSCFALSELSYSCRET SYSCRNEGLSYSCRET  SYSCFALSELSYSCRET SYSCRNEGLSYSCRET  SYSCFALSELSYSCRET SYSCRNEGLSYSCRET  SYSCFALSELSYSCRET SYSCRNEGLSYSCRET  SYSCFALSELSYSCRET SYSCRNEGL3,< FTELLd.8 - ()/d/dLSYSCRET SYSCRNEGLSYSCRETd/dLSYSCRET SYSCRNEGLSYSCRETd/dLSYSCRET SYSCRNEGLSYSCRETd/dLSYSCRET SYSCRNEGLSYSCRETd/dLSYSCRET SYSCRNEGLSYSCRETd/dLSYSCRET SYSCRNEGLSYSCRETd/dL,= FWRITE d dl" ~ORCA_TOOLS~MUL4'ptt dȷddpdr"~FBUFItv;vtL "i8ttvL_t  pdrdLSYSCRET$)  ʷ8 (Hpm prh)` ʷ8 (Hpm prh)` ʷ8 (Hpm ,; FREE dpdr  SYSDEALOCLSYSCRET,; FREE dpdr  SYSDEALOCLSYSCRET,; FREE dpdr  SYSDEALOCLSYSCRET,; FREE dpdr  SYSDEALOCLSYSCRET,; FREE dpdr  SYSDEALOCLSYSCRET,; FREE dpdr  SYSDEALOCLSYSCRET,; FREE dpdr  SYSDEALOCLSYSCRET,; FREE d0,> ISALNUM%d)0:A[a{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET&,> ISALPHAd)A[a{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSC5,= ISCSYM*d)0:A[_a{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSC+,> ISCSYMF d)A[_a{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET SYSCTRUELSYSCRET{  SYSCFALSELSYSCRET ,> ISDIGITd)0:  SYSCFALSELSYSCRET SYSCTRUELSYSCRET:  SYSCFALSELSYSCRET SYSCTRUELSYSCRET:  SYSCFALSELSYSCRET SYSCTRUELSYSCRET:  SYSCFALSELSYSCRET SYSCTRUELSYSCRET:  SYSCFALSELSYSCRET SYSCTRUELSYSCRET:  SYSCFALSELSYSCRET SYSCTRUELSYSCRET:  SYSCFALSELSYSCRET SYSCTRUEL!,> ISSPACEd)    SYSCFALSELSYSCRET SYSCTRUELSYSCRET  SYSCFALSELSYSCRET SYSCTRUELSYSCRET  SYSCFALSELSYSCRET SYSCTRUELSYSCRET  SYSCFALSELSYSCRET SYSCTRUELSYSCRET  SYSCFALSELSYSCRET SYSCTRUELSYSCRET  SYSCFALSELSYSCRET SYSCTRUELSYSCRET  SYSCFALSELSYSCRET SYSCTRUE,> ISUPPERd)A[  SYSCFALSELSYSCRET SYSCTRUELSYSCRET[  SYSCFALSELSYSCRET SYSCTRUELSYSCRET[  SYSCFALSELSYSCRET SYSCTRUELSYSCRET[  SYSCFALSELSYSCRET SYSCTRUELSYSCRET[  SYSCFALSELSYSCRET SYSCTRUELSYSCRET[  SYSCFALSELSYSCRET SYSCTRUELSYSCRET[  SYSCFALSELSYSCRET SYSCTRUEL0,? ISXDIGIT%d)0:AGag  SYSCFALSELSYSCRET SYSCTRUELSYSCRETg  SYSCFALSELSYSCRET SYSCTRUELSYSCRETg  SYSCFALSELSYSCRET SYSCTRUELSYSCRETg  SYSCFALSELSYSCRET SYSCTRUELSYSCRETg  SYSCFALSELSYSCRET SYSCTRUELSYSCRETg  SYSCFALSELSYSCRET SYSCTRUELSYSCRETg  SYSCFALSELSYSCRET,= MALLOC dpdr SYSCNEW pdrdLSYSCRET MALLOC dpdr SYSCNEW pdrdLSYSCRET MALLOC dpdr SYSCNEW pdrdLSYSCRET MALLOC dpdr SYSCNEW pdrdLSYSCRET MALLOC dpdr SYSCNEW pdrdLSYSCRET MALLOC dpdr SYSCNEW pdrdLSYSCRET MALLOC dpdr SYSCNEW pdrdLSYSCRET MALLOC  ,> PUTCHARd)"~COUTLSYSCRET,> PUTCHARd)"~COUTLSYSCRET,> PUTCHARd)"~COUTLSYSCRET,> PUTCHARd)"~COUTLSYSCRET,> PUTCHARd)"~COUTLSYSCRET,> PUTCHARd)"~COUTLSYSCRET,> PUTCHARd)"~COUTLSYSCRET,> PUTCHAR;,= STRCMP&dp tpȀ  SYSCFALSELSYSCRET  SYSCTRUELSYSCRET SYSCRNEGLSYSCRET  SYSCTRUELSYSCRET SYSCRNEGLSYSCRET  SYSCTRUELSYSCRET SYSCRNEGLSYSCRET  SYSCTRUELSYSCRET SYSCRNEGLSYSCRET  SYSCTRUELSYSCRET SYSCRNEGLSYSCRET  SYSCTRUELSYSCRET SYSCRNEGLSYSCRET1,= STRCPY/dp ptȀt tdvdLSYSCRETCPY/dp ptȀt tdvdLSYSCRETCPY/dp ptȀt tdvdLSYSCRETCPY/dp ptȀt tdvdLSYSCRETCPY/dp ptȀt tdvdLSYSCRETCPY/dp ptȀt tdvdLSYSCRETCPY/dp ptȀt tdvdLSYSCRETCPY/,= STRLENdpdrp)ȀpL SYSRETWR0= STRLENdpdrp)ȀpL SYSRETWR0= STRLENdpdrp)ȀpL SYSRETWR0= STRLENdpdrp)ȀpL SYSRETWR0= STRLENdpdrp)ȀpL SYSRETWR0= STRLENdpdrp)ȀpL SYSRETWR0= STRLENdpdrp)ȀpL SYSRETWR0= STRLENZ,> STRNCATXd0PNdtȷdvȷdpȷdrp)Ȁdt) p Ƥ p LSYSCRETp)Ȁdt) p Ƥ p LSYSCRETp)Ȁdt) p Ƥ p LSYSCRETp)Ȁdt) p Ƥ p LSYSCRETp)Ȁdt) p Ƥ p LSYSCRETp)Ȁdt) p Ƥ p LSYSCRETp)Ȁdt) M,> STRNCMP TOUPPERd)a {)dLSYSCRET,> TOUPPERd)a {)dLSYSCRET,> TOUPPERd)a {)dLSYSCRET,> TOUPPERd)a {)dLSYSCRET,> TOUPPERd)a {)dLSYSCRET,> TOUPPERd)a {)dLSYSCRET,> TOUPPERd)a {)dLSYSCRET,> TOUPPER",@ SYSCLEARN"8ptrvt0 p `,@ SYSCLEARN"8ptrvt0 p `,@ SYSCLEARN"8ptrvt0 p `,@ SYSCLEARN"8ptrvt0 p `,@ SYSCLEARN"8ptrvt0 p `,@ SYSCLEARN"8ptrvt0 p `,@ SYSCLEARN"8ptrvt0 p `,@ SYSCLEARN,,> SYSCNEWhtjvhhrpv8pȷr0Geperi檠ȥȥȥpȥrttLtvL"`b`ep`berb`i`b SYSCSTKNpȥrln ipir`ln ipir`ln ipiw,@ SYSDEALOCpr! SYSCRITEDisposing of Nill Pointer L$-ltnv8prtt'tt SYSCRITEHeap Damaged tttvLSYSDUMPtt SYSCRITEHeap Damaged tttvLSYSDUMPtt SYSCRITEHeap Damaged tttvLSYSDUMPtt SYSCRITEHeap Damaged tttvLSYSDUMPtt SYSCRITEHeap Damaged tttvLSYSDUMPtt SYSCRITEHeap Damag,> SYSDUMPJtptrptpthh{rp!phrhpppr SYSCOMBNL?rp ݠppprpr SYSCOMBN  SYSCOMBN_phrhpphbAh`;hhȷhȷh8``bb8``bhh``;hhȷhȷh8``bb8``bhh``;hhȷhȷh8``bb8``bhh``;hhȷhȷh8Q,? SYSCOMBNQeiȷe  `wiȷw`  `wiȷw`  `wiȷw`  `wiȷw`  `wiȷw`  `wiȷw`  `wiȷ,@ SYSRETWR0 pddLSYSCRET,@ SYSRETWR0 pddLSYSCRET,@ SYSRETWR0 pddLSYSCRET,@ SYSRETWR0 pddLSYSCRET,@ SYSRETWR0 pddLSYSCRET,@ SYSRETWR0 pddLSYSCRET,@ SYSRETWR0 pddLSYSCRET,@ SYSRETWR0Q,? SYSPCODE<0hjhi\ji^hiXjiZ8XdZfdMAINTMAIN.Vhiljinli`nibh SYSINTERPNT)Tɀ Q Lv Lv lTJTd SYSCRITE#Bad op code ($8e d 0)"~COUTL/SYSCRETN%8XXXTXHdXdXXdhX`SYSERORNd SYSCRITE#Run time error #$8e d 0 SYSCRITE* at $8W V 08U T 0 "~COUTh8`SYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCISYSCLDCI SYSCLDCIB SYSCLDCIWSYSCLAOBSYSCLAOWSYSCINDCSYSCINDISYSCCPOCSYSCCPOI SYSCLDOCW SYSCLDOIW SYSCCROCW SYSCCROIWSYSCPOPI SYSCCUPBWSYSCMSTMSYSCENTBSYSCENTWSYSCUJPWSYSCFJPWSYSCADISYSCSBISYSCMPISYSCDVISYSCMODSYSCIORSYSCXORSYSCANDISYSCSHRSYSCSHLSYSCNGISYSCINCISYSCDECISYSCEQLSYSCNEQSYSCLESSYSCGRTSYSCLEQSYSCGEQSYSCULTSYSCUGTSYSCULESYSCUGESYSCNOTSYSCOCPSYSCLORSYSCLNDSYSCTJPWSYSCSTOISYSCSTOC SYSCSROIW SYSCSROCWSYSCXJPSYSCCPOL SYSCCROLW SYSCLDCILSYSCINDL SYSCLDOLWSYSCSTOL SYSCSROLWSYSCLDCA,> SYSCADI SYSCIBOPpgddpwdd`,> SYSCADI SYSCIBOPpgddpwdd`,> SYSCADI SYSCIBOPpgddpwdd`,> SYSCADI SYSCIBOPpgddpwdd`,> SYSCADI SYSCIBOPpgddpwdd`,> SYSCADI SYSCIBOPpgddpwdd`,> SYSCADI SYSCIBOPpgddpwdd`,> SYSCADI ,? SYSCANDI SYSCIBOPp7ddp'dd`,? SYSCANDI SYSCIBOPp7ddp'dd`,? SYSCANDI SYSCIBOPp7ddp'dd`,? SYSCANDI SYSCIBOPp7ddp'dd`,? SYSCANDI SYSCIBOPp7ddp'dd`,? SYSCANDI SYSCIBOPp7ddp'dd`,? SYSCANDI SYSCIBOPp7ddp'dd`,? SYSCANDI,? SYSCSTOC SYSCCPOCLSYSCPOPI,? SYSCSTOC SYSCCPOCLSYSCPOPI,? SYSCSTOC SYSCCPOCLSYSCPOPI,? SYSCSTOC SYSCCPOCLSYSCPOPI,? SYSCSTOC SYSCCPOCLSYSCPOPI,? SYSCSTOC SYSCCPOCLSYSCPOPI,? SYSCSTOC SYSCCPOCLSYSCPOPI,? SYSCSTOC,? SYSCSTOI SYSCCPOILSYSCPOPISYSCCPOC,? SYSCSTOI SYSCCPOILSYSCPOPISYSCCPOC,? SYSCSTOI SYSCCPOILSYSCPOPISYSCCPOC,? SYSCSTOI SYSCCPOILSYSCPOPISYSCCPOC,? SYSCSTOI SYSCCPOILSYSCPOPISYSCCPOC,? SYSCSTOI SYSCCPOILSYSCPOPISYSCCPOC,? SYSCSTOI SYSCCPOILSYSCPOPISYSCCPOC,? SYSCSTOI,? SYSCSTOL SYSCCPOLLSYSCPOPISYSCCPOC,? SYSCSTOL SYSCCPOLLSYSCPOPISYSCCPOC,? SYSCSTOL SYSCCPOLLSYSCPOPISYSCCPOC,? SYSCSTOL SYSCCPOLLSYSCPOPISYSCCPOC,? SYSCSTOL SYSCCPOLLSYSCPOPISYSCCPOC,? SYSCSTOL SYSCCPOLLSYSCPOPISYSCCPOC,? SYSCSTOL SYSCCPOLLSYSCPOPISYSCCPOC,? SYSCSTOL8,? SYSCCPOCSYSCCPOINSYSCCPOLN dpȷdr dp SYSCIBOP pdpd`LN dpȷdr dp SYSCIBOP pdpd`LN dpȷdr dp SYSCIBOP pdpd`LN dpȷdr dp SYSCIBOP pdpd`LN dpȷdr dp SYSCIBOP pdpd`LN dpȷdr dp SYSCIBOP pdpd`LN dpȷdr dp,@ SYSCSROCW  SYSCCROCWLSYSCPOPI,@ SYSCSROCW  SYSCCROCWLSYSCPOPI,@ SYSCSROCW  SYSCCROCWLSYSCPOPI,@ SYSCSROCW  SYSCCROCWLSYSCPOPI,@ SYSCSROCW  SYSCCROCWLSYSCPOPI,@ SYSCSROCW  SYSCCROCWLSYSCPOPI,@ SYSCSROCW  SYSCCROCWLSYSCPOPI,@ SYSCSROCW,@ SYSCSROIW  SYSCCROIWLSYSCPOPI,@ SYSCSROIW  SYSCCROIWLSYSCPOPI,@ SYSCSROIW  SYSCCROIWLSYSCPOPI,@ SYSCSROIW  SYSCCROIWLSYSCPOPI,@ SYSCSROIW  SYSCCROIWLSYSCPOPI,@ SYSCSROIW  SYSCCROIWLSYSCPOPI,@ SYSCSROIW  SYSCCROIWLSYSCPOPI,@ SYSCSROIW,@ SYSCSROLW  SYSCCROLWLSYSCPOPI,@ SYSCSROLW  SYSCCROLWLSYSCPOPI,@ SYSCSROLW  SYSCCROLWLSYSCPOPI,@ SYSCSROLW  SYSCCROLWLSYSCPOPI,@ SYSCSROLW  SYSCCROLWLSYSCPOPI,@ SYSCSROLW  SYSCCROLWLSYSCPOPI,@ SYSCSROLW  SYSCCROLWLSYSCPOPI,@ SYSCSROLW,@ SYSCCROCW SYSCGET2pMAIN r dp ` SYSCCROCW SYSCGET2pMAIN r dp ` SYSCCROCW SYSCGET2pMAIN r dp ` SYSCCROCW SYSCGET2pMAIN r dp ` SYSCCROCW SYSCGET2pMAIN r dp ` SYSCCROCW SYSCGET2pMAIN r dp ` SYSCCROCW SYSCGET2pMAIN r dp ` SYSCCROCW,@ SYSCCROIW SYSCGET2pMAINrdp` SYSCCROIW SYSCGET2pMAINrdp` SYSCCROIW SYSCGET2pMAINrdp` SYSCCROIW SYSCGET2pMAINrdp` SYSCCROIW SYSCGET2pMAINrdp` SYSCCROIW SYSCGET2pMAINrdp` SYSCCROIW SYSCGET2pMAINrdp` SYSCCROIW,@ SYSCCROLW SYSCGET2pMAINrdpdp` SYSCCROLW SYSCGET2pMAINrdpdp` SYSCCROLW SYSCGET2pMAINrdpdp` SYSCCROLW SYSCGET2pMAINrdpdp` SYSCCROLW SYSCGET2pMAINrdpdp` SYSCCROLW SYSCGET2pMAINrdpdp` SYSCCROLW SYSCGET2pMAINrdpdp` SYSCCROLW,@ SYSCCUPBW SYSCGET1edX8pfr SYSCGET2 HTphT`YSCCUPBW SYSCGET1edX8pfr SYSCGET2 HTphT`YSCCUPBW SYSCGET1edX8pfr SYSCGET2 HTphT`YSCCUPBW SYSCGET1edX8pfr SYSCGET2 HTphT`YSCCUPBW SYSCGET1edX8pfr SYSCGET2 HTphT`YSCCUPBW SYSCGET1edX8pfr SYSCGET2 HTphT`YSCCUPBW SYSCGET1edX8pfr SYSCGET2 HTphT`YSCCUPBW,? SYSCDECI8dd dd`,? SYSCDECI8dd dd`,? SYSCDECI8dd dd`,? SYSCDECI8dd dd`,? SYSCDECI8dd dd`,? SYSCDECI8dd dd`,? SYSCDECI8dd dd`,? SYSCDECI,> SYSCDVI SYSCLOD2"~DIV4 dd`,> SYSCDVI SYSCLOD2"~DIV4 dd`,> SYSCDVI SYSCLOD2"~DIV4 dd`,> SYSCDVI SYSCLOD2"~DIV4 dd`,> SYSCDVI SYSCLOD2"~DIV4 dd`,> SYSCDVI SYSCLOD2"~DIV4 dd`,> SYSCDVI SYSCLOD2"~DIV4 dd`,> SYSCDVI  ,? SYSCENTB SYSCGET1 p8dpd`,? SYSCENTB SYSCGET1 p8dpd`,? SYSCENTB SYSCGET1 p8dpd`,? SYSCENTB SYSCGET1 p8dpd`,? SYSCENTB SYSCGET1 p8dpd`,? SYSCENTB SYSCGET1 p8dpd`,? SYSCENTB SYSCGET1 p8dpd`,? SYSCENTB ,? SYSCENTW 8dTdTT`,? SYSCENTW 8dTdTT`,? SYSCENTW 8dTdTT`,? SYSCENTW 8dTdTT`,? SYSCENTW 8dTdTT`,? SYSCENTW 8dTdTT`,? SYSCENTW 8dTdTT`,? SYSCENTW ,> SYSCEQL SYSCLOD2"~CMP4 SYSCFALSELSYSCTRUE SYSCLOD2"~CMP4 SYSCFALSELSYSCTRUE SYSCLOD2"~CMP4 SYSCFALSELSYSCTRUE SYSCLOD2"~CMP4 SYSCFALSELSYSCTRUE SYSCLOD2"~CMP4 SYSCFALSELSYSCTRUE SYSCLOD2"~CMP4 SYSCFALSELSYSCTRUE SYSCLOD2"~CMP4 SYSCFALSELSYSCTRUE ,? SYSCFJPW dd SYSCPOPI SYSCGET2(T` SYSCFJPW dd SYSCPOPI SYSCGET2(T` SYSCFJPW dd SYSCPOPI SYSCGET2(T` SYSCFJPW dd SYSCPOPI SYSCGET2(T` SYSCFJPW dd SYSCPOPI SYSCGET2(T` SYSCFJPW dd SYSCPOPI SYSCGET2(T` SYSCFJPW dd SYSCPOPI SYSCGET2(T` SYSCFJPW ,> SYSCGEQ SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE ,> SYSCGRT SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSESYSCLOD2"~CMP4SYSCTRUEL SYSCFALSESYSCLOD2"~CMP4SYSCTRUEL SYSCFALSESYSCLOD2"~CMP4SYSCTRUEL SYSCFALSESYSCLOD2"~CMP4SYSCTRUEL SYSCFALSESYSCLOD2"~CMP4SYSCTRUEL SYSCFALSESYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE,? SYSCINCIdid did`,? SYSCINCIdid did`,? SYSCINCIdid did`,? SYSCINCIdid did`,? SYSCINCIdid did`,? SYSCINCIdid did`,? SYSCINCIdid did`,? SYSCINCI,? SYSCINDCdpdrp)LSYSCBOOL SYSCFALSE? SYSCINDCdpdrp)LSYSCBOOL SYSCFALSE? SYSCINDCdpdrp)LSYSCBOOL SYSCFALSE? SYSCINDCdpdrp)LSYSCBOOL SYSCFALSE? SYSCINDCdpdrp)LSYSCBOOL SYSCFALSE? SYSCINDCdpdrp)LSYSCBOOL SYSCFALSE? SYSCINDCdpdrp)LSYSCBOOL SYSCFALSE? SYSCINDC,? SYSCINDIdpdrpdʊd`,? SYSCINDIdpdrpdʊd`,? SYSCINDIdpdrpdʊd`,? SYSCINDIdpdrpdʊd`,? SYSCINDIdpdrpdʊd`,? SYSCINDIdpdrpdʊd`,? SYSCINDIdpdrpdʊd`,? SYSCINDI,? SYSCINDLdpdrpdpd`,? SYSCINDLdpdrpdpd`,? SYSCINDLdpdrpdpd`,? SYSCINDLdpdrpdpd`,? SYSCINDLdpdrpdpd`,? SYSCINDLdpdrpdpd`,? SYSCINDLdpdrpdpd`,? SYSCINDL,> SYSCIOR SYSCIBOPdpddpd`,> SYSCIOR SYSCIBOPdpddpd`,> SYSCIOR SYSCIBOPdpddpd`,> SYSCIOR SYSCIBOPdpddpd`,> SYSCIOR SYSCIBOPdpddpd`,> SYSCIOR SYSCIBOPdpddpd`,> SYSCIOR SYSCIBOPdpddpd`,> SYSCIOR ,? SYSCLAOB 8dd SYSCGET1p8XpdZd`? SYSCLAOB 8dd SYSCGET1p8XpdZd`? SYSCLAOB 8dd SYSCGET1p8XpdZd`? SYSCLAOB 8dd SYSCGET1p8XpdZd`? SYSCLAOB 8dd SYSCGET1p8XpdZd`? SYSCLAOB 8dd SYSCGET1p8XpdZd`? SYSCLAOB 8dd SYSCGET1p8XpdZd`? SYSCLAOB ,? SYSCLAOW 8dd SYSCGET2p8XpdZd`? SYSCLAOW 8dd SYSCGET2p8XpdZd`? SYSCLAOW 8dd SYSCGET2p8XpdZd`? SYSCLAOW 8dd SYSCGET2p8XpdZd`? SYSCLAOW 8dd SYSCGET2p8XpdZd`? SYSCLAOW 8dd SYSCGET2p8XpdZd`? SYSCLAOW 8dd SYSCGET2p8XpdZd`? SYSCLAOW ,? SYSCLDCA 8dd SYSCGET2dMAINd` SYSCLDCA 8dd SYSCGET2dMAINd` SYSCLDCA 8dd SYSCGET2dMAINd` SYSCLDCA 8dd SYSCGET2dMAINd` SYSCLDCA 8dd SYSCGET2dMAINd` SYSCLDCA 8dd SYSCGET2dMAINd` SYSCLDCA 8dd SYSCGET2dMAINd` SYSCLDCA ,? SYSCLDCI 8ddJ SYSCBOOL` SYSCFALSE,? SYSCLDCI 8ddJ SYSCBOOL` SYSCFALSE,? SYSCLDCI 8ddJ SYSCBOOL` SYSCFALSE,? SYSCLDCI 8ddJ SYSCBOOL` SYSCFALSE,? SYSCLDCI 8ddJ SYSCBOOL` SYSCFALSE,? SYSCLDCI 8ddJ SYSCBOOL` SYSCFALSE,? SYSCLDCI 8ddJ SYSCBOOL` SYSCFALSE,? SYSCLDCI ,@ SYSCLDCIB 8dd SYSCGET1 SYSCBOOL` SYSCFALSE SYSCLDCIB 8dd SYSCGET1 SYSCBOOL` SYSCFALSE SYSCLDCIB 8dd SYSCGET1 SYSCBOOL` SYSCFALSE SYSCLDCIB 8dd SYSCGET1 SYSCBOOL` SYSCFALSE SYSCLDCIB 8dd SYSCGET1 SYSCBOOL` SYSCFALSE SYSCLDCIB 8dd SYSCGET1 SYSCBOOL` SYSCFALSE SYSCLDCIB 8dd SYSCGET1 SYSCBOOL` SYSCFALSE SYSCLDCIB,@ SYSCLDCIW 8dd SYSCGET2dʊd`@ SYSCLDCIW 8dd SYSCGET2dʊd`@ SYSCLDCIW 8dd SYSCGET2dʊd`@ SYSCLDCIW 8dd SYSCGET2dʊd`@ SYSCLDCIW 8dd SYSCGET2dʊd`@ SYSCLDCIW 8dd SYSCGET2dʊd`@ SYSCLDCIW 8dd SYSCGET2dʊd`@ SYSCLDCIW,@ SYSCLDCIL8ddTdTdTiT`,@ SYSCLDCIL8ddTdTdTiT`,@ SYSCLDCIL8ddTdTdTiT`,@ SYSCLDCIL8ddTdTdTiT`,@ SYSCLDCIL8ddTdTdTiT`,@ SYSCLDCIL8ddTdTdTiT`,@ SYSCLDCIL8ddTdTdTiT`,@ SYSCLDCIL,@ SYSCLDOCW 8dd SYSCGET2pMAINrp) SYSCBOOL` SYSCFALSESYSCGET2pMAINrp) SYSCBOOL` SYSCFALSESYSCGET2pMAINrp) SYSCBOOL` SYSCFALSESYSCGET2pMAINrp) SYSCBOOL` SYSCFALSESYSCGET2pMAINrp) SYSCBOOL` SYSCFALSESYSCGET2pMAINrp) SYSCBOOL` SYSCFALSESYSCGET2pMAINrp) SYSCBOOL#,@ SYSCLDOIW 8dd SYSCGET2pMAINrpdʊd`W 8dd SYSCGET2pMAINrpdʊd`W 8dd SYSCGET2pMAINrpdʊd`W 8dd SYSCGET2pMAINrpdʊd`W 8dd SYSCGET2pMAINrpdʊd`W 8dd SYSCGET2pMAINrpdʊd`W 8dd SYSCGET2pMAINrpdʊd`W,@ SYSCLDOLW 8dd SYSCGET2pMAINrpdpd`CLDOLW 8dd SYSCGET2pMAINrpdpd`CLDOLW 8dd SYSCGET2pMAINrpdpd`CLDOLW 8dd SYSCGET2pMAINrpdpd`CLDOLW 8dd SYSCGET2pMAINrpdpd`CLDOLW 8dd SYSCGET2pMAINrpdpd`CLDOLW 8dd SYSCGET2pMAINrpdpd`CLDOLW,> SYSCLEQ SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSESYSCLOD2"~CMP4SYSCTRUEL SYSCFALSESYSCLOD2"~CMP4SYSCTRUEL SYSCFALSESYSCLOD2"~CMP4SYSCTRUEL SYSCFALSESYSCLOD2"~CMP4SYSCTRUEL SYSCFALSESYSCLOD2"~CMP4SYSCTRUEL SYSCFALSESYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE,> SYSCLES SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE 7,> SYSCLNDSYSCLORN8 SYSCIBOP(pppdd(pLSYSCBOOL%pLSYSCBOOL SYSCFALSEdd(pLSYSCBOOL%pLSYSCBOOL SYSCFALSEdd(pLSYSCBOOL%pLSYSCBOOL SYSCFALSEdd(pLSYSCBOOL%pLSYSCBOOL SYSCFALSEdd(pLSYSCBOOL%pLSYSCBOOL SYSCFALSEdd(pLSYSCBOOL%pLSYSCBOOL SYSCFALSEdd,> SYSCMOD SYSCLOD2"~DIV4 dd`,> SYSCMOD SYSCLOD2"~DIV4 dd`,> SYSCMOD SYSCLOD2"~DIV4 dd`,> SYSCMOD SYSCLOD2"~DIV4 dd`,> SYSCMOD SYSCLOD2"~DIV4 dd`,> SYSCMOD SYSCLOD2"~DIV4 dd`,> SYSCMOD SYSCLOD2"~DIV4 dd`,> SYSCMOD ,> SYSCMPI SYSCLOD2"~MUL4 dd`,> SYSCMPI SYSCLOD2"~MUL4 dd`,> SYSCMPI SYSCLOD2"~MUL4 dd`,> SYSCMPI SYSCLOD2"~MUL4 dd`,> SYSCMPI SYSCLOD2"~MUL4 dd`,> SYSCMPI SYSCLOD2"~MUL4 dd`,> SYSCMPI SYSCLOD2"~MUL4 dd`,> SYSCMPI ,> SYSCMST8ddXd`,> SYSCMST8ddXd`,> SYSCMST8ddXd`,> SYSCMST8ddXd`,> SYSCMST8ddXd`,> SYSCMST8ddXd`,> SYSCMST8ddXd`,> SYSCMST8,> SYSCNEQ SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE SYSCLOD2"~CMP4SYSCTRUEL SYSCFALSE ,> SYSCNGI8dddd`,> SYSCNGI8dddd`,> SYSCNGI8dddd`,> SYSCNGI8dddd`,> SYSCNGI8dddd`,> SYSCNGI8dddd`,> SYSCNGI8dddd`,> SYSCNGI8,> SYSCNOTddLSYSCBOOLLSYSCBOOL SYSCFALSENOTddLSYSCBOOLLSYSCBOOL SYSCFALSENOTddLSYSCBOOLLSYSCBOOL SYSCFALSENOTddLSYSCBOOLLSYSCBOOL SYSCFALSENOTddLSYSCBOOLLSYSCBOOL SYSCFALSENOTddLSYSCBOOLLSYSCBOOL SYSCFALSENOTddLSYSCBOOLLSYSCBOOL SYSCFALSENOT,> SYSCOCPdIddId`,> SYSCOCPdIddId`,> SYSCOCPdIddId`,> SYSCOCPdIddId`,> SYSCOCPdIddId`,> SYSCOCPdIddId`,> SYSCOCPdIddId`,> SYSCOCP ,? SYSCPOPI did`,? SYSCPOPI did`,? SYSCPOPI did`,? SYSCPOPI did`,? SYSCPOPI did`,? SYSCPOPI did`,? SYSCPOPI did`,? SYSCPOPI ,> SYSCSBI SYSCIBOP8dpddpd`,> SYSCSBI SYSCIBOP8dpddpd`,> SYSCSBI SYSCIBOP8dpddpd`,> SYSCSBI SYSCIBOP8dpddpd`,> SYSCSBI SYSCIBOP8dpddpd`,> SYSCSBI SYSCIBOP8dpddpd`,> SYSCSBI SYSCIBOP8dpddpd`,> SYSCSBI &,> SYSCSHL SYSCLOD2 )L SYSCFALSE&dd` SYSCLOD2 )L SYSCFALSE&dd` SYSCLOD2 )L SYSCFALSE&dd` SYSCLOD2 )L SYSCFALSE&dd` SYSCLOD2 )L SYSCFALSE&dd` SYSCLOD2 )L SYSCFALSE&dd` SYSCLOD2 )L SYSCFALSE&dd` 4,> SYSCSHR SYSCLOD21)ʆ ffdd`SYSCLOD21)ʆ ffdd`SYSCLOD21)ʆ ffdd`SYSCLOD21)ʆ ffdd`SYSCLOD21)ʆ ffdd`SYSCLOD21)ʆ ffdd`SYSCLOD21)ʆ ffdd`,? SYSCTJPW dd SYSCPOPI SYSCGET2(T` SYSCTJPW dd SYSCPOPI SYSCGET2(T` SYSCTJPW dd SYSCPOPI SYSCGET2(T` SYSCTJPW dd SYSCPOPI SYSCGET2(T` SYSCTJPW dd SYSCPOPI SYSCGET2(T` SYSCTJPW dd SYSCPOPI SYSCGET2(T` SYSCTJPW dd SYSCPOPI SYSCGET2(T` SYSCTJPW ,? SYSCUJPW SYSCGET2T`,? SYSCUJPW SYSCGET2T`,? SYSCUJPW SYSCGET2T`,? SYSCUJPW SYSCGET2T`,? SYSCUJPW SYSCGET2T`,? SYSCUJPW SYSCGET2T`,? SYSCUJPW SYSCGET2T`,? SYSCUJPW ,> SYSCULE SYSCUTSTSYSCTRUEL SYSCFALSE SYSCULE SYSCUTSTSYSCTRUEL SYSCFALSE SYSCULE SYSCUTSTSYSCTRUEL SYSCFALSE SYSCULE SYSCUTSTSYSCTRUEL SYSCFALSE SYSCULE SYSCUTSTSYSCTRUEL SYSCFALSE SYSCULE SYSCUTSTSYSCTRUEL SYSCFALSE SYSCULE SYSCUTSTSYSCTRUEL SYSCFALSE SYSCULE  ,> SYSCULT SYSCUTSTSYSCTRUEL SYSCFALSE SYSCULT SYSCUTSTSYSCTRUEL SYSCFALSE SYSCULT SYSCUTSTSYSCTRUEL SYSCFALSE SYSCULT SYSCUTSTSYSCTRUEL SYSCFALSE SYSCULT SYSCUTSTSYSCTRUEL SYSCFALSE SYSCULT SYSCUTSTSYSCTRUEL SYSCFALSE SYSCULT SYSCUTSTSYSCTRUEL SYSCFALSE SYSCULT  ,> SYSCUGE SYSCUTSTSYSCTRUEL SYSCFALSE SYSCUGE SYSCUTSTSYSCTRUEL SYSCFALSE SYSCUGE SYSCUTSTSYSCTRUEL SYSCFALSE SYSCUGE SYSCUTSTSYSCTRUEL SYSCFALSE SYSCUGE SYSCUTSTSYSCTRUEL SYSCFALSE SYSCUGE SYSCUTSTSYSCTRUEL SYSCFALSE SYSCUGE SYSCUTSTSYSCTRUEL SYSCFALSE SYSCUGE  ,> SYSCUGT SYSCUTSTSYSCTRUEL SYSCFALSE SYSCUGT SYSCUTSTSYSCTRUEL SYSCFALSE SYSCUGT SYSCUTSTSYSCTRUEL SYSCFALSE SYSCUGT SYSCUTSTSYSCTRUEL SYSCFALSE SYSCUGT SYSCUTSTSYSCTRUEL SYSCFALSE SYSCUGT SYSCUTSTSYSCTRUEL SYSCFALSE SYSCUGT SYSCUTSTSYSCTRUEL SYSCFALSE SYSCUGT -,> SYSCXJP-dddeTpVrpTdTdi d` SYSCXJP-dddeTpVrpTdTdi d` SYSCXJP-dddeTpVrpTdTdi d` SYSCXJP-dddeTpVrpTdTdi d` SYSCXJP-dddeTpVrpTdTdi d` SYSCXJP-dddeTpVrpTdTdi d` SYSCXJP-dddeTpVrpTdTdi d` SYSCXJP-,> SYSCXOR SYSCIBOPpWddpGdd`,> SYSCXOR SYSCIBOPpWddpGdd`,> SYSCXOR SYSCIBOPpWddpGdd`,> SYSCXOR SYSCIBOPpWddpGdd`,> SYSCXOR SYSCIBOPpWddpGdd`,> SYSCXOR SYSCIBOPpWddpGdd`,> SYSCXOR SYSCIBOPpWddpGdd`,> SYSCXOR ,@ SYSCFALSESYSCTRUENSYSCBOOLN dd` SYSCFALSESYSCTRUENSYSCBOOLN dd` SYSCFALSESYSCTRUENSYSCBOOLN dd` SYSCFALSESYSCTRUENSYSCBOOLN dd` SYSCFALSESYSCTRUENSYSCBOOLN dd` SYSCFALSESYSCTRUENSYSCBOOLN dd` SYSCFALSESYSCTRUENSYSCBOOLN dd` SYSCFALSE,? SYSCGET1T)T`,? SYSCGET1T)T`,? SYSCGET1T)T`,? SYSCGET1T)T`,? SYSCGET1T)T`,? SYSCGET1T)T`,? SYSCGET1T)T`,? SYSCGET1,? SYSCGET2TTT`,? SYSCGET2TTT`,? SYSCGET2TTT`,? SYSCGET2TTT`,? SYSCGET2TTT`,? SYSCGET2TTT`,? SYSCGET2TTT`,? SYSCGET2,? SYSCUTST SYSCLOD2dpdp`,? SYSCUTST SYSCLOD2dpdp`,? SYSCUTST SYSCLOD2dpdp`,? SYSCUTST SYSCLOD2dpdp`,? SYSCUTST SYSCLOD2dpdp`,? SYSCUTST SYSCLOD2dpdp`,? SYSCUTST SYSCLOD2dpdp`,? SYSCUTST,? SYSCLOD2 SYSCIBOPdpdp`,? SYSCLOD2 SYSCIBOPdpdp`,? SYSCLOD2 SYSCIBOPdpdp`,? SYSCLOD2 SYSCIBOPdpdp`,? SYSCLOD2 SYSCIBOPdpdp`,? SYSCLOD2 SYSCIBOPdpdp`,? SYSCLOD2 SYSCIBOPdpdp`,? SYSCLOD2,? SYSCIBOPdpidfr`,? SYSCIBOPdpidfr`,? SYSCIBOPdpidfr`,? SYSCIBOPdpidfr`,? SYSCIBOPdpidfr`,? SYSCIBOPdpidfr`,? SYSCIBOPdpidfr`,? SYSCIBOP ,? SYSCRNEG dd`,? SYSCRNEG dd`,? SYSCRNEG dd`,? SYSCRNEG dd`,? SYSCRNEG dd`,? SYSCRNEG dd`,? SYSCRNEG dd`,? SYSCRNEG ,,> SYSCSTKfbd`` SYSCRITEProgram Stack Overflow8L)fbd`` SYSCRITEProgram Stack Overflow8L)fbd`` SYSCRITEProgram Stack Overflow8L)fbd`` SYSCRITEProgram Stack Overflow8L)fbd`` SYSCRITEProgram Stack Overflow8L)fbd`` SYSCRITEProgram Stack Overflow8L)fbd`` SYSCRITEProgram Stack Overflow8L),? SYSCRITE hppp)"~COUTplp,? SYSCRITE hppp)"~COUTplp,? SYSCRITE hppp)"~COUTplp,? SYSCRITE hppp)"~COUTplp,? SYSCRITE hppp)"~COUTplp,? SYSCRITE hppp)"~COUTplp,? SYSCRITE hppp)"~COUTplp,? SYSCRITE  ,? SYSSTKBP 8dd`,? SYSSTKBP 8dd`,? SYSSTKBP 8dd`,? SYSSTKBP 8dd`,? SYSSTKBP 8dd`,? SYSSTKBP 8dd`,? SYSSTKBP 8dd`,? SYSSTKBP  ,< ~CV24 ʆk,< ~CV24 ʆk,< ~CV24 ʆk,< ~CV24 ʆk,< ~CV24 ʆk,< ~CV24 ʆk,< ~CV24 ʆk,< ~CV24 ,< ~CV28ʆk,< ~CV28ʆk,< ~CV28ʆk,< ~CV28ʆk,< ~CV28ʆk,< ~CV28ʆk,< ~CV28ʆk,< ~CV28,< ~CV2S 6H~STRO 6"~PUT2h6k ~CV2S 6H~STRO 6"~PUT2h6k ~CV2S 6H~STRO 6"~PUT2h6k ~CV2S 6H~STRO 6"~PUT2h6k ~CV2S 6H~STRO 6"~PUT2h6k ~CV2S 6H~STRO 6"~PUT2h6k ~CV2S 6H~STRO 6"~PUT2h6k ~CV2S ,< ~CV42k@k,< ~CV42k@k,< ~CV42k@k,< ~CV42k@k,< ~CV42k@k,< ~CV42k@k,< ~CV42k@k,< ~CV42,< ~CV48ʆk,< ~CV48ʆk,< ~CV48ʆk,< ~CV48ʆk,< ~CV48ʆk,< ~CV48ʆk,< ~CV48ʆk,< ~CV48 ,< ~CV4S 6H~STRO 6"~PUT4h6k ~CV4S 6H~STRO 6"~PUT4h6k ~CV4S 6H~STRO 6"~PUT4h6k ~CV4S 6H~STRO 6"~PUT4h6k ~CV4S 6H~STRO 6"~PUT4h6k ~CV4S 6H~STRO 6"~PUT4h6k ~CV4S 6H~STRO 6"~PUT4h6k ~CV4S ,< ~CV82 k@k,< ~CV82 k@k,< ~CV82 k@k,< ~CV82 k@k,< ~CV82 k@k,< ~CV82 k@k,< ~CV82 k@k,< ~CV82,< ~CV84k@k,< ~CV84k@k,< ~CV84k@k,< ~CV84k@k,< ~CV84k@k,< ~CV84k@k,< ~CV84k@k,< ~CV84(,< ~CV8SDdd6H~STRO6"~PUT8h6k~CV8SDdd6H~STRO6"~PUT8h6k~CV8SDdd6H~STRO6"~PUT8h6k~CV8SDdd6H~STRO6"~PUT8h6k~CV8SDdd6H~STRO6"~PUT8h6k~CV8SDdd6H~STRO6"~PUT8h6k~CV8SDdd6H~STRO6"~PUT8h6k~CV8S?,< ~CVS2 إdd9~KBIN9~KBIN8~CRBP"~GET2=~KBIN~KBIN~CRBPk\~STRR~KBIN~KBIN~CRBPk\~STRR~KBIN~KBIN~CRBPk\~STRR~KBIN~KBIN~CRBPk\~STRR~KBIN~KBIN~CRBPk\~STRR~KBIN~KC,< ~CVS4 إdd=~KBIN=~KBIN<~CRBP"~GET4A~KBIN~KBIN~CRBP k\~STRR~KBIN~KBIN~CRBP k\~STRR~KBIN~KBIN~CRBP k\~STRR~KBIN~KBIN~CRBP k\~STRR~KBIN~KBIN~CRBP k\~STRR~KBIN~KG,< ~CVS8 إddA~KBINA~KBIN@~CRBP"~GET8E~KBIN~KBIN~CRBPTk\~STRRKBIN~KBIN~CRBPTk\~STRRKBIN~KBIN~CRBPTk\~STRRKBIN~KBIN~CRBPTk\~STRRKBIN~KBIN~CRBPTk\~STRRKBIN~K,< ~STROZHǘ hz8`hz8`,< ~STROZHǘ hz8`hz8`,< ~STROZHǘ hz8`hz8`,< ~STROZHǘ hz8`hz8`,< ~STROZHǘ hz8`hz8`,< ~STROZHǘ hz8`hz8`,< ~STROZHǘ hz8`hz8`,< ~STROZ),< ~STRR)ddZ0ܠذܤȷ )(zk (zk,< ~STRR)ddZ0ܠذܤȷ )(zk (zk,< ~STRR)ddZ0ܠذܤȷ )(zk (zk,< ~STRR)ddZ0ܠذܤȷ )(zk (zk,< ~STRR)ddZ0ܠذܤȷ )(zk (zk,< ~STRR)ddZ0ܠذܤȷ )(zk (zk,< ~STRR)ddZ0ܠذܤȷ )(zk (zk,< ~STRR)ddj,< ~GET2 dd"~KBIN +-"~KBIN"~NMID ) "~MUL2 pe@k"~CRBP8宅 "~KBINke@k"~CRBP8宅 "~KBINke@k"~CRBP8宅 "~KBINke@k"~CRBP8宅 "~KBINke@k"~CRBP8宅 "~KBINke@k"~CRBP8宅 ,< ~GET4 ddd"~KBIN +-"~KBIN"~NMID-) d"~MUL4pee@k"~CRBP$8嶅帅 "~KBINk"~CRBP$8嶅帅 "~KBINk"~CRBP$8嶅帅 "~KBINk"~CRBP$8嶅帅 "~KBINk"~CRBP$8嶅帅 "~KBINk"~CR,< ~GET8ddddd̥"~KBIN +-"~KBIN"~NMIDC)Щ dddT"~MUL8$peƩeȩeʩe@k"~CRBP68ƅƩȅȩʅʩ̩̅T "~KBINkƅƩȅȩʅʩ̩̅T "~KBINkƅƩȅȩʅʩ̩̅T "~KBINkƅƩȅȩʅʩ̩̅T "~KBINkƅƩȅȩʅʩ̩̅,< ~GETC"~KBIN  "~KBINk ~GETC"~KBIN  "~KBINk ~GETC"~KBIN  "~KBINk ~GETC"~KBIN  "~KBINk ~GETC"~KBIN  "~KBINk ~GETC"~KBIN  "~KBINk ~GETC"~KBIN  "~KBINk ~GETC".,< ~GETS) "~KBIN Ĥ"~KBIN k) "~KBIN Ĥ"~KBIN k) "~KBIN Ĥ"~KBIN k) "~KBIN Ĥ"~KBIN k) "~KBIN Ĥ"~KBIN k) "~KBIN Ĥ"~KBIN k) "~KBIN Ĥ"~KBIN k,< ~PUT2 T(Fdd'殩-8嬅"~DIV2 0殆 "~DIV2ץ08h"~PRBL"~COUT Į( \~COUTk-32768"~PRBL"~COUT Į( \~COUTk-32768"~PRBL"~COUT Į( \~COUTk-32768"~PRBL"~COUT Į( \~COUTk-32768"~PRBL"~COUT Į(,< ~PUT4څ TB zddʅ;温-8崅嶅"~DIV4, 0渥 d"~DIV4$08h"~PRBL"~COUT ĸ( \~COUT k-2147483648~PRBL"~COUT ĸ( \~COUT k-2147483648~PRBL"~COUT ĸ( \~COUT k-2147483648~PRBL"~COUT ĸ( \0,< ~PUT8'ĥƩTTЂddЩ(T(B%Щ-8ȅȩʅʩ̩̅΅ΩTT"~DIV88 0ЩTT ddd"~DIV8/T08"~PRBL"~COUT А \~COUTk-9223372036854775808d ~COUT А \~COUTk-9223372036854775808d K,< ~PUTB HK@ hE e0"~PRBL)"~COUT ( \~COUT ktruefalse~PRBL)"~COUT ( \~COUT ktruefalse~PRBL)"~COUT ( \~COUT ktruefalse~PRBL)"~COUT ( \~COUT ktruefalse~PRBL)"~COUT ( \~COUT ktruefalse~PRBL)"~COUT ( \~COUT ktruefalse~PRBL),< ~PUTC H"~PRBLh"~COUT( \~COUTk ~PUTC H"~PRBLh"~COUT( \~COUTk ~PUTC H"~PRBLh"~COUT( \~COUTk ~PUTC H"~PRBLh"~COUT( \~COUTk ~PUTC H"~PRBLh"~COUT( \~COUTk ~PUTC H"~PRBLh"~COUT( \~COUTk ~PUTC H"~PRBLh"~COUT( \~COUTk ~PUTC H=,< ~PUTSڄ)8h"~PRBL椠"~COUT ( \~COUTk"~PRBL椠"~COUT ( \~COUTk"~PRBL椠"~COUT ( \~COUTk"~PRBL椠"~COUT ( \~COUTk"~PRBL椠"~COUT ( \~COUTk"~PRBL椠"~COUT ( \~COUTk"~PRBL椠"~COUT (,< ~PRBL "~COUT(k,< ~PRBL "~COUT(k,< ~PRBL "~COUT(k,< ~PRBL "~COUT(k,< ~PRBL "~COUT(k,< ~PRBL "~COUT(k,< ~PRBL "~COUT(k,< ~PRBL,< ~KBIN8   "~CRIN8  "~COUTu.  $%!ʆ$"~COUT$i "~COUT%i "~COUT \"~COUT"~COUT  "~COUT  Ӯ xH"~COUTht       )(k~CRBPN8 Hh  (kh  (kh  (kh  (kh  (kh  (kh  (kh  ,< ~COUT8H h(kl6,< ~COUT8H h(kl6,< ~COUT8H h(kl6,< ~COUT8H h(kl6,< ~COUT8H h(kl6,< ~COUT8H h(kl6,< ~COUT8H h(kl6,< ~COUT8,< ~CRIN8   )(kl8,< ~CRIN8   )(kl8,< ~CRIN8   )(kl8,< ~CRIN8   )(kl8,< ~CRIN8   )(kl8,< ~CRIN8   )(kl8,< ~CRIN8   )(kl8,< ~CRIN8-,< ~RANX0 u(k~RANX2N0(k~RANX0 u(k~RANX2N0(k~RANX0 u(k~RANX2N0(k~RANX0 u(k~RANX2N0(k~RANX0 u(k~RANX2N0(k~RANX0 u(k~RANX2N0(k~RANX0 u(k~RANX2N0(k~RANX0,< ~CMP2EkĦk,< ~CMP2EkĦk,< ~CMP2EkĦk,< ~CMP2EkĦk,< ~CMP2EkĦk,< ~CMP2EkĦk,< ~CMP2EkĦk,< ~CMP2G,< ~SQR2+(@k7JJ8*"~DIV2eJ"~MUL2ŰƬ݊(k8*"~DIV2eJ"~MUL2ŰƬ݊(k8*"~DIV2eJ"~MUL2ŰƬ݊(k8*"~DIV2eJ"~MUL2ŰƬ݊(k8*"~DIV2eJ"~MUL2ŰƬ݊(k8*"~DIV2eJ"~MUL2ŰƬ݊(k8*"~DIV2eJ"~G,< ~DIV2GIȅ2I*8妰e椈쪥Ik@kIȅ2I*8妰e椈쪥Ik@kIȅ2I*8妰e椈쪥Ik@kIȅ2I*8妰e椈쪥Ik@kIȅ2I*8妰e椈쪥Ik@kIȅ2I*8妰e椈쪥Ik@kIȅ2I*8妰e椈쪥IB,< ~MUL2BIȅIFejf0 Ik@kIȅIFejf0 Ik@kIȅIFejf0 Ik@kIȅIFejf0 Ik@kIȅIFejf0 Ik@kIȅIFejf0 Ik@kIȅIFejf0 Ik@k,< ~SGN2 (k(k,< ~SGN2 (k(k,< ~SGN2 (k(k,< ~SGN2 (k(k,< ~SGN2 (k(k,< ~SGN2 (k(k,< ~SGN2 (k(k,< ~SGN2,< ~ABS40k8夅妅k,< ~ABS40k8夅妅k,< ~ABS40k8夅妅k,< ~ABS40k8夅妅k,< ~ABS40k8夅妅k,< ~ABS40k8夅妅k,< ~ABS40k8夅妅k,< ~ABS40,< ~ADD4eek,< ~ADD4eek,< ~ADD4eek,< ~ADD4eek,< ~ADD4eek,< ~ADD4eek,< ~ADD4eek,< ~ADD4,< ~CMP4EŦkŪŨk,< ~CMP4EŦkŪŨk,< ~CMP4EŦkŪŨk,< ~CMP4EŦkŪŨk,< ~CMP4EŦkŪŨk,< ~CMP4EŦkŪŨk,< ~CMP4EŦkŪŨk,< ~CMP4E,< ~RAN4"~RANX~RANX~RANXk ~RAN4"~RANX~RANX~RANXk ~RAN4"~RANX~RANX~RANXk ~RAN4"~RANX~RANX~RANXk ~RAN4"~RANX~RANX~RANXk ~RAN4"~RANX~RANX~RANXk ~RAN4"~RANX~RANX~RANXk ~RAN4",< ~SQR4[@kddkdd8 f Ff FddźŸM"~DIV4eeJj"~MUL4"žż𱥴ƶƴkeJj"~MUL4"žż𱥴ƶƴkeJj"~MUL4"žż𱥴ƶƴkeJj"~MUL4"žż𱥴ƶƴkeJj"~MUL4"žż𱥴ƶƴkeJj",< ~SUB48娅媅k,< ~SUB48娅媅k,< ~SUB48娅媅k,< ~SUB48娅媅k,< ~SUB48娅媅k,< ~SUB48娅媅k,< ~SUB48娅媅k,< ~SUB48 ,< ~MOD4"~DIV4 k,< ~MOD4"~DIV4 k,< ~MOD4"~DIV4 k,< ~MOD4"~DIV4 k,< ~MOD4"~DIV4 k,< ~MOD4"~DIV4 k,< ~MOD4"~DIV4 k,< ~MOD4"f,< ~DIV4 @k"~SIGNY" &&&8娪媐欈*8娰e欈셰8嬅宅k欈*8娰e欈셰8嬅宅k欈*8娰e欈셰8嬅宅k欈*8娰e欈셰8嬅宅k欈*8娰e欈셰8嬅宅k欈*8娰e欈셰8嬅宅k欈,< ~MUL4"~SIGN' )OJ eeffff` JdFejf󅮥)@k8嬅宅kdFejf󅮥)@k8嬅宅kdFejf󅮥)@k8嬅宅kdFejf󅮥)@k8嬅宅kdFejf󅮥)@k8嬅宅kdFejf󅮥)@,< ~SGN4dd ƨƪkk,< ~SGN4dd ƨƪkk,< ~SGN4dd ƨƪkk,< ~SGN4dd ƨƪkk,< ~SGN4dd ƨƪkk,< ~SGN4dd ƨƪkk,< ~SGN4dd ƨƪkk,< ~SGN4dd<,< ~SIGN<8夅妅ddd8娅媅ƤkGN<8夅妅ddd8娅媅ƤkGN<8夅妅ddd8娅媅ƤkGN<8夅妅ddd8娅媅ƤkGN<8夅妅ddd8娅媅ƤkGN<8夅妅ddd8娅媅ƤkGN<8夅妅ddd8娅媅ƤkGN< /,< ~ABS8/0 Tk8夅妅娅媅k ~ABS8/0 Tk8夅妅娅媅k ~ABS8/0 Tk8夅妅娅媅k ~ABS8/0 Tk8夅妅娅媅k ~ABS8/0 Tk8夅妅娅媅k ~ABS8/0 Tk8夅妅娅媅k ~ABS8/0 Tk8夅妅娅媅k ~ABS8/0,< ~ADD8eeeek,< ~ADD8eeeek,< ~ADD8eeeek,< ~ADD8eeeek,< ~ADD8eeeek,< ~ADD8eeeek,< ~ADD8eeeek,< ~ADD8",< ~CMP8"EŪkŲŰ ŮŬk,< ~CMP8"EŪkŲŰ ŮŬk,< ~CMP8"EŪkŲŰ ŮŬk,< ~CMP8"EŪkŲŰ ŮŬk,< ~CMP8"EŪkŲŰ ŮŬk,< ~CMP8"EŪkŲŰ ŮŬk,< ~CMP8"EŪkŲŰ ŮŬk,< ~CMP8"E,< ~RAN8"~RANX~RANXT~RANXk"~RANX~RANXT~RANXk"~RANX~RANXT~RANXk"~RANX~RANXT~RANXk"~RANX~RANXT~RANXk"~RANX~RANXT~RANXk"~RANX~RANXT~RANXk",< ~SQR8t@k ddddkddddʢʀ8v VĀddddҩT wĕ̕ԕ"~DIV8.eąĥeƅƥeȅȥeJfffĢĕ"~MUL8? ԐĂqTk ԐĂqTk ԐĂqTk ԐĂqTk,< ~SUB88嬅宅尅岅k,< ~SUB88嬅宅尅岅k,< ~SUB88嬅宅尅岅k,< ~SUB88嬅宅尅岅k,< ~SUB88嬅宅尅岅k,< ~SUB88嬅宅尅岅k,< ~SUB88嬅宅尅岅k,< ~SUB88,< ~MOD8"~DIV8 Tk,< ~MOD8"~DIV8 Tk,< ~MOD8"~DIV8 Tk,< ~MOD8"~DIV8 Tk,< ~MOD8"~DIV8 Tk,< ~MOD8"~DIV8 Tk,< ~MOD8"~DIV8 Tk,< ~MOD8"p,< ~DIV8@k"~SIG8_@&&&&&&&8嬪宅尅岐¥洈ǥ8崅嶅帅庅k尅岐¥洈ǥ8崅嶅帅庅k尅岐¥洈ǥ8崅嶅帅庅k尅岐¥洈ǥ8崅嶅帅庅k尅岐¥洈ǥ8崅嶅帅庅k尅岐¥洈ǥ8崅嶅帅庅k尅岐m,< ~MUL8"~SIG8i@Jeeeeffffffffϥ)@k8崅嶅帅庅kfffϥ)@k8崅嶅帅庅kfffϥ)@k8崅嶅帅庅kfffϥ)@k8崅嶅帅庅kfffϥ)@k8崅嶅帅庅kfffϥ)@k8崅嶅帅庅kfffϥ)",< ~SGN8"dddd ƬƮưƲkk,< ~SGN8"dddd ƬƮưƲkk,< ~SGN8"dddd ƬƮưƲkk,< ~SGN8"dddd ƬƮưƲkk,< ~SGN8"dddd ƬƮưƲkk,< ~SGN8"dddd ƬƮưƲkk,< ~SGN8"dddd ƬƮưƲkk,< ~SGN8"ddb,< ~SIG8b$8夅妅娅媅Tddddd¥8嬅宅尅岅ƤkTddddd¥8嬅宅尅岅ƤkTddddd¥8嬅宅尅岅ƤkTddddd¥8嬅宅尅岅ƤkTddddd¥8嬅宅尅岅ƤkTddddd¥8嬅宅尅岅ƤkTddddd¥8,B ~ORCA_TOOLS0hhȷid敉) `) i)8e)最 月~iڧ)$J)朂Fߨ月3%iiH)ɰ.i)ɐ \ " )0h) h)ɰ#)J 月ƕHH(k h)ɰ#)J 月ƕHH(k h)ɰ#)J 月ƕHH(k h)ɰ#)J 月ƕHH(k h)ɰ#)J 月ƕHH(k h)ɰ#)J 月ƕHH(k h)ɰ#)J 月ƕHH(k h)ɰ#)J 月ƕHH(k h)ɰ#)J 月ƕH<,< ~FBUF0d"~MASK#=X斥ŗ(8kdƘ(k0d"~MASK#=X斥ŗ(8kdƘ(k0d"~MASK#=X斥ŗ(8kdƘ(k0d"~MASK#=X斥ŗ(8kdƘ(k0d"~MASK#=X斥ŗ(8kdƘ(k0d"~MASK#=X斥ŗ(8kdƘ(k0d"~MASK#=X斥ŗ(8kdƘ(.,< ~RELS0e日日"~MASKI=XXƗ(k ~RELS0e日日"~MASKI=XXƗ(k ~RELS0e日日"~MASKI=XXƗ(k ~RELS0e日日"~MASKI=XXƗ(k ~RELS0e日日"~MASKI=XXƗ(k ~RELS0e日日"~MASKI=XXƗ(k ~RELS0e日日"~MASKI=XXƗ(k ~RELS,,< ~RESV0e日日"~MASKXXƗ(k ~RESV0e日日"~MASKXXƗ(k ~RESV0e日日"~MASKXXƗ(k ~RESV0e日日"~MASKXXƗ(k ~RESV0e日日"~MASKXXƗ(k ~RESV0e日日"~MASKXXƗ(k ~RESV0e日日"~MASKXXƗ(k ~RESV,< ~MASKHJJJh)8jk,< ~MASKHJJJh)8jk,< ~MASKHJJJh)8jk,< ~MASKHJJJh)8jk,< ~MASKHJJJh)8jk,< ~MASKHJJJh)8jk,< ~MASKHJJJh)8jk,< ~MASKHJJ,< ~NMID 0:(8k(k,< ~NMID 0:(8k(k,< ~NMID 0:(8k(k,< ~NMID 0:(8k(k,< ~NMID 0:(8k(k,< ~NMID 0:(8k(k,< ~NMID 0:(8k(k,< ~NMID MACROSvg+' '*M65816.I.O"@e*e*/M65816.INT2MATH<'ii/M65816.LONGMATHQi)i)*M65816.MSCa <++ !"#$%&'()*+,-./0123456789:;**************************************************************** * * M65816.I/O * * Input and output macros. * * By Mike Westerfield * Copyright (C) October 1985, All rights reserved * By the Byte Works, Inc. * **************************************************************** MACRO &LAB ALTCH &LAB LDA #$0F JSL ~COUT MEND MACRO &LAB BELL &LAB LDA #$07 JSL ~COUT MEND MACRO &LAB CLEOL &LAB LDA #$1D JSL ~COUT MEND MACRO &LAB CLEOS &LAB LDA #$0B JSL ~COUT MEND MACRO &LAB COUT &CHAR &LAB LDA &CHAR JSL ~COUT MEND MACRO &LAB GET2 &N1,&CR &LAB JSL ~ORCA_TOOLS DC I4"~GET2" DC H"31",I1"C:&CR" ~STORE 2,&N1 MEND MACRO &LAB GET4 &N1,&CR &LAB JSL ~ORCA_TOOLS DC I4"~GET4" DC H"31",I1"C:&CR" ~STORE 4,&N1 MEND MACRO &LAB GET8 &N1,&CR &LAB JSL ~ORCA_TOOLS DC I4"~GET8" DC H"31",I1"C:&CR" ~STORE 8,&N1 MEND MACRO &LAB GETC &N1,&CR &LAB JSL ~ORCA_TOOLS DC I4"~GETC" DC H"31",I1"C:&CR" ~STORE 1,&N1 MEND MACRO &LAB GETS &N1,&CR &LAB JSL ~ORCA_TOOLS DC I4"~GETS" DC H"31",I1"C:&CR" ~STORE 0,&N1 MEND MACRO &LAB GOTOXY &X,&Y &LAB LDA #$1E JSL ~COUT CLC LDA &X ADC #32 JSL ~COUT CLC LDA &Y ADC #32 JSL ~COUT MEND MACRO &LAB HOME &LAB LDA #$0C JSL ~COUT MEND MACRO &LAB NORMCH &LAB LDA #$0E JSL ~COUT MEND MACRO &LAB PRBL &AD1 &LAB LDX &AD1 JSL ~PRBL MEND MACRO &LAB PUT2 &N1,&F1,&CR &LAB ANOP LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A AIF C:&F1,.B LCLC &F1 &F1 SETC #0 .B ~LDX &F1 ~LDA "&N1" AIF C:&CR,.C CLC AGO .D .C SEC .D JSL ~PUT2 AIF (&LA+&LI)=2,.I SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.H LONGA OFF .H AIF &LI,.I LONGI OFF .I MEND MACRO &LAB PUT4 &N1,&F1,&CR &LAB ANOP LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A AIF C:&F1,.B LCLC &F1 &F1 SETC #0 .B ~LDX &F1 LCLC &C &C AMID &N1,1,1 AIF "&C"="#",.E AIF "&C"="{",.C AIF "&C"="[",.D LDY &N1+2 LDA &N1 AGO .F .C &N1 AMID &N1,2,L:&N1-2 &N1 SETC (&N1) .D LDY #2 LDA &N1,Y TAY LDA &N1 AGO .F .E LDA &N1 &N1 AMID &N1,2,L:&N1-1 LDY #^&N1 .F AIF C:&CR,.G CLC AGO .H .G SEC .H JSL ~PUT4 AIF (&LA+&LI)=2,.J SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.I LONGA OFF .I AIF &LI,.J LONGI OFF .J MEND MACRO &LAB PUT8 &N1,&F1,&CR AIF C:&F1,.A LCLC &F1 &F1 SETC #0 .A &LAB JSL ~ORCA_TOOLS DC I4"~PUT8" DC H"31",I1"C:&CR" ~LOAD 2,&F1 ~LOAD 8,"&N1" DC H'B0' MEND MACRO &LAB PUTB &N1,&F1,&CR &LAB ANOP LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A AIF C:&F1,.B LCLC &F1 &F1 SETC #0 .B ~LDX &F1 ~LDA "&N1" AIF C:&CR,.C CLC AGO .D .C SEC .D JSL ~PUTB AIF (&LA+&LI)=2,.I SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.H LONGA OFF .H AIF &LI,.I LONGI OFF .I MEND MACRO &LAB PUTS &N1,&F1,&CR &LAB ANOP LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A AIF C:&F1,.B LCLC &F1 &F1 SETC #0 .B ~LDX &F1 LCLC &C &C AMID &N1,1,1 AIF "&C"="#",.E AIF "&C"="{",.C AIF "&C"="[",.D LDA #&N1 LDY #^&N1 AGO .F .C &N1 AMID &N1,2,L:&N1-2 LDA &N1 ~A&SYSCNT LDY #^~A&SYSCNT AGO .F .D &N1 AMID &N1,2,L:&N1-2 LDA &N1 LDY &N1+2 AGO .F .E LDY #^~A&SYSCNT LDA #~A&SYSCNT AIF C:&N1>127,.E1 BRA ~C&SYSCNT AGO .E2 .E1 BRL ~C&SYSCNT .E2 ~A&SYSCNT DC 2I1"L:~B&SYSCNT" &N1 AMID "&N1",2,L:&N1-1 ~B&SYSCNT DC C&N1 ~C&SYSCNT ANOP .F AIF C:&CR,.G CLC AGO .H .G SEC .H JSL ~PUTS AIF (&LA+&LI)=2,.J SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.I LONGA OFF .I AIF &LI,.J LONGI OFF .J MEND MACRO &LAB PUTC &N1,&F1,&CR &LAB ANOP LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A AIF C:&F1,.B LCLC &F1 &F1 SETC #0 .B ~LDX &F1 ~LDA "&N1" AIF C:&CR,.C CLC AGO .D .C SEC .D JSL ~PUTC AIF (&LA+&LI)=2,.I SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.H LONGA OFF .H AIF &LI,.I LONGI OFF .I MEND MACRO &LAB PUTCR &DCB &LAB LDA #$0D JSL ~COUT MEND MACRO &LAB GET_LANG &LANG &LAB PHP SEC XCE JSR $FD DC H"E1" DS 2 STX &LANG CLC XCE PLP MEND MACRO &LAB GET_LINFO &DCB &LAB PHP SEC XCE JSR $FD DC H"E3" DC A"&DCB" CLC XCE PLP MEND MACRO &LAB KEYPRESS &LAB PHP SEC XCE JSR $FD DC H"9A" DS 2 CLC XCE PLP MEND MACRO &LAB NAMEADR &ADR &LAB PHP SEC XCE JSR $FD DC H"E0" DC A"&ADR" CLC XCE PLP MEND MACRO &LAB RDKEY &NOCURSOR &LAB PHP SEC XCE JSR $FD AIF C:&NOCURSOR=0,.A DC H"98" AGO .B .A DC H"99" .B DS 2 CLC XCE PLP MEND MACRO &LAB READXY &LAB PHP SEC XCE JSR $FD DC H"90" DS 2 CLC XCE PLP MEND MACRO &LAB SET_LANG &LANG &LAB PHP SEC XCE LDX &LANG JSR $FD DC H"E2" DS 2 CLC XCE PLP MEND MACRO &LAB SET_LINFO &DCB &LAB PHP SEC XCE JSR $FD DC H"E4" DC A"&DCB" CLC XCE PLP MEND MACRO &LAB SIZE &LAB PHP SEC XCE JSR $FD DC H"91" DS 2 CLC XCE PLP MEND MACRO ~LDX &N LCLC &C &C AMID &N,1,1 AIF "&C"<>"{",.A &N AMID &N,2,L:&N-2 &N SETC (&N) AGO .B .A AIF "&C"="[",.B LDX &N MEXIT .B LDA &N TAX MEND MACRO ~LDA &N LCLC &C &C AMID &N,1,1 AIF "&C"<>"{",.A &N AMID &N,2,L:&N-2 &N SETC (&N) .A LDA &N MEND MACRO ~LOAD &L,&N LCLC &C &C AMID "&N",1,1 AIF "&C"<>"{",.A &C AMID "&N",L:&N,1 AIF "&C"<>"}",.F &N AMID "&N",2,L:&N-2 DC I1"16+&L",I4"&N" MEXIT .A AIF "&C"<>"[",.B &N AMID "&N",2,L:&N-2 DC I1"32+&L",I4"&N" MEXIT .B AIF "&C"<>"#",.E AIF &L=0,.D &N AMID "&N",2,L:&N-1 &C AMID "&N",1,1 AIF "&C"<>"'",.C LCLA &I &N AMID "&N",2,L:&N-2 &I SETA "&N" &N SETC &I .C AIF (&L<>2).OR.(&N>255),.C1 &L SETC 1 .C1 DC I1"48+&L",I&L"&N" MEXIT .D DC I1"48",2I1"L:~&SYSCNT" &N AMID "&N",3,L:&N-3 ~&SYSCNT DC C"&N" MEXIT .E DC I1"&L",I4"&N" MEXIT .F MNOTE "Missing closing '}'",16 MEND MACRO ~STORE &L,&N LCLC &C &C AMID &N,1,1 AIF "&C"<>"{",.A &C AMID &N,L:&N,1 AIF "&C"<>"}",.C &N AMID &N,2,L:&N-2 DC I1"144+&L",I4"&N" MEXIT .A AIF "&C"<>"[",.B &N AMID &N,2,L:&N-2 DC I1"160+&L",I4"&N" MEXIT .B DC I1"128+&L",I4"&N" MEXIT .C MNOTE "Missing closing '}'",16 MEND ! ProDOS macros MACRO &LAB ALL_INT &DCB &LAB PHP SEC XCE JSR $BF00 DC H"40" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB CLOSE &DCB &LAB PHP SEC XCE JSR $BF00 DC H"CC" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB CREATE &DCB &LAB PHP SEC XCE JSR $BF00 DC H"C0" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB DEAL_INT &DCB &LAB PHP SEC XCE JSR $BF00 DC H"41" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB DESTROY &DCB &LAB PHP SEC XCE JSR $BF00 DC H"C1" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB FINDBUFF &ADR,&LEN &LAB ANOP LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A LDA #&ADR LDX &LEN JSL ~FBUF AIF (&LA+&LI)=2,.I SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.H LONGA OFF .H AIF &LI,.I LONGI OFF .I MEND MACRO &LAB FLUSH &DCB &LAB PHP SEC XCE JSR $BF00 DC H"CD" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB GET_BUF &DCB &LAB PHP SEC XCE JSR $BF00 DC H"D3" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB GET_EOF &DCB &LAB PHP SEC XCE JSR $BF00 DC H"D1" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB GET_INFO &DCB &LAB PHP SEC XCE JSR $BF00 DC H"C4" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB GET_MARK &DCB &LAB PHP SEC XCE JSR $BF00 DC H"CF" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB GET_PREFIX &DCB &LAB PHP SEC XCE JSR $BF00 DC H"C7" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB GET_TIME &LAB PHP SEC XCE JSR $BF00 DC H"82" DS 2 CLC XCE PLP MEND MACRO &LAB NEW_LINE &DCB &LAB PHP SEC XCE JSR $BF00 DC H"C9" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB ON_LINE &DCB &LAB PHP SEC XCE JSR $BF00 DC H"C5" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB OPEN &DCB &LAB PHP SEC XCE JSR $BF00 DC H"C8" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB READ &DCB &LAB PHP SEC XCE JSR $BF00 DC H"CA" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB READ_BLK &DCB &LAB PHP SEC XCE JSR $BF00 DC H"80" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB RELEASE &START,&LEN &LAB ANOP LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A LDA &START LDX &LEN JSL ~RELS AIF (&LA+&LI)=2,.I SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.H LONGA OFF .H AIF &LI,.I LONGI OFF .I MEND MACRO &LAB RENAM &DCB &LAB PHP SEC XCE JSR $BF00 DC H"C2" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB RESERVE &START,&LEN &LAB ANOP LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A LDA &START LDX &LEN JSL ~RESV AIF (&LA+&LI)=2,.I SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.H LONGA OFF .H AIF &LI,.I LONGI OFF .I MEND MACRO &LAB SET_BUF &DCB &LAB PHP SEC XCE JSR $BF00 DC H"D3" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB SET_EOF &DCB &LAB PHP SEC XCE JSR $BF00 DC H"D0" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB SET_INFO &DCB &LAB PHP SEC XCE JSR $BF00 DC H"C3" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB SET_MARK &DCB &LAB PHP SEC XCE JSR $BF00 DC H"CE" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB SET_PREFIX &DCB &LAB PHP SEC XCE JSR $BF00 DC H"C6" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB WRITE &DCB &LAB PHP SEC XCE JSR $BF00 DC H"CB" DC I"&DCB" CLC XCE PLP MEND MACRO &LAB WRITE_BLK &DCB &LAB PHP SEC XCE JSR $BF00 DC H"81" DC I"&DCB" CLC XCE PLP MEND =>?@ABCDEFGHIJKLMNOP**************************************************************** * * M65816.INT2MATH * * Two byte integer mathematics. * * By Mike Westerfield * * Copyright (C) October 1985, All rights reserved * By the Byte Works, Inc. * **************************************************************** MACRO &LAB ABS2 &N1,&N2 &LAB ANOP LCLB &LA AIF S:LONGA,.A REP #%00100000 LONGA ON &LA SETB 1 .A LCLC &C &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.K &N1 AMID &N1,L:&N1-2,2 &N1 SETC (&N1) .B AIF C:&N2>0,.C LCLC &N2 &N2 SETC &N1 AGO .D .C &C AMID &N2,1,1 AIF "&C"<>"{",.D &C AMID &N2,L:&N2,1 AIF "&C"<>"}",.K &N2 AMID &N2,L:&N2-2,2 &N2 SETC (&N2) .D LDA &N1 BPL ~&SYSCNT EOR #$FFFF INC A ~&SYSCNT ANOP STA &N2 AIF &LA=0,.E SEP #%00100000 LONGA OFF .E MEXIT .K MNOTE "Missing closing '}'",16 MEND MACRO &LAB ADD2 &N1,&N2,&N3 &LAB ANOP LCLB &LA AIF S:LONGA,.A REP #%00100001 LONGA ON &LA SETB 1 .A LCLC &C &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.Y &N1 AMID &N1,L:&N1-2,2 &N1 SETC (&N1) .B &C AMID &N2,1,1 AIF "&C"<>"{",.C &C AMID &N2,L:&N2,1 AIF "&C"<>"}",.Y &N2 AMID &N2,L:&N2-2,2 &N2 SETC (&N2) .C AIF C:&N3>0,.D LCLC &N3 &N3 SETC &N1 AGO .E .D &C AMID &N3,1,1 AIF "&C"<>"{",.E &C AMID &N3,L:&N3,1 AIF "&C"<>"}",.Y &N3 AMID &N3,L:&N3-2,2 &N3 SETC (&N3) .E AIF &LA,.E1 CLC .E1 LDA &N1 ADC &N2 STA &N3 AIF &LA=0,.F SEP #%00100000 LONGA OFF .F MEXIT .Y MNOTE "Missing closing '}'",16 MEND MACRO &LAB CMP2 &N1,&N2 &LAB ANOP LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A LCLC &C &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.K &N1 AMID &N1,L:&N1-2,2 &N1 SETC (&N1) .B &C AMID &N2,1,1 AIF "&C"<>"{",.C &C AMID &N2,L:&N2,1 AIF "&C"<>"}",.K &N2 AMID &N2,L:&N2-2,2 LDA (&N2) TAX AGO .E .C AIF "&C"<>"[",.D LDA &N2 TAX AGO .E .D LDX &N2 .E LDA &N1 JSL ~CMP2 AIF (&LA+&LI)=2,.I SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.H LONGA OFF .H AIF &LI,.I LONGI OFF .I MEXIT .K MNOTE "Missing closing '}'",16 MEND MACRO &LAB DIV2 &N1,&N2,&N3 &LAB ANOP LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A LCLC &C &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.K &N1 AMID &N1,L:&N1-2,2 &N1 SETC (&N1) .B &C AMID &N2,1,1 AIF "&C"<>"{",.C &C AMID &N2,L:&N2,1 AIF "&C"<>"}",.K &N2 AMID &N2,L:&N2-2,2 LDA (&N2) TAX AGO .E .C AIF "&C"<>"[",.D LDA &N2 TAX AGO .E .D LDX &N2 .E AIF C:&N3>0,.F LCLC &N3 &N3 SETC &N1 AGO .G .F &C AMID &N3,1,1 AIF "&C"<>"{",.G &C AMID &N3,L:&N3,1 AIF "&C"<>"}",.Y &N3 AMID &N3,L:&N3-2,2 &N3 SETC (&N3) .G LDA &N1 JSL ~DIV2 STA &N3 AIF (&LA+&LI)=2,.I SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.H LONGA OFF .H AIF &LI,.I LONGI OFF .I MEXIT .K MNOTE "Missing closing '}'",16 MEND MACRO &LAB MOD2 &N1,&N2,&N3 &LAB ANOP LCLB &IN1 LCLB &IN3 LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A LCLC &C &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.L &N1 AMID &N1,L:&N1-2,2 &N1 SETC (&N1) &IN1 SETB 1 .B &C AMID &N2,1,1 AIF "&C"<>"{",.C &C AMID &N2,L:&N2,1 AIF "&C"<>"}",.L &N2 AMID &N2,L:&N2-2,2 LDA (&N2) TAX AGO .E .C AIF "&C"<>"[",.D LDA &N2 TAX AGO .E .D LDX &N2 .E AIF C:&N3>0,.F LCLC &N3 &N3 SETC &N1 &IN3 SETB &IN1 AGO .G .F &C AMID &N3,1,1 AIF "&C"<>"{",.G &C AMID &N3,L:&N3,1 AIF "&C"<>"}",.Y &N3 AMID &N3,L:&N3-2,2 &N3 SETC (&N3) &IN3 SETB 1 .G LDA &N1 JSL ~DIV2 &C AMID "&N3",1,1 AIF ("&C"<>"[").AND.(&IN3=0),.H TXA STA &N3 AGO .I .H STX &N3 .I AIF (&LA+&LI)=2,.K SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.J LONGA OFF .J AIF &LI,.K LONGI OFF .K MEXIT .L MNOTE "Missing closing '}'",16 MEND MACRO &LAB MUL2 &N1,&N2,&N3 &LAB ANOP LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A LCLC &C &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.K &N1 AMID &N1,L:&N1-2,2 &N1 SETC (&N1) .B &C AMID &N2,1,1 AIF "&C"<>"{",.C &C AMID &N2,L:&N2,1 AIF "&C"<>"}",.K &N2 AMID &N2,L:&N2-2,2 LDA (&N2) TAX AGO .E .C AIF "&C"<>"[",.D LDA &N2 TAX AGO .E .D LDX &N2 .E AIF C:&N3>0,.F LCLC &N3 &N3 SETC &N1 AGO .G .F &C AMID &N3,1,1 AIF "&C"<>"{",.G &C AMID &N3,L:&N3,1 AIF "&C"<>"}",.Y &N3 AMID &N3,L:&N3-2,2 &N3 SETC (&N3) .G LDA &N1 JSL ~MUL2 STA &N3 AIF (&LA+&LI)=2,.I SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.H LONGA OFF .H AIF &LI,.I LONGI OFF .I MEXIT .K MNOTE "Missing closing '}'",16 MEND MACRO &LAB RAN2 &N1 &LAB ANOP LCLB &LA AIF S:LONGA,.A REP #%00100000 LONGA ON &LA SETB 1 .A LCLC &C &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.K &N1 AMID &N1,L:&N1-2,2 &N1 SETC (&N1) .B JSL ~RANX LDA $80 STA &N1 AIF &LA=0,.C SEP #%00100000 LONGA OFF .C MEXIT .K MNOTE "Missing closing '}'",16 MEND MACRO &LAB SIGN2 &N1,&N2 &LAB ANOP LCLB &LA AIF S:LONGA,.A REP #%00100000 LONGA ON &LA SETB 1 .A LCLC &C &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.K &N1 AMID &N1,L:&N1-2,2 &N1 SETC (&N1) .B AIF C:&N2>0,.C LCLC &N2 &N2 SETC &N1 AGO .D .C &C AMID &N2,1,1 AIF "&C"<>"{",.D &C AMID &N2,L:&N2,1 AIF "&C"<>"}",.K &N2 AMID &N2,L:&N2-2,2 &N2 SETC (&N2) .D LDA &N1 JSL ~SGN2 STA &N2 AIF &LA=0,.E SEP #%00100000 LONGA OFF .E MEXIT .K MNOTE "Missing closing '}'",16 MEND MACRO &LAB SQRT2 &N1,&N2 &LAB ANOP LCLB &LA AIF S:LONGA,.A REP #%00100000 LONGA ON &LA SETB 1 .A LCLC &C &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.K &N1 AMID &N1,L:&N1-2,2 &N1 SETC (&N1) .B AIF C:&N2>0,.C LCLC &N2 &N2 SETC &N1 AGO .D .C &C AMID &N2,1,1 AIF "&C"<>"{",.D &C AMID &N2,L:&N2,1 AIF "&C"<>"}",.K &N2 AMID &N2,L:&N2-2,2 &N2 SETC (&N2) .D LDA &N1 JSL ~SQR2 STA &N2 AIF &LA=0,.E SEP #%00100000 LONGA OFF .E MEXIT .K MNOTE "Missing closing '}'",16 MEND MACRO &LAB SUB2 &N1,&N2,&N3 &LAB ANOP LCLB &LA AIF S:LONGA,.A REP #%00100000 LONGA ON &LA SETB 1 .A LCLC &C &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.Y &N1 AMID &N1,L:&N1-2,2 &N1 SETC (&N1) .B &C AMID &N2,1,1 AIF "&C"<>"{",.C &C AMID &N2,L:&N2,1 AIF "&C"<>"}",.Y &N2 AMID &N2,L:&N2-2,2 &N2 SETC (&N2) .C AIF C:&N3>0,.D LCLC &N3 &N3 SETC &N1 AGO .E .D &C AMID &N3,1,1 AIF "&C"<>"{",.E &C AMID &N3,L:&N3,1 AIF "&C"<>"}",.Y &N3 AMID &N3,L:&N3-2,2 &N3 SETC (&N3) .E SEC LDA &N1 SBC &N2 STA &N3 AIF &LA=0,.F SEP #%00100000 LONGA OFF .F MEXIT .Y MNOTE "Missing closing '}'",16 MEND RSTUVWXYZ[\]^_`**************************************************************** * * M65816.LONGMATH * * Four and eight byte integer mathematics. * * By Mike Westerfield * Copyright (C) October 1985, All rights reserved * By the Byte Works, Inc. * **************************************************************** MACRO &LAB ABS4 &N1,&N2 AIF C:&N2,.A LCLC &N2 &N2 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~ABS4" ~LOAD 4,&N1 ~STORE 4,&N2 MEND MACRO &LAB ADD4 &N1,&N2,&N3 &LAB CLC AIF C:&N3,.A LCLC &N3 .A ~ADD &N1,&N2,&N3,ADC,BCC,INC MEND MACRO &LAB SUB4 &N1,&N2,&N3 &LAB SEC AIF C:&N3,.A LCLC &N3 .A ~ADD &N1,&N2,&N3,SBC,BCS,DEC MEND MACRO ~ADD &N1,&N2,&N3,&ADC,&BCC,&INC LCLB &LA LCLB &LI &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A LCLB &IN LCLC &C LCLC &N12 LCLC &N22 LCLC &N32 &C AMID &N1,1,1 AIF "&C"="#",.D AIF "&C"="{",.B AIF "&C"="[",.C &N12 SETC &N1+2 AGO .E .B &N1 AMID &N1,2,L:&N1-2 &N1 SETC (&N1) .C &IN SETB 1 &N12 SETC "&N1,Y" AGO .E .D &N12 AMID &N1,2,L:&N1-1 &N12 SETC #^&N12 .E &C AMID &N2,1,1 AIF "&C"="#",.H AIF "&C"="{",.F AIF "&C"="[",.G &N22 SETC &N2+2 AGO .I .F &N2 AMID &N2,2,L:&N2-2 &N2 SETC (&N2) .G &IN SETB 1 &N22 SETC "&N2,Y" AGO .I .H &N22 AMID &N2,2,L:&N2-1 AIF (C:&N3=0).AND.(&N22<65536).AND.(.NOT.&IN),.P &N22 SETC #^&N22 .I AIF C:&N3,.J LCLC &N3 &N3 SETC &N1 &N32 SETC "&N12" AGO .N .J &C AMID &N3,1,1 AIF "&C"="#",.M AIF "&C"="{",.K AIF "&C"="[",.L &N32 SETC &N3+2 AGO .N .K &N3 AMID &N3,2,L:&N3-2 &N3 SETC (&N3) .L &IN SETB 1 &N32 SETC "&N3,Y" AGO .N .M &N32 AMID &N3,2,L:&N3-1 &N32 SETC #^&N32 .N AIF .NOT.&IN,.O LDY #2 .O LDA &N1 &ADC &N2 STA &N3 LDA &N12 &ADC &N22 STA &N32 AGO .Q .P LDA &N1 &ADC &N2 STA &N1 &BCC ~&SYSCNT &INC &N12 ~&SYSCNT ANOP .Q AIF (&LA+&LI)=2,.S SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.R LONGA OFF .R AIF &LI,.S LONGI OFF .S MEND MACRO &LAB CMP4 &N1,&N2 &LAB JSL ~ORCA_TOOLS DC I4"~CMP4" ~LOAD 4,&N1 ~LOAD 4,&N2 DC H'B0' MEND MACRO &LAB DIV4 &N1,&N2,&N3 AIF C:&N3,.A LCLC &N3 &N3 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~DIV4" ~LOAD 4,&N1 ~LOAD 4,&N2 ~STORE 4,&N3 MEND MACRO &LAB MOD4 &N1,&N2,&N3 AIF C:&N3,.A LCLC &N3 &N3 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~MOD4" ~LOAD 4,&N1 ~LOAD 4,&N2 ~STORE 4,&N3 MEND MACRO &LAB MUL4 &N1,&N2,&N3 AIF C:&N3,.A LCLC &N3 &N3 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~MUL4" ~LOAD 4,&N1 ~LOAD 4,&N2 ~STORE 4,&N3 MEND MACRO &LAB RAN4 &N1 &LAB JSL ~ORCA_TOOLS DC I4"~RAN4" ~STORE 4,&N1 MEND MACRO &LAB SIGN4 &N1,&N2 AIF C:&N2,.A LCLC &N2 &N2 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~SGN4" ~LOAD 4,&N1 ~STORE 4,&N2 MEND MACRO &LAB SQRT4 &N1,&N2 AIF C:&N2,.A LCLC &N2 &N2 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~SQR4" ~LOAD 4,&N1 ~STORE 4,&N2 MEND MACRO &LAB ABS8 &N1,&N2 AIF C:&N2,.A LCLC &N2 &N2 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~ABS8" ~LOAD 8,&N1 ~STORE 8,&N2 MEND MACRO &LAB ADD8 &N1,&N2,&N3 AIF C:&N3,.A LCLC &N3 &N3 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~ADD8" ~LOAD 8,&N1 ~LOAD 8,&N2 ~STORE 8,&N3 MEND MACRO &LAB CMP8 &N1,&N2 &LAB JSL ~ORCA_TOOLS DC I4"~CMP8" ~LOAD 8,&N1 ~LOAD 8,&N2 DC H'B0' MEND MACRO &LAB DIV8 &N1,&N2,&N3 AIF C:&N3,.A LCLC &N3 &N3 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~DIV8" ~LOAD 8,&N1 ~LOAD 8,&N2 ~STORE 8,&N3 MEND MACRO &LAB MOD8 &N1,&N2,&N3 AIF C:&N3,.A LCLC &N3 &N3 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~MOD8" ~LOAD 8,&N1 ~LOAD 8,&N2 ~STORE 8,&N3 MEND MACRO &LAB MUL8 &N1,&N2,&N3 AIF C:&N3,.A LCLC &N3 &N3 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~MUL8" ~LOAD 8,&N1 ~LOAD 8,&N2 ~STORE 8,&N3 MEND MACRO &LAB RAN8 &N1 &LAB JSL ~ORCA_TOOLS DC I4"~RAN8" ~STORE 8,&N1 MEND MACRO &LAB SIGN8 &N1,&N2 AIF C:&N2,.A LCLC &N2 &N2 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~SGN8" ~LOAD 8,&N1 ~STORE 8,&N2 MEND MACRO &LAB SQRT8 &N1,&N2 AIF C:&N2,.A LCLC &N2 &N2 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~SQR8" ~LOAD 8,&N1 ~STORE 8,&N2 MEND MACRO &LAB SUB8 &N1,&N2,&N3 AIF C:&N3,.A LCLC &N3 &N3 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~SUB8" ~LOAD 8,&N1 ~LOAD 8,&N2 ~STORE 8,&N3 MEND MACRO ~LOAD &L,&N LCLC &C &C AMID "&N",1,1 AIF "&C"<>"{",.A &C AMID "&N",L:&N,1 AIF "&C"<>"}",.F &N AMID "&N",2,L:&N-2 DC I1"16+&L",I4"&N" MEXIT .A AIF "&C"<>"[",.B &N AMID "&N",2,L:&N-2 DC I1"32+&L",I4"&N" MEXIT .B AIF "&C"<>"#",.E AIF &L=0,.D &N AMID "&N",2,L:&N-1 &C AMID "&N",1,1 AIF "&C"<>"'",.C LCLA &I &N AMID "&N",2,L:&N-2 &I SETA "&N" &N SETC &I .C AIF (&L<>2).OR.(&N>255),.C1 &L SETC 1 .C1 DC I1"48+&L",I&L"&N" MEXIT .D DC I1"48",2I1"L:~&SYSCNT" &N AMID "&N",3,L:&N-3 ~&SYSCNT DC C"&N" MEXIT .E DC I1"&L",I4"&N" MEXIT .F MNOTE "Missing closing '}'",16 MEND MACRO ~STORE &L,&N LCLC &C &C AMID &N,1,1 AIF "&C"<>"{",.A &C AMID &N,L:&N,1 AIF "&C"<>"}",.C &N AMID &N,2,L:&N-2 DC I1"144+&L",I4"&N" MEXIT .A AIF "&C"<>"[",.B &N AMID &N,2,L:&N-2 DC I1"160+&L",I4"&N" MEXIT .B DC I1"128+&L",I4"&N" MEXIT .C MNOTE "Missing closing '}'",16 MEND bcdefghijklmnopqrstuvwxyz{|}~**************************************************************** * * M6502.MSC * * Miscellaneous macros. * * By Mike Westerfield * Copyright (C) October 1985, All rights reserved * By the Byte Works, Inc. * **************************************************************** MACRO &LAB ASL2 &N1 LCLC &C &LAB ANOP AIF S:LONGA=1,.A REP #%00100000 .A &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.F &N1 AMID &N1,2,L:&N1-2 LDA (&N1) ASL A STA (&N1) AGO .D .B AIF "&C"<>"[",.C LDA &N1 ASL A STA &N1 AGO .D .C ASL &N1 .D AIF S:LONGA=1,.E SEP #%00100000 .E MEXIT .F MNOTE "Missing closing '}'",16 MEND MACRO &LAB BGT &BP &LAB BEQ *+4 BGE &BP MEND MACRO &LAB BLE &BP &LAB BLT &BP BEQ &BP MEND MACRO &LAB BUTTON &BTN,&VAL &LAB ANOP LCLB &LA AIF .NOT.S:LONGA,.A SEP #%00100000 LONGA OFF &LA SETB 1 .A LDX &BTN LDA $C061,X AIF C:&VAL=0,.B STA &VAL .B AIF &LA=0,.C REP #%00100000 LONGA ON .C MEND MACRO &LAB CMPW &N1,&N2 LCLC &C LCLB &B1 &LAB ANOP AIF S:LONGA,.A REP #%00100000 &B1 SETB 1 LONGA ON .A &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.F &N1 AMID &N1,2,L:&N1-2 &N1 SETC (&N1) .B LDA &N1 &C AMID &N2,1,1 AIF "&C"<>"{",.C &C AMID &N2,L:&N2,1 AIF "&C"<>"}",.F &N2 AMID &N2,2,L:&N2-2 &N2 SETC (&N2) .C CMP &N2 AIF .NOT.&B1,.E SEP #%00100000 LONGA OFF .E MEXIT .F MNOTE "Missing closing '}'",16 MEND MACRO &LAB CNV24 &N1,&N2 AIF C:&N2,.A LCLC &N2 &N2 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~CV24" ~LOAD 2,"&N1" ~STORE 4,"&N2" MEND MACRO &LAB CNV28 &N1,&N2 AIF C:&N2,.A LCLC &N2 &N2 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~CV28" ~LOAD 2,"&N1" ~STORE 8,"&N2" MEND MACRO &LAB CNV2S &N1,&N2 AIF C:&N2,.A LCLC &N2 &N2 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~CV2S" ~LOAD 2,"&N1" ~STORE 0,"&N2" MEND MACRO &LAB CNV42 &N1,&N2 AIF C:&N2,.A LCLC &N2 &N2 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~CV42" ~LOAD 4,"&N1" ~STORE 2,"&N2" MEND MACRO &LAB CNV48 &N1,&N2 AIF C:&N2,.A LCLC &N2 &N2 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~CV48" ~LOAD 4,"&N1" ~STORE 8,"&N2" MEND MACRO &LAB CNV4S &N1,&N2 AIF C:&N2,.A LCLC &N2 &N2 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~CV4S" ~LOAD 4,"&N1" ~STORE 0,"&N2" MEND MACRO &LAB CNV82 &N1,&N2 AIF C:&N2,.A LCLC &N2 &N2 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~CV82" ~LOAD 8,"&N1" ~STORE 2,"&N2" MEND MACRO &LAB CNV84 &N1,&N2 AIF C:&N2,.A LCLC &N2 &N2 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~CV84" ~LOAD 8,"&N1" ~STORE 4,"&N2" MEND MACRO &LAB CNV8S &N1,&N2 AIF C:&N2,.A LCLC &N2 &N2 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~CV8S" ~LOAD 8,"&N1" ~STORE 0,"&N2" MEND MACRO &LAB CNVS2 &N1,&N2 AIF C:&N2,.A LCLC &N2 &N2 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~CVS2" ~LOAD 0,"&N1" ~STORE 2,"&N2" MEND MACRO &LAB CNVS4 &N1,&N2 AIF C:&N2,.A LCLC &N2 &N2 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~CVS4" ~LOAD 0,"&N1" ~STORE 4,"&N2" MEND MACRO &LAB CNVS8 &N1,&N2 AIF C:&N2,.A LCLC &N2 &N2 SETC &N1 .A &LAB JSL ~ORCA_TOOLS DC I4"~CVS8" ~LOAD 0,"&N1" ~STORE 8,"&N2" MEND MACRO &LAB DBEQ &R,&BP AIF "&R"="X",.L1 AIF "&R"="Y",.L1 &LAB DEC &R BEQ &BP MEXIT .L1 &LAB DE&R BEQ &BP MEND MACRO &LAB DBNE &R,&BP AIF "&R"="X",.L1 AIF "&R"="Y",.L1 &LAB DEC &R BNE &BP MEXIT .L1 &LAB DE&R BNE &BP MEND MACRO &LAB DBPL &R,&BP AIF "&R"="X",.L1 AIF "&R"="Y",.L1 &LAB DEC &R BPL &BP MEXIT .L1 &LAB DE&R BPL &BP MEND MACRO &LAB DEC2 &N1 LCLC &C &LAB ANOP AIF S:LONGA=1,.A REP #%00100000 .A &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.F &N1 AMID &N1,2,L:&N1-2 LDA (&N1) DEC A STA (&N1) AGO .D .B AIF "&C"<>"[",.C LDA &N1 DEC A STA &N1 AGO .D .C DEC &N1 .D AIF S:LONGA=1,.E SEP #%00100000 .E MEXIT .F MNOTE "Missing closing '}'",16 MEND MACRO &LAB DSTR &ADR,&LENGTH AIF C:&LENGTH=0,.C AIF C:&ADR=0,.B LCLA &N &N SETA &LENGTH AIF &N>=L:&ADR,.A &N SETA L:&ADR .A &LAB DC I1"&N" DC I1"L:SYSA&SYSCNT" SYSA&SYSCNT DC C"&ADR" DS &N-L:SYSA&SYSCNT MEXIT .B &LAB DC I1"&LENGTH" DC I1"0" DS &LENGTH MEXIT .C &LAB DC I1"L:SYSA&SYSCNT" DC I1"L:SYSA&SYSCNT" SYSA&SYSCNT DC C"&ADR" MEND MACRO &LAB DW &ADR &LAB DC I1"L:SYSA&SYSCNT" SYSA&SYSCNT DC C"&ADR" MEND MACRO &LAB INC2 &N1 LCLC &C &LAB ANOP AIF S:LONGA=1,.A REP #%00100000 .A &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.F &N1 AMID &N1,2,L:&N1-2 LDA (&N1) INC A STA (&N1) AGO .D .B AIF "&C"<>"[",.C LDA &N1 INC A STA &N1 AGO .D .C INC &N1 .D AIF S:LONGA=1,.E SEP #%00100000 .E MEXIT .F MNOTE "Missing closing '}'",16 MEND MACRO &LAB JCC &BP &LAB BCS *+5 BRL &BP MEND MACRO &LAB JCS &BP &LAB BCC *+5 BRL &BP MEND MACRO &LAB JEQ &BP &LAB BNE *+5 BRL &BP MEND MACRO &LAB JGE &BP &LAB BLT *+5 BRL &BP MEND MACRO &LAB JGT &BP &LAB BEQ *+7 BLT *+5 BRL &BP MEND MACRO &LAB JLE &BP &LAB BEQ *+4 BGE *+5 BRL &BP MEND MACRO &LAB JLT &BP &LAB BGE *+5 BRL &BP MEND MACRO &LAB JMI &BP &LAB BPL *+5 BRL &BP MEND MACRO &LAB JNE &BP &LAB BEQ *+5 BRL &BP MEND MACRO &LAB JPL &BP &LAB BMI *+5 BRL &BP MEND MACRO &LAB JVC &BP &LAB BVS *+5 BRL &BP MEND MACRO &LAB JVS &BP &LAB BVC *+5 BRL &BP MEND MACRO &LAB LA &AD1,&AD2 &LAB ANOP LCLA &L LCLB &LA AIF S:LONGA,.A REP #%00100000 LONGA ON &LA SETB 1 .A LDA #&AD2 &L SETA C:&AD1 .B STA &AD1(&L) &L SETA &L-1 AIF &L,^B AIF &LA=0,.D SEP #%00100000 LONGA OFF .D MEND MACRO &LAB LM &AD1,&AD2 &LAB ANOP LCLA &L LCLB &LA AIF .NOT.S:LONGA,.A SEP #%00100000 LONGA OFF &LA SETB 1 .A LDA &AD2 &L SETA C:&AD1 .B STA &AD1(&L) &L SETA &L-1 AIF &L,^B AIF &LA=0,.C REP #%00100000 LONGA ON .C MEND MACRO &LAB LONG &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB "&A"="M" &I SETB "&A"="I" AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.&M &I SETB ("&B"="I").OR.&I .A &LAB REP #&M*32+&I*16 AIF .NOT.&M,.B LONGA ON .B AIF .NOT.&I,.C LONGI ON .C MEND MACRO &LAB LSR2 &N1 LCLC &C &LAB ANOP AIF S:LONGA=1,.A REP #%00100000 .A &C AMID &N1,1,1 AIF "&C"<>"{",.B &C AMID &N1,L:&N1,1 AIF "&C"<>"}",.F &N1 AMID &N1,2,L:&N1-2 LDA (&N1) LSR A STA (&N1) AGO .D .B AIF "&C"<>"[",.C LDA &N1 LSR A STA &N1 AGO .D .C LSR &N1 .D AIF S:LONGA=1,.E SEP #%00100000 .E MEXIT .F MNOTE "Missing closing '}'",16 MEND MACRO &LAB MASL &ADR,&NUM &LAB ANOP LCLA &NM &NM SETA &NUM .TOP ASL &ADR &NM SETA &NM-1 AIF &NM>0,.TOP MEND MACRO &LAB MLSR &ADR,&NUM &LAB ANOP LCLA &NM &NM SETA &NUM .TOP LSR &ADR &NM SETA &NM-1 AIF &NM>0,.TOP MEND MACRO &LAB MOVE &AD1,&AD2,&LEN &LAB ANOP LCLB &LA LCLB &LI LCLC &C AIF C:&LEN,.A1 LCLC &LEN &LEN SETC #2 .A1 &LA SETB S:LONGA &LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&LA)+16*(.NOT.&LI) LONGA ON LONGI ON .A &C AMID &LEN,1,1 AIF "&C"<>"#",.D &C AMID &LEN,2,L:&LEN-1 AIF &C<>2,.D &C AMID &AD1,1,1 AIF "&C"<>"{",.B &AD1 AMID &AD1,2,L:&AD1-2 &AD1 SETC (&AD1) .B LDA &AD1 &C AMID &AD2,1,1 AIF "&C"<>"{",.C &AD2 AMID &AD2,2,L:&AD2-2 &AD2 SETC (&AD2) .C STA &AD2 AGO .G .D &C AMID &AD1,1,1 AIF "&C"="#",.F &C AMID &LEN,1,1 AIF "&C"<>"{",.E &LEN AMID &LEN,2,L:&LEN-2 &LEN SETC (&LEN) .E &C AMID &LEN,1,1 AIF "&C"="#",.E1 LDA &LEN DEC A AGO .E2 .E1 LDA &LEN-1 .E2 LDX #&AD1 LDY #&AD2 MVN &AD1,&AD2 AGO .G .F LDA &AD1 STA &AD2 LDA &LEN-1 LDX #&AD2 LDY #&AD2+1 MVN &AD2,&AD2 .G AIF (&LA+&LI)=2,.I SEP #32*(.NOT.&LA)+16*(.NOT.&LI) AIF &LA,.H LONGA OFF .H AIF &LI,.I LONGI OFF .I MEND MACRO &LAB NOTE &KEY,&TIME,&VOICE &LAB LDA &KEY LDX &TIME LDY &VOICE JSR ~NOTE MEND MACRO &LAB PREAD &PDL,&VAL &LAB SEC XCE 65816 OFF LDX &PDL JSR $FB1E AIF C:&VAL=0,.A STY &VAL .A 65816 ON CLC XCE AIF (S:LONGA+S:LONGI)=0,.B REP #32*S:LONGA+16*S:LONGI .B MEND MACRO &LAB RAM &READ,&WRITE,&BANK &LAB ANOP LCLB &LA AIF .NOT.S:LONGA,.A SEP #%00100000 LONGA OFF &LA SETB 1 .A AIF C:&READ>0,.B LCLC &READ &READ SETC RAM .B AIF C:&WRITE>0,.C LCLC &WRITE &WRITE SETC ON .C AIF C:&BANK>0,.D LCLC &BANK &BANK SETC 1 .D AIF "&READ"="RAM",.F AIF "&WRITE"="ON",.E LDA $C08A-(&BANK-1)*8 AGO .G .E LDA $C089-(&BANK-1)*8 LDA $C089-(&BANK-1)*8 AGO .G .F AIF "&WRITE"="ON",.G LDA $C088-(&BANK-1)*8 AGO .G .G LDA $C08B-(&BANK-1)*8 LDA $C08B-(&BANK-1)*8 AIF &LA=0,.H REP #%00100000 LONGA ON .H MEND MACRO &LAB RESTORE &LAB PLY PLX PLA MEND MACRO &LAB SAVE &LAB PHA PHX PHY MEND MACRO &LAB SEED &N1 &LAB ANOP LCLB &LA AIF S:LONGA,.A REP #%00100000 LONGA ON &LA SETB 1 .A DC R"~RANX" AIF C:&N1=0,.C LCLC &C &C AMID &N1,1,1 AIF "&C"<>"{",.B &N1 AMID &N1,2,L:&N1-2 &N1 SETC (&N1) .B LDA &N1 AGO .D .C LDA $4E .D JSR ~RANX2 AIF &LA=0,.E SEP #%00100000 LONGA OFF .E MEND MACRO &LAB SHORT &A,&B LCLB &I LCLB &M &A AMID &A,1,1 &M SETB "&A"="M" &I SETB "&A"="I" AIF C:&B=0,.A &B AMID &B,1,1 &M SETB ("&B"="M").OR.&M &I SETB ("&B"="I").OR.&I .A &LAB SEP #&M*32+&I*16 AIF .NOT.&M,.B LONGA OFF .B AIF .NOT.&I,.C LONGI OFF .C MEND MACRO &LAB SOFTCALL &SUB &LAB DC H"20" DC S"&SUB" MEND MACRO ~LOAD &L,&N LCLC &C &C AMID "&N",1,1 AIF "&C"<>"{",.A &C AMID "&N",L:&N,1 AIF "&C"<>"}",.F &N AMID "&N",2,L:&N-2 DC I1"16+&L",I4"&N" MEXIT .A AIF "&C"<>"[",.B &N AMID "&N",2,L:&N-2 DC I1"32+&L",I4"&N" MEXIT .B AIF "&C"<>"#",.E AIF &L=0,.D &N AMID "&N",2,L:&N-1 &C AMID "&N",1,1 AIF "&C"<>"'",.C LCLA &I &N AMID "&N",2,L:&N-2 &I SETA "&N" &N SETC &I .C AIF (&L<>2).OR.(&N>255),.C1 &L SETC 1 .C1 DC I1"48+&L",I&L"&N" MEXIT .D DC I1"48",2I1"L:~&SYSCNT" &N AMID "&N",3,L:&N-3 ~&SYSCNT DC C"&N" MEXIT .E DC I1"&L",I4"&N" MEXIT .F MNOTE "Missing closing '}'",16 MEND MACRO ~STORE &L,&N LCLC &C &C AMID &N,1,1 AIF "&C"<>"{",.A &C AMID &N,L:&N,1 AIF "&C"<>"}",.C &N AMID &N,2,L:&N-2 DC I1"144+&L",I4"&N" MEXIT .A AIF "&C"<>"[",.B &N AMID &N,2,L:&N-2 DC I1"160+&L",I4"&N" MEXIT .B DC I1"128+&L",I4"&N" MEXIT .C MNOTE "Missing closing '}'",16 MEND  #$%& )'(784.1B5΍ALINKASM65816ASMLASMLGASSEMBLECATCATALOGCCCHANGECMPLCMPLGCOMMANDSCOMPILECOMPRESSCOPYCREATECRUNCHDELETEDCOPYDISABLEDUMPOBJ EDIT ENABLEEXECFILETYPE HELPINIT LINKLINKEDMACGENMAKELIB NEWPEEKPREFIXPRODOSQUITRENAMERUNSETSHOWSWITCHSYSGENTEXTTYPEXREF/CPW/UTILITIES/CPW/LANGUAGES /CPW/SYSTEM/CPW/LIBRARIES/CPWHLY-C]  mm H V-t© éi 7ĩ c 7 q VhHKHYEAlm  © H Ⱥ B hL MONITORÎ¥%& ` 3©  © H ",$ #H +h%&)­* 8` ȱ C g Not Found.`%` 莒 ~I=XXΓ͒o? @ A © < = > © `89W<  < `D E D E `67X?  ? `D E H LhD E ``ȱ WL.XL.Y`D E `B < `hh r/<  %B B Y  `B , g Recursive Exec Files Not Allowed` © H Ⱥ B Yn/ Al`A©  CA© ©émĩLc Ĩ F gFile Not FoundL gIncompatible File Format` ɰ˩ © H Ⱥ έ = > < W8`  fF3%^_ Z © H Ⱥ LN ? j @ A L67X8`H)q ih`mmqυ ©  υ ©  `8` [E `L1 $Z8D9E6H7IFG8967!L`D8E9H6I7FGlGF )͖8(eLX3© é7ĩ c8``΅C mm0C 8e恱`C 8`.CONSOLE.PRINTERFȩ E `C E D hhixé Ġ.iÐL&ÙSȱÙSE D C RlE D l@‘ĈĨ//ȑČ8@m@@mĐŠ0`hhi l&96( 78 Z6V7W@67X 8` gPrinter Not Enabled C`H$  hH Uh`l68 : ; @mn.L LC 9 LC L LC  OL L gDevice Not AvailableL gCannot Input From Printer`8`9  FL LY ; Z$ L B ! B L [[@mggm\]^_g`acLbcL7dL7);m© L7mȹmm Ĩ L98mmL@m© L7 Ĩ L9dJ= ɰ JL  JL 7 q L7VL ,dn7 3© é΅7ĩ c Ĩ 3© éDž7ĩ cm  7 q L7VL ,d8 6m q V 5 6g 4L ɰͭ  0LQ m q m怢l L t© éՅ7ĩ c 7 q L7VL LINKEDLINKEREDITOR.ROOT%D E ` Lfȱ/ȱ/L\A©  0A© / <(8` g g Not Available` gPlace g g on line. ;E g-- Hit ESC to abort, any other key to continue. L\ C L\;¨3 ;`/MONITOR O"8   8` `HHHfg hhh8`  0$ 0΂`8Hh`$$`%PLȦ$L ?%$H%%P  ?LhL L( $LQN`N`LO$$$%L$ N $O$$``%%$%L "(/?U[ OO$PP% "` Í TP!`HHH%HP% "OJH N(h NU(T%h% "hhh`$%`_@)?KHHH$JUK(Thhh`  `0 LL$% JU ɍɠ_(Tƃզ / `L1) Q N `HHH$H%H% "(*)+% "'(*U'(*T%Pԩ$ Qh%h$ "hhh`OP`HHH$% Ȍ8 #0 hhh` 8 I  H I h` 80 NOL#HH 0xhh`B < L *`$JU(T` :LC8 :iАѠ C` C` l6é©ĥ ~=X¥Ðȑ8``HJJJh)8j`e…åå ~I=XX`e…åå ~XX`  ȹ`ˆ`[\Z,ȱ( ȱiZ`Z[ ie`hhiЅ©íJJJJ) ©âJJJJJJ )@P©âJJJJ)  )  Cll "!XX !© U% ! !!! !!­! % !I ! P% $ $$ORCA/HOST V4.1 A11 $ $$Copyright (C) June 1986 $ $$By The Byte Works, Incorporated P%  !ll! ORCA.HOST Y!`Ad!e!ʽe!/ʎe! V!`e! ORCA.SYSTEM 8$A[`8` " P%i P%i P% $$"""" P%"i P%i P% ""0 P%i P%i P% P% P%"i P%i P%" ""L! ""L! ' >#L! P%i P%i P% P%`""" k$ P%L!" ! P%L!"H"h#" $w$""L! Enter Date : DD-MMM-YYŅƹ k$ C$Ĺ)eŅŐ`i` #L#L#)L#$©$à) GiLp#$ .  #n*)Ȍ $$$$` P%i P%i P% P% $$ Invalid date`JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECa{i` Ņǥ*** eDžŊeȅ`L9#0:`8` $LP%8 $iАѠ P%` P%`O%hhK%iЅ©íM%JJJJM%) %©âN%JJJJJJ %M%)@P©âN%JJJJ) % H%M%)  P%O%llK% l6é©ĥ %=X¥Ðȑ8``e…åå %XX`HJJJh)8j`& &&  `  ` ȹ`ˆ`&&&,OK& i `& &`&& ie`ȱ( ȱi&`C6" $B"C" /'#M8}u K$ ) L!D"E" /'S+, )7(P0  ( @p 8 L"6"="0 %="0 D$F"G" /',) &H"I" /' D$L!)0I0hx H( * D$Щ ߭L"h )y 8'  )ɀ)4,- U JNT) L"LJ"K" /' 5"M)Fi/ 9"3 ?"@"A" <" iL X%"L "ΠΠҠ`M"r""j""k"*$ F$XePO!.QB}PBiBB}[ m# m# J Qڨ)̰m]d нȱ : ̀𩠙; iN O F U >Y SX ɘL_ W ^ Z V7 b L '0%N '8N JmN ) ʈ0  0ŠϠĠ͢Š͠͠ϠŠŠϠĠخ͠ ͍B B(8`YYZLYLYLY뿭` 8!@8` D$MNЩUMߩ  L 5   8 0 8  `0 / X&%.% L%&X%0`Šӭ𠰶ҭԠŠҬîʎ1DžϠ&8!HH)hh8L(&hJJJJJ &H&8H) x&(j21 h!hH h& +2詫21ō%$ &)L%12H)M0 h10200I20h2 '`Lq$12 `_&"L  <8# ȱ)ɀ  )& ` (Xp< @& )m&&.&' M&i  ``rȱȱȱȱ0]cȱeem)ȱ)ȱ))ȱ))ȱ) ') D( 'L3'`Lz( V(L' ' L3' 'L'8e` ,$`ee` `) () (` ( ( (`hh8`8`)))`})`e`H)hJJ(0JJ)` (< ( < *? ( < (? ( < (? ( <*? * **? *? *? ( < *? ( <-<ʆ>+=?BC8 é&'112`HB-9F 3"aɿ LLB Nϰ H  @h( L Lj  @`eLJCAB@=?<>=?<>CAB@?A` 1 L  <>`ڢF]PL8i m L   6< L  BLRAM' hLDLآ <B*IBGF08Lé'+8H <,``h(`@ڍL3hh@ihAiH(ؠȱ@JJJJq@)@#vȱ@Hȱ@Ah@C@c#e J) LL LJiB LJ) 4xhHHHHL(  ްƠx@BEOD Y ް(`( C)CJJJlB -`J,~@~@}J@` ߩ%S @ ~`E hhhߺ0 h ߐ( ߐ ߐ ߐ  0 HϭߍLпllllhh8` QT'P) ɺiL1u q)?cd r wq q  t `l@Hȱ@IzױHXAT\\ȱH ɯzȩ׍vx\5H)/@a)_vv .0 :A[8@`,vv\v{x׮{Бz` w L` @>)I3z8\].^/_ם`K8`@Nȱ@O@ <IiNȽבN)/ȩ/N`@[ WHJjjjPhA 'KI؍0JHi O`PC8` @ <3Nx@) ={ xxix{`0 O; Oٝ٘ 0 W,s0 O .H hȑNWȮtّNsW8`ٍvxّNvx0NN` G8`F@ 0 4 YLK8` I8`FHGH hGhF܌ բFܽܕF芝ܝ 밶 ܅I mIHHyHȘI Lܝ` @-@ 5@Юx׍)mxיʈ@;ȱ@-ȱ@79:0BC)5I0ܢܽ 3'* 7./FG ( Ll܅I mIH` >; r;0 HFG 밳 밨%܈" T)Ii)܍*܍'ܮ( 4 䭐 $H %HFFHGHG 됬`R8`ͬͭ)` H` Q'܅IHHЍ@`Y8U `VU W% WQ8`V܅I `Y܍Y Z8D`F` SlH)HFȍHG $%܍V&܍W!ܢ8* J8` L ܝ)I 'ܝ`8XiFG`X܅IH3H Y( Y )UvxȱHv`X8eHI rSB0 OٙٙFVʈ Zx`x8mx0]`,zy0H yhi PvȽvhOٍ0GFyx8yא^F_G  w$O0yx =01 E8`1݈00 O O0ʩ 谼 w谷`12)1`0O`ȎOi 0U`x)v8`v`O W nG &A)H Oܝʈh٭0٭)ܝ٭*ܝ٥F٥G٭'ܝ٭(ܝ`)َN N8ʈN` 0ٝ)i `st8`OR ZDEY lNOمFمG < Z0 FGLOY0 ٭E٭Dٽ8RS`H8`  ,YD E 8ZY` DE `OٽJJJJ`ZHOZhn)YNZjNZjNZj`NZ.b 9HgZ l;ZO٭d }*`NbYۙ۰ڙک cc`Z8` 9#bba a ``aE .E .E .E8b۰*JDb۩ ccOٰDE`OJJJJ;i lOd lOٍdc0 } O a`H8`c c`dOٍgyٍeifB0Hd0eFfGx h0`FG `ϩBxEDp0C ް(`(8`Pؑ@`M8`P8@fؐʈIP)Di8DD jLo LPةC8`؍T)@ yiP)Dj8DTyiJ j^ ؅F Le) +T%jJ(a PFإGؐ.` jJHIH IL%FHGI ҭjJijHIHB>IPؙJJ M: ;LoHIHI`JKJK`FHIG ( PȢ؝Kh؈JLi)eKM`P)` J DJXi $X0 XJFJL8`JGBJ F PFإG`BH FPFإG`,H PhHB؅F  ؅GxDEP؍0p0C ް(`(8` lLJ P ,"L lH P , P9ؙ` @ P8`K8`PQB8` P؈JJJJح;) ) )UЮ ЪGP.FPX $ ᭔ع+ؠh (HP  Ph8` Oٽ ٬Pؠ@`XUQQX (PQ U )8`)i п` H h)N$%Phkil LL L < L ( plJm )@pNJOK (iKKllii jjIJm k lJФ̭jJijHFIH pHIGpxKE ް((H hH h8`8k@ȭl@L(P8NhNO 8o ؍nhJLk`lRlʱLN1MOijMEKP/lMEKlL-L-oMn Oij,hpkeNNO(`JNKOPL (/ P L8 o MPؑJ`L@kȱ@lP `@Nȱ@OP`P؝hK}DIDؐ` \HؽK؝D \  \؝HD؈` P` H Fh)N@ '; L  ($ )bJRS O ) wH *hL )  )حjJijIEHIDHP؊ PLlElʱNLMOijMEKP%lMEKlL Oij,hk PheNNO "(` C  7 2jJDHIEHIP؊ sL;  ` AP HD ع HE ؙ؊ؠIhHIhH s iع `  عiعi` )؍0CGHFHBFG ުhFhG`@4|P͔ L @APi ׭|2` .P #Pع؍0 OO)`.@+|P Pi |8` L| )߹0 )p )@ y ) ȩ P؝0 방 FG P؍0؍1؝2 ؝- D) D P)حd l`H@h|`h`P`N8`   ) 'PȢ؝H@hHhP@ʈL" KIJHPȢhPhhi)jJn 8 ΂P ؍} ؍~ 4H8P} ع)JJJJP PȢ؝hI؈ (h(8H  h(8Hh(`Pؑ@`@Pȱ@ ` B@8ZRSO ZOٍSٍRٍ=Hٍ<8R0hS1JJJJ)@` %I -;) r 0@)N8` @LL =@ ȹOP8` iO` ם0 B )wx( ȹ`w8mwx8mx@8` G8`F w P;)@N8`)@J wטyרם)׍./ 밑w LȹL@ȅH@IL,z0` G U=RS OH.;)N 0 4.}/~)@LP8` 4~} ܩ l LOyٙ٭yٙ٩`K 9E.F/G 6%&N    ܮ `J HHP hh` 0 @ LL E[̂Tܝ ݝ0̂ȩF𸽐G  p 0` r ܅F݅G ` N Eͬ r 밽܅F݅G ` N* E% L`}~L~} ܍}ݍ~8`FHGH[ [ܙhGhF`@Bɼ>K@J5 -9X(K -XXKP تKo`V8`no` on -I9XX`)HJJJh`OeNeO࿰ -9XАO`@ȭ@` ON NJKO`HхhILhH),x8 (8` ԍ`@ABe (K""z9dP 'whIJK,-NOPQRSuHUSTON!' @   !"#$Ԡ͠ˠĠԠҠLKL`BLL ެެެެެެެެެެެެެެެ(C)APPLE'83xLLM Mh@8nЍLޭ 0J @,,LNP׽8H  ): e: y8鰕:Jjjj<)yאi8i;i(*=>hPם8`;Zx3QZYXXWV[HEVhEhH)IWHPHHHAHHHLaVEWLӿ ְ& .Vӈ  JJJJH 8h Ei 8EX`'8`jӍWӥC)p> pӥCYӍY 轊( ( ӈBV ( ӭp0 \BkJ ՠ@iӦ> Ӑi'j:ZH i@ioZZH h ѐȭnWǥBJ Ӱ8XӦ>` Ր+>*L o % ԽYӍZӭoӝY 3Ѡ шNZ`rZLkӭZӍq8r7IZӐiZkӐk 8 ѹs ӭq ѹ| kн Z)*>>` @ $(,048<@DHLPTX\`dh 0ުlptx| 0($ p,&"op8`kkV꽌ɪɖxlӽ*kӽ-kәmMlӈ 꽌ɪ`8` ZԍsԍԍԍԥDEԌ8TԌ8WpԌqԠ 7I꽌ɪ꽌ɭ蠪:љVE:8`]ѾV]H)]ѾV]ҙ)]ѾT]ҙ)] >8hUD` ԝY`> Hh݌(`HCJJJJ)*h`8LխӅ:HhHh Ո թ թ ՘VYҪҦ>:Y)Ң`;R?AJ;<ȰY)Ң`Y?)Ң`ȐҰ ;HhHh=Ң`Hh `Hh`DEiȍ0֌18V%֌&8V֌֠)HV)hH)hHIhդD?DRIDQD)҅; ?JDQD]ՎՎՎ`MY pӭY)p  ӭp`C)`BFGV 8`` XʩXύX 9 X E %  % ɍRH hɛɘɉɈ $ Lf :Lfې)ɮ۰ɺ' Lf  : X m % $ɛ$ɘɉ ɈL :Lɍ)ې)ɮ۰ɺH h 'L  LL L)'L L S'J  (,(L $ʩ $$ $L `ީ %  &@DEF   %LҠؠӠ΢ϠԩҠŠƠԠԠŠӢɯϠҠůȠԠĠ  0HHHH " hhhhhh .hh8`JIMJAYKERRYCortland Programmer's Workshop V4.1 A9 6 June 1986 -------------------------------------------------------------------------------- All Programs & Source: Copyright 1985, 1986 By the Byte Works, Inc. (Based on ORCA/M V4.0b) -------------------------------------------------------------------------------- Hardware Required: Cortland 1 Meg Zeus Card 3.5" Disk drive -------------------------------------------------------------------------------- Table of Files Note: Files with version numbers of 4.0 have not been modified. They are identical to the current commercial version of ORCA/M. Files marked with an asterisk will not be in the commercial version of the Cortland Programmer's Workshop. File name Version Last Update --------- ------- ----------- PRODOS V1.1.1 ORCA.SYSTEM V4.1 Phase 1 B4 30 May 86 ORCA.HOST V4.1 Phase 1 B4 30 May 86 SYSTEM/ MONITOR V4.1 Phase 1 B3 30 May 86 EDITOR V4.1 Phase 3 B2 9 May 86 SYSEMAC V4.1 Phase 3 B1 14 Jan 86 SYSTABS V4.1 Phase 3 B1 14 Jan 86 LANGUAGES/ ASM65816 V4.1 Phase 3 D5 30 May 86 LINKER * V4.1 Phase 3 B3 30 May 86 CC * 2.0 (65816 version) LINKED V4.1 Phase 3 B5 30 May 86 UTILITY/ HELP/ (help files for commands) 4.0b COMMANDS 4.0 COMPRESS 4.0a CRUNCH V4.1 Phase 3 B2 30 May 86 DCOPY 4.0a DISASM 4.0 DUMPOBJ 4.1 Phase 3 B3 9 May 86 INIT V4.1 Phase 1 B1 30 May 86 MACGEN V4.1 Phase 1 B2 30 May 86 MAKELIB V4.1 Phase 3 B1 14 Jul 86 PEEK V4.1 Phase 1 B1 14 Jan 86 SET * V4.1 Phase 1 B1 20 May 86 SWITCH 4.0a SYSGEN 4.0 XREF V4.1 Phase 1 B2 30 May 86 XREF.ASM65816 V4.1 Phase 1 B2 30 May 86 INIT.BOOT from ProDOS V1.1.1 LIBRARIES/ A..CLIB.A * V4.1 Phase 3 B1 17 Mar 86 A..PCODE.A * V4.1 Phase 3 B1 17 Mar 86 A816.MSCN.A V4.1 Phase 2 B1 14 Jan 86 B816.IO.A V4.1 Phase 2 B1 14 Jan 86 C816.INT2.A V4.1 Phase 2 B1 14 Jan 86 D816.INT4.A V4.1 Phase 2 B1 14 Jan 86 E816.INT8.A V4.1 Phase 2 B1 14 Jan 86 H816.MSC.A V4.1 Phase 2 B1 14 Jan 86 MACROS/ M65816.I.O V4.1 Phase 2 B1 14 Jan 86 M65816.INT2MATH V4.1 Phase 2 B1 14 Jan 86 M65816.LONGMATH V4.1 Phase 2 B1 14 Jan 86 M65816.MSC V4.1 Phase 2 B1 14 Jan 86 LIB.SOURCE/ COMMON V4.1 Phase 2 B1 14 Jan 86 I2 V4.1 Phase 2 B1 14 Jan 86 I2.MACROS V4.1 Phase 2 B1 14 Jan 86 I4 V4.1 Phase 2 B1 14 Jan 86 I8 V4.1 Phase 2 B1 14 Jan 86 I8.MACROS V4.1 Phase 2 B1 14 Jan 86 IO V4.1 Phase 2 B1 14 Jan 86 IO.1 V4.1 Phase 2 B1 14 Jan 86 IO.MACROS V4.1 Phase 2 B1 14 Jan 86 MS V4.1 Phase 2 B1 14 Jan 86 MS.MACROS V4.1 Phase 2 B1 14 Jan 86 MSN V4.1 Phase 2 B1 14 Jan 86 MSN.MACROS V4.1 Phase 2 B1 14 Jan 86 SMALL.C C.MACROS * V4.0a GRAB.BAG JOIN * S.G 6 Mar 86 COMPARE * S.G 6 Mar 86 FORMAT * S.G 6 Mar 86 DIV * S.G 6 Mar 86 APPEND * S.G 6 Mar 86 MAKE.REFS * S.G 6 Mar 86 DISABLE.RAM * V4.1 Phase 2 B1 6 Mar 86 -------------------------------------------------------------------------------- Change History -------------------------------------------------------------------------------- V1.0 A1 14 Jan 86 ------------------ Initial Release Editor: Known Problems as of January 14, 1986 1) A sophisticated 'line edit' routine will be incorporated into the get search/replace string command (we are not sure this will be done before the initial seeding). V1.0 A2 3 Feb 86 ----------------- ORCA.HOST: 1) An old version of ORCA.HOST was put on the initial release disk. It could not handle file output re-direction or multiple exec assemblies. The disk has now been updated with the latest version of ORCA.HOST. Subroutine Libraries: 1) A problem with converting from two or four byte integer to string has been found and corrected. The libraries have been tested and found to work fine on the Cortland. Editor: There are now two versions of the editor. One is the updated former 65802 Phase 2 editor and the new one is the 65816 Phase 3 editor. The Phase 3 editor, as all phase 3 modules, require a Cortland computer with at minimum of 256K bytes of memory. The phase 3 editor is classified developmental (not because of reliability, but) because it is using fixed memory buffers, and still uses standard ProDOS. Once the memory manager and a usable version of ProDOS 16 is available the editor will utilize them. Currently, the edit buffer is located in bank 1 and is 62K bytes long. Also the undo stack has been enlarged to 16K bytes. Summary of changes: (affects both versions of the editor) 1) The predefined macros have been updated to work with the new command syntax. In particular, these have been added: Closed-Apple-L search down again Closed-Apple-K search up again Closed-Apple-X cut one line Closed-Apple-V paste last cut 2) Wrap mode has been implemented. The systabs file has been changed to incorporate wrap flags. 3) On search up/down if the string is not found, the horizontal cursor position was not restored properly. This has now been corrected. 4) Open apple 9 now moves the cursor one character past the last visible character in the file. This is interperted as the last character in the file (i.e. the return character on the last line). 5) All escape mode keys that are not enabled now toggle the escape mode thus returning to the edit mode. 6) Insert mode's split line routine did not properly handle extra blank characters at the end of a line. This has now been corrected. 7) Return mode was not recognized by insert mode. This has now been corrected. 8) It was not possible to save a file if it already existed but was not of type SRC or TXT. It is now possible to overwrite files that are not of type SRC or TXT. 9) The help command did not save page changes before executing. This has now been corrected. 10) Delete character, clear to end of line, delete word, delete character right were not handling extra blanks at the end of the line, thus leaving unseen space characters in an apparently blank line, causing he the assembler problems. This has now been corrected. 11) Cut and Copy did not respect mode upon return. This has now been corrected. 12) CTRL-F occasionaly deleted entire line. This has now been corrected. 13) Automatic replace set character in col 1 to blank. This has now been corrected. 14) Return has been implemented as an escape mode command. This was necessary in order to preserve the way CUT and COPY work. If the select mode is active and were selecting in the escape mode, then the user should be able to use return from the escape mode to exit the select mode and indicate he selected the text. 15) Editor does not enter into correct file position upon terminal error from the assembler. This has now been corrected. 16) Tab in the insert mode now inserts spaces. 17) Cursor position is not restored upon exit from macro entry. This has now been corrected. 18) SPACE on blank line in col 1 changes the length of the line, thus saving extra blanks on a line. This has now been corrected. 19) Undo of delete character in insert mode does not work correctly when lines have to be split. This has now been corrected. 20) Select mode does not properly display last line of file is page is changed. This has now been corrected. LINKED: 1) Long segment op_code is not produced by advanced linker. This has now been corrected. 2) Current segment number is not updated in segment header. This has now been corrected. 3) Version number for load file is now 1. 4) Default load address is now $10000. 5) Signature title for advanced linker now reflects update. 6) Linked ORG command now overides input object module org's. V1.0 A3 6 Mar 86 ----------------- ORCA.SYSTEM: 1) Signature screen now reflects current system version id. ORCA.HOST: 1) $816 is a pointer to the internal version string for ORCA/HOST. The version string is guaranteed to be in the first 512 bytes of the file, therefore; it can easily be identified by using PEEK to look at the first block of the file. Currently the id string is '4.1B2'. 2) The exec file buffer is released to application programs. This gives the assembler, linker, ect.., an extra 1k of memory. 3) Command table has been expanded to include: a) ALINK - execute advanced linker (same as compile) b) CC - installed as a language c) BLINKED - installed as a language d) LINKED - installed as a language 4) File output redirection to a file that ProDOS cannot open is now handled by flaging a 'File not found' error and aborting. It is no longer possible to write over an existing open file. 5) More space in command table (~120 bytes). Code was optimized. LINKER.816: 1) This is the large memory system linker. This linker requires a minimally configured (256k) Cortland. There is no visible difference to the user. EDITOR/EDITOR.816: 1) If a line is blanked out using the space bar, the editor will now create a correct blank line and not leave any extra spaces in the line. This will solve the problem that the assmebler generates a 'missing operand error' on seemingly blank lines. Before, there were many places in the editor that we're causing this. I believe I got them all corrected and this is the last one. 2) Upon entry to the editor via the assembler on a terminal assembly error, the input ORG location is now checked so it is not possible to display past the edit buffer and crash. If this happens, the editor will prompt with a warning message and go to the begining of the file. It is assumed that the input to the editor is valid and once the problem is fixed with the assembler this warning message should never appear. This is merely an extra caution to prevent the editor from a fatal crash, and to insure that other applications that use this facility supply correct input to the editor. 3) The menu screen now displays the current editor version number. 4) The editors line input routine (used by search and replace) has been rewritten. It now supports the following commands: left arrow - move the cursor left right arrow - move the cursor right return - exit and save changes OA_> / OA_. - goto end of line OA_< / OA_, - goto begining of line OA_Y / CTRL_Y - delete to end of line delete - delete character escape - exit without saving changes OA_Z / CTRL_Z - undo OA_E / CTRL_E - toggle insert/overstrike mode NOTE: These are not re-programable. <65816 VERSION ONLY> 5) The editor now displays special characters ($01-$1F) in inverse. There is a problem with $00, this will be corrected in the next release. 6) The 65816 edit buffer is fixed at $10800 - $1C000. It is no longer possible to trigger I/O switches in bank 1. <65816 VERSION ONLY> 7) The 65816 editor does not disconnect /RAM. If you are using this editor you must disable /RAM or strange things can happen if the work prefix is set to /RAM and you push some text. In the GRAB.BAG directory we included a program to disconnect /RAM. The best way to do this is to create a login exec file on the system that will run this program when the system is booted. Eventually, you will be able to control /RAM usage with the control panel, and the memory manager will know about /RAM, and the editor will use the memory manager to allocate space, so this won't be a problem. But for now this isn't the case so BE AWARE!! . <65816 VERSION ONLY> 8) If the editor cannot sucessfully write out selected text to the SYSTEMP file the text will not be deleted from the text buffer during a CUT. 9) The 65816 editor will no longer 'thrash' if it cannot sucessfully write out selected text to the SYSTEMP file. <65816 VERSION ONLY> GRAB.BAG 1) Grab bag consists of utilities written by Steve Glass at Apple. There is a lot of useful stuff. They have been included on this alpha disk by request. These routines get thier input from the command line and work with I/O redirection and exec files. They do not support devices such as .D1, .D2, ect... They take device input in the slot/drive format. These routines will not be a part of the final release, so they have not been included in the standard command table. You must manually install each utility as desired. ASM6502/ASM65816 1) The PEA instruction now works correctly with operands that include bit shifts. For example, to push a four byte address, PEA ADDR PEA ADDR|-16 -------------------------------------------------------------------------------- NOTE: This is the last update to support different memory versions of the same program. All future applications will be written for the Cortland and will make use of Cortland ROMs. For those developing on an Apple //e, this is the last version of CPW that will work on an 802 equiped Apple //e. -------------------------------------------------------------------------------- V1.0 A4 17 Mar 86 ------------------ CC Small C now requires a Cortland. Seperate banks are used for code, heap area, and stack. (Note: this will not be in the final release, but was currently necessary to upgrade LINKED to Phase 3 specs.). Along with the compiler, the libraries, A..PCODE.A, and A..CLIB.A have been upgraded. ASM65816, ASM6502: Runs in native mode. (Phase 2 upgrade.) NON-65816 BASED TOOLS Removed. If needed, use the older versions from V1.0 A3. LINKED 1) Internal version of Small C was upgraded to Phase 3 specs (with the exception of the memory manager and ProDOS 16). LINKED now requires a Cortland Computer. 2) Signiture screen now reflect latest version 'Phase 3 D1'. This is a developmental version. 3) The reloc entries (number and ofset) have been reversed. They now correspond the to Object Module ERS discription. Note: the loader will also have to be changed. 4) Code banksize and data banksize are now correct. The code bank size and the data bank size are the minimum size encountered (except 0) while processing input segments. 5) A header 'sanity check' has now been installed LINKED. This will insure that all reasonable checks are made on header values before the segment is processed by LINKED. If an error occurs an error will be flaged and the linker will ignore that segment. This means that the linker will continue with pass1, but due to the error the linker will not try to do pass2. 6) LINKED now checks to make sure that code segments do not exceed the code bank size. 7) LINKED now checks to make sure that data segments do not exceed the data bank size. 8) ORG's in the linker command language now overrides internal ORG's that the assembler may have generated. 9) Long segment opcode is now correct for short programs. 10) Length value in segment header is correct. This value is not always the same value as the long segment opcode. See 11. 11) Reserved space is passed on the to load module if a reserved space is used on the last input segment processed. This is something that the loader must handle. This means that the length reflects the total size of the segment and includes the reserved space. The long segment opcode does not include the reserved space. 12) Bit shift operator is now correct. -------------------------------------------------------------------------------- V4.1 A6 9 May 86 ------------------ GENERAL 1) The ORCA.SYSTEM source code is now supplied on this disk. The reasoning is that Apple can change the splash screen version number as it wishes. There is a contractural requirement that the Byte Works copyright notice remain intact. 2) CAUTION: The object module format has changed. All parts of this system that deal with object modules have been upgraded to handle the new object module format. YOU CANNOT MIX OBJECT MODULE FORMATS!! Even though the format has changed the version number in the header is still the same (1). This means that there is no way to detect which object module is used. Therefore, it is YOUR responsibility to see that the two are not mixed. The best way to do this is to GET RID OF ALL existing object modules you have and generate them again with the new assembler. 3) Deleted SCAN and associated help file. This has now been replaced by DUMPOBJ. 4) Deleted CRUNCH and associated help file. This has not yet been updated to handle new object module format. It will be added once this is done. ORCA.SYSTEM 1) Splash screen now displays "V4.1 A6" release of the system. How did we get from V1.0 to V4.1?? Well, we never should have used 1.0 as a system version number. This is still a decendent of the ORCA/M development system and as such it should reflect the next version of that system. ORCA.HOST 1) CAT is now an alias for catalog. 2) SCAN has been removed from the command table. 3) CRUNCH has been temporarily removed from the command table. 4) DUMPOBJ has been installed in the command table. 5) When ORCA.HOST tries to load the linker it first checks to see if LINKER is not available (file named LINKER is not in language prefix), then it calls LINKED in system linker fasion. MONITOR 1) Acess flags are now colunmized when displayed. 2) Trailing slash is now allowed in prefix command. LINKER 1) System linker has been translated in native 65816 code. 2) System linker now reads object modules into memory instead of using character reads from Prodos. 3) If a keep file is specified then the output is buffered into memory instead of doing character writes from Prodos. Because of the above changes the system linker is slightly more than TWICE AS FAST. Actually it takes ~48% of the previous time to link the file. Constraints: (1 meg card) Symbol Table : 46k Maximum size of keep file : 64k Maximum size of a single object module : 896k 4) System linker has been updated to handle new object module format. EDITOR 1) Now possible to enter ~ in GETLINE routine used by search and replace. DUMPOBJ 1) Added to system. All known bugs as of May 9 1986 have been removed. LINKED 1) Updated to handle new object module format. 2) Exportable label support has been added. 3) Symbol table reworked. 4) Segment directive now accepts file name. 5) Segment directive used after the keep directive and before any bytes have been generated will assign a loadfile name to the first segment. 6) Command line parameters are now recognized. 7) Command line parameters have precedence over source file directives. 8) Upgraded to support system linker functions. Now it is possible to call LINKED the same way ORCA.HOST now calls the system linker. LINKED will emulate the functions of the current system linker. 9) /SCAN qualifier can now be used in select command. Now it is not necessary to specify the exact object file and instead you can specify a family of object modules. 10) Segment numbers now begin at 1. 11) Re-worked error trapping on expressions involving relocatable operands. 12) Segment directive now places loadfile name in load module. 13) Segment directive on pass2 breaks listing and indicates new segment being processed. 14) Any command that sets the compile flag (ie: ASSEMBLE, ASML, ASMLG) will sucessfully invoke LINKED with source file input. The recomended command to use is ALINK, which is the same as the ASSEMBLE command. LIBRARIES 1) Libraries have been re-assembled using the new assembler. They are in the new object module format and will not work with the previous system linker or LINKED. ASM65816 1) Local and global symbol tables are 128K long. 2) CASE and OBJCASE directives allow control of case sensitivity. See the ERS for details. 3) Labels, symbolic parameters, and sequence symbols are now significant up to 255 characters. This is especially tricky since the assembler only handles 80 character source lines - which tells you that we have only tested the ability up to 80 characters. Induction, and all that. 4) AINPUT string buffer is now 64K. 5) .B, .C, etc are now deleted automatically on a full assembly. 6) Command line inputs for LIST, SYMBOL and KEEP now override source file directives. 7) PRIVATE and PRIVDATA can be used to generate private code and data segments. See the ERS for details. 8) The max number of macros that can be handled in a single macro file is now 3640. 9) Spaces are legal at the end of lines. 10) Source and macro files are limited to 64K. This limit is temporary - it will be lifted when we start using the memory manager. -------------------------------------------------------------------------------- V4.1 A7 20 May 86 ------------------ ASM65816 V4.1 PHASE 3 D4 1) V4.1 D3 had a bug in the COPY directive - it has been corrected. 2) V4.1 D3 would not return to the proper spot in the source file if a terminal error occurred during macro expansion. The bug has been corrected. 3) The &SYSOPR parameter in a macro definition was not handled properly in V4.1 D3. The bug has been corrected. LINKED 1) Linker now supports source level segmentation. SET 1) The SET utility has been added. You can now set the ORCA prefixes from the command line. Type HELP SET for more info. -------------------------------------------------------------------------------- V4.1 A8 30 May 86 ------------------ ORCA.HOST 1) Command table updated. MONITOR 1) FILETYPE command added. See help file or ERS. MACGEN 1) All parameters - the program to scan, the output file, and the files to search - can now be placed on the command line. 2) The output file name can also be used as an input file, allowing easier updating of an existing macro file. 3) Recognizes the new PRIVATE and PRIVDATA directives. XREF 1) Recognizes the new PRIVATE and PRIVDATA directives. CRUNCH 1) Updated to work with the latest object module format. INIT 1) Now works with all disks that support a format call - i.e., 3.5" and ProFile. ASM65816 1) Source buffer is 192K long. 2) A bug in partial assemblies introduced in V4.1 D3 has been removed. 3) Private labels are now flagged explicitly if they appear in a private segment. 4) If an assembly is aborted with a partially complete object module, the object module is now deleted. 5) Expressions involving external and local labels (including *) can now be used as the operand to an EQU or GEQU. LINKER 1) Input buffer has been moved away from $20000. Now it is possible to use the system without destroying the initial tools work area allocated by the memory manager at boot time. LINKED 1) The RELEXPR opcode is evaluated correctly. 2) Multiple addressing errors were caused by not handling GEQU and EQU correctly. This is now fixed. 3) Invalid bank errors caused by using ORG's is fixed. 4) Multiple keep error is flaged if the linked source contains a keep command and the assembler or language had passed an assigned keep name in the get_linfo call. This is only the case if the assembler or language assigned a name from it's source file, not if the keep name was passed on the command line. 5) PRIVATE and PRIVDATA are now checked for independently of the status of the code or data segment. 6) It is no longer necessary that the end of file marker be on a block boundry. Linked can now handle a partially filled block as the last block of an object module. -------------------------------------------------------------------------------- V4.1 A9 6 June 86 ------------------ MACGEN 1) Bug fixed in long input lines. LINKER 1) Supports $F3 op code (JSL). LINKED 1) Updated interseg table entries to match latest ERS. 2) Installed dynamic segment jump table. 3) Library scan facility corrected. 4) Prints commands before action is taken, not after. 5) Math on RELOC operators is more flexible - two local symbols can now be subtracted. 6) PRIVATE and PRIVDATA are now fully supported. 7) SELECT now supports a /num option to set the kind field. 8) COPY and APPEND now check language number. DUMPOBJ 1) Handles new interseg op codes. 2) Kind field is now correctly listed. EDITOR 1) GETLINE routine is now scriptable for editor macros. (I.E. closed apple L works again.) 2) Files that are even block boundaries will now save correctly. ASM65816 1) Now generates $F3 object module op code for JSL. LIBRARIES 1) Reassembled so that they use the $F3 op code. -------------------------------------------------------------------------------- V4.1 A11 14 July 86 -------------------- HELP FILES 1. Spelling corrected. 2. Missing files added. MACROS 1. Comment changes to M65816 in M65816.MSC. 2. SEED macro fixed. 3. NOTE macro removed - it depends on the speed of the CPU! ASM65816 1. Listing files are now identical to the output sent to the printer, form feeds and all. This makes it easier to dump to the printer, but dumping the file to the CRT will look strange. 2. The data and code bank size fields have been merged. 3. A data field is now required after the type on a DC directive. For example, DC I is no longer allowed, you must actually put something there. 4. The assembler now defaults to LIST OFF SYMBOL OFF. 5. The source code buffer is now 256K and the local symbol table 64K. 6. Coding too many parameters to a macro is now caught as an error. 7. The .A file is no longer deleted on a partial assembly of the first segment. 8. The directive DC I8'1' was producting a negative number. The problem has been corrected. 9. In 65816 mode, the assembler no longer switches from direct page to absolute addressing if the direct page addressingmode is not available. LIBRARIES 1. Reassembled with the new assembler. 2. All subroutines that use local data have been corrected to work regardless of the input data bank register. 3. Libraries are included in both the old format (for use with the binary linker) and the new format (for use with LINKED). MACGEN 1. Now accepts lowercase characters for wildcard searches. SMALL.Cvg+'  '(C.MACROSZ AA&README,, MACRO ldci &val lcla &n lclc &c &c amid &val,1,1 &n asearch 0123456789-,&c,1 aif &n=0,.c aif (&val<32768).OR.(&val>-32769),.d dc h'58',i4'&val' dc r'syscldcil' mexit .d aif &val<256,.a .c dc h'21',i'&val' dc r'syscldciw' mexit .a aif &val<$20,.b dc h'20',i1'&val' dc r'syscldcib' mexit .b dc i1'&val' dc r'syscldci' mend MACRO cup &n,&sub dc h'2d',i1'&n',a'&sub' dc r'sysccupbw' mend MACRO mst dc h'2e' dc r'syscmst' mend MACRO lao &disp aif &disp<256,.a dc h'23',a'&disp' dc r'sysclaow' mexit .a dc h'22',i1'&disp' dc r'sysclaob' mend MACRO popi dc h'2c' dc r'syscpopi' mend MACRO indi dc h'25' dc r'syscindi' mend MACRO fjp &dest dc h'34',a'&dest' dc r'syscfjpw' mend MACRO adi dc h'35' dc r'syscadi' mend MACRO ujp &dest dc h'33',a'&dest' dc r'syscujpw' mend MACRO ret dc h'32' mend MACRO ldoi &id dc h'29',a'&id' dc r'syscldoiw' mend MACRO shl dc h'3e' dc r'syscshl' mend MACRO stoi dc h'51' dc r'syscstoi' mend MACRO eql dc h'42' dc r'sysceql' mend MACRO indl dc h'59' dc r'syscindl' mend MACRO adr &id dc a'&id' mend MACRO ent &disp aif &disp<256,.a dc h'31',i'&disp' dc r'syscentw' mexit .a aif &disp=0,.b dc h'30',i1'&disp' dc r'syscentb' .b mend MACRO indc dc h'24' dc r'syscindc' mend MACRO sroi &id dc h'53',a'&id' dc r'syscsroiw' mend MACRO not dc h'4c' dc r'syscnot' mend MACRO stol dc h'5b' dc r'syscstol' mend MACRO inci dc h'40' dc r'syscinci' mend MACRO croi &id dc h'2b',a'&id' dc r'sysccroiw' mend MACRO cpoi dc h'27' dc r'sysccpoc' mend MACRO deci dc h'41' dc r'syscdeci' mend MACRO neq dc h'43' dc r'syscneq' mend MACRO stoc dc h'52' dc r'syscstoc' mend MACRO land dc h'4f' dc r'sysclnd' mend MACRO les dc h'44' dc r'syscles' mend MACRO sbi dc h'36' dc r'syscsbi' mend MACRO andi dc h'3c' dc r'syscandi' mend MACRO ior dc h'3a' dc r'syscior' mend MACRO cpoc dc h'26' dc r'sysccpoc' mend MACRO geq dc h'47' dc r'syscgeq' mend MACRO cpol dc h'56' dc r'sysccpol' mend MACRO lor dc h'4e' dc r'sysclnd' mend MACRO mpi dc h'37' dc r'syscmpi' mend MACRO xjp dc h'55' dc r'syscxjp' mend MACRO dvi dc h'38' dc r'syscdvi' mend MACRO ngi dc h'3f' dc r'syscngi' mend MACRO shr dc h'3d' dc r'syscshr' mend MACRO uge dc h'4b' dc r'syscuge' mend MACRO leq dc h'46' dc r'syscleq' mend MACRO mod dc h'39' dc r'syscmod' mend MACRO ult dc h'48' dc r'syscult' mend MACRO croc &id dc h'2a',a'&id' dc r'sysccrocw' mend MACRO grt dc h'45' dc r'syscgrt' mend MACRO ldoc &id dc h'28',a'&id' dc r'syscldocw' mend MACRO ule dc h'4a' dc r'syscule' mend MACRO ugt dc h'49' dc r'syscugt' mend MACRO xor dc h'3b' dc r'syscxor' mend MACRO ocp dc h'4d' dc r'syscocp' mend MACRO tjp &dest dc h'50',a'&dest' dc r'sysctjpw' mend MACRO sroc &id dc h'54',a'&id' dc r'syscsrocw' mend MACRO crol &id dc h'57',a'&id' dc r'sysccrolw' mend MACRO ldol &id dc h'5a',a'&id' dc r'syscldolw' mend MACRO srol &id dc h'5c',a'&id' dc r'syscsrolw' mend MACRO init jmp syspcode mend Small-C has been updated to include support for the 65802. The current version only supports P-code - future versions will support native code. Small-C is needed to compile some of the programs in the Cortland Development System. It is not a deliverable item, so it should not be sent to developers or tested. This is a list of the 65816 Small C Libraries included on in this version on Small-C. They are contained in the library file A..CLIB.A on the library prefix. For descriptions of these functions, see Harbison & Steele. CALLOC ISSPACE CFREE ISUPPER FCLOSE ISXDIGIT FGETC MALLOC FOPEN PUTCHAR FPUTC STRCMP FREE STRCPY ISALNUM STRLEN ISALPHA STRNCAT ISCSYM STRNCMP ISCSYMF TOINT ISDIGIT TOUPPER SYSTEMvg+'  '&EDITOR9* *'MONITOR 0<9 9'SYSEMAC: BB'SYSTABSBR==  >30 Requires Cortland Computer8"WLF : ]6 # O"~"8 w"Copyright 1985_By The Byte Works, Inc._Version 4.1P2B1 h".CONSOLE #$$S%%%%)&B&`&}&&&&&t''(q(()))))3* ,y...?/0$0i0v00001w111+22p(///Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/Y/!!"" $= G F WFP/U wGn A #El >N!iP)ɀ %ݪ) ZT#z #˭"`| ~ݼ!! ]E P ":l!F"8 E"0)| ;p~edd J"'"N"L" \("*"8 M"0)MO" i;]deX8 &"0)&\ Z$$ ,":Tm,"LH I5h jA8 0) G N #E n@8 K"0`""X`"`| ~ݼ!8!~i v@H`e~bih8 #P| ~! `P %5 u5 :Ln@"`| !$~ ! ~ `ȗ` ` n@l u5L:"` 6 I"L#E ]E ;l" O 7GLFL#E ]E s6l" O 7GLFL#E"`n HlH S%hlhH~ | ݼ!!h ` H E &h)  %5LS ]El ;" O 7GLFL#E ]El s6" O 7GLFL#El||l" OL7G|L)&~0l~" OLF~~P~~~l" OLFlll||l" OL7GLB&"` 6 I > n@" #EL6"`l ~4l }& v@`e~bi #Pl ' `n1|d) H v@  #P 5h `""`"| !I~ECH޼!" v@`e~bi #Ph~ ȷ`` n@lЮ| ! `P %5 u5L:"` 6 > n@" #EL6""`" ]E P| ;dl ;8d ."i v@XeZi  #Pd 6 n@ NL#E`"`| !H~`) -`)  +2h~(`) Ȁh~`) Ȁl"i v@`e~bil #PL'`"` ]E "X"Xi "Xi "X2)$""No buffers available for help file"W"Xi "Xi "X)Use RETURN to exit"W8 0)) hL#~" OLF| )L7G| !PP~" OLF| )L7G"` ]E P| ;l  i; 23  l n@ NL#E"` ]Ed d R 0 b L4J ) 8  i ƅ :A[8A 8 0 Jer8 i"Xi "Xi "X"X "X"X"Xi "Xi "Xd8 0) a }ߩ +L+b0 g8 01"XOi "Xi "X EL +"X "X"XL + b0 LC*}C +  +L +~  +`) i@H"Xh"X"X`"` ]E Z> ]-&,Enter selection: "W >N :RhL#S SdhN4 ]- @ ,"Xi "Xi "X"XL,L; -P ]- @o ,"Xi "Xi "X 0;hL#E - "Xh`"XL,S"8 R"0)@DV")ɰ72JH ]-"Xi "Xi "X"Xh jAL-@ T8`"Xi "Xi "X "X`  "X"Xi "Xi "X-Hit ESC to continue."W"X"X >N ]-`h ]-8` ]-"X .About to lose changes."W"X;. Are you sure? "W"X >N) :YN "X ]-`"! P O 8K 0 BM G!L#E"! P O 8K 91 BM G!L#E"` ]E P| ; 23)   6 n@ NL#E"`dl)Hl "oXPlhelPl >N AתhllL#"h8`nLD `& A3~L: ]E 5fd $=8!8Hdd!00.dJf"oXJJ"oXJe ;h @ L7d|d~" O 7GLFL#E| |" OL7GL%| d|" OL7GL%~0)~lȄ~" OLF~).P)lOHn 8~l S%h~" OLF"pIp`"h`P/U /UP/VPLwG"`nInLALA" !I!`"` ]E P P N G :`| ;| ~ݼ!!edd 23ddf = 468` N #ELP`"` ]E P P N G :`| ;| ~ݼ!!edd 23dd  = 468` N #ELP`"~)`HH^H  "X~i "Xi "X"Xh"X"XL:"`"I"LwG"` ]Ev) 6 6 6:LQ:LPQ:LQ:LQ:LQ:LjR P| ;d Ne~`~lH &hl )ڈ`) - `)de|0LC2~!`) L+2 `)Ȅ~l" OLF P| ;d Nf#~O )lH [&hl~`) l``) (  Oȷ`)~lУ" OLF  Oȷ`)~L2XedZi`!`|H R`) P|h| R`| ; 230 0! "s"p"ed"""" ""`~"ed" ""m"" ""! "" """"""""""`"p"d" "" ""m""`~"ed" "" ""m""`df! X03 ddd ;8d 6df!8` 4Illegal Text Data8"W`4'%%Warning: Truncating long text lines. "W8 0)fX) ȩ XȄf`| !~~ `  !`"X"Xi "Xi "X"X`0P d| #Ud JU ` J_@)? 8jɟ)(T  0`| !H & )d`ibih~H  ~`~ | ~!h~ [& n@l (L&O ` | !`dHd X) dh8d~d| $=L#E ! `3HZ!!8!!d X dȌ!Ȅd zh`de 8f'HeXdeX8f f Z66 hT`dddff X`(` ]E" P| ; $=! "d"| ~ݼ!!p! " N O A #n A(`d|dfd~fX)~ |f`i ":l!F"8 E"0)` J"'"L" d8 0("*"8 &"0)k(") Q*"8 &"0)E )U ) "!) p) "8 K"0`08     9"Xi "Xi "X 9   8  ɍ 8L:ɾɮ e L8ɼɬ L88 L8Lr8L:-!:8 !:ȷ!:!::L8  L8 ~H8 !:  :!:  h!: L8"X i "Xi "X"X "X`0 >N! 0`ȗ`0`Hm@l!Th: :::0l!l!/l!l!0`/SYSTABS/SYSEMAC/SYSCMND/SYSTEMP"X~i "X|i "X`a{i`(d`08 w"0@x" TH"rdt\d^ddxvdxzXZdd <#!!Warning: Bad input: ORG value = $"W8" " 08" " 0< "W8 0)""d p6 ;"` ":l!F"8 E"0)` J"'"L" /U("*"("*""X8 &"0("*""X8 K"0`!d`!X) dff X S"8 R"08` L8W" 0 <8` 230 `0| ! P`ȀLu5 230  `0| ! P`ȀLu5 )) : ) :8``8 ` P"d8"" 6 N"!8"|:dd!! ;"~8"!|`|H~H "X ?{>Editor 4.1 Phase 3 B4"W& ?="X ?> File name: "W "W~| ?> Return to editor."W ?&? Save to the same name."W ?U? Save to a new name."W ?? Load another file."W ?? Exit without updating."W& ?="Xh~h|` :||`~|L: ":l!F"8 E"0"J")'"r(" *"8 &"0 r08 K"0` b@v b@(d`jh`'`"8 8(e" "H S@hLv@"8`@ File name: "Wl! O ( n b8 )8`0:`8`H"X"X)i "Xi "Xh RA"X"XL:INSERT SELECT )CA)6)e))"X "X`AUnidentified error: "W8  0 "XBad system call numberBad system call parameter count%Interupt table full' I/O error(No device connected+Disk write protected. Disk switched@Invalid pathnameBMaximum number of files openCInvalid reference numberDDirectory not foundEVolume not foundFFile not foundGDuplicate filenameH Volume fullIVolume directory fullJIncompatible file formatKUnsupported storage_typeLEnd of file encounteredMPosition out of rangeNFile access errorP File is openQDirectory structure damagedRNot a ProDOS volumeSInvalid system call parameterUVolume control block table fullVBad buffer addressWDuplicate volumeZFile structure damagedNo memory availableFile too large A3E [&l ) &`ibi| !~E~)~ E~ ` `EE 6 u5 [& 6 u5 n@L:8 0`!HdH|H~Hd| R = ;||h~h| Rhdh! VH 7GLFj`jd! *!8e  ;8d #8  d i;L#E8 d 6|eX eZd||7H !hJe\e^ 0  8e |d!|`"X~"Xi "Xi "X"/W"XL:"X"X@i "Xi "X0 /轋 "X 0"X`"X"Xi "Xi "X F"XO E"X`Line: Col: Used: % Mode: File: !e|"X"Xi "Xi "X"/W"XLRH"X"X$i "Xi "Xh" G"X"XL:EDITESC WRAP I5): *"X^H)"XPة"XL:....|....1....|....2....|....3....|....4....|....5....|....6....|....7....|....8f!`!d H HFfz"(XH"X"Xi "Xi "X"/Whd* I5"XHBUFFER IS FULL"W"X`&&ee` P o3 ":l!F"/"2"8 ."05"8 1"08 E"0) J">"L" pdH"d 23hd) """L#J8"Xm"\?"dA":H\ IZI hT8 ="0)C"e8в+H8 K"0 I5h jA8 0) G N`8 K"0 N8` "XMJWrite macros to disk? "W >N) :YN"X ":l!F"/"2"8 ."05"8 1"0):8 E"0)) J">"L" r?" A"8 ="0) jA8 0)8 K"0 G F #E WFP/U wGL:` ]E P# I5QKReplace string: "W! O ? n b8!)h I5K$""Replace with null string (Y N Q)? "W >NH"Xh) :Q{NPY "XLK I5LAuto or Manual (A M Q)? "W >NH"Xh) :Q AM"X!8``!|!~`0e"8 d"e"8 d"0` F"8 E"0\("*" J"'"L" X8 &"0*\ ZLL ,":Tm,"38 &"0#)L8XXf8 K"08` jA8 K"0`! 23e~ )"X"X I5MReplace (Y N Q)? "W >NH #E"Xh) :QNY"XLuM G` R0 !(8! ldm0 S%08 !ldm0 '0~!d!`0~ePP~~ %5 n@ ]E8`"u"8 0)8 0)Ha0!b0h`h :A[`" H""h8AJer!)(""r""ɂ )Ɂ )!`H!d!!h` ! `|!~!`H 23h"'">0 " " `LO0 " `0 " `0| !p P`ȀLu5~H|H!HdH!H o3d|hPhHd RP" " 'O = = ;P||hdh!h|h~ RL:Hd!!!h`Hh`d : v h! : v : v :v : : v ` I5PSearch string: "W  O @ n b8 )` G8` N! hL R!` I5"Xi "Xi "XQ** String Not Found **"W"X : >NH GhhL#nH|H~Hdn v" 6 v" " 6Hv)dll % :"hh~h| :hnL6nH|H~Hnv) %h~h| :hnL6nڢnv) !H! ?/h! %nL6`dH!H|H~H v" 6 v" " 6H| ;" i;vd X d :"hh~h|h!hd 6L#EnH|H~Hn v" 6 v" " 6Hv)dll % :"hh~h| :hnL6|Je\`e^bL: "X"XREditor Macro Entry"Wd"Xi "Xi "Xe NHiA"X:"X "XhJeret) + "X "X `"2~)! ` ژ~ D~ :Ln@ /"2"F"8 ."0)F8 0 6"5"5" 8 1"0) 58 E"0 J">"L" \?"fX"Xi "Xi "X"XzT Writing..."WLT Ti8LT TH8 K"0h8`H"Xi "Xi "X"Xh jAL-A":H\ UZU hT8 ="0)`$%8 "` !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~WTFdd'殩-8嬅"(X 0殆 "(Xץ08h"X"XĮ( \Xk-32768ڄ)8h"X椠"X( \Xk "X(k8H %Xh(kl6Iȅ2I*8妰e椈쪥Ik@kIȅIFejf0 Ik@k0e日日" YI=XXƗ(k0e日日" YXXƗ(kHJJJh)8jk !"#$%&'()*+,-./0123456789 vP X>L%`BADPCDPTXTXTPDABINFNTFOT BA3 DA3 WPF SOSDIRRPDRP1SRCOBJLIBS16RTLEXESTRCMDBASVARRELSYS 4 4 u !y!y!  4  7%.CONSOLE''''A,k0021K11231'4 45 6h7'+1 <  bD F4% 3%4% 3% sV sV UU# ! " '  L% UU'L% 9Ѯ !'  : 0 :L%  : :L% L& ! sV UU' F ! = ML% :- 0) g%&h%& &L% L% Z9L%4  tI |9L%& 84 UU' '!  sV UU\L% sVL%'' ! [U ! [G )H'.''''''.''.''m'''m''hm'''L-' :''` G O$ $` G O$ $` G O$ $`L F = +=v u u` D ,%`I%N ġ$$ A+ F !  !/ȩ/!=! !+ ,%L' O sV UU3 /4 ʎ4 ġ$ vP sV UUW+ >L' >L* ##z$)z$# UU## $͊$iL(#$ 9+##$# UU# UT$ UU+$ H+$ H+ UU+$ UUDLh) UU+,$P UUNL) UU+$) UUBL) UU+$) UUWL) UU+$J UURL) UU+ UU+ UU+ UU+ # #$ɳɴ ɵɶ*A#=#$#$ 9+$$$ 9+$$L*ɰ>$9 )͙$8e# UU# sVL( sV UU Blocks Free: 8$$$$ UT UU Blocks Used: UT$ UU Total Blocks: UT$ <`HJJJJ *Bh)L*B O UU#`PPName Type Blocks Modified Created Access Subtype : D : BLvP`@,I%(H%# sV UUFiles changed: sV@, A zG UU3 @,0 $ $$ á$ vP $L+`j0$$ : D` : =` =,4 A© W %4 A© XA3 !I%(H%# sV UUFiles copied :j0 sV 30 >L/A3 7!!u y! tI8$!$ $$W0$%j0 UU7! UU: vPL,$JLt-j0 UU7! UU: vPL,$$$$$$$$$j08 UUFrom: UU7! UUTo: UUx! c;L,$!$ $P / UU! UU On Line..Hit Escape To Quit  sV L/L-$% sV UU! UU: vPL/y$!$ $LL/ UUFile Exists. Replace it? OYL. ! UUNew GL,4 /A3 x!Ld.4 !y! tILd.$)/ UUFile Locked. Copy anyway? ONL,y!y!8!L, $ $ G vPL, <L,8$!$ $ / UU7! / sVLf/ N zG UU UU3 /1 vPL0`4 D1LJK%`I`LB1L?1 DL1 zG sV UU File edited: AL1 zG UU3 L113 $ $ O4$ $$$$ $`NONAME1LJK`L1L1 : D$ : JC UUIllegal file type`~2I%(H%# sV UUFiles changed: sV > zG UU3 ~2$$ á$ vP $LM2 : F ! Y sV  !! !%ȱ! UU!8eũ sV sV`3  tI =A3 t u  4  tI ġ$F UUHelp FLvP$ɰЍ4$ $߅$© W $$$$$!$$$!© W sV O $ UU! >!© X $ ТA3 7!H%% UUFile renamed : UUt ,% 6LvP`8!y! F ! L6 sV UUOptions: sV87 # ### UU#8eȩ sV sV UUList desired options: @ F ! ` F ! ! B  5  sVLvP4 874 4 08e sV^7.7_7/7 -7 sVL6LANGUAGE LANGUAGESPREFIXTIMEUNITSI4JJKL{L/94959 :!-+/9! BN  sVSLvP : D >` O : '1909 '392909192939$ɰ  sV vPL999© W 69;9E9=9Z© W <9~Z ӭ49 59 4959 <9[/9 UT49 UU L8 <96 UUZZ >@4959 L8 D9Z© X >L7 ,% D9 / D>8` vP`H!! h!`4 A© W %4 A© X4 ʽ/ ơ>``@C%F%B%E%LJ?D%A%D%0%1%2%L>D%@%m0%0%1% .%z&%$'%'(%)%z$'© W $%z$'© X+%*%'1 ,%!%"%© W@G% vP`z$L>E%F% u z$)u z$u I%u u L>0L?L@ ?=L? 9v  u L>u о L@L>u m ?L>A 3 4 /4 u ȹu 4 4 I%IH%D UU3 && sVi sVi sV OQLJ?NL>@G%8` F ! 0 UU File Name: @ =! F ! `8`! A ! !`! ! A!!LA UUALA !!A !!! UUA`(  UUA!!A! sV UU\LA 0  ` `) ` !!`B >` ġ$$B0 ɰ8`H UU3 UU h vPLAa{i` 0:i`  ! dB xBH & &&h ` [ BAG`8`A)` ! 1 UULanguage or Type (BIN/SYS) : A ALB! B9!@ʎ8! 0<8&8!BC8!8!FC8!8``eLB 8!  )LCLBBINSYS ! 3 UUFile type (e.g. SYS, $B0) : A A!п`! aD \DaD!   B]D``D ]D [7 F9Z$`^D dB xB_D dB xB8`8`]D [e)eL D $`\D8`iL7D 2) ِD``pP@0 HHHFhhhH% F ! $p @LF L)E =` ! + '/. = ? F9 ș @ש vPLF 4 /,4 A© W %4 A© X4 Ȣ 4 4 I%) " ?ݶ  =ݶ H%I% / ݶ ʆ   %A3 /ʽ / %L)F%  vPL,F vPLF!%© W %#%/%-%%%@&%%'%(%)%#0%1%2% .%0%@%© W $% vP@%© XE%F%G%D%8F`! ! `iAtG4  tI ġ$`$ɰ( UU3 UU : Not Executable`$ѢA3 t $$$ O $`LOGINI%H%8`` @! !/ . F95 4 ` hI$ :  @ 4 N sV` ! L0I   !, BI.Ƚ! B  " 8eLH sV vP` $u NLI ͩ$ LI к$ LI  LI  LJH$!$ I%H% UU UU3 ġ$ vP$ $$ á$ $дDNBWR@  UUTime:  O UU#` UUUnits Currently On Line : sV UU Device Name sV MM I=P UU .D M UTM UU /$ )$ UU# LM(X UU .D M UTM UU UUNot A ProDOS Volume  LL   UU .PRINTER UU .CONSOLE` NNA 3 F LN! LN'! LN' LMKNF! ?NN A F !  ' Bș4 ALN4 NLN LM LM4 N`8`4 ! F9/.ȑ  8``  ` O#`# #) O##JjJJJJ eiƅOi$J O$$! O$$: $ O 0 $ $`8 i 0 0` ` JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC!" uP A !!! BYENAQ= UU**Please answer yes, no or quit (Y,N or Q):  sVLOH"!uP h`y&QHHH Q(QZ&Q8eLP UU sV Qhhh` UUProDOS error number UT&QLPBad system call numberBad system call parameter count%Interupt table full' I/O error(No device connected+Disk write protected. Disk switched@Invalid pathnameBMaximum number of files openCInvalid reference numberDDirectory not foundEVolume not foundFFile not foundGDuplicate filenameH Volume fullIVolume directory fullJIncompatible file formatKUnsupported storage_typeLEnd of file encounteredMPosition out of rangeNFile access errorP File is openQDirectory structure damagedRNot a ProDOS volumeSInvalid system call parameterUVolume control block table fullVBad buffer addressWDuplicate volumeZFile structure damagedLanguage not availableDirectory file..Not copiedAcess error..Not copiedDirectory not foundUnknown optionFile must be TXT or SRCInvalid device numberNo entries foundFile must be SYS or BINFile name errorIllegal path nameInvalid operand Invalid flagፙUɀUUULWUUUUUᭃUUU-U8ЅЩх xVUU 0UUUҝUUнU xVНUὗU0U0UU8UU UU sV̓U`' -32768 ULsV8 UiАѠ sV` sV`rVhhnViЅ©ípVJJJJpV) Y©âqVJJJJJJ YpV)@P©âqVJJJJ) Y kVpV)  sVrVllnV l6 [` VЅҥхөЅ`!&&&8᪥҅Ј*8eЈҥ 8ЅЩх`Ӆҥ8ЅЩх8` W Jeԥeեe֥effffffffЈϥ) [`8ЅЩхѩ҅ҩӅ`ׅօՅԥ W8`é©ĥ CX=X¥Ðȑ8``e…åå CXI=XX`e…åå CXXX`HJJJh)8j` Yhh왚YiY?Ѕ© Y YY YY Y YL Y#© Y Y Y Yl Y YL Y© YY YH Yh͠Y дЕ YYY YH Yh YȹL{Y L{Y L{YHʥ˩Ѕȩh L{Y (llYY.Y*Y.Y*Y.Y*`Y YY  `  ` ȹ`ˆ`sZtZrZ,OKsZ i `rZ rZ`rZsZ ie`ȱ( ȱirZ`0:8`` .\` [ 8qȪ LEvaluation Stack Overflow  Software InteruptInvalid OperationDivision by ZeroOverflow UnderflowInexact`;<=>?@AB,**************************************************************** 6B,D; ; ; D  ;62 ; D; ,3B; ; ; UTS: * * OUTPUTS: * A* START END ;............................................................... 6B D; ; ; D EEEEEEE7G 3B By The Byte Works Inc. Copyright (c) ______ 1984, All rights reserved. 20B21 22  7GGGGGG GG K L 23 *   Y   Z[\]^_12B A* * * * Inputs: * * Outputs: * A* START END 11 312B A* * * * Inputs: * * Outputs: * A* START END 11 3 4B,* * * * IVX Y NAME IS PHIL CD000 00000000100000001000000010000000100000001000000010000000100000001000000010000002 000 00000000100000001000000010000000100000001000000010000000100000001000000010000002 000 00000000010000010000000000000000000000001000000100000001000000010000000100000002 000 00000000010000010000000000000000000000001000000100000001000000010000000100000002 000 00000000100000001000000010000000100000001000000010000000100000001000000010000002 111 00000000100000001000000010000000100000001000000010000000100000001000000010000002 000 00000000100000001000000010000000100000001000000010000000100000001000000010000002 111 00000000100000001000000010000000100000001000000010000000100000001000000010000002 111 00000000100000001000000010000000100000001000000010000000100000001000000010000002 111 00000000100000001000000010000000100000001000000010000000100000001000000010000002 FUTILITIESvg+'  '(COMMANDSF :!  ! E(COMPRESSP o  o E&CRUNCH]  E%DCOPYh o  o E'DUMPOBJp(O8  8 EHELPE$INITC/ /E&MACGEN)4 4E$PEEK (& &E#SET- -E&SWITCHo  o E&SYSGEN,0o  o EGHIJKLMNO , R$ :' #`  ( +* ` , , 00 +* Command L +* Utility L +* Language ) +) ` ,i ,i ,O * ,i ,i , +***Enter the command name, followed by RETURNi(R# ,R#i ,i , U# İLG!  , '#L! G$! '#   LG! ,i ,i ,O * ,i ,i , +*C)ommand L)anguage U)tility ,i ,i , U# G$U S# L"L   Lj"C  N Lj" ,L1" ,i ,i ,O * ,i ,i , +*//Enter the command or language number (1..126): *m)S#T#S# 8S# T# ,Lj" D(S#     ,(i ,i , ! `Hi(R# ,R#i ,i ,hH ,h `l8 (8#i# ,#i ,#i , 8ie` , +*Use the changes (Y or N)? *)F$F$ G$NaY ,L#    +*))Use SYSGEN to make the changes permanent. ,`a{)_` % +*Command Table Editor 4.0  * +*$$Copyright 1984, The Byte Works, Inc. & ( ( & ,i ,i , & * +*Current Command: & D( © A.© .   8ieL_% &`%.CONSOLE8 ie8 iej ,i ,i , +*,,No room in table. Hit any key to continue. & ,i ,i ,O *` X# Lx& ȹ  &`l8P& +*-&`7'8'9' ,8'i ,9'i ,7'  , !  ,8ie9'7'7' (8'9'L&` ,i ,i , ' G$U  'L:'D  'L:'I %L:'R (L:'C L:'Q` ,L:'l8 X#   X# !   , X# !  ,`8iei &`  X# !  , X# !  ,`8ieݥ &` ,i ,i ,O * ,i ,i , +*,,U)p D)own I)nsert R)emove C)reate Q)uit` +*((Name Type Num ` X#   x8ieiL)  ,(i ,i , ! X# &`)Ѕ ,7 +-) , 0 H -h)eЅАޢ 0` ,) 8ЅЩх` ,  `፶*ɀ***Lt*****᭠***-*8ЅЩх -** 0***ҝ**н* -Н*ὴ*0*0**8** ** ,̰*`' -32768 *L,8 *iАѠ ,` ,`hh왁+i ~++)  ,L%++JJJJH+) .h -i/ lll+,hh,iЅ©í,JJJJ,) .©â,JJJJJJ .,)@P©â,JJJJ) . ,,)  ,,ll, l6 - - -L, / - - -/ ,L,+ - -$%!ʆ$ ,$i ,%i ,LE, \ , ,L6, -/ -/ , - -֮ -xH ,hLE, - - -/  - - - - -` -Hh - -/ - -` -)`l8 0` .ЅҥхөЅ`!&&&8᪥҅Ј*8eЈҥ 8ЅЩх` .& -L-J eҥeffffЈ` -хХ҅ѥӅ҄L-ІFѐejfЈѥ) 0` 8ЅЩх`Ӆҥ8ЅЩх8`é©ĥ w.=X¥Ðȑ8``HJJJh)8j`e…åå w.XX`. ..  `  ` ȹ`ˆ`}/~/|/,OK}/ i `|/ |/`|/}/ ie`ȱ( ȱi|/`0:8`` 81` ʅ0 8qȪ LEvaluation Stack Overflow  Software InteruptInvalid OperationDivision by ZeroOverflow UnderflowInexact`QRSTUVWXYZ[\L$  "" ) )`A 8,  ##ȱ#ȱ#ȱ#8# #L)$# $# % -` 5 *A[`8`  "  s*L$"  s*L$"  s*L$`######L%# # r(#######%#%%%%#%#}% % r(########## &4 *####&%&&%%%L%##L$`  i+##&#####L&,##&#&#i &&L&##&###&&&#&i &&Ld&##&### *####&L&`m#` ) )  ȱ  `8`   :o' p'q'© 4 n'p'q'© 48`(` * ".n s* " *D` s*  " 5))H s* B < 9m 4 hm * L'  '8 ) (/ (8` 32Invalid Device Number` 3 .`H"" h"` * " 1 A© 4 o( . A© 4`8`  i (((##( ( `((####i (#L(m#`" ) " "`  * " * A5C7 * 9 32 Parameter: ( s*L)8`#L_)#" ' # 3 32Invalid Parameter` $L ) r' * # .`$" 3 32Not A DirectoryL)8`" " r*""L) 32r*L) ""r* """ 32r* 3`(  32r*""r*" 3 32\L)L) ""`a{i`  " ` /(! "/ . }$  `# # I Aȱ !,ȱ ",% ,ȱ ,,m#, , u+', ȭ , ȭ# +# # I Aȱ !,ȱ ",% ,ȱ ,,m#, , u+', ȭ , ȭ# L+`A Q R R / /R R )mR R R ʈR 2,7,+, © 4 *,#, #,, -, ` ,0#,+ %,!,(,",), © 4 $,`  R #© g4 ##,,©P g4% 32Cannot find buffer #` ʳ,, , #8` .L,P-La- /, A© 4 ǥ- A© 4     /  L -  'W3 )      ҭ +-8` 3 32Duplicate volumesL- 32Volume Not Found`  i.ȱ.i)#!###i .#L-i%.ȱ. ,L. .8. .L. . ..... . .`.... i i  i.ȱ.L'.`m#`ya/HHH[/c/Za/8eL. 32 3[/hhh` 32ProDOS error number 31a/L/Bad system call numberBad system call parameter count%Interupt table full' I/O error(No device connected+Disk write protected. Disk switched@Invalid pathnameBMaximum number of files openCInvalid reference numberDDirectory not foundEVolume not foundFFile not foundGDuplicate filenameH Volume fullIVolume directory fullJIncompatible file formatKUnsupported storage_typeLEnd of file encounteredMPosition out of rangeNFile access errorP File is openQDirectory structure damagedRNot a ProDOS volumeSInvalid system call parameterUVolume control block table fullVBad buffer addressWDuplicate volumeZFile structure damagedLanguage not available2ɀ222L22222222-28ЅЩх 322 0222ҝ22н2 3Н2202022822 32 32`' -32768 3L38 3iАѠ 3` 3`덵3hh왱3iЅ©í3JJJJ3) 4©â3JJJJJJ 43)@P©â3JJJJ) 4 33)  33ll3 l6 5` 84ЅҥхөЅ`!&&&8᪥҅Ј*8eЈҥ 8ЅЩх`Ӆҥ8ЅЩх8`é©ĥ 4=X¥Ðȑ8``e…åå 4I=XX`e…åå 4XX`HJJJh)8j`;5 <5;5  `  ` ȹ`ˆ`555,OK5 i `5 5`55 ie`ȱ( ȱi5`0:8`` 6` 6 8qȪ LEvaluation Stack Overflow  Software InteruptInvalid OperationDivision by ZeroOverflow UnderflowInexact`^_`abcdefg5" " c& "`Copyright 1986_By the Byte Works, Inc._All rights reserved!h!.P""8"/"7"."Q© 1X Y V H© 1h(LLX& .""LA"""` ̵"`" "` /8/Crunch 4.1 Phase 1 B2 0 *!ȩ.!ȩA6"6"!!A1 /8/File name is too long 0 05"L"K © 1 H ! /8/Could not open fileL3# 0 0 /8/ Processing /8/! 0ȅ©2 1L*ȅ©2 1iȍ,"i2-"M _ O 1"2"h!.© 1 N Hh!.© 1h(L$h _ -_ b h!f i!g %-","* /8/Too many segments to processL3# . /8/g h!.i!a mh!a b mi!b ^ L$LL&_ ("© 1L*© 1O W ¥ 1iiL%8 L*/"J."¥ 1ee`c ih h h 8h e1"2"`83" 4"!X Y V LX&3"4"3"` .7"m7"&8"m8"&&/"&." *` /8/File I/O error in /8/! 0 05"L"!A!L&!6"! )`K © 1 H 6 /8/Could not open /8/! 0 05"L"( 0 0 /8/ Processing /8/! 0M (O h!.© 1 N Hh!.© 1h(L( ) ( - . /8/)0"ii))L!( ~*2"1"0"(" n.)g ("b h!f i!g %-","Lx( /8/Too many segments to processL&c i i h h b n. -f g f 8f g h!ȭi!h!f i!g (L( - %h!i!h!8h! i! *f .g )mf ))mg ) (L 'LL&O ( ( (6"6"[Lc&`! ! " D /8/File to crunch: l/!/!! !م! " 5"L"! " ș!@!`i8e` /8/ Out of memory 0 05"L"7" 8" 3" 4"`W - ---7" 8"Li+-7"-8"--.- -- - 9" - - - -- -8 - - - - - -L6+ -Lб87" 8" -LW+L[,-3"-4"--.-8------8---------3"4"-- - 9" - - - -- ---.--m---m---- -8 - - - - - -L,-m---m-- -LL+-- --- --- - ----!0"m-ȱm-ȱm- ~* - - -2" -1")"m-)"*"m-*"+"m-+"--`© 1O `-a-b- _-L&© 1`7"8"7"`87" 8" g-X Y V LX&3"4"`w! ! u! `!i !!!ec.!ed.ee.O g.b. a. © 1 h. i. f. © 1u! ȑ u! `W . ϣ... .  * . Σ.`7"8"`t!) /8/code : ` /8/data : ` /8/other: ` 02 0`8 c/iАѠ 0` 0`hh/i //)  0L//JJJJH/) ^2h -i2 lll/덋0hh왇0iЅ©í0JJJJ0) 2©â0JJJJJJ 20)@P©â0JJJJ) 2 00)  00ll0 l6~11}1L@1 2|1 1 |12 0L81+|1|1$%!ʆ$ 0$i 0%i 0L0 \ 0 0L0|12|12 0|1|1֮|1xH 0hL0}1|1|12 }1|1|1~11`~1Hh|1|12}1~1` 1)`l8é©ĥ 2=X¥Ðȑ8``e…åå 2I=XX`e…åå 2XX`HJJJh)8j`]2 ^2]2  `  ` ȹ`ˆ`222,OK2 i `2 2`22 ie`ȱ( ȱi2`ijklmno i$ !`Copyright (c) 1985_By The Byte Works, Inc._All Rights Reserved_P & :" ;"V L M W N X O J * ('Read error on block (&N N O L iL M iM  8 Н <":" ;" V R S W T X U P + ('Write error on block (&T W X T U R iR S iS  8 Д8 L! 1) 1)`K Q ( ('Insert destination disk. :$` ,&Z .L3# #L# #} /$Dv #+ ' G-d)H #Z U ReNheGL">:  U ('Device not connectedL$# ('Invalid device number 1) 1) `Y ʭZ /àY Y L#Y [ Z Y Y    I$ © + $+ © 5+ ) Y $` ('Volume not foundL$#Y Z $HZ Y @$hY ` .$ .$`a{)_` ('Hit any key to continue.` (' DCOPY 4.0a 1) m"K  m"Q ('''Insert disks. Hit any key to continue. ¥ *¥ *JV &L M N O J 6 ('Could not access source disk 1) 1) `) ȱ <"R S T U P / ('!!Could not access destination diskLI%) ȱ ) ('Disks are not the same sizeLI% P . (' Can''t write to destination diskLI%W X ` $ g ('Source volume: Lx& ('Destination volume: (&   $  `Y $ șY @Y `K Q # ('Insert source disk. :$` 6)G, 6)`'ɀ'''L''''''''-'8ЅЩх .*'' 0'''ҝ''н' .*Н''0'0''8'' (' 1)'`' -327688 (iАѠ 1)` 1)`hh왘(i (()  6)L<((JJJJH() +h -iG, lll(0)hh,)iЅ©í.)JJJJ.)) i+©â/)JJJJJJ i+.))@P©â/)JJJJ) i+ )).))  1)0)ll,) l6#*$*"*L) F,!* %* !*G, 1)L)+!*!*$%!ʆ$ 1)$i 1)%i 1)L\) \ 1) 1)LM)!*G,!*G, 1)!*!*֮!*xH 1)hL\)"*!*!*G, "*!*!*#*$*`#*Hh!*!*G,"*#*` +*)`l8 S-` *ЅҥхөЅ`!&&&8᪥҅Ј*8eЈҥ 8ЅЩх`Ӆҥ8ЅЩх8`é©ĥ X+=X¥Ðȑ8``e…åå X+I=XX`e…åå X+XX`HJJJh)8j`+ ++  `  ` ȹ`ˆ`;,<,:,,OK;, i `:, :,`:,;, ie`ȱ( ȱi:,`0:8`` -` - 8qȪ LEvaluation Stack Overflow  Software InteruptInvalid OperationDivision by ZeroOverflow UnderflowInexact`qrstuvwxyz{|}~Lf.-^,.-T,.-75,.-s44] . -a,(*S3P .-.-,3] .-0*,3] .-+,3] .- F0,3] >]E U* 3 < .)R-_,.-T,. -a,20\"S.-64!Z>S3!".-a["Y>5Z6S["Y>5Z>S["Y>5Z"S>5Y["Y>5Z"S[" Z"S>5Y["Y>5" Y>5Y["Y\"S3!".-a["Y>5Z6S["Y>5Z>S["Y>5Z"S["Y>5Z"S>5Y["Y\"S3!".-a["Y>5Z6S["Y>5Z>S["Y>5["Y>5["Y>5Z"S["Y>5ZBS["Y\"S3!"..]P-&b5-a["Y>5Z6S["Y>5Z>S["Y>5["Y>5["Y>5Z"S[."Y>5]P- a,"Y\"S3!>]!U )!y!3z 20(0SL(.SLO4!2Z&SB"%BO4 "2Z&SE4 ""%Z&SD4"22" .)R-V[".)R-_Q".)R-_Q." Y)R- _,"% B"% BN"% BN"% BN"% B"%"%BON4|"222(0SL4"SR2."Y-U+RL4"."Y- F0,2)R B)R BN)R BN)R BN)R BN)R BN4"2."Y- F0,220([S!E(\SEN(\SDN(]SCN4 #.- F0,2ZjS4<#"ZjS["Y-a,."%-YH,3d%. A-a,3d%."%(-S(,S-X4#."%-YH,3d%. (-a,."%-YH,.]t%-E8,3d%. [-a,."%-YH,.]x%-E8,3d%. (-a,."%-YH,.]|%-E8,3d%."%-YH,.]%-E8,3d%."%-YH,.]%-E8,3d%. >-a,."%-YH,.]%-E8,3d%. (-a,."%-YH,. )-a,3d%. [-a,."%-YH,. ]-a,3d%."%-YH,.]%-E8,3d%. (-a,."%-YH,.]%-E8,3d%."%-YH,. ,-a,."%-YH,ZFS."%(-S(,S-X6\FS3d%Z&S4 %.]%-E8,."%-YH,3d%.]%-E8,3d%6> "],%U{#######$.$C$X$u$$$$$%2 ),Y],Y,X),X,Y,X,S,S),Y*+OPERAND ERROR 0"%3d(.-L,"% B4%.](-E8,3%.](-E8,.)R-_,.)R-_,.)R-_,Z:S5\:S.--,3(.](-E8,.-L,3(.-L,"% B4+&.](-E8,34&.](-E8,.)R-_,.)R-_,.)R-_,Z:S5\:S3("% B4o&.](-E8,3x&.](-E8,.-A,3(.](-E8,.-L,.](-E8,3(.](-E8,.-A,3(.])-E8,.-A,.]%)-E8,.-A,3(.]()-E8," .)R-_Q" %B4&.]9)-E8,3('" %B4 '.]=)-E8,3('" %B4'.]A)-E8,3('.]E)-E8,Z:S@W:SA,"% B4I'.-A,.]I)-E8,.--,.]K)-E8,3(.]M)-E8,..)R-_- \,.-M,..)R-_- \,.-M,.-A,.-M,.-A,Z:S5\:S3(.]a)-E8,..)R-_- \,.-M,..)R-_- \,.-M,.-A,.-M,.]BS)R(nS-\,.ZBS- \,.-M,.]BS)R(nS-\,.ZBS- \,.-M,.-A,Z:S5\:S3(.]u)-E8,.-A,.-M,.-L,3(.- F0,3( 6> *]Y(UZ&&[''%&&%&Y(Y(&&&&&%Z&Y(&;(2EQU $GEQU $ USING ANOPENTRY ALIGN $ DS $ DC R'' ORG *+$ MEM $,$ DC I1'I2'I3'I4'+'! RELOC ($E2) | ! INTERSEG ($E3) | ! ENTRY ($F4) | ZFS@WFSA,Z&S4)Z&SAW&S@,.])-E8,."%- \,.])-E8,2 DC H''"Y4/*"Y>5Y3*3&*."Y>5Y-),3&*."Y>5Y-),."Y>5Y-),3&*>]&*U))))."Y-ma,20.-7.-T+RLO4+W&SWFS\:S.-9L4X*2(0SL(.SLO4x*" .)R-T[!0u\2S3*)R B4*" ZNS[3*" ZNS!7[(/S4+.-8L,.-89,.]S-E8,")RQ"% D4*3*""%@'A,3*. -a,3*(ZS<4*.]+-E8,3*.]+-E8,Z:S" YF.-T+RLO4v+.-89,.-G4,Z6SL(.SO(0SOZ&SLO41+" Y\:S3v+.Z6S-a54H+.Z6S-%,3s+..Z6S(-S(,S-X-!4j+.Z6S->#,3s+.Z6S-),3*)RL4+.]+-E8,(+SL4+. -a,. -a,32*2DATASTART END0".-7.-T+RLO4-\:S.-9L4+2(0SL(.SLO4+".)R-T[!0u\2S3,)R B4 ,"ZNS[3,"ZNS!7[(/S4-Z:S"YF.-T+RLO4-. -a,(1S4P,.Z:S- \,.] --E8,"&Q""Q""%D4,3o,""""%@'A,3X,." )R-\,Z:S@W:SA,Z:S"YE4,.]&--E8," [3,." Y- \," Y <E4," ""%5" Y -a,3A/. =-a,3A/.]e/-E8,3A/.]l/-E8,3A/.]r/-E8,3A/6> (]A/U. .+.6.A.L.k.v............/2--.AND..OR..EOR..NOT.<=>=<>.BAND..BOR..BEOR.Z6S30.]30-E8,320. $-a,.-A,320.]70-E8,.-L,320.-L,320.]:0-E8,.-L,320.]=0-E8,.-L,320.]@0-E8,.-L,320. (-a,.]S-8,.]C0-E8,.-A,. )-a,320 6>]20U////////2(*)W:L:T:C:+$"%30.]0-E8,30.]1-E8,30.]"1-E8,30.]@1-E8,30.]L1-E8,30.]b1-E8,30.]~1-E8,30.]1-E8,30.]1-E8,306>]0UL0X0d0p0|00000" Y40." Y-E8,. -a,2Format type not supportedCould not read segment headerSegment version not supportedBad input: Could not open file: Not an object module file: Unknown OpcodeIllegal header entryEnd of file encountered1"%)RB41SR2# "%Q# %)RF4$231# # %@'A,31.]Q]R# %>5Y.]R# %>5Y-&b-Db,.]Q];3-Db,31.#]Q- a,.]Q-&bD4I2.#- F0,2# Q# %D423h2# # %@'A,3N2]Q# %5.]Q# %5$-bR3Z2.]Q]=3-bC42.#- F0,2# Q# %D4232# # %@'A,32]Q# %5 R32# Q]Q# %5$]Q# %5$ )CO43]Q# %5$ ,B43]Q# %5 R# # %@'A,32]Q# %5$L4+3.#- F0,2]Q# %5RSR2 NAMES=(0" Q" % PD4p33c3" " %@'A,3K3"Y" %5 R3W3" Q.]:4-E8," .-_& C44" $B" %O43." $-a," " %A'@,33" $B" % DDO43."Y" %5$-a," " %@'A,33." $-R\43." $-a,"Y" %5" $R" " %@'A,3}3.-a,." $-a," %"Y" %65$ BO404" " %A'@,34"Y" %5R2File name : Z:S@W:SA,.)R-_\6SZ6SD4o4\6S. - F0,Z6S21#Q#%)RF44.#]R#%>5Y- a,##%@'A,#$ +B#$ -BN44.#-ML44234343{4#%)RF44.]tP]R#%6>5Y- a,34.]tP-E3,.]tP-"L4 52.]tP]55- a`SR)RL4*5.]tP- F0,2.#%-122r*+S+R+RW2S+R**S\JS*1S*0S*/S*.S*-ST,S2(0SL(.SLO4o52Z&S4w52"% D45"%\&S.-G4,2"% B45.]&S(\S)R(nS-\,Z:S(\S5\:S.-G4,220)RL452""'Q.]S"%5$-a45""%@'A,35]Q"%5$4N6]Q"%5$ B46""%@'A,35.]S]Q"%5"%-bL4(62]Q"%5$]Q"%5$ CO4K6""%@'A,3(6352"YD4v6]R" Y5 -R" ."Y?" Y5- P6[36"Y G46" ."Y 8" Y- P6[]R" Y5"Y 9 05R]R" Y55R" Y522]PR.-G4L462Z6S D4 7Z6S36\>S37\>S376> ]6U666666666666666637Z6S37.]P]7- a,\>S37.]BS(\S)R(nS-\,\>S37.-WM,\>S37.]P]7- a,.-WM,\>S37.]P]7- a,.-WM,\>S37.]P]7- a,.-WM,\>S37 6>]7U7#7<7<7I7b7{7#72(*)L:T:C:0)R B47.ZJSZ2S5)R- _,37.ZJSZ2S!75)R- _,.)R-V\JS".ZJS 5)R- _Q.ZJS)R- _,"%L482.)R-U,ZNS\2S.ZJS)R- _,.-5LP720" Q"Y" %5$4l8."Y" " %@'A5$-a,3K820" Q" %D4838" " %@'A,3s8."Y" %5$-a,3~820" Q"Y" %5$."Y" %5$-aLO48."Y" " %@'A5$-a,382(1SL48.]8-E8,2! 0"Q" [" Y"YD4793 9" " Y@VA,38""%@'A,"%B4%9"Q.-n\,..)R-_- \,382. -a,(1S4j9.Z:S- \,. -a,.ZFS- \,.]k9-E8,2 | 0"."Y- P6Q""%Q"%" %F4939""%@'A,39. -a,39"Q"%"%D4939""%@'A,39.]R"%5$-a,3920".)R-V[.)R-UL49.- F0,2(0S(]SCO4:.- F0,2ZNS\2S(.SL4+:."Y)R- _,3]>.)R-V"Y6\:S(+S4p:.-8,.]S-E8,.]_>-E8,.(ZS-?,.]c>-E8,.-"2.-8,.]f>-E8,.ZNS- \,.ZNS- o9,. -a,.-T4:2.-8,.]x>-E8,.ZRS- \,.ZRS- o9,. -a,.-T4:2.-8,.]>-E8,.ZVS- \,.ZVS- o9,. -a,.-T4 ;2.-8,.]>-E8,.(ZS- \,.]>-E8,.(ZS-?,. -a,.-T4H;2.-8,.]>-E8,.([S- \,.]>-E8,.([S- o9,. -a,.-T4;2.-8,.]>-E8,.(\S- \,.]>-E8,.(\S- o9,. -a,.-T4;2.-8,.]>-E8,.(]S- \,.]>-E8,.(]S- o9,. -a,.-T4;2.-8,.]?-E8,.Z^S- \,.Z^S- o9,. -a,.-T43<2.-8,.]?-E8,.ZfS- \,.ZfS- o9,. -a,.-T4g<2.-8,.]'?-E8,.ZjS- \,.ZjS- o9,. -a,.-T4<2.-8,.]9?-E8,.(nS- \,.]K?-E8,.(nS- o9,. -a,.-T4<2.-8,.]R?-E8,.(oS- \,.]d?-E8,.(oS- o9,. -a,.-T4=2.-8,.]k?-E8,.)pS- \,.]}?-E8,.)pS- o9,. -a,.-T4R=2.-8,.]?-E8,.ZrS- \,.ZrS- o9,. -a,.-T4=2.-8,.]?-E8,.)vS- \,.]?-E8,.)vS- o9,. -a,.-T4=2.-8,.]?-E8,.)xS- \,.]?-E8,.)xS- o9,. -a,.-"L4>2.-T4 >2.-8,.]?-E8,.]zS-E8,. -a,.-T44>2.-8,.]?-E8,.]S-E8,. -a,.-T4]>22 () Block count : $Reserved space: $Length : $Kind : $ Label length : $ Number length : $ Version : $ Bank size : $Org : $Alignment : $Number sex : $ Language card : $ Segment number: $ Segment disp : $Disp to names : $ Disp to body : $ Load name : Segment name : "% <4?.]@-E8,3@.]@-E8,"% @<4@.]@-E8,"% <4&@.]@-E8,"%<3@.]A-E8,3@.]A-E8,3@.] A-E8,3@.] A-E8,3@.]/A-E8,3@.]JA-E8,3@.]aA-E8,3@.]wA-E8,3@.]A-E8,."%- \,3@> &]@U.@:@F@@R@@@@^@@@@@@@@j@v@@2dynamic static private position independent codedatasegment jump tablepathname tablelibrary segment dictionaryinitialization segmentabsolute bank segmentzero page/stack segmentunknown kind : $.]BS(\S)R(nS-\,.ZBS(\S- \,Z:S(\S5\:S20Z6S D4B.]F-E8,.Z6S- \,.]F-E8,ZFSZ6S5\FSZ:SZ6S5\:S.Z6S-8,3FZ6S3F.]G-E8,.-A,ZFSZFSZBS95\FS3F.]G-E8,.-A,ZFSZBS5\FS3F.]'G-E8,..)R-_- \,.-M,..)R-_- \,.-M,.-A,.-M,.-A,Z:S5\:S3F.]9G-E8,..)R-_- \,.-M,..)R-_- \,.-M,.-A,.-M,.]BS)R(nS-\,.ZBS- \,.-M,.]BS)R(nS-\,.ZBS- \,.-M,.-A,Z:S5\:S3F.]KG-E8,.-L,3F.]]G-E8,.-L,3F.]oG-E8,.-L,.-M,..)R-_- \,.-M,..)R-_- \,.-M,..)R-_- \,Z:S5\:S3F.]G-E8,.-L,.-M,..)R-_- \,.-M,..)R-_- \,.-M,..)R-_- \,.-M,.--,Z:S5\:S3F.]G-E8,.-A,.-M,.-A,3F.]G-E8,".)R-_[."Y- \,Z:S@W:SA,ZFS"Y5\FS.-M,.--,3F.]G-E8,".)R-_[."Y- \,Z:S@W:SA,ZFS"Y5\FS.-M,.--,3F.]G-E8,".)R-_[."Y- \,Z:S@W:SA,ZFS"Y5\FS.-M,.--,3F.]G-E8,".)R-_[."Y- \,Z:S@W:SA,.-M,.-A,ZFS"Y5\FS.-M,.--,3F.]G-E8,.-L,.-M,..)R-_- \,.-M,..)R-_- \,.-M,..)R-_- \,Z:S5\:S3F.]G-E8,.-L,.-M,..)R-_- \,.-M,..)R-_- \,.-M,..)R-_- \,.-M,.--,Z:S5\:S3F.]H-E8,.-A,ZFSZBS5\FS3F.]#H-E8,.-A,.-M,.-n\,ZFSZBS5\FSZ:SZBS5\:S.ZBS-8,3F.]5H-E8,".)R-_[."Y- \,Z:S@W:SA,ZFS"Y5\FS.-M,.--,3F.]GH-E8,.-A,.-M,.-L,3F.- F0,3F 6> *]FUB6BRBB2CDCVCCDFF2DrDDD>EEEFSFF2CONST ($) | ALIGN ($E0) | ORG ($E1) | RELOC ($E2) | INTERSEG ($E3) | USING ($E4) | STRONG ($E5) | GLOBAL ($E6) | GEQU ($E7) | MEM ($E8) | EXPR ($EB) | ZEXPR ($EC) | BEXPR ($ED) | RELEXPR ($EE) | LOCAL ($EF) | EQU ($F0) | DS ($F1) | LCONST ($F2) | LEXPR ($F3) | ENTRY ($F4) | 0" ."%(-S(,S-XQZFS" %5\FSZ&S4 IZ:S" %5\:SZ&S" %6\&S.]BS" %)R(nS-\,. $-a,.ZBS" %- \,"% B4HZBS <4HT-SZBS<4HT,S.-8L,"% B4IZBS <4HT-SZBS<4IT,S.-8L,3I.-G43yI.)R-_,Z:S@W:SA,.--,3I.)R-_,.]BS(\S)R(nS-\,Z:S(\S55\:S.--,3I.]I-E8,."%- \,. -a,3I 6>]\IUIII,I\I\I\I\II2Invalid operand expression: 0. -a,.]J-E8,.]tP-E8,. -a,(*S3I.]J-E8,3 J.]J-E8,3 J.]J-E8,3 J>] JUIII(+S4J.]K-E8,3'J.]K-E8,(,S49J.]8K-E8,3BJ.]RK-E8,(-S4TJ.]mK-E8,3]J.]K-E8,(.S4oJ.]K-E8,3xJ.]K-E8,(/S4J.]K-E8,3J.]K-E8,(0S4J.]K-E8,3J.]K-E8,(1S4J.]L-E8,3J.]L-E8,. -a,2File name: Opcode dump Disassembled dump Hex dump Do scan type search Do not do scan type search Use long index registars Use short index registars Use long accumulator Use short accumulator Print header Do not print header Print body Do not print body Check file type Do not check file type Print column numbers Do not print column numbers .-89,.]L-E8,(-S4YL.]L-E8,3bL.]L-E8,.-89,.]L-E8,(,S4L.]L-E8,3L.]L-E8,2 LONGA ONOFF LONGI ONOFF.]P([S)R-],.]P-8,([S4LZ:S([S5\:S3LZ:S)R55\:S20.]P([S)R-],.]P-E8,")RQ"% D47M3,M""%@'A,3M. -a,3 M([S4JMZ:S([S5\:S3VMZ:S)R55\:S20".]P-&bQ([S4sM([SSR3~M.)R-_SR"Q"%)RD4M3M""%@'A,3M]P"%"%55.)R-_R3M]P"%)R55R"Q]P"%5$]P"%5$ CO4M""%@'A,3M]P"%5R2.]M-E8,2 : 0."Y-&bC4N."Y- F0,2" ."Y5$-bR"Y$ +B4N" $ XB4ANT*S3N" $ DB4QNT*S3N" $ SB4aNT+S3N" $ IB4qNT,S3N" $ MB4NT-S3N" $ HB4NT.S3N" $ OB4NT/S3N" $ FB4NT0S3N" $ AB4NT1S3N."Y- F0,23lO" $ XB4NT*S3lO" $ DB4NT*S3lO" $ SB4OT+S3lO" $ IB4OT,S3lO" $ MB4 OT-S3lO" $ HB40OT.S3lO" $ OB4@OT/S3lO" $ FB4POT0S3lO" $ AB4`OT1S3lO."Y- F0,22"Y4pP"Y>5Y3aP."Y>5-E8,3pP"Y>5Y B4O. (-a,.]S-E8,.]qP-E8,."Y>5Y(\S- \,. )-a,3O. $-a,."Y>5Y(\S- \,3pP. (-a,"Y>5Y\6S.-.,."Y>5Y-nO,. )-a,3pP. (-a,."Y>5Y-nO,"Y>5Y\6S.-.,."Y>5Y-nO,. )-a,3pP>]pPU!POOO2+$ mp pTp Lf mp Tp Lf m0)0 slLf0 xlLfdU8 U()UdUdLf lLfdpdr0p`U_U08 ĠU() slLfU)ddLf _U dVVV 8 ϮV(NSV,V zV lLfvSmVVVV8 ΨV( VzSV zV͠ zS [S)VVV zVШVRVSV zVДV S xSmVVVV8 ΨV( xlLfVV"n8 ʠV()HVV"nh`dV8 V()VdVdLf lLfdW)ddLf                                         d4X)ddddLfdp 8piRYdidLfBRKORACOPORATSBORAASLORAPHPORAASLPHDTSBORAASLORABPLORAORAORATRBORAASLORACLCORAINCTCSTRBORAASLORAJSRANDJSLANDBITANDROLANDPLPANDROLPLDBITANDROLANDBMIANDANDANDBITANDROLANDSECANDDECTSCBITANDROLANDRTIEORWDMEORMVPEORLSREORPHAEORLSRPHKJMPEORLSREORBVCEOREOREORMVNEORLSREORCLIEORPHYTCDJMPEORLSREORRTSADCPERADCSTZADCRORADCPLAADCRORRTLJMPADCRORADCBVSADCADCADCSTZADCRORADCSEIADCPLYTDCJMPADCRORADCBRASTABRLSTASTYSTASTXSTADEYBITTXAPHBSTYSTASTXSTABCCSTASTASTASTYSTASTXSTATYASTATXSTXYSTZSTASTZSTALDYLDALDXLDALDYLDALDXLDATAYLDATAXPLBLDYLDALDXLDABCSLDALDALDALDYLDALDXLDACLVLDATSXTYXLDYLDALDXLDACPYCMPREPCMPCPYCMPDECCMPINYCMPDEXWAICPYCMPDECCMPBNECMPCMPCMPPEICMPDECCMPCLDCMPPHXSTPJMLCMPDECCMPCPXSBCSEPSBCCPXSBCINCSBCINXSBCNOPXBACPXSBCINCSBCBEQSBCSBCSBCPEASBCINCSBCSEDSBCPLXXCEJSRSBCINCSBCd)  slLf xlLf m "!m!"mLfd)dipfr00 p8 0Lf dv] dy]'w]y]"n8 u]()Hw]y]"nh slLf dpȷdry]&:):1:@d }]]]}]}]p]p xlLf }]p d}]}]}]pݧd0}]]]}]0}]p0]p0}] d] d]^] ]^]Rd]p ] slLf0]p0 xlLf]]"n8 ]()H]]"nh`0)^ 0RR^R ^樧)6 1 樀R ^)  樀 L8^ Lfi`d_d_ȷd_8 _() xlLf slLfd_8 _()ddLfd)G Y` ``"n8 X`()H``"nh ``) {lLfddLf8 U`0) {lLfl8``dpȷdr0pș,aA,a0dpdrp)R=r8WwW8 a() 8 a(8 a())a"mn8 a() a) {lLf slLf,a,að,a ,adpdr /dLfd)A[_a{ slLf xlLfd)   slLf xlLfdpdr cpdrdLfd)"!mLfdp ptȀt tdvdLfdpdrp)ȀpLed0PNdtȷdvȷdpȷdrp)Ȁdt) p Ƥ p Lfd042dtȷdvȷdpȷdr pt Ƥ slLf xlLf lLfd)a {)dLfhtjvhhrpv8pȷr0Geperi檠ȥȥȥpȥrttLctvLc`b`ep`berb`i`b lpȥrln ipir`pr! lDisposing of Nill Pointer LSdltnv8prtt'tt lHeap Damaged tttvLdtptrptpthh{rp!phrhpppr eLUerp ݠppprpr e ephrhpphbAh`;hhȷhȷh8``bb8``bhh`eiȷe  `wiȷw`pddLf0hjhi\ji^hiXjiZ8XdZffd TVhiljinli`nibhT)Tɀ Qgf fLvf fLvflTJTd lBad op code ($8e d 0)"!mLg/8XXXTXHdXdXXdhX`d lRun time error #$8e d 0 l at $8W V 08U T 0 "!mh8`UjUjUjUjUjUjUjUjUjUjUjUjUjUjUjUjUjUjUjUjUjUjUjUjUjUjUjUjUjUjUjUjcjrjj#jiihhjjhhk ifkMgRi_if@lziQhkSk?i@kehkkki*ikivkjijik k k(l~hxhhhFlhhijhh?jffffffffffffffffffffffffffffffffff lpgddpwdd` lp7ddp'dd` hLk hLk hLkdpȷdr dp lpdpd` hLk hLk hLk lpr dp ` lprdp` lprdpdp` ledX8pfr lHTphT`8dd dd` l"Hmdd` lp8dpd`8dTdTT` l"2mLxldd k l(T` l"2mLsl l"2mLsldid did`dpdrp)L{ldpdrpdʊd`dpdrpdpd`8dd lp8XpdZd`8dd lp8XpdZd`8dd ldd`8ddJ {l`8dd l {l`8dd ldʊd`8dd lprp) {l`8dd lprpdʊd`8dd lprpdpd` l"2mLsl l"2mrLsl8 lpppdd(pL{l%pL{l l"Hmdd` l"mdd`8ddXd` l"2mLsl8dddd`ddL{lL{ldid` l8dpddpd` l)Lsl&dd` l)ʆ ffdd`dd k l(T` lT`dddeTpVrpTdTdi d`dd`T)T`TTT` ldpdp`dpidfr`dd`fbd`` lProgram Stack Overflow8Llhppp)"!mplp8dd` "!m(k8H /mh(kl6EŦkŪŨk@k"1n" &&&8娪媐欈*8娰e欈셰8嬅宅k"1n' mOJ eeffff` mdFejf󅮥)@k8嬅宅k8夅妅ddd8娅媅Ƥk0d"o=X斥ŗ(8kdƘ(k0e日日"oI=XXƗ(k0e日日"oXXƗ(kHJJJh)8jkHELPvg+' ,E'%ALINKmЬ Ь ASM658164! ! $ASMLBЬЬ%ASMLGЬЬ(ASSEMBLE! ! CATCATALOGЬЬCHANGE! ! $CMPLtЬЬ%CMPLGЬЬCOMMANDS! ! 'COMPILE6Ь Ь ALINK file [LIST ON|LIST OFF] [SYMBOL ON|SYMBOL OFF] [ORG=val] [KEEP=outfile] [NAMES=(sub1 [sub2] ...)] The source file is linked. The ORG and NAMES parameters are allowed, but ignored. This command is functionally equivalent to ASSEMBLE. It is used for executing the advanced linker. Parameters: file Source file to link. LIST Source listing output flag. SYMBOL Symbol table output flag. ORG= The program is assembled to location val. Default is $2000. KEEP= Saves the finished program to outfile. NAMES=() Only the named subroutines are assembled. ASM65816 Changes the current language to ASM65816. ASML file [LIST ON|LIST OFF] [SYMBOL ON|SYMBOL OFF] [ORG=val] [KEEP=outfile] [NAMES=(sub1 [sub2] ...)] The source file is assembled. If the maximum error level found is not over the maximum error level allowed, the object module is linked. Parameters: file Source file to assemble. LIST Source listing output flag. SYMBOL Symbol table output flag. ORG= The program is assembled to location val. Default is $2000. KEEP= Saves the finished program to outfile. NAMES=() Only the named subroutines are assembled. ASMLG file [LIST ON|LIST OFF] [SYMBOL ON|SYMBOL OFF] [ORG=val] [KEEP=outfile] [NAMES=(sub1 [sub2] ...)] The source file is assembled. If the maximum error level found is not over the maximum error level allowed, the object module is linked. If the error level is still acceptable, the program is executed. Parameters: file Source file to assemble. LIST Source listing output flag. SYMBOL Symbol table output flag. ORG= The program is assembled to location val. Default is $2000. KEEP= Saves the finished program to outfile. NAMES=() Only the named subroutines are assembled. ASSEMBLE file [LIST ON|LIST OFF] [SYMBOL ON|SYMBOL OFF] [ORG=val] [KEEP=outfile] [NAMES=(sub1 [sub2] ...)] The source file is assembled. The ORG parameter is allowed, but ignored. Parameters: file Source file to assemble. LIST Source listing output flag. SYMBOL Symbol table output flag. ORG= The program is assembled to location val. Default is $2000. KEEP= Saves the finished program to outfile. NAMES=() Only the named subroutines are assembled. CAT [file] The named directory is cataloged. Parameters: file The name of the directory to catalog. If ommited, the current directory is cataloged. CATALOG [file] The named directory is cataloged. Parameters: file The name of the directory to catalog. If omitted, the current directory is cataloged. CHANGE file language Changes the files language to the named language. Parameters: file The name of the file to change. language Language to change to file to. CMPL file [LIST ON|LIST OFF] [SYMBOL ON|SYMBOL OFF] [ORG=val] [KEEP=outfile] [NAMES=(sub1 [sub2] ...)] The source file is assembled. If the maximum error level found is not over the maximum error level allowed, the object module is linked. This command is functionally equivalent to ASML. Parameters: file Source file to assemble. LIST Source listing output flag. SYMBOL Symbol table output flag. ORG= The program is assembled to location val. Default is $2000. KEEP= Saves the finished program to outfile. NAMES=() Only the named subroutines are assembled. CMPLG file [LIST ON|LIST OFF] [SYMBOL ON|SYMBOL OFF] [ORG=val] [KEEP=outfile] [NAMES=(sub1 [sub2] ...)] The source file is assembled. If the maximum error level found is not over the maximum error level allowed, the object module is linked. If the error level is still acceptable, the program is executed. This command is functionally equivalent to ASMLG. Parameters: file Source file to assemble. LIST Source listing output flag. SYMBOL Symbol table output flag. ORG= The program is assembled to location val. Default is $2000. KEEP= Saves the finished program to outfile. NAMES=() Only the named subroutines are assembled. COMMANDS Allows the command processor's command table to be edited. The program is menu driven. See the Reference Manual if any of the details are not obvious. COMPILE file [LIST ON|LIST OFF] [SYMBOL ON|SYMBOL OFF] [ORG=val] [KEEP=outfile] [NAMES=(sub1 [sub2] ...)] The source file is assembled. The ORG parameter is allowed, but ignored. This command is functionally identical to ASSEMBLE. Parameters: file Source file to compile. LIST Source listing output flag. SYMBOL Symbol table output flag. ORG= The program is compiled to location val. Default is $2000. KEEP= Saves the finished program to outfile. NAMES=() Only the named subroutines are compiled. COMPRESS! ! COPY! ! CREATEs! ! CRUNCHDCOPY! ! DELETET! ! 'DISABLE>ЬЬ'DUMPOBJcEDITc! ! ENABLEЬЬEXEC,! ! FILETYPE|HELP;! ! COMPRESS [file] A | C | A C The named directory is alphabetized, compressed, or both. Compressing a directory removes the holes left by deleting files. Parameters: file Name of the directory to compress. Defaults to the current directory. A If specified, the directory is alphabetized. C If specified, the directory is compressed. COPY file1 File1 is copied from its current location to the directory specified by file2. Note that file2 is a directory, not a file name. If file2 is not specified, the current prefix is used. Parameters: file1 File to copy. file2 Directory to copy to. CREATE file Creates a subdirectory called file. Parameters: file Name of the subdirectory to create. CRUNCH file Combines all of the object modules created by partial assemblies into a single .A file. File is the same name used in the KEEP directive to create the object modules. Parameters: file Keep name for the files to crunch. DCOPY d1 d2 Copies an entire disk. Single drive copies are possible. Parameters: d1 Source device or volume name. d2 Destination device or volume name. DELETE file File is deleted. Parameters: file Name of file to delete. DISABLE D|N|B|W|R file Disables one or more of the priviledges. B can be specified, but actually has no effect, since only a backup utility can disable the backup flag. If multiple privileges are to be disabled, the privilege are specified without intermittant spaces. Parameters: D Disable delete privelege. N Disable rename privilege. B Disable backup required flag (has no actual effect). W Disable write privelege. R Disable read privelege. file Name of file to enable priveleges for. DUMPOBJ [+X] [+D] [-H] [-S] [-O] [-F] [-A] [-M] [-I] [NAMES=(s1 s2...)] file Writes the contents of an object module to the standard output. Three major formats are available. By default, the file is dumped as object module operation codes and operands. A hex dump or 65816 disassembly is also possible. Several minor variations can also be selected with the switches. Parameters: +X Dump the file in hex format. +D Dump the file in 65816 native source code format. -H Don't show headers. -S Write short headers instead of long ones. -O Supress the body of the object module, printing the header only. -F Supress file type check - allows the use of any file type. -A Don't show the address and displacement fields. -M Assume short memory registers for disassembled listing. -I Assume short index registers for disassembled listing. (s1 s2...) List if specific segments to dump. If omited, all segments are dumped. file The name of the file to dump. EDIT file The editor is entered, editing file. Parameters: file Name of file to edit. ENABLE D|N|B|W|R file Enables one or more of the priviledges. If multiple privileges are to be enabled, the privilege are specified without intermittant spaces. Parameters: D Enable delete privelege. N Enable rename privilege. B Enable backup required flag. W Enable write privelege. R Enable read privelege. file Name of file to enable priveleges for. EXEC Changes the current language to EXEC. FILETYPE file type Changes the file's type to the type specified. Parameters: file The name of the file to change. type Type of file in one of the following formats: nnn (decimal number in [0..255]) $xx (hex number in [$0..$FF]) ccc (characters from a catalog, i.e. SYS) HELP If name is not specified, a list of the commands in the current command table is generated. If name is specified, the system looks for a TXT file by that name on the HELP directory of the UTILITY subdirectory. If found, the file is typed. Parameters: name Name of the help file to type. INITW$LINK! ! LINKED0&MACGEN]'MAKELIBy׬ ׬ NEW;! ! PEEK! ! PREFIX! ! PRODOS! ! QUITI! ! RENAME! ! #RUNЬЬ#SETINIT dev The disk is initialized. If name is specified, the new volume is given that name; otherwise, BLANK is used. Parameters: dev Device number (i.e. .D1) if the device to initialize. A volume name may be used if the disk has already been initialized. name Name to assign to the new disk. LINK file [LIST ON|LIST OFF] [SYMBOL ON|SYMBOL OFF] [ORG=val] [KEEP=outfile] [NAMES=(sub1 [sub2] ...)] File is linked. File should be the name specified in the KEEP directive. The NAMES parameter can be specified, but has no effect. Parameters: file Base name for the object modules to link. LIST Source listing output flag. SYMBOL Symbol table output flag. ORG= The program is linked to location val. Default is $2000. KEEP= Saves the finished program to outfile. LINKED Changes the current language to LINKED. MACGEN [+C] [-C] file outfile macrofiles File is the name of an assembly language source file. The utility scans file, producing a list of all of the macros used in the program. The macro files listed in the third parameter are then scanned for needed macros. If all needed macros are not found, the utility prompts for more. The macro file is written to outfile. The search stops when all macros have been found or the RETURN key is used when a macro file is requested. Normally, the generated macro file has all excess spaces removed to save space. If -C is specified, the excess spaces are not removed. It is safe to use outfile as one of the macro files to search. Parameters: +C|-C Crunch macros flag. file Source file to scan. outfile Output file name. macrofiles One or more macro files to search for macros. MAKELIB [-F] [-D] library [+|-|^ objfile]* Library is the name of s library to create or modify. If a library by that name already exists, it is modified. If it does not exist, it is created. The -D flag causes the utility to list the dictionary of symbols in the library. The -F flag causes a list of the files in the library to be shown. Objfile is the name of an object file (there can be more than one). If + is used, the object file is added to the library. Using - causes the object file to be deleted from the library. The ^ character removes the file from the library, and writes it as an object file. Parameters: -D List dictionary. -F List files. library Name of library to create or modify. +objfile Add objfile to the library. -objfile Delete objfile from the library. ^objfile Extract objfile from the library. NEW The editor is entered, and a blank edit file created. PEEK PEEK is a disk block editor. If name is dpecified, that disk is edited. See the user's manual for a complete description of the commands. Parameters: name Name of the volume to PEEK. PREFIX name The system prefix is set to name. The name parameter is required: ORCA cannot function properly without a default prefix. A .. can be used anywhere in the file name, indicating to move up one directory level. Parameters: name Sets the prefix to this name. PRODOS Changes the current language to PRODOS. Subsequent source files generated by the editor are TXT files instead of SRC files. QUIT Returns control to ProDOS, which prompts for a new system program. RENAME file1 file2 The name of file1 is changed to file2. Parameters: file1 Name of the file to change. file2 New name for the file. RUN file [LIST ON|LIST OFF] [SYMBOL ON|SYMBOL OFF] [ORG=val] [KEEP=outfile] [NAMES=(sub1 [sub2] ...)] The source file is assembled. If the maximum error level found is not over the maximum error level allowed, the object module is linked. If the error level is still acceptable, the program is executed. This command is equivalent to the ASMLG command. Parameters: file Source file to assemble. LIST Source listing output flag. SYMBOL Symbol table output flag. ORG= The program is assembled to location val. Default is $2000. KEEP= Saves the finished program to outfile. NAMES=() Only the named subroutines are assembled. SET dir prefix The SET utility allows you to set one of the five predefined prefixes used by the ORCA system without using the SYSGEN utility. The primary reason for doing this is to be able to switch the prefixes from within an EXEC file. The dir parameter is the name of the ORCA prefix to set. Only the first two letters are actually required - all other letters are ignored. The prefix parameter is the name of the directory where the files are found. For example, to change the WORK prefix to /RAM (which speeds up the editor) you would type SET WORK /RAM Parameters: dir Name of the ORCA prefix. prefix Directory to set it to. SHOW! ! SWITCH! ! SYSGEN! ! TEXT,Ь Ь $TYPE|! ! $XREF! ! SHOW LANGUAGE|LANGUAGES|PREFIX|TIME|UNITS Displays one or more system variables on the screen. Multiple variables can be displayed; in that case, the parameters are separated by spaces. Parameters: LANGUAGE Displays the current language. LANGUAGES Displays a list of all languages available. PREFIX Shows the current prefix. TIME Shows the time as reported by the ProDOS TIME call. UNITS Displays a list of the volumes in each drive. SWITCH file1 file2 Changes the order of the two files in the directory. Parameters: file1 Name of the first file to switch. file2 Name of the second file to switch. SYSGEN This is a menu driven utility that allows changes to the operating system. See the user's manual for a complete description. TEXT Changes the current language to TEXT. TYPE [+N] [-N] file [file2...] [n1 [,n2]] File is typed to the current output device. If the +N switch is used, each line typed is preceeded by a line number; the switch defaults to -N. N1 and n2 are line numbers. If n1 is specified, all lines up to n1 are skipped. If n2 is specified, the lines after it are skipped. Multiple input files can be specified - in that case, they are typed one after another. Parameters: +N|-N Controls the use of line numbers. file File to type. file2 Next file to type, and so on. n1 First line number to list. n2 Last line number to list. XREF [+L] [-L] [+F] [-F] [+X] [-X] [(AB,...)] file The global cross reference utility lets a file be scanned for all definitions and uses of a symbol. The utility can also be used to count the occurances of various operation codes. A language dependent file must be available on the utility prefix for any language to be scanned. Output can be redirected in the normal way. Parameters: +L -L List the file. Defaults to +L. +F -F Do a frequency count. Defaults to -F. +X -X Generate a cross reference. Defaults to +X. (ab,...) Up to 5 pairs of letters specifying ranges of symbols to search. Defaults to (AZ). file The name of the first file to scan.  U 1Z`Copyright (c) 1985_By The Byte Works, Inc._All Rights Reserved_P0 : A[`8`A[`8` ,\Q .L! "L! "} RUDv "+ ' cd)H "Z U ReNheGL[!>:  U _^Device not connectedL! _^Invalid device number '` '` `P ʭQ /àP P / !.L!P Q P P    I"!© Za "+!© a!)!!P "` _^Volume not foundL!P Q "HQ P @"hP `!K )pJJJJ # #` R5_# _#(j8(`H)pJJJJ ѩР)hL%hCBРЅl :%`+L!%'L!%i0L!%8` $)6)JJJJ6) &N$)`)p#)#)**LS%ׅکP$) #% :(Ld%өЭ )iԩѥѮ#) #%#)L% c()L%)L% )L%")%)%)L%#) j&#) &ѥ#H#) #%h` \I꽌ɪVɭսɖ0սɖ!ɖ 꽌ɪ\8`꽌ɪɖ۽*ݽ%ݙEۈзЮ꽌ɪФ`7)6)$)\8)$)9)86)7I$)i$)8)8) 8 'K( :(9) 'W( :(8)н :($))* 7)7)` )݌HhHh ' ' ' 'V )꩖݌$ )݌ ' ' ' ' '`Hh݌`80^݌Hh ( (݌ -( -( -( ( ( (EEHJНh ,( -( -( -(`HJН݌h Hh݌`8`0($ p,&"!)֠Ls(Ԯ#) 'L)#) .'ҥҭ")%)&)8 ) )Hh#) j&<ԥ)/8`#) j&#) &ع&)0 &)`%)8`") %)#) j&%)8` ) )$Lh(Q) Q)`' a{)_` _^Hit any key to continue.` _^INIT 4.1 Phase 1 B1 '` 6!K HH kWhh :) ^ RU/ :) RU *!# :) RUE. = ! _^File name error '` '` `ZW _^((Insert disk and hit any key to continue. L © $aN O J LWL iM i  ) _^ Destroy / _^ _^ (Y or N)?  _^ RUYNЫ '` '` ` \{-|-8 # {-|-) |-JJJJm  #`BLANKȱ@YY/YYYY ZY YA7 _^Cannot load boot tracks '` '` Z `Z© $a ZAR)© ZaZZ ZЍZZ ZR)© a` _^!!This is a one-time initialization _^&& to set up the boot track code. Place _^a valid ProDOS disk in _^the device to be initialized. ]URL )M R)© ZaN O J M M N J > '` _^Boot tracks could not be loaded '` '` `˅Y \ ,Z %ZZ© $a ZLWZZ ZLWZZ Z`INIT.BOOTYR)Yϝ[K $ [L[' _^Unable to format`+ _^Write protected`3 _^Drive too slow` _^No device connected` _^ I/O error` _^Drive too fast` m- U-V- V-R)©0 ZaRL )M N O  J L \M M N R)©0 a _^Initialize another volume? _^\\ RUYL1ZN6 _^((Please respond with yes or no (Y or N): L[` _^ I/O error '` '`` :) H _^Device to initialize: _^   :)  `P :) șP @P ` "`K )pJJJJ `BFGK CD© $alȱ/-^ȱ/-^LU]-^© Za *^-^© a-^/-^-^-^ ^7`-^ '`-^ _^ not available '` '`` _^Place .^ '`-^ _^ on line. Hit ESC to abort, or _^any other key to continue.ɛL]LU] -^-^ ,`b ,`` ^L'`8 ^iАѠ '`` '``hh왎_i __)  ,`L2__JJJJH_) ah -ib lll_&`hh"`iЅ©í$`JJJJ$`) a©â%`JJJJJJ a$`)@P©â%`JJJJ) a `$`)  '`&`ll"` l6aaaL` ba a ab '`L`+aa$%!ʆ$ '`$i '`%i '`LR` \ '` '`LC`abab '`aa֮axH '`hLR`aaab aaaaa`aHhaabaa` !a)`l8é©ĥ a=X¥Ðȑ8``e…åå aI=XX`e…åå aXX`HJJJh)8j`a aa  `  ` ȹ`ˆ`bbb,OKb i `b b`bb ie`ȱ( ȱib`0:8`` |$ 19 ; 75`Copyright October 1984_By the Byte Works, Inc._All rights reserved  @(ADC AND CMP EOR LDA ORA SBC ASL LSR ROR ROL BIT CPX CPY DEC INC LDX LDY STA STX STY JMP JSR STZ TRB TSB JSL JML COP MVN MVP PEA PEI REP SEP PER BRL BRA BEQ BMI BNE BPL BVC BVS BCC BCS CLI CLV DEX DEY INX INY NOP PHA PLA PHP PLP RTI RTS SEC SED SEI TAX TAY TSX TXA TXS TYA BRK CLC CLD PHX PHY PLX PLY DEA INA PHB PHD PHK PLB PLD WDM RTL STP TCD TCS TDC TSC TXY TYX WAI XBA XCE CPA BLT BGE GBLA GBLB GBLC LCLA LCLB LCLC SETA SETB SETC AMID ASEARCH AINPUT AIF AGO ACTR MNOTE ANOP DS ORG OBJ EQU GEQU MERR SETCOM EJECT ERR GEN MSB LIST SYMBOL ABSADDR INSTIME PRINTER 65C02 65816 LONGA LONGI IEEE TRACE EXPAND DC USING ENTRY OBJEND DATA END ALIGN START MEM TITLE RENAME KEEP COPY APPEND MCOPY MDROP MLOAD MACRO MEXIT MEND v* ** > w:`- ̕-;# BA:#m -© mG ĝ--© G(: -2 EDCannot write to EDm :F|$L75 - -LY--© 7GL= ȗ-LY--` D-© 7GL= ȗ-i-X Y © 7GY a Z b [ \ W ] c ^ d _ :^ ] ة- ̕- -` ED Cannot open Lq, EDError writing to Lq,n n n n ð-b-HHHbccebd >hhh`}#6* }#>*LW. 5LO.!'! 4 ?,'$!'!' ? ` e< 9A ; 0X Q P X L^.` 8`!*!; !` ! !a \!! !A 4!! %' &!'" !"ԩ !!' C/L>/" C/L>/  R/8`|/!|/` !`! !! "L`/8`   7///© mG ///© G8`(`~%o .h 0o 7D] 0 o I))H 0 B < 9m 4 hm * L/  }/9~%)~% 0/ 08` EDInvalid Device NumberL0 EDDevice not connected|$L75H@m n ho n `o n @n ` 5` = ; 5 = @5۩!&1 !]*" :&1! : 5 : = + ;L0 - X Q P A m L> © 7G =`© G ȹ   i@n iAX S R T L.2'5++++L3++++++L3++m+++ +z+++'+++/-5*+45 X@-5z+'© mG ʼ+z+'© G++'G +++© mG'5+ EDNo entries found`z+L2++ *z+)*z+*+*9+ 7ݷ*L20L24L4:+ 7?=LW49+9ݸ*9+*L2*л9+L4L2*m*?L2A*u*v*/v*̷* ȹ*v*v*+I+D EDu* && :Fi :Fi :F kDQL3NL2'5+Au*m 8` >5`82ii|# |#8`ȱLH5` ! `! `8` 5!`! !!8` X "X g  X@ ! © mG W H © Gh Ý!L68`L EDFile read error.`   © mG ȱ i@n iAT X Q P >X S R L5 &77 H h 77`a{)_`HHH*9hhh+Am *v**/,v*A© mG ǡ+v*A© Gv*Ȣ* *v*v*9++) "*?**=*++ 9+/** ʆ* *:+9+*%Au****/ʽ*/*+© mG Ĥ++© G(L8+ EDIllegal Path NameL9+© 7GL= ȶ+++++ˍ+++++#+++ ++˅+© mG ʼ+˅+© G++++8*9`! EDMACGEN 4.1 Phase 1 B4 :F  R +-e 6+ 6 7C Lg9 EDUndefined parameter :F :F|$` ED File name: ED 5@hh``© 7G{`a© G`idaie`bac¥ 7G8 '¥ Gee`L= @5Yi8|#e >}$ ED.ȥȑ|#ȹy#` .( ! ! ! - -`}#^*8`` ED Scanning >X 5 = + &2 ?L.; :F+ 9A+3 :F :F EDNo macros in the program :F`X ; ̧;X }$ [. > +`}#n*8``+U+ ? ) :F EDMacro file name: ED 5@U /n  B 7+= 2)+3 ED Processing EDm LQ<+ 9AL;` >L;Am "` ? / :F EDOutput file name: ED :F 5@L= /Am :# Dn  B=© mG ė==© G(: =2 EDCannot write to EDm :F|$L75 = ='=© 7GL= ȑ==` ` EDCould not open L=|$L75n n n n ð ED Out of memory :F :F|$`!.3;/!+*' |# 5! 7 }#|#8`` /n  B @S>© 7GL= Ȁ>>X 8` EDm ED could not be opened.`n |#&|# |# 1%}#8`ii*v`% EDSymbol table overflow`HHHcab`=S?T?`a U?cbS?T?`bachhh` HHH` 2? Dn ` j  X@? _ hhh`  6L?`&*|#A ,@ {# 5%! 7, }#`|#!,`! 7 -@ >-@` ?  6 șn L?@n 8``@© 7G0 B@@ @@S T  R ` ED ED could not be re-opened :F :F|$L75 'A4+Aɰ-) EDFile must be SRC or TXT :F`8` n 8ȱLAA` ? +8` :F EDUnresolved macros: :FO8WB :FOȱ :F ED  :FOȱLA :F :F8`ȱ/Cȱ/򈌛CLjBC© mG ǘCC© GC/ٛC̛CC ĆC/`C :F̛C ED not available|$L75X "Q S R S f P X ` "Q S R S i P ` +Q P + EDPlace C :F̛C ED on line. Hit ESC to abort, or EDany other key to continue.ɛLBLjB CCii@n n n n / ȩ/n n n @ ȽeDn n `SYSMAC !! ED! !!! 7Y8N4Q0 ED""Please answer yes or no (Y or N): LsD` ?FH ?F`8 EiАѠ :F` :F`hh왡Ei EE)  ?FLEEEJJJJHE) Hh -iH lllE9Fhh5FiЅ©í7FJJJJ7F) G©â8FJJJJJJ G7F)@P©â8FJJJJ) G 2F7F)  :F9Fll5F l6,G-G+GLF H*G .G *GH :FLF+*G*G$%!ʆ$ :F$i :F%i :FLeF \ :F :FLVF*GH*GH :F*G*G֮*GxH :FhLeF+G*G*GH +G*G*G,G-G`,GHh*G*GH+G,G` 4G)`l8é©ĥ G=X¥Ðȑ8``e…åå GI=XX`e…åå GXX`HJJJh)8j` H H H  `  ` ȹ`ˆ`HHH,OKH i `H H`HH ie`ȱ( ȱiH`0:8`` R"Lp! &*e+"3*b*p+(!Y+)`g!.CONSOLE= = d! c!d! c! %* $   ! ! L!L+1 I1 1+`HH  5   i m/ hh`5 i/ 2"0 4  Y.i Y.i Y.` !#%'*,.03579<>@BEGIK  6 `+   :"8 ""© @/ """© e/8`(`=!5 5 5 ` &* = .n ~%* = %D` ~%+ * = w0))H ~%+ B+ < 9m+ 4+ hm+ *+ L"+  g"8=!)=! #/ #8` --Invalid Device Number`(! --Device Not Connected` --Not A ProDOS Volume`H< = * h= ` $M!= = < M! $$9 w0OH&&&eeh)e $L# $ % % &&3 2 M Y.i Y.i Y. Y. --%%Block does not exist. Block number: L#; <  Y.i Y.i Y. Y.`N! O! ` ` " `= = }%= = L$ --}%L$ = > }% = = = --}%`(  --}%= = }%=  Y. --\L$* > = `HJJJJ %a!h) %b!`a{i` 0:i` w0 %AG`8`A)` &` Y.5 / 4 0 1 -- Block number Y., -  * --:, i , - ; 2 < 3 9 © / -- Out of memoryLH*9 : Ȅ *)2 ȱ3 ` * = * `0 4 4 4 / / 5 5 `* &* = B'© @/ Ǹ''© e/'/'L ''Ls'/0. * "L'` --Invalid Volume Name`= %  0̙'LX''+ g"=!)=!=!ݻ'8`+ +  --Volume Not Found`' Y. i Y.i Y. Y. -,; ; , < - -- ($ * --)`) ) --Block number -,; ; , < - -- ($ * --), - Y. * --:) -0  %L3)) i 1 a! b! --_! оi , i , - , - L( Y.d! c!`).PRINTER0 H0 "h0 ! %L) ! ) i 1 a! b! --_!`0 * %0 % !4  )L) ) L * ! ) *`- % --_!, % --_!`9 : © @/hh Y.i Y.i Y.L+ Y.i Y.i Y. --Read block number # 7  Y.i Y.i Y. Y. ;(L1+ Y.i Y.i Y. -- Read ErrorL*0 4 4 #4 / / / 5 5 5 ` 6 `/ H5 H5 / )/ 5 h5 h/ `0 I0 1+`5 5 ` Y.i Y.i Y. --Write block to # ;( Y.i Y.i Y. Y. --Write this block (Y or N)? D,QN 7  ;( Y.i Y.i Y. Y.` Y.i Y.i Y. -- Write ErrorL;( $ = > > %Y=N9Q5 --""Please answer yes or no (Y or N):  Y.LD,`-ɀk-q-y-L=-y-z-h-{-i-|-y--r-8ЅЩх ^.z-y- 0r-z-y-ҝ}-{-нj- ^.Н{-}-0y-0r-y-8-y- -r- Y.y-`' -32768 -LY.8 -iАѠ Y.` Y.`X.hhT.iЅ©íV.JJJJV.) /©âW.JJJJJJ /V.)@P©âW.JJJJ) / Q.V.)  Y.X.llT. l6 0` .ЅҥхөЅ`!&&&8᪥҅Ј*8eЈҥ 8ЅЩх`Ӆҥ8ЅЩх8`é©ĥ /=X¥Ðȑ8``e…åå /I=XX`e…åå /XX`HJJJh)8j`/ //  `  ` ȹ`ˆ`k0l0j0,OKk0 i `j0 j0`j0k0 ie`ȱ( ȱij0`0:8`` &1` 0 8qȪ LEvaluation Stack Overflow  Software InteruptInvalid OperationDivision by ZeroOverflow UnderflowInexact` ! !e! ! !f! !  e!g! f!h!L  "!((Bad prefix table name. Valid names are: "! SYSTEM "! LIBRARIES "! LANGUAGES "! UTILITY "! WORK`q!mr!m !  ! ! !/. {!@ ! 5 "!))Missing/illegal prefix or too many parms.`{!Š@{!`SYLILAUTWOA) `0 : A[`8`a{)_`8 "iАѠ "` "`덵"hh왱"iЅ©í"JJJJ") "©â"JJJJJJ "")@P©â"JJJJ) " "")  ""ll" l6# ##  `  ` ȹ`ˆ`###,OK# i `# #`## ie`ȱ( ȱi#` !"#$%&'()*+LG%      ## *` 0L&#   %ȱ %ȱ%ȱ%8% %L&! )f7%8%%;%%=%&O S! )99%:%%<%%>% /7%8%&&O LP2 D99File Not Found` ; ,A[`8`  #  ,L<&#  ,LI&#  ,LZ&`@O P /2 O O / L&ȽO O O @O `   : ' ' '© : ' ' '© :8`(`! R/ #.n , # ,D` ,  # ;))H , B < 9m 4 hm * L2'  &8!)! '/ '8` D99Invalid Device Number` 4`H## h#`)%%%%Lk(% %% % % %L(% %m % % % % 4$$%'%%$'© : $ 4$'© :%%'J % 4$$© :)% D99No entries found`$L'%% O $)O $O %O O L'0L(LR) ?=L!) 9P  O L'O о LR)L'O m ?L'A  / O ȹO   %I%D D99 && 9i 9i 9 T3QLk(NL')%8`  i p*%%%%%%%%Ln*) 8`%%% %%%i p*%L*`m %` R/ # : D99 File Name: * , '# R/ # `8`# 8, # #` , E%`A ! 4& ' b/A R!% 'ˢA ! E%T!/S!S!/L+ T!/ S!L+ 9 D99##Files Must Be In The Same DirectoryL*F 4L*! h&!S! h&S!ح%L6,%L6, D99Files Switched: D99 D99 D99/ D99! D99 D99 D99/ D99R!8`# # ,Τ##LG, D99,LG, ##, ### D99,`(  D99,##,# 9 D99\L8, ##`a{i`HHHK/hhh% R/ # $p }*L=/ L- '` # @ %00 00'0 ȭ0 ȭ<% 09% :%  Aȱ 0ȱ 0% 0ȱ 00m=%00 00'0 ȭ0 ȭ;% L0`A / )m ʈ 000!© : 0 E%0 0 ` c1+ 00000!© : 0`!! $© : $$\1]1©P :% D99Cannot find buffer E%` [1]1 ^1 E%8` 4L11PL2L 2 /, A© : M2 A© :     /  L1   &W3!)!!      ҭ +L28` 9 D99Duplicate volumesLJ2 D99Volume Not Found`  iL3ȱL3i)%*% %%im %%L2i%J3ȱJ3 c1LI3 O38J3 K3LI3 P3 Q3J3R3K3S3 N3L4L3J3M3K3 i i  iL3ȱL3L2`#3 4 8, #ݥ## ,Y=N9Q5 D99""Please answer yes or no (Y or N):  9Le3H3#4 h`y5HHH55Zͅ58eL4 D99 95hhh` D99ProDOS error number D9!85L>5Bad system call numberBad system call parameter count%Interupt table full' I/O error(No device connected+Disk write protected. Disk swithced@Invalid pathnameBMaximum number of files openCInvalid reference numberDDirectory not foundEVolume not foundFFile not foundGDuplicate filenameH Volume fullIVolume directory fullJIncompatible file formatKUnsupported storage_typeLEnd of file encounteredMPosition out of rangeNFile access errorP File is openQDirectory structure damagedRNot a ProDOS volumeSInvalid system call parameterUVolume control block table fullVBad buffer addressWDuplicate volumeZFile structure damagedLanguage not available9ɀ888L88888888-88ЅЩх 988 0888ҝ88н8 9Н8808088898 ;98 98`' -32768 ;9L98 ;9iАѠ 9` 9`9hh9iЅ©í9JJJJ9) ;©â9JJJJJJ ;9)@P©â9JJJJ) ; 99)  99ll9 l6 <` \:ЅҥхөЅ`!&&&8᪥҅Ј*8eЈҥ 8ЅЩх`Ӆҥ8ЅЩх8`é©ĥ ;=X¥Ðȑ8``e…åå ;I=XX`e…åå ;XX`HJJJh)8j`_; `;_;  `  ` ȹ`ˆ`;;;,OK; i `; ;`;; ie`ȱ( ȱi;`0:8`` <` 9< 8qȪ LEvaluation Stack Overflow  Software InteruptInvalid OperationDivision by ZeroOverflow UnderflowInexact`-./0123456789:;<=>?@ABCDE )4L>46502 65C026580265816!.CONSOLE SYSTEM GENERATION SYSGEN is a menu driven program which allows one to change the table-driven characteristics of ORCA/HOST. OPTIONS : C : SYSTEM CHARACTERISTICS - A menu which allows the user to change various systems constants. S : SYSTEM PREFIXES - A menu which allows the user to re-define the system prefixes. P : PRINTER CHARACTERISTICS - A menu which allows the user to enable/disable the printer, set the printer slot, and set the printer initialiazation string. Q : QUIT - Quits the program and returns you to the MONITOR Note: if any change has taken place, QUIT will prompt, "Would you like to save these changes?" A negative response will not save the changes onto disk; however, they are in effect until the next time the system disk is booted up. SYSTEM CHARACTERISTICS System characteristics are system constants defined in ORCA/HOST. The menu lists the name of the characteristic and its current state. The system characteristic menu is toggle controled. You simply type in the mnemonic and the state is changed. OPTIONS : C : CLICK - Click is the audible sound heard when a key is depressed. Click enabled emulates the sound of a typewriter. With click disabled, the sound is not generated. W : WAIT - Wait enabled initiates a pause on a line feed. The length of the pause is controlled by a joystick or paddle. Subsequently the scrolling speed can be changed. Wait disabled does not generate a controlled pause. P : PROCESSOR - There are currently four available processors that ORCA/HOST is compatible with. ORCA/HOST will allow the user to take advantage of the capabilities of the processor. To change the processor, hit the P key until the processor installed in your computer appears in the window. L : LANGUAGE - There are currently several available languages defined by the system. This will be the language for all new files created by the system. To set the default language hit the L key until the desired default language appears. This default can also be changed from the command processor. SYSTEM PREFIXES In order for ORCA/HOST to locate object programs quickly, it looks only in one location, defined by the system prefix path and the file name of the object program. ORCA's object programs include the MONITOR, SUBROUTINE LIBRARIES, UTILITIES and LANGUAGE programs such as the ASSEMBLER, LINKER, and any COMPILERS currently on the system. ***** CAUTION **** Before attempting to alter any of the systems prefixes, make sure the associated object programs have been relocated to the new prefix path. THE ABOVE ESPECIALLY PERTAINS TO THE MONITOR. If the monitor prefix has been changed, and the MONITOR has not been re-located, it is not possible to exit SYSGEN. What happens is that upon exit of SYSGEN, control is passed to ORCA/HOST, which tries to locate the MONITOR. If the MONITOR is not at the prefix location, then control is passed to $2000 where SYSGEN lies. Therefore, SYSGEN is executed again. PREFIXES : M - MONITOR : Location of the MONITOR, login file and keyboard macros. L - LANGUAGE : Location of the ASSEMBLER, LINKER, and COMPILERS U - UTILITY : Location of the utility programs. S - SUBLIB : Location of the subroutine libraries. W - WORKSPACE : Location of the workspace for the ASSEMBLER, LINKER, and COMPILER. PRINTER CHARACTERISTICS Printer characteristics include the printer enable/disable switch, the printer slot number, and the printer initialization string. NOTE: With printer disabled, the system assumes a printer is not on line. Subsequently, output directed to a printer is not possible. NOTE: Due to the increasing number of printers on the market, SYSGEN allows any character, with the exception of the left and right arrows, to be entered into the printer initialization string. This includes the "return" key. Subsequently, the only way to exit the insert mode is to use the "right arrow" key to get to the end of the insert window and only then can the "return key" be used to exit the insert mode. OPTIONS : P : PRINTER - Printer enable/disable switch. ORCA/HOST uses this to determine if a printer is on line. S : PRINTER SLOT - Printer slot is the slot number of the location of the printer interface card. P : PRINTER INITIALIZATION - The printer initialization string are the initialization characters sent to the printer by the printer driver in ORCA/HOST. It is possible to enter control and escape characters into the initialization string. These characters appear in inverse mode. Note: (ctrl)-M is a return character. 9A[`8`0:`8``l6 !`! !! ! kN kNi kNi kN MMSYSTEM GENERATION kNi kNi kN MMCopyright (C) July 1984 kN/i kNi kN MMFrom The Byte Works, Inc.!! 77 kNi kN i kN MMC: SYSTEM CHARACTERISTICS kNi kN i kN MMS: SYSTEM PREFIXES kNi kN i kN MMP: PRINTER CHARACTERISTICS kNi kNi kN MM ?: HELP kNi kNi kN MM Q: QUIT kNi kNi kN MM Enter Command kN"i kNi kN 9C DLT4S :LT4?ʩ! 9LT4P ?LT4QL6 D!U kNi kNi kN kN MM&&Would you like to save these changes? MLN B kN` kN kN-i kNi kN MMInvalid Command L26!` kNi kN!i kN MM @ MM- kNi kN!i kN@ MM MM-@m!! kNi kN!i kN MM MM-`  8  L8 MM8L8   8    kN`(  MM8  8  kN MM\ kNi kNi kNL7!``!iA@! MM!` 4   _!_!8`_!L8` 9: 8Q!_!0 ! BL 9!΀!' &4! &4F!8!_!! BL 9! 9 9: BL 9 (΀! &4F!! &4L 9! 9L 9 ! 9`a{i`!` kNi kNi kN! M MM: ` M MM9 `* Hit Any Key To Continue *%* Hit Any Key To Return To The Menu *8PF!N!8!N!!F! &4! &4! &4`@//ȑ:8@::m:@@m::0` kN!! 77 kN i kNi kN MMSYSTEMS PREFIXES kNi kNi kN kN kN i kNi kN MMM: (! 8 kNFi kNi kN MM) kNi kNi kN kN kN i kNi kN MML: (! 8 kNFi kNi kN MM) kNi kN i kN kN kN i kN i kN MMU: (! 8 kNFi kN i kN MM) kNi kN i kN kN kN i kN i kN MMS: (! 8 kNFi kN i kN MM) kNi kNi kN kN kN i kNi kN MMW: (! 8 kNFi kNi kN MM) kN i kNi kN MM ?: HELP kN i kNi kN MM : QUIT kNi kNi kN kN kN i kNi kN MM Enter Command kNi kNi kN 9! kN-i kNi kN MM !M!! JL;L!! JLx;U !! JL;S !! JLD  G kN i kN i kN MM S: Printer Slot -> !!! ML! kN i kN i kN MMI: Printer Initialization ( > MM) kN i kN i kN MM ?: HELP kN i kNi kN MM : QUIT kN i kNi kN MMEnter Command  kNi kNi kN 9! kN-i kNi kN MM !P ! 8LA! %7L? kN`?ʩ/ 9L?I G!L@S!L? kN kN-i kNi kN MMInvalid Command L? iB MMB`_! &4_!` kNi kNi kN kN MM Path name: 7    LB     D!L;CD ! y: qDLCFLC kNi kNi kN kN MMPath not found.  kN ` DD D# MMUnable to create fileLCD© O ȏDDD8DD ˕D@ kNi kNi kN kN MMUnable to write. kN ̝D` !!! ORCA.HOST !` kN!! 77 kNi kNi kN MMSYSTEMS CHARACTERISTICS kNi kNi kN MMC: Click ->  G kNi kNi kN MMW: Wait ->  G kNi kN i kN MMP: Processor -> _B kNi kN i kN MML: Current Language -> 4? kNi kNi kN MM ?: HELP kNi kNi kN MM : QUIT kNi kNi kN MM Enter Command kN$i kNi kN 9! kN-i kNi kN MM !C ! 8LF! %7LEW! 8LG!LFEP!LEL&! 8G0! %7LE kN`?ʩ$ 9LD kN kN-i kNi kN MMInvalid Command LF 8 MMENABLE ` MMDISABLE`! kNi kN i kN MM-> kNi kN!i kN kN kN i kN!i kN MM( > MM)JJ   kN i kNi kN MM//To Exit Insert Mode: Advance to the end of the kN i kNi kN MM//insert string using right arrow and hit return. kN i kNi kN kNJP kN(i kNi kN kN MMHit Return To Exit Insert Mode гL:J kNJi kNi kN MM^ !3JLIΒJΑJJ  kNi kN!i kN >LIJLIJJLIJ. J ȩ  kNi kN!i kN >JJLI kNi kN i kN MM  kN(i kNi kN kN kNi kNi kN kN` kNi kN!i kN MM-> kNi kNi kN kN kN i kNi kN MM( 8 kNCi kNi kN MM)! A!LK! LL! kNLLi kN!i kN 9JLLL!LL LL!L0K LLBLL!!! Ш!LLL0K`/LL.LL LL!!KL!!!/KLLK kN`!iA·!LK@!!` 4 448LL ʽ!/%LLB8 JL!! MMJLLLL0K kNL0K 9YWNSQO kNi kNi kN kN MM""Please answer yes or no (Y or N):  kNLML`ፑMɀ}MMMLOMMMzMM{MMM-M8ЅЩх pNMM 0MMMҝMMн|M pNНM὏M0M0MM8MM MM kN̋M`' -32768 MLkN8 MiАѠ kN` kN`jNhhfNiЅ©íhNJJJJhN) cO©âiNJJJJJJ cOhN)@P©âiNJJJJ) cO cNhN)  kNjNllfN l6 AP` NЅҥхөЅ`!&&&8᪥҅Ј*8eЈҥ 8ЅЩх`Ӆҥ8ЅЩх8`é©ĥ RO=X¥Ðȑ8``HJJJh)8j`O OO  `  ` ȹ`ˆ`5P6P4P,OK5P i `4P 4P`4P5P ie`ȱ( ȱi4P` P` vP 8qȪ LEvaluation Stack Overflow  Software InteruptInvalid OperationDivision by ZeroOverflow UnderflowInexact`E$XREFG )0)E-XREF.ASM65816V0 + +EHIJKLMNOPQRSTU 1 .8 ? x3`Copyright October 1984_By the Byte Works, Inc._All rights reserved0AZ@A [ _~`8` 1Lx3`a0*  7 4i  =`0  7111© F 111© F8`(`1n0.h 2n0 7D] 20n0 YJ))H 20B0 < 9m040hm0*0L10 z191)1 2/ 28` CWBInvalid Device NumberL2 CWBDevice not connected 1Lx3H@l0m0hn0m0`n0m0@m0`88`` X0Q0 P0@ m0L"=}© F =`© F0ȹ000i@m0iAX0S0 R0T0L28` 3``05+# 7 4i iȱi`P 00© F W0H0© Fh0 PÝ0L38`L CWBFile read error.`0 00000© F0ȱ0i@m0iAT0X0Q0 P0 "=X0S0 R0L3 1_~ 1b0c0 ȹb0`I 1 8`iiL4i i 8 9ii = 18` ` 1m0 @> © F e7! CWBInput file not found`i7+ɰ$ CWBFile must be TXT or SRC`j7 11ȱ@7  # CWBLanguage not available` 8 ie L6 777/ȩ/7`7ș77ș7777 @>z7© F =` w7( CWBFile not found: CWB7`|77 7 © F|7~7 }78`XREF. m07  .G%E ee  1`a{)_`; ȱiiL7` 99 1 Y5L 9+s-o(L+9 a0 1 Y5 7 '1&b0 Y5 7 '1_~b0 Y5,) CWBRange specification errorhh`+ Y5 7L_0L>8F`0L>8Xa0L>8 CWBUndefined parameterhh` CWB File name: Bd@l0LB9L69 Y5 n0l0m0¥ F8 -¥ Fee n5hh`   48    8  `_03 C[A1 CO ٳ0 0 C C ;1``0` < CWBFrequency Count: ;1 C ;1 CWBAlphabetic Numeric ;1 C ;1   78  -  C CHB C{@ BL; i i  L; i i ȱ.8]ii 7L; C CHB C{@ C ;1ii  L:``a0*  7 4i =`a0` < CWBCross Reference: ;1 C ;1      L< C  B 1  V  CHB[1 2Ly< 2 CHB,1 CHB 1 =LZ< CHB] CHB 11  /  2L< 2 CHB,1 CHB 1 =L< C ;1 i i L< 1 C` C C C` CWB Out of memory0` 1m0 @>~=© F {==X08` CWBFile could not be opened.`m0%0 CWBSymbol table overflow`8 =`ȑȽ1 L=ȹ8`P81 C ;1 B 1 C[A1 .GE$    `ȱ/v?ȱ/v?L>v?© F s?v?© Fv?/v?v?v? a?/`v? Cv? CWB not available 1Lx3 CWBPlace w? Cv? CWB on line. Hit ESC to abort, or CWBany other key to continue.ɛL>L> v?v? "=h CWBXREF 4.1 Phase 1 B2 C .GE$11 3+0 9 30 J10 ;0 2 -: ;` CYI C`ZAɀFALATALATAUACAVADAWATA-MA8ЅЩх DUATA 0MAUATAҝXAVAнEA DНVAXA0TA0MATA8ZATA BMA CTA`' -32768GBɀ %B0B =BLA=B>BB?B =B-1B fF E>B=B 01B>B=BԝCB?Bн"B EН?BCB0=B01B=B8GB=B B1B C=B`ʚ; -2147483648 BLC8 BiАѠ C` C`hhCi CC)  CLBCJJJJHC) Hh -iYI lllC덪Chh왦CiЅ©íCJJJJC) {H©âCJJJJJJ {HC)@P©âCJJJJ) {H CC)  CCllC l6ꎝDDDL_D XID D DYI CLWD+DΛD$%!ʆ$ C$i C%i CLC \ C CLCDYIDYI CDΛD֮DxH ChLCDDDYI ΜDΛDDDD`ꎝDHhΛDDYIDD` D)`l8 eJ` EЅҥхөЅ`!&&&8᪥҅Ј*8eЈҥ 8ЅЩх` E& 4ELEJ eҥeffffЈ` 4EхХ҅ѥӅ҄LEІFѐejfЈѥ) eJ` 8ЅЩх`Ӆҥ8ЅЩх8`eХeѥeҥeP eJ` eJ` fF &&&&&&&8ԥե֥Ј8ЅЩхѩ҅ҩӅ`ׅօՅԥ F8`é©ĥ G=X¥Ðȑ8``e…åå GI=XX`e…åå GXX`HJJJh)8j` yHhhtHiyH?Ѕ© \H \HzH {HyH YH \HLG#© \H \H {H YHl YH \HLG© \HxH \HH {HhzH дЕ YHxHxH \HH Hh xHȹLUH LUH LUHHʥ˩Ѕȩh LUH (lltHwH.vH*wH.vH*wH.vH*`H HH  `  ` ȹ`ˆ`MINILI,OKMI i `LI LI`LIMI ie`ȱ( ȱiLI`0:8`` K` J 8qȪ LEvaluation Stack Overflow  Software InteruptInvalid OperationDivision by ZeroOverflow UnderflowInexact`WXYZ[\]O %m  " ! @" ># c" # $" !   ٍ `A[~_8`` <% "`m *;! O m 8`` L"!" !"L" #L"m 'm : ?2P+P&m 'm ' P? `COPY APPEND m (`m (`8` " m P`m (l n 8`m .'># "m !P  "`m # " $L#' ,% `$ %Q`m An 3m , " $L#' ,%`$ % `) ,Q` ""m ' #.&m " r(`m > m P0 m#`.( ! H%H #h`h m#` #` ^$`m <%Q`H CFD ,%Um ',JQ`Q?m 'Q3m ' " $L$$ %`Q`Q m ,Q` "Ƚm 4" " P"% r(%`a{)_`Pm <%AG8``P m '8``0:`8` "!3%!`i (rة`ADC AND CMP EOR LDA ORA SBC ASL LSR ROR ROL BIT CPX CPY DEC INC LDX LDY STA STX STY JMP JSR CLI CLV DEX DEY INX INY NOP PHA PLA PHP PLP RTI RTS SEC SED SEI TAX TAY TSX TXA TXS TYA BRK CLC CLD TSB TRB STZ PHX PLX PHY PLY MNOTE ANOP EJECT ERR GEN MSB LIST SYMBOL PRINTER EXPAND DC USING ENTRY DATA PRIVDATAEND PAGE START PRIVATE KEEP COPY APPEND MCOPY MDROP MLOAD MACRO MEND CPA "9" `)( ii! """ "` 1)& (L)J eҥeffffЈ` (хХ҅ѥӅ҄L)ІFѐejfЈѥ) +` 8ЅЩх`Ӆҥ8ЅЩх8` *hh왦*i*?Ѕ© * ** ** * *L*#© * * * *l * *L*© ** *H *hͬ* дЕ *** *H *h *ȹL* L* L*Hʥ˩Ѕȩh L* (ll**.***.***.**`* **  `  ` ȹ`ˆ`++~+,OK+ i `~+ ~+`~++ ie`ȱ( ȱi~+` .,` + 8qȪ LEvaluation Stack Overflow  Software InteruptInvalid OperationDivision by ZeroOverflow UnderflowInexact`