07; 'EXMON.M08; (NEWII3 ; NEW LOCATER FOR MACHINE COD0; SYNTA@; N 1111 2222 3333 4444 5555 P; 1111=START AD`; 2222=END ADp; 3333=OFFSEԀ; 4444=LOWER LIMIԐ; 5555=UPPER LIMI; W=ADJUSTING A .WORD TABL  0}7; 'EXMON.M09; (TABII3 MODE .BY $40 2 $45 0 .BY $D0 8 $40 @ .BY $30 $22 $45 $3P .BY $D0 8 $40 ` .BY $40 2 $45 $3p .BY $D0 8 $40 .BY $40 $02 $45 $B .BY $D0 $08 $40 $0 .BY 0 $22 $44 $3 .BY $D0 $8 ($@CHAR2 .BY 'Y' 0 'X' '$' '$' PMNEML .BY $1C $8A $1C $2` .BY $5D $8B $1B $Ap .BY $9D $8A $1D $2 .BY $9D $8B $1D $A .BY 0 $29 $19 $A .BY $69 $A8 $19 $2 .BY $24 $53 $1B $2  .BY $24 $53 $19 $A0 .BY 0 $1A $5B $5@ .BY $A5 $69 $ 4 $B4 $28 $6p .BY $74 $F4 $CC $4 .BY $72 $F2 $A4 $8 .BY 0 $AA $A2 $A .BY $74 $74 $74 $7 .BY $44 $68 $B2 $3  .BY $B2 0 $22 0 .BY $1A $1A $26 $2@ .BY $72 $72 $88 $CP .BY $C4 $CA $26 $4` .BY $44 $44 $A2 $Ccegp; ***COND ADR AND NEW AD; TMP0=NA, TMP2=SA, TMP10=E PARM3 JSR SKAT2 ;SKIP SPACES GET SA TO TMP0 STX *PTCH ;SET FOR OP CODE RELOCAT@ JSR SRDAE ;GET EP JSR TOT10 ;TMP0=XX, TMP2=SA, TMP10=E` JMP SRDAE ;GET TMP0=NA, TMP2=SA,TMP10=E; (TMP0),Y ;SAVE  .BY 'T' ;TRANSFER MEMORـ .BY 'W' ;WALK THRU MEMORِ .BY $27 ;ALTER MEMOR .BY ',' ;MODIFY DISASSEMBLADRS .SI ASSM-0 .SI BREAK-P .SI COMPAR-p .SI DISA- .SI FILL- .SI HUNT-0 .SI INTER-P .SI NEWLOC-DA (TMP0),@ SBC *SAL+P BCC NEW900 ;TO LOW SKI` DEY ;TEST UPER LIMIp LDA *EÀ SBC (TMP0),ِ IN LDA *EAL+ SBC (TMP0),  BCC NEW900 ;TO HI SKI0 DEY ;LO BYTE AGAI@ CLP TXA ;IN RANGE ADJUS` ADC *FNADR ;ADJUST Lp STA (TMP0),Y ;SAVE 05; 'EXMON.M0A ; (ADDED0@;********************************P;* APPENDED TO USE UP THE EPROM. `;* FLIPS PART OF ZERO-PAGE INTO p;* ANOTHER PART OF MEMORY, & ;* VISA VERSA. USE AT START & ;* END OF PROGRAMSA>EA  BCC QCKSTR ;YE0NEW200 LDY *PTCH ;DOING .WORD TABLE @ BNE NEW500 ;YEP LDA (TMP0),Y ;NO - GET OP COD` JSR DSET ;DIGEST OP CODp TA؀ LDA MNEML,X ;A BAD OP CODE  BNE NEW300 ;NNEWERR JSR DISSPC ;YES - SHOW I BEQ QCKSTR ;ALWAY N p;* THIS MODULE BY JAMES STRASMA. ;********************************;ADDED LABEL NOLOCS .DE $27 ;FLIPS 0 THRU 0FROM .DE $00 ;START OF ZERO-PAG@TO .DE $033A ;2ND. CASSETTE BUFFEPSTATUS .DE $96 ;I/O ERRNEWLOC JSR PARM3 ;TMP0=OFF,TMP2=SA,TMP10=E0 STA *FNADR ;SAVE OFFSET L@ STX *FNADR+1 ;SAVE OFFSET HP JSR SRDAE ;GET LOWER LIMI` STA *SAL ;SAVE IN SAp STX *SAL+ JSR SRDAE ;GET UPPER LIMIԐ STA *EAL ;SAVE IN EA STX *EAL+ JSR RD  CMP #C $44  .BY $11 $22 $44 $30 .BY $D0 $8C $44 $9@ .BY $10 $22 $44 $3P .BY $D0 8 $40 ` .BY $10 $22 $44 $3p .BY $D0 8 $40  .BY $62 $13 $78 $AMODE2 .BY 0 $21 $81 $8 .BY 0 0 $59 $4 .BY $91 $92 $86 $4  .BY $85 $90CHAR1 .BY ',),#24 $2P .BY $AE $AE $A8 $A` .BY $29 0 $7C p .BY $15 $9C $6D $9À .BY $A5 $69 $29 $5 .BY $84 $13 $34 $1 .BY $A5 $69 $23 $AMNEMR .BY $D8 $62 $5A $4  .BY $26 $62 $94 $80 .BY $54 $44 $C8 $5@ .BY $68 $44 $E8 $9P .BY 0 $B4 8 $8` .BY $7MMANDS**uCMDS .BY 'A' ;SIMPLE ASSEMBLŐ .BY 'B' ;SET BREAK FOR QUICK TRAC .BY 'C' ;COMPARE MEMOR .BY 'D' ;DISASSEMBL  .BY 'F' ;FILL MEMOR0 .BY 'H' ;HUN@ .BY 'I' ;INTERROGATE MEMORP .BY 'N' ;NEW LOCATE` .BY 'Q' ;QUICK TRACp # DA TO,` STA *FROM,p PLA ;RECAL̀ STA TO,ؐ DEX ;DONE BPL FLNEXT ;IF NORESREG LDY YR ;RESTORE ALL REGISTER  LDX X0 LDA FLG@ PHP LDA AC` PLp RTӀSAVREG STA ACC ;SAVE ALL REGISTER PH PL  STA FLG0 STX X@ p .SI QUICK- .SI TRANS- .SI WALK-0 .SI ALTMEM-P .SI ALTD-p WCMD .SI NWCMĐ WINIT .SI INIWINTR .SI REPE WWLK .SI WLKBR@P`MEMOR0 .BY 'H' ;HUN@ .BY 'I' ;INTERROGATE MEMORP .BY 'N' ;NEW LOCATE` .BY 'Q' ;QUICK TRACp Lπ INY ;POINT TO HI BYTŐ LDA (TMP0),Y ;GET HI BYT ADC *FNADR+1 ;ADJUST HI BYT STA (TMP0),Y ;SAVE ABS H NEW900 JSR INCTMP ;BUMP TMP0 DEY ;MOVED TO NEXT INSTR@ BPL NEW900 ;NP BMI NEW100 ;YES-ADJUST O`p; GET START ADR E S NEEDING ZERO- ;* PAGE VARIABLES. OPTIONALLY ;* PUTS A NUMBER IN THE 'ST' ;* VARIABLE TO CITE AN ERROR 0;* NUMBER AS THE CAUSE OF EXIT. @;* ALSO SAVES OR RESTORES ALL P;* REGISTERS. `;* EW300 LDY *LENGT0 CPY #2 ;3 BYTE INSTRUCTION @ BNE NEW900 ;NP BEQ NEW600 ;ALWAY`NEW500 STY *LENGTH ;FIX FOR .WORpNEW600 DEY ;INDEX TO LO BYTŀ SEC ;DOUBLE BYTE CMА LDA (TMP0), TAX ;SAVE IN  SBC *SAL ;TEST LOWER LIMI  INY ;HI BYT0 LOR STATU`p;ADDED PROGRÀ IFN CUT ;IF ROM VERSIOERRNO STA *STATUS ;PASS A VALUE TO S FLIP LDX #NOLOCS ;SET UP COUNTE0FLNEXT LDA *FROM,X ;READ ZERO-PAG@ PHA ;REMEMBEP L$0D ;MORE COMMIN0 BEQ NEW050 ;N@ JSR RDT ;READ MORP CMP #'W ;A .WORD TABLE ` BNE NEW050 ;Np INC *PTCH ;YES SET .WORD TABLE FLAǀNEW050 JSR T2T2 ;TMP0=SA,TMP2=XX,TMP10=ENEW100 LDX WRAP ;WRAP $FFF BNE QCKSTR ;YES - GOTO STAR JSR DCT10 ; 0?; 'EXMON.M06 ; (ASMII30@; SIMPLE ASSEMBLEP; SYNTAX A 1111 LDA ($00,X`; SYNTAX A 1111 DEXp; :=TERMINATOҀASSM JSR SKAT2 ;SKIP SP'S READ SA TO TMPAS010 LDX # STX MTCH+1 ;CLEAR LEFT MNEMONI AS020 JSR RDOC ;G MP0 FOR NEXT INSTpAS700 LDA #$20 ;SPACEӀ STA KEYD+AS800 STA KEYD+ STA KEYD+ LDA *TMP0+1 ;PUT NEW HI ADR I  JSR BUFASC ;CONVERT TO HE0 STX KEYD+@ STA KEYD+P LDA *TMP0 ;PUT NEW LO ADR I` JSR BUFASp STX KEYD+ STA KEYD+ LDA #8  0 LDX *DIF@ BMI AERP BPL AS34`AS320 INY ;OUT OF RANGE,Y=$Fp BNE AERҀ LDX *DIFƐ BPL AERAS340 DEX ;SUBTRACT 2 FOR INST DE  TX0 LDY *LENGTH ;SET INDEX TO LENGT@ BNE AS420 ;BRANCH ALWAYPAS400 LDA TMP2-1,Y ;NO-PUT BYTE OUT THER`ASDCT10 LDA *TMP10 ;TMP10=TMP0) LDY *TMP10+@) JMP DC1P)DCMP LDA *TMP`) LDY *TMP2+p)DC10 SEÀ) SBC *TMP) STA *DIF0 TYA ;HI BYTE IN 0 SBC *TMP0+ 0 TAY ;SAVE HI RESULT IN 00 ORA *DIFF ;OR LO FOR EQUAL TES@0 RTB&'' '; EXCHANGE TMP REGISTERSR TSTX ;TEST SYNTA LDA CHAR2-1,  BEQ AS240 JSR TSTX ;TEST MORE SYNTA@AS240 DEP BNE AS21` BEQ AS30pAS250 JSR TST2 ;TEST A WORD,4 CHARӀ JSR TSTAS300 LDA *TMP10 ;CHECK # CHARS OF BOT CMP *TMP BEQ AS310 ;MATCH, SKI JMP TST05 ;FAӀ$ STA *PTCȐ$ JSR DIS300 ;DIS. ON% LDX #9 ;SET FOR 9 SPACE% %0%@%;PRINT # OF SPACES=P%`%SPCX JSR SPACp% DE؀% BNE SPCؐ% RT&& &0&; INCREMENT TMP@&P&INCT2 INC *TMP`& BNE INRTp& INC *TMP2+&INRTS RTӐ&'' '; EXCHANGE TMP REGISTERAP ;GET TRIAL BYTp JSR DSET ;DIGEST IԀ LDX *FORMAT ;SAVE FORMAT FOR LATEҐ STX *TMP10+ TAX ;INDEX INTO MNEMONIC TABL LDA MNEMR,X ;GET COMPRESSE  JSR TSTX ; MNEMONIC AND TES0 LDA MNEML,@ JSR TSTP LDX #6 ;SIX FORMAT BIT`AS210 CPX #p !"";SKIP SPACES, READ ADRES "0"SKADR LDA #@" STA BAD ;ZERO FOR RDOBP"SKA10 JSR RDOC ;READ A CHA`" CMP #$20 ;A SPACE p" BEQ SKA10 ;YES - SKIP IԀ" JSR RDOB1 ;NO - FINISH READ BYTŐ" JSR RDOA+3 ;FINISH READ ADDRES# BCC SR10 ;ERRO# RTS ;O #HA0 CMP #$0D ;A CR@ BEQ AS100 ;YES-DONP CMP #$3A ;A ":" ` BEQ AS100 ;YES-DONp CMP #$20 ;A SPACŀ BEQ AS050 ;YES-SKIP IԐ JSR CHRTST ;A HEX # BCS AS070 ;NO-BUFFER I JSR RDOB2 ;FIN A READ BYT  LDY *TMP0 ;SHIFT TMP0 TO TMP0+0 STY *TMP0 PL@TST05 INC *WRAP ;TRY NEXT TRIAP BEQ AERR ;=0 TRIED ALL,SORR` JMP AS11pAERR JMP ERROPҀTST10 INؐ STX *TMP LDX *SAVX ;RESTORE  RT 0@P; CHARACTER TES`; TEST FOR CHAR BETWEEN 0-p; IF 0<=CHAR<=F THEN CARRY=CHRTST CET A CHA0 CMP #$20 ;IS IT A SPACE @ BEQ AS010 ;YES - START AGAIP STA *SAL,X ;NO - SAVE CHA` INp CPX #3 ;GOT THREE CHARS  BNE AS020 ;NO - LOOАAS030 DEX ;SQUISHED ALL THREE  BMI AS045 ;YE LDA *SAL,X ;NO - FIRST IN LAST OU  SEC ;NO BO ;SET CHAR COUN STA *ND JMP FIXST 0@P;TEST CHAR IN A WITH CHAR IN MTC`pTST2 JSR TSTX ;DO TWO TESTӀTSTX STX *SAVؐ LDX *TMPC ;GET CURRENT POSITIO CMP MTCH,X ;SAME CHA BEQ TST10 ;YES-SKI  PLA ;PULL JSR OFF STAC0420 STA (TMP0),p DEـ BNE AS40AS500 LDA *WRAP ;GET GOOD OP COD STA (TMP0),Y ;PUT OUT THER LDA #'A' ;PRT '.A  TA0AS600 STA KEYD ;PUT NEXT NUMBER IN KEYBUFFE@ JSR CURUP ;CURSOR UP JSR DISSPC ;DISASSEMBLE ONE LIN` JSR TMPADJ ;ADJUST T0; CONVERT BYTE TO HEX ASCI@; X=HI NYBBLE A=LO NYBBLP`BUFASC PHA ;SAVE BYTp LSR A ;DO HI NYBBLŀ LSR  LSR LSR  JSR ASCII ;MAKE HEX ASCI TAX ;SAVE IN 0 PLA ;RESTORE BYT@ AND #%00001111 ;DO LO NYBBLP JMP ASCI =CHRTST CI0 AS310 JSR T2T2 ;TMP0=SA,TMP2=DAT@ LDY *LENGTP BEQ AS500 ;IF ONLY 1 BYTE INSTR SKI` LDA *TMP10+1 ;GET SAVED FORMAp CMP #$9D ;A RELATIVE INSTR BNE AS400 ;NO-SKIА JSR DCMP ;CALCULATE A RELATIV BCC AS32 TYA ;OUT OF RANGE,Y=  BNE AER0'@'TOT10 LDX #2 ;EXCHANGE TMP0 WITP'TOT100 LDA *TMP0-1,X ;TMP1`' PHp' LDA *TMP10-1,؀' STA *TMP0-1,ؐ' PL( STA *TMP10-1,( DE ( BNE TOT100( RT@(P(`(p(; DOUBLE SUBTRACԀ(; DIFF=LO DIFFERENCŐ(; Y=HI DIFFERENC); A=0 IF ZERO DIFFERENC) )BNE AS23 LDY *LENGTȐ BEQ AS230 ;SKIP-SINGLE BYTE INSTAS220 LDA *FORMA CMP #$E8 ;A RELATIVE INSTR  LDA #'0 ;TEST ZERO0 BCS AS250 ;NO-3 BYT@ JSR TST2 ;TEST A BYTE,2 CHARP DE` BNE AS22pAS230 ASL *FORMAԀ BCC AS24 LDA CHAR1-1, J0#@#P#; SKIP 1 SPACE, READ ADDRES`#p#SRDAE JSR RDOC ;SKIP A DELIMITEҀ# JSR RDOA ;READ ADDRESӐ# LDX *TMP0+1 ;A=TMP0,X=TMP0+$ BCS DRTS ;OK-SKIP TO RT$SR10 JMP ERROP $0$@$P$;DISASSEMBLE ONE LINE PRINT 9 SPACE`$p$DISSPC LDA #0 ;PRINT ALL CHAR+@ STA *TMP0 ;SAVE BYTP LDA #'0 ;BUFFER ASCII ` STA MTCH,p IN؀AS070 STA MTCH,ؐ IN BNE AS050 ;BRANCH ALWAYAS100 STX *TMP10 ;SAVE INPUT # OF CHAR  LDX #0 STX *WRAP ;START TRIAL AT ZER@AS110 LDX #P STX *TMPC ;DISA INDEX=` LDA *WR MP #' BCC CHR1 CMP #'  RT0CHR10 SE@CHRTS RTP`p; SKIP PRINT IF CHAR SAME AS PTCȐCHKPCH CMP PTCH ;SKIP THIS CHAR BEQ CHRTS ;YE  BNE CCWRT ;ALWAY0@P`; PRINT CURSOR UpCURUP LDA #$91 ;CURSOR UАCCWRT JMP WR RRO0 SBC #$3F ;NORMALIZ@ LDY #5 ;SET FOR 5 SHIFT RIGHTPAS040 LSR ` ROR MTCH+1 ;LEFT MNEMONIp ROR MTCH ;RIGHT MNEMONIÀ DEY ;DONE 5 SHIFTS BNE AS040 ;NO-LOO BEQ AS030 ;ALWAYAS045 LDX #2 ;MOVE INDEX PAST MNEMONI AS050 JSR RDT ;GET A C PTMP12 .DE BRKCNT+2 ;OCCURENCE CTR FOR QUIC`pKEYD .DE $026F ;KEYBOAD INPUT BUƐUSRCMD .DE $03FA ;EXTEND MONITOR INDIRECNCMDS .DI ADRS-CMD 0@; ****** ROM ROUTINES *****P`p IFE ROM-2 ;IF FOR BASIC 2.KEY .DE  ;PRT "." AND SPAC ALTM .DE $D61D ;ALTER MEMOR0G1 .DE $D646 ;FINISH GO CM@P **`p;JUMP TABLE CALLӐRDT .DE $FFCF ;(BASINWRT .DE $FFD2 ;(BSOUT 0@; *** TMP2 .DE $FTMPC4 .DE $FFORMAT .DE $F BAD .DE $0100@P`; ****** MONITOR VARIABLES *****pPCH .DE $020PCL .DE PCH+ FLGS .DE PCL+0ACC .DE FLGS+@XR .DE ACC+PYR .DE XR+`SP  TP .DE $D4EC ;PUT TMP0 INTO PCL & PC0DM .DE $D4F7 ;DISPLAY # BYTES IN A @ TMP@DM1 .DE $D4FB ;FINISH DISPLAY BYTEPBYTE .DE $D50B ;INPUT STORE AND CHECK BYT`SETR .DE $D523WLKNUM .DE 62 ;WALK CLOCK COUN CINV .DE $90 ;INDIRECT VECTOR FOR IR0LSTX .DE $97 ;LAST KEY INDE@NDX .DE $9E ;CHARS IN KEY BUFFEPBLNCT .DE $A8 ;CURSOR BLINK CT`WSW .DE $B3 ;FLAG FOR QUICK TRACpSAVX .DE $B4 ;PLACE TO SAVE 3 ;READ BYTE INTO 0RDOB1 .DE $D76B ;FINISH A RDO@RDOB2 .DE $D778 ;JUST READ HEX,NO ERROPRDOC .DE $D798 ;READ A CHAR INTO `ERROPR .DE $D7A4 ;PRINT ERROR "?pSTOP1 .DEMEMORـ G1 .DE $FEE2 ;FINISH GO CMĐ  ** 0 IFE ROM-4 ;IF FOR BASIC 4.@PKEY .DE $E455 ;KEYBOARD IRQ ROUTIN`WROA .DE $D717 ;PRINT ADR IN TMPpWROB .DE $D722 ;PRINT BYIRQ'Ӑ LDA WCMD ;INIT EXTRA CMD LDX WCMD+ STA USRCM  STX USRCMD+0 LDA WINT@ LDX WINTR+P STA *CIN` STX *CINV+p IFE CUT ;UNLESS IN RO͐ LDA WINIT ;NOT USED IN ROM VERSIO LDX WINIT+  STA *MEMSI60HZ IR@BRKE .DE $FD17 ;BREAK ENTRY POINPB5 .DE $FD48 ;TAIL OF BRKE ROUTIN`START .DE $FD56 ;START OF MONITOpPUTP .DE $FD88 ;PUT TMP0 INTO PCL & PCȀDM .DE $FD93 ;DISPLAY # BYTES IN A @ TMPDM1 .DE $FD97 ;FINISH DISPLAY BYTE BYTE .DE $FDA7 ;ICMDS-NW10 CMP CMDS,ؐ BNE NW2 STX *SAV TXA ;MULT BY TW  ASL 0 TA@ LDA ADRS+1,X ;FAKE INDEXED JMP PH` LDA ADRS,X ;PUSH ADR-1 AND RTp PH RTӐNW20 DE BPL NW1 BMI SR10 ;CMD NOT FOUND ERRO 0 @ P ; DEC TMP0 OR TMP` p DECT$E62E ;KEYBOARD IRQ ROUTINWROA .DE $E76A ;PRINT ADR IN TMP WROB .DE $E775 ;PRINT BYTE IN A RE0WRTWO .DE $E784 ;PRT CHAR IN A THEN @ASCII .DE $E78D ;CONVERT BYTE TO HEX ASCIPT2T2 .DE $E797 ;SWAP TMP0 WITH TMP`RDOA .DE $E7A7 ;READ ADR INTO TMP*** INPUT/OUTPUT *****P`pPIAK .DE $E812 ;KEYBOARD INPUT PORԐPIAS .DE $E813 ;60HZ IRQ ENABLT2L .DE $E848 ;TIMER2 LT2H .DE $E849 ;TIMER2 H IER .DE $E84E ;6522 IRQ ENABLE REG0@P`; INSTALL EXTRA MONITOR COMMANDpINIT SEI ;STOP  .DE YR+pINVH .DE SP+INVL .DE INVH+MTCH .DE INVL+1 ;64 CHAR MATCH BUFFE ;FIRST CASSETTE BUFFER AT $0270BRKADR .DE $027A ;STOP ADR FOR QUICK TRAC@BRKCNT .DE BRKADR+2 ;# OCCURENCE ;SET TMP0 FOR REG DISPLApSPAC2 .DE $D52E ;PRINT TWO SPACEӀSPACE .DE $D531 ;PRINT SPACŐCRLF .DE $D534 ;PRINT (RETURNINCTMP .DE $D539 ;BUMP TMPALTRIT .DE $D579 ؀TMPC .DE $BTMPC2 .DE $BLENGTH .DE $B6 ;DIS INSTR LENGTPTCH .DE $B8 ;TEMP FOR DIS SAL .DE $C0EAL .DE $C@DIFF .DE $CPTMP10 .DE $D6 ;(TBUF IN OP SYSTEM`FNADR .DE $DA ;OFFSET FOR NEW LOCATEpWRAP .DE $DE ;WRAP FFFF FLAǀTMP0 .DE $F $F335 ;TEST FOR STOP KEـTNIF .DE $FCC0 ;STOP IRQS ENABLE 60HڐBRKE .DE $D478 ;BREAK ENTRY POINB5 .DE $D4AC ;TAIL OF BRKE ROUTINSTART .DE $D4BA ;START OF MONITO PUTE IN A REǀWRTWO .DE $D731 ;PRT CHAR IN A THEN ؐASCII .DE $D73A ;CONVERT BYTE TO HEX ASCIT2T2 .DE $D744 ;SWAP TMP0 WITH TMPRDOA .DE $D754 ;READ ADR INTO TMP RDOB .DE $D76 0 STX *MEMSIZ+1 ;FIX MEMORY SIZ@P **`p LDA #$10 ;SET DELAYS FOR REPEAԀ STA *DELAِ STA *REPD CLI ;ALLOW IRQ' JMP DECT0+1 ;A ZERO BYTE TO BREAK TO MONITO 0@P; SEARCH FOR EXTRA COMMAND`pNWCMD LDX #NNPUT STORE AND CHECK BYT SETR .DE $FDBF ;SET TMP0 FOR REG DISPLA SPAC2 .DE $FDCA ;PRINT TWO SPACE0 SPACE .DE $FDCD ;PRINT SPAC@ CRLF .DE $FDD0 ;PRINT (RETURNP INCTMP .DE $FDD5 ;BUMP TMP` ALTRIT .DE $FE15 ;PRT "." AND SPACp ALTM .DE $FEB9 ;ALTER 2 LDX #2 ;DEC TMP2 WORĀ BNE DEC30 ;ALWAYӐ DECT0 LDX #0 ;DEC TMP0 WOR!DEC30 LDY *TMP0,X ;A BORROW! BNE DEC20 ;NO-SKI ! LDY *TMP0+1,X ;A MEMORY WRA0! BNE DEC10 ;NO-SKI@! INC *WRAP ;YES-SET FLAP!DEC10 DEC *TMP0+1,`!DEC20 DEC *TMP0,p!DRTS RTӀ!pRDOB .DE $E7B6 ;READ BYTE INTO RDOB1 .DE $E7BE ;FINISH A RDORDOB2 .DE $E7CB ;JUST READ HEX,NO ERRORDOC .DE $E7EB ;READ A CHAR INTO ERROPR .DE $E7F7 ;PRINT ERROR "? STOP1 .DE $F301 ;TEST FOR STOP KE0TNIF .DE $FC7B ;STOP ALL IRQS ENABLE  T100 STA INOUT,X ;OUTPUԐ1 PL2 RT2 2; SET I/O PIN H02@2SETHI PHP2 ORA INOUT,X ;MAKE H`2 BNE SET100 ;ALWAYS OUTPUp22; BUMP ADR PTR AND CMOS 4040 COUNTEҐ23BUMP INC *EA3 BNE BUMP 3 INC *EA03BUMP1 LDX PCR ;DON'T CHANGE IF 271@3 JSR ADR11  0H2 ; +++++ UART INPUT ++++0@UART.IN PHP SE` LDA #00 ;CLEAR CHARp PHA ; LP.UI1 JSR GET.BIT ;GET BIԐ BNE LP.UI1 ;LOOP UNTIL NO BILP.UI2 JSR GET.BIT ;GET BI  BEQ LP.UI2 ;LOOP UNTIL START BI0@ JSR DEL0.5 ;DELAY UNTIL MTNE.UI EOR #$FF ;INVERp AND #$7F ;CLEAR BIT  PLP ;RESTORE PSR AND RETURΐ RT p PHA ; LP.UI1 JSR GET.BIT ;GET BIԐ BNE LP.UI1 ;LOOP UNTIL NO BILP.UI2 JSR GET.BIT ;GET BI  BEQ LP.UI2 ;LOOP UNTIL START BI0@ JSR DEL0.5 ;DELAY UNTIL M T100 STA INOUT,X ;OUTPUԐ1 PL2 RT2 2; SET I/O PIN H02@2SETHI PHP2 ORA INOUT,X ;MAKE H`2 BNE SET100 ;ALWAYS OUTPUp22; BUMP ADR PTR AND CMOS 4040 COUNTEҐ23BUMP INC *EA3 BNE BUMP 3 INC *EA03BUMP1 LDX PCR ;DON'T CHANGE IF 271@3 JSR ADR11 a .FI D8 "EXMON.M09" ;TABII .FI D8 "EXMON.M0A" ;ADDED BY JF EOM .E .PR "START ADDRESSpBEGIN .IN BEGI΀ .BA BEGIΐ .MC $1000 ;ACTUALLY PUT IT HER .FI D8 "EXMON.M01" ;EXTRA  .FI D8 "EXMON.07; 'EXMON.M01 ; (EXTRA30;******************************@;* P;* `;* EXTRA MONITOR COMMANDS p;* ;* (C) COPYRIGHT 1979 R WRTW@9 TYP9 JSR WRO`9 JMP CRLp99; PRINT EAH THEN EA̐9@PRTEAL LDA *EA@ JSR WRO @ LDA *EA0@ JMP WRO@@P@`@p@@ .e INI7 JSR SETAD7 JMP T2T2 ;TMP0=END AD 707;PRINT ERROR LOCATION AND BYTE@7P7;Y=EPROM BYTE A=MEMORY OR F`7p7PRTAY 8/27/79 p;* 10/20/79 ;* 12/13/79 ;* 5/19/80 ;* ;* ;******************************0@ .PR "IS THIS FOR BASIC RT 6 LDA *EA06 CMP *TMP0+@6CMPRTS RTP6`6; FETCH FROM-TO ADR, INIT, AND SET ADp66PARMS JSR RANGE ;GET FROM-TO ADҐ6PAR100 JSR INI7 JSR SETAD7 JMP T2T2 ;TMP0=END AD 707;PRINT ERROR LOCATION AND BYTE@7P7;Y=EPROM BYTE A=MEMORY OR F`7p7PRTAY .IN KBD ;KEYBOAR@P IFE KBD-1 ;IF BUSINESS KEYBOAR`PANIC .DE $ee ;ESCAPES QUICK TRACpSPC .DE $0e ;SPACE KEY-DOWN VALUŀCSRDN .DE $24 ;CURSOR-DOWN ;SET A11 MAYBP3 LDA #ACLK ;TOGGLE CLOCK PI`3 LDX #$4p3 BNE RES100 ;ALWAYӀ33; SET X TO A11 IF 25344ADR11 LDA *PTCH ;A 2716 4 BEQ AD100 ;YES - SKIP ALL THI04 LDX #PGMLO ;START WITH A L@4 LDA *EAH ;TEST A1P4 AND #$0`4 BEQ AD100 IDDLE OF START BIPLP.UI3 JSR GET.BIT ;GET BI` SEC ;ASSUME SPACp BNE SKP.UI CLC ;NO IT IS MARːSKP.UI1 PL ROR A ;ROTATE RIGHT INTO CARR BCS DONE.U  PH0 JSR DLYFULL ;DELAY UNTIL MIDDLE OF NEX@ CLP BCC LP.UI3 ;LOOP FOR NEXT BI`DON VALUpCSRDN .DE $42 ;CURSOR-DOWN CSRIT .DE $49 ;* RIGHT DEL .DE $41 ;DELETE  **  .PR "IS THIS COPY FOR ROM?0 .PR "IF SO, ENTER (1)@ .PR "ELSE, ENTER (0)P .PR "ENTER M02" ;MANII0 .FI D8 "EXMON.M03" ;TRNII@ .FI D8 "EXMON.M04" ;DISIIP .FI D8 "EXMON.M05" ;ALTII` .FI D8 "EXMON.M06" ;ASMIIp .FI D8 "EXMON.M07" ;WLKII .FI D8 "EXMON.M08" ;NEWII (0 OR 1)`CUT .IN CUD ;* RIGHT DEL .DE $4b ;DELETE  ** 0 IFE KBD-2 ;IF GRAPHICS KEYBOAR@PPANIC .DE $6F ;ESCAPES QUICK TRAC`SPC .DE $06 ;SPACE KEY-DOW ;* BY BILL SEILER ;* ALL RIGHTS RESERVED ;* ;* WRITTEN 1/10/79 0;* @;* P;* CHANGED 7/26/79 `;* 0J; 'EXMON.M02 ; (MANII30; ****** OP SYSTEM VARIABLES *****@P`pSAVLS .DE $00 ;SAVE OF LAST KEY INDE؀DELAY .DE $01 ;DELAY BEFORE REPEATӐREPDY .DE $02 ;DELAY BETWEEN REPEATMEMSIZ .DE $34 ;TOP OF MEMORY FOR BASI 2.0 (2),P .PR "OR FOR BASIC 4.0 (4)?` .PR "ENTER 2 OR 4pROM .IN ROM ;VERSION OF BASIÀ .PR "IS THIS FOR THE BUSINESS .PR "KEYBOARD (1), OR THE .PR "GRAPHICS KEYBOARD (2)?  .PR "ENTER 1 OR 20KBD  TAـ7 LDX #7 LDA (EAL,X8PRTERR PH8 LDA #$12 ;PRINT "RVS 8 JSR BSOUT08 JSR PRTEAL ;PRINT BAD AD@8 JSR SPAC2 ;TWO SPACEP8 LDX #'M' ;PRINT "M=`8 LDA #'=p8 JSR WRTWπ8 PL8 JSR WRO9 JSR SPAC2 ;TWO SPACE9 LDX #'P' ;PRINT "P= 9 LDA #'=09 JS CSRIT .DE $29 ;* RIGHT DEL .DE $4b ;DELETE  ** 0 IFE KBD-2 ;IF GRAPHICS KEYBOAR@PPANIC .DE $6F ;ESCAPES QUICK TRAC`SPC .DE $06 ;SPACE KEY-DOW ;LEAVE A Lp4 LDX #PGMHI ;NO - MAKE A Hɀ4AD100 STX PCҐ4 RT55; SET CMOS 4040 CTR TO START AD 505SETA10 JSR BUMP ;NEXT AD@5SETADR JSR CMPEAL ;THERE YETE5 BNE SETA1P5 RT`5p5; COMPARE EAL TO TMP55CMPEAL LDA *EA6 CMP *TMP6 BNE CMP CMD  BNE TYPE ;N0 JSR RANGE ;INPUT FROM-TO ADR@VER100 JSR PAR100 ;INIT & SET STARP BEQ VER300 ;ALWAY`VER200 JSR BUMP ;NEXT ADpVER300 LDA SYNC ;GET EPROM BYTŀ LDX # CMP (EAL,X) ;OK  BEQ VER400 ;YE JSR PRTAY ;NO - PRINT PROBLE  JS STA P2DA ;D0-7 INPUT) LDA *TMP0+) AND #$F0 ;4K BLOC ) STA *EA0) LDA #$AF ;SET NEW OUTPUT@) STA PIAP) LDA #$3`) STA PIAS ;STOP 60HZ IRp) BIT PIAK ;CLEAR ANY PENDINǀ) STA PIAL) LDX #PGMLO ;PD=0 IF 2716,PD=A11 IF 2530 JSR ADR11 ;SET X MAYB0 P`STOPM LDA PIAL ;SCAN COLUMN p AND #$F ORA #$0 STA PIASTP050 JSR GPIAK ;GET ROW BEQ STP100 ;A RVS KEY WAI  CMP #$EF ;STOP KEY 0 BEQ COPSTR ;YES - QUI@ BNE STPRTS ;NO - DON'T STOPSTP100 JSR GPIAK ;GET ROW` BEQ STP100 ;YES - WAI BEQ PGM800 ;YE0& JSR PRTAY ;PRINT PROBLE@& JSR STOPM ;TEST FOR STOP& DEC *WSW ;OUT OF TRYS `& BNE PGM700 ;Np&PGMEND JMP COPSTR ;YES - QUIԀ&PGM800 JSR PRTEAL ;PRINT LAST LOCATIOΐ& LDA #$9D ;CURSOR BACK ' TA' JSR WRTW ' JSR WRTW0' JSR CMPEAL ;SR PARMS ;INIT READ FROM-TO ADR BEQ COP200 ;ALWAY COP100 JSR BUMP ;NEXT LOCATIO0COP200 LDA SYNC ;GET EPROM BYT@COP250 LDX #P STA (EAL,X) ;PUT IN MEMOR` CMP (EAL,X) ;IS MEMORY OK p BEQ COP300 ;YEӀ JSR PRTAY ;NO - PRINT PROBLE͐ JSR STOPMM750 ;N`# LDA *PTCH ;A 2716 p# BNE PGM760 ;NO - SKIЀ# LDA #PGMLO ;PD/PGM=0 STOP PROGRAMMINǐ# STA PC$ BNE PGM770 ;ALWAY$PGM760 LDA #CS ;CS= $ LDX #$10$ JSR SETH@$PGM770 LDA #VPP$ LDX #$4`$ JSR SETHI ;VPP=5p$ LDA #DIN ;D0-7 INPUTӀ$ STA P2D LDA #L,COPY ;POINT AT COPY CM@ STA USRCMP LDA #H,COP` STA USRCMD+p LDA #L,BEGIN ;FIX MEMORY SIZŀ STA *MEMSIڐ LDA #H,BEGI STA *MEMSIZ+ LDA #0 ;DEFAULT FOR 271  STA *PTC0 JMP COP250+1 ;DO A BREAK TO MONITO@P; INPUT FROM-TO ADR AN#DOUT ;DO-7 OUTPUT0! STA P2D@! LDA #L,PGMTIM ;SET TIMER1 LP! STA TI`! JSR T2T2 ;TMP0=END ADp! BEQ PGM650 ;ALWAYӀ!PGM600 JSR BUMP ;NEXT ADҐ!PGM650 LDA #128 ;SET NUMBER OF TRYS = 12" STA *WS"PGM700 LDX # " LDA (EAL,X) ;GET BYTE FROM MEMOR0" STG 0;****** ROM ROUTINES *****@PWROB .DE $E775 ;PRINT A HEX BYT`WRTWO .DE $E784 ;PRT CHAR IN X THEN pT2T2 .DE $E797 ;SWAP TMP0 AND TMPRDOA .DE $E7A7 ;READ AN ADDRESӐRDOB .DE $E7B6 ;READ A BYTE INTO RDOC .DE $E7EB ;READ A CHAERROP BEQ PGM100 ;YE JMP ERROPR ;NO - ERROPGM100 JSR PARMS ;INPUT FROM-TO,INI  BEQ PGM300 ;ALWAY0PGM200 JSR BUMP ;NEXT AD@PGM300 LDA SYNC ;GET EPROM BYTP CMP #$FF ;IS IT UNPROGRAMED ` BEQ PGM400 ;YEp TAـ LDA #$FF ;NO - PRINT PROBLE͐ JR STOPM ;TEST STOP KE0VER400 JSR CMPEAL ;DONE @ BNE VER200 ;NP BEQ COPSTR ;YES - JMP ALWAY`p; SET EPROM TYPŀ; SYNTAؐ; .T 16 - (FOR 2716'S; .T 32 - (FOR 2532'S TYPE CMP #'T' ;TYPE CMD 0 BNE PROGRM ;N@ JSR RDOC ;SKIP DELIMITEP J LDA #VPP ;VPP=5 0 LDX #$400 JSR SETH@0 LDA #ACLK ;ACLK=P0 JSR SETL`0p0; RESET CMOS 4040 ADR COUNTEҀ00RESET LDA #ACL1 LDX #$10 ;ACLR=1RES100 JSR SETH 101; SET I/O PIN L@1P1SETLO PH`1 EOR #$FF ;FLIP BIT FOR ANp1 AND INOUT,X ;MAKE Lπ1SEp CMP #$FF ;NO - NO KEYS  BEQ STP100 ;YES - WAIԐSTPRTS RT; GET AND DEBOUNCE KEY 0GPIAK LDA PIAK ;GET ROW@ CMP PIAK ;DEBOUNCP BNE GPIA` CMP #$7F ;TEST FOR RVS KEp RTӀ; VERIFY EPROM AGAINST MEMORVERIFY CMP #'V ;A VERIFY DONE @' BEQ PGM900 ;YES - SKIP OUP' JMP PGM600 ;N`'PGM900 JSR T2T2 ;TMP0=START ADp' JMP VER100 ;GO VERIFY AREA PROGRAMEĀ''((; INITIALIZE INPUT/OUTPUT TO PROGRA (0(INIT JSR CRL@( SEP( LDA #0 ;CS=0,ACLR=`( STA *EAp( STA PIÀ( STA PIAL(  ;TEST STOP KECOP300 JSR CMPEAL ;DONE  BNE COP100 ;N COPSTR JSR INIT ;YES - RESET STUF0 LDA #0 ;RESTORE I/@ STA PIALP LDA #$0` STA PIAp LDA #$3À STA PIAL LDA #$3D ;ENABLE 60HZ IR STA PIA CL  JMP STR0@; TEST FOR STOP KE$ LDA #CS ;CS=0, CHECK LAST BYT% LDX #$1% JSR SETL % LDY SYNC ;GET BYTE FROM EPRO0% JSR SETHI ;CS=1,SET TO PROGRAM AGAI@% LDA #DOUT ;D0-7 OUTPUTP% STA P2D`% LDA #VPP ;VPP=25p% LDX #$4% JSR SETLϐ% TY& LDX #& CMP (EAL,X) ;LAST BYTE OK & D SET EA`pRANGE JSR RANG1 ;GET FROM ADҀRANG1 JSR RDOC ;SKIP A CHAҐ JSR RDOA ;GET FROM AD BCC PERR JMP T2T2 ;TMP2=FROM AD PERR1 LDX #$F0 TX@ BNE COPSTP ` ; COPY EPROM TO MEMORp COPY CMP #'C' ;IS THIS A COPY BNE VERIFY ;N JA SYNC ;OUTPUT TO EPRO@" LDA *PTCH ;A 2716 P" BNE PGM720 ;NO - SKI`" LDA #PGMHI ;MAKE PD/PGM=p" STA PCҀ" BNE PGM730 ;ALWAYӐ"PGM720 LDA #CS ;CS=# LDX #$1# JSR SETL #PGM730 LDA #H,PGMTIM ;START CLOC0# STA TI@#PGM750 BIT IFR ;TIME UP P# BVC PGR .DE $E7F7 ;ERROR PRINT "? STOP1 .DE $F301 ;TEST FOR STOP KE0STRT .DE $FD56 ;START OF MONITO@SPAC2 .DE $FDCA ;PRINT TWO SPACEPCRLF .DE $FDD`BSOUT .DE $FFD2 ;OUTPUT A CHAp .BA BEGI; ADD NEW COMMANDS TO MONITO 0APPENDSR PRTER JSR STOPM ;TEST STOP KE PGM400 JSR CMPEAL ;DONE BNE PGM200 ;N0 PGM500 JSR T2T2 ;TMP0=START AD@ JSR INIT ;RESET EAP JSR SETADR ;FIX ADR COUNTE` LDA #Cp LDX #$10 ;CS= JSR SETHɐ LDA #VP! LDX #$40 ;VPP=25! JSR SETL ! LDA  SR RDOB ;GET TYP` LDX #p CMP #$16 ;A 2716  BEQ TYP100 ;YEӐ IN CMP #$32 ;A 2532  BNE TYPERR ;NO - ERRO TYP100 STX *PTCH ;SET TYPE FLA0 JMP STR@TYPERR JMP ERROPP`; PROGRAM EPROM FROM MEMORpPROGRM CMP #'P' ;IS THIS PROGRAM CMD  .BA, .MC, .EN, NAMEB000,A000,A1FF,TK.M1B200,A200,A245,TK.M21 B246,A246,A252,TK.M3.WK B253,A253,A319,TK.M4h B31A,A31A,A363,TK.M5.W$ B364,A364,A376,TK.M6. B377,A377,A380,TK.M7.W8 B381,A381,A400,TK.M8B B401,A401 03,31304,56100 20210,18221,56100,56100,20200,18200,21200,56100J 27100,18210,22100,56100,20300,18300,21300,56100 09200,18222,56100,56100,56100,18203,21203,56100 15100,18304,56100,56100,56100,18303,21303,56100 19210,43221,56100 ,d"CONVERTER FROM CBM ASSEMBLER TO MAETn BY J. STRASMA, AIDED BY B. SEILERx IF '00' ISN'T 3 BYTES AFTER THEMAE FILE END, GARBAGE IS LISTED. IF THIS HAPPENS, 'BR' & ADD IT.USE 'ED' TO RESET TEXT POINTERS."INPUT DRIVE # 0";DI ,56100,56100,56100,01203,56203,56100.* 46100,01304,56100,56100,56100,01303,56303,56100d4 56100,47221,56100,56100,49200,47200,48200,56100> 23100,56100,53100,56100,49300,47300,48300,56100H 04200,47222,56100,56100,49203,47203,48204,56100Z%Z%1S10Z%Z%1:260"93"Z%Z%34096B,ZH%Z%256U6ZL%Z%256ZH%l@ WRITE MAE HEADERJ9,8,9,DI$":"I$",S,R"T10,8,10,DO$":"O$",P,W"^10,(170);h10,(0);r10,(48);|10,(ZL%);10,(ZH%);6100 39100,02210,40130,56100,07300,02300,40300,56100H 08200,02222,56100,56100,56100,02203,40203,56100~ 44100,02304,56100,56100,56100,02303,40303,56100 41100,24221,56100,56100,56100,24200,33200,56100 36100,24210,33130,56100,2830"[QUOTE]DRIVE:NAME ?";IN$1:11,8,11,IN$",P,R"=D(34);oNA$""A(A$):((A)(128))128(13)(34);{X#11,A$bA$;lST0590v:"CLOSE11(170);h10,(0);r10,(48);|10,(ZL%);10,(ZH%); ASMTED TO MDT 1.5/"ASMTED TO MDT"H"INPUT DRIVE #";DI$Nb15,8,15,"I"D$w"INPUT FILE";I$}$)"OUTPUT DRIVE #";DO$*."OUTPUT FILE";O$89,8,9,DI$":"I$",P,R"B10,8,10,DO$":"O$",S,W"VI16`);  10,(0);910#(15)2L'********* READ FILE *********a'11,8,11,"J,S,R"m$'#11,A$v.'A$;8'ST010020IVE #";DO$*."OUTPUT FILE";O$89,8,9,DI$":"I$",P,R"B10,8,10,DO$":"O$",S,W"VI16`1?7;; FILENAME 'PRGM ;*******************************0;@;* 2716 AND 2532 PROGRAMMEP;`;* (C) COPYRIGHT 197p;* BY BILL SEILEҀ;* ALL RIGHTS RESERVEĐ;;* VERSION 4.; ;* CHANGED 2/26/80;@;*******************************P[,A5FF,TK.M9L B600,A600,A7DD,TK.MA V B7DE,A7DE,A7E5,TK.MB.W!` TK.LABELS,TK.CT 06200,43222,56100,56100,56100,43203,25203,56100 45100,43304,56100,56100,56100,43303,25303,56100 FILE DATA--LIMIT TO 1K EACH11: # OF MODULES,56100,19200,43200,25200,56100" 26100,43210,34100,56100,19300,43300,25300,56100X 06200,43222,56100,56100,56100,43203,25203,56100 45100,43304,56100,56100,56100,43303,25303,56100 FILE DATA--LIMIT TO 1K EACH11: # OF MODULES$15,8,15,"I"DI$5"INPUT FILE ?";I$;["OUTPUT DRIVE # 0";DO$uDO$DI$15,"I"DO${"OUTPUT FILE ?";O$ COUNT CBM FILE LENGTH9,8,9,DI$":"I$",S,R"Z%0:CR$(13)#9,A$:S1ST:A$CR$R 55100,47304,54100,56100,56100,47303,56100,56100<\ 32210,30221,31210,56100,32200,30200,31200,56100rf 51100,30210,50100,56100,32300,30300,31300,56100p 05200,30222,56100,56100,32203,30203,31204,56100z 17100,30304,52100,56100,32303,30310,(170);10,(0);!10,(0);,#9,A$8A(A$)D#9,A1$RA1(A1$)`ST0510rA0A10510A113A((A)(128)):10,(A);:41010,(A);:AA1::45091015&********* READ PROGRAM *********00,24300,33300,56100  12200,24222,56100,56100,56100,24203,33203,56100V 16100,24304,56100,56100,56100,24303,33300,56100  42100,01221,56100,56100,56100,01200,56200,56100 38100,01210,56130,56100,28325,01300,56300,56100  13200,012220=2716,1=253PEAL .DE $C9 ;TEMP PT`EAH .DE $CpPGMLO .DE $CC ;SET PD/PGM LπPGMHI .DE $EC ;SET PD/PGM HɐTMP0 .DE $FB ;TMP2 .DE $FD ;MONITOR PTR DOUT .DE $FF ;USR DATA INPUT USRCMD .DE $03FA ;MONITOR EXTEND VECTO0@PGM#9,A$jST01280t9~#9,A$: SKIP LINE NUMBERIST01280T#9,A$dST01280o#9,A$A(A$):B(A)(127)((A)(128))128125010,(B);ST01280119010,(B);10,(13);115010,(0TIM .DE 50000 ;PROGRAM 50 MS PULSPBEGIN .DE $7000 ;START CODE HER`p;****** INPUT/OUTPUT *****INOUT .DE $E800 ;ALL I/O IN THIS PAGPIAL .DE $E810 ;D7=CS,D4=ACLPIAL1 .DE $E811 ;CONTROL RE PIAK .DE $E812 ;KEYBOARD INPU0`pDIN .DE $00 ;USR DATA INPUTӀACLK .DE $08 ;TOGGLE CLOCK BIԐACLR .DE $20 ;TOGGLE CLEAR BIVPP .DE $10 ;TOGGLE 5V/25MEMSIZ .DE $34 ;TOP OF MEMOR CS .DE $80 ;TOGGLE C0WSW .DE $B3 ;TEMP VARABL@PTCH .DE $B8 ;EPROM TYPE PIAS .DE $E813 ;60HZ IR@PIA .DE $E840 ;ACLK=DPSYNC .DE $E841 ;USR PORT D0-`P2DA .DE $E843 ;DATA DIRECTION B PORpTIL .DE $E844 ;TIMER 1 LπTIH .DE $E845 ;TIMER 1 HɐPCR .DE $E84C ;PERF. CONTROL REGIFR .DE $E84D ;INT. FLAG RE d"UNASSEMBLER24 FOR 650X=n"ALTERED FOR MAE BY JFS]x"PUT DATA DISK IN DRIVE 0cMX32767:BY256:H$"0123456789ABCDEF":L$(0):C$(187)P$(174):Q$(167):N$(56),A(256),L$(3),T$(5)LB%(1000),LD%(1000),UB$(20),S$(20),E$( BUILD LABEL TABLE ***8BI10FV1IL(F$(I1),2)".W"1150: IGNORE WORD FILE LABELSeVHS$UB$(I1):1020:UBDS`HS$S$(I1):1020:SDSjHS$E$(I1):1020:EDSt1190: BUILD LABELS~: *** BUILD LABELS ***OF ALL WITH ' ;'> pM28M41M424,L$L$P$L$L$P$;: SPACE AFTER JMP, RTI & RTSa zOFOFB:SOFE4,L$L$;:550y 4,L$L$L$L$L$;:4: 1570: WRITE LABEL FILE :   *** DECIMAL TO HEX ***  X$"":HI(DSBY):LO(DSBYHI) OF2):D1D1D2256PZ *** IF BRANCH ***d4nM7M4M131430ExD11271420SD1D1256dD1SOF2D11680: PUT LABEL IN TABLEOFOFB:ESOF1230: NEXT LINE *** TEST FOR LABEL ***TTSOFTHIRD BYTE *** " D2(SS2):D1D1D2256( @  *** IF BRANCH ***F k M7M4M13780: NOT RELATIVE D1127770: ON D1D1256: BACK D1SOF2D1 1490: TEST FOR LABEL 4," "N$(M)" "L$(P);: MNEMONIC & PREFIX(L$L$P$;@4,L$L$"; *** LABELS **"(170)L$L$P$L$L$P$;KJI1LB:LD%(I)11640: SKIP INTERNAL LABELSaTDSLB%(I)MX:960^4,L$L$"Z"X$" .DE $"X$" "C$;: DEFINE LABELh:4,L$L$L$L$L$;:4:r| ****** BINARY INSERT ******DL70);: MAX SIZE% 4,L$L$"; '"F$(I1)Q$L$L$P$;] 4,L$L$"; "S$(I1)" TO "E$(I1)" "C$L$L$P$L$L$P$L$L$;y AC1:OF0:PLLB%(AC)MX   *** NEXT LINE ***  &SSUBOF:I(SS):CA(I1) 0(F$(I1),2)".W"1800:870: WORD FILE .BY LINES OOP UNTIL DON@ 0420DONE RTS ;EXIT WHEN DONP ` NTS TO START OF TEXp 0350MESS.OUT LDA MESSAGES,X ;GET CHARACTEҀ 0360 BEQ DONE ;IF 00 THEN END OF MESSAGŐ 0370 STX SAV .CT "C$;"@4,L$L$" .BA $"S$(0)" "C$;8J4,L$L$" .MC "C$;ZT4,L$L$" .OS "C$L$L$P$L$L$P$;^4,L$L$" .FI "(34)"0:"FF$(162);hI10FV1:4,L$L$" .FI "(34)"0:"F$(I1)(162);:r4,L$L$P$L$L$" .E"(206)L$L$L$L$L$;|41090: BUILD UILD .BY IN WORD FILE ***4," .BY";:M0:B04ESOFBB2BB1:1810gI2SSSSB:DS(I2):960:4," $"X$;::BB1:m&0 *** MNEMONICS ***:D ".BY"N ADC,AND,ASL,BCC,BCS,BEQ,BIT,BMI,BNE,BPL,BRK,BVC,BVS,CLC,CLD20),F$(20)I056: N$(I):IL$(0)"":L$(1)"#":L$(2)"(":L$(3)"A"T$(0)"":T$(1)",X)":T$(2)"),Y":T$(3)",X":T$(4)",Y":T$(5)")"I1256: A(I):LB2:LB%(1)MX:LB%(2)MX:FVI10FV1:UB$(I1),S$(I1),E$(I1),F$(I1)::FF$:0 ***NEXT LINE*** $I(UBOF):CA(I1)4M(C1000)HB(C100)M10aP(C10)M100B10sB1P11440y  *** SECOND BYTE ***D1(UBOF1):B21390(2 *** THIRD BYTE ***<FD2(UB:HI0980%X$(H$,1(240HI)16,1)(H$,1(15HI),1)YX$X$(H$,1(240LO)16,1)(H$,1(15LO),1):_x *** HEX TO DEC ***~DS0L((HS$,1))48:L9LL7DS16DSL:(HS$)1HS$(HS$,2):1030$. *** PLTTPLTTACAC1:PLLB%(AC)MX:1500?DSTT:960:4,"Z"X$;: LABEL FIELDOLD%(AC)1:Us ***WRITE LABELS FILE***y"4,8,8,"0:"FF$",P,W",4,(170)L$(48)(249)(79)(170);: MAX SIZE64,L$L$"; '"FF$Q$L$L$P$ M0DSI:960:P1:830: PRINT HEX OF UNUSED OPCODESF *B1870: 1 BYTE OP CODEU 4DSD1:960~ >P14,"$"X$;:870: IMMEDIATE MODE HHI0B3P24,"*";: Z.P. MODE R4,"Z";: OPERAND LABEL \4,X$T$(Q);: SUFFIX f4," "C$;: END D1MX:T1LB:LO1 T1((T1)2):T101730+T2LB%(LOT1):DLT21690EDLT2LOLOT1:1690KiLB%(LO)DLLOLO1:1730{LB%(LO)DLJLBLO1:LB%(J1)LB%(J):LB%(LO)DL:LBLB1:DSSOF:960:""X$LB: *** B :M(C1000): MNEMONIC* DB(C100)M10: LENGTHL NP(C10)M100B10: PREFIXo XQCM1000B100P10: SUFFIX bC56100C1100M0: ROR A OR BRK lB1780 v  *** SECOND BYTE ***  D1(SS1):B2740   *** ,35221,56100,56100,56100,35200,03200,56100: 37100,35210,03130,56100,56100,35300,03300,56100p 10200,35222,56100,56100,56100,35203,03203,56100 14100,35304,56100,56100,56100,35303,03303,56100 29300,02221,56100,56100,07200,02200,40200,5LABEL TABLE9I10FV1:UB$(I1)" "S$(I1)" "E$(I1)" "F$(I1)UHS$UB$(I1):1020:UBDSoHS$S$(I1):1020:SDSHS$E$(I1):1020:EDS *** WRITE MODULE FILE ***4,8,8,"0:"F$(I1)",P,W" 4,(170)L$(48)(249)(79)(1X CLI,CLV,CMP,CPX,CPY,DEC,DEX,DEY,EOR,INC,INX,INY,JMP,JSR,LDA]b LDX,LDY,LSR,NOP,ORA,PHA,PHP,PLA,PLP,ROL,RTI,RTS,SBC,SEC,SEDl SEI,STA,STX,STY,TAX,TAY,TSX,TXA,TXS,TYA,RORv ***MNEMONIC,LENGTH,PREFIX,& SUFFIX CODES *** 11100"";' *** WRITE CONTROL FILE ***-G15,8,15:15,"I0":15gCT$:4,8,8,"0:"CT$",P,W"4,(170)L$(48)(249)(52)(170);: MAX SIZE=1K"4,L$L$"; '"CT$Q$L$L$P$;,4,L$L$"; ***CONTROL FILE**"(170)L$L$P$;64,L$L$P$L$L$" S HEX MODŀ #21 Load R(A) with ascii X and then output to screen 0080TEST LDA #'  0090 JSR WRT0@ #22 Load R(X) with 8 and output the character A eight timesP` 0080TEST LDX #8 ;8 TIME Store $47 in location LOC and then increment`p 0080TEST LDA #$4 0090 STA LOC ;LOC = 4 0100 INC LOC ;NOW LOC = 4 0110 BRK ;INC INSTR. ALWAYS HEX MOD #'B ;WAS THE INPUT B@ 0220 BEQ DO_B ;BRANCH IF IT WAS P 0230 BNE TEST ;BRANCH IF NEITHER A OR ` 0240p 0250DO_A LDX #A-MESSAGES ;SET INDEX FOR "...ROUND! 0 o LOCp 0080TEST CLD ;CLEAR DECIMAL MODE - ENTER HEؐ 0090 LDA #$2 0100 STA LO 0110 CL  0120 ADC #$00 0130 STA LOC ;RESULT IN R(AT EITHER A OR B? ' $0D $0A $0@ 0120P 0130SAVEX .DS 1 ;SAVE AREA FOR R(X` 0140p 0150TEST LDX #INTRO-MESSAGES ;FORM INDEX FOR MESSAGE STARԀ 0160 JSR MESS.OUT ;PRINT MESSAGŐ 0170  0150; OBSERVE THAT R(A) AND LOC CONTAIN 30@ #16 Subtract 14 from LOCP` 0080TEST SED ;SET DECIMAL MODE ARITHMETIp 0090 SEC ;SET CARRY BEFORE SUBTRACTINǀ 0100 LDA LOÐ  0140 JSR WRT. ;WRITE TO SCREE0 0150 LDY LOC ;RESTORE R(Y@ 0160 INY ;INCREMENT FOR NEXT CHARP 0170 BNE LOOP ;LOOP FOR NEXT CHAR` 0180DOE  #15 Decimal mode arithmetic - Store 25 at location LOC and the0 add 06 to LOC@P 0080TEST SED ;SET DECIMAL MODE ARITHMETI` 0090 LDA #$25 ;STORE 25 AT LOp 0100 STA LOC  0130 LDA TEMP 0140 ADC TEMP  0150 JSR TBYT ;52 SHOULC BE DISPLAYE0@ #24 Store the message "THIS IS YOUR LIFE!" and then output to screenP` 0080MESSAGE .BY 'THIS IS YOUR LIFE!'  0330;SUBOUTINE WHICH OUTPUTS A MESSAGE STRING TO CR` 0340;R(X) POINTS TO START OF TEXp 0350MESS.OUT LDA MESSAGES,X ;GET CHARACTEҀ 0360 BEQ DONE ;IF 00 THEN END OF MESSAGŐ 0370 STX SAVp 0090LOOP LDA #'A ;CHARACTER TO OUPUT IS  0100 JSR WRT. ;WRITE TO SCREEΐ 0110 DEX ;DECREMENT R(X 0120 BNE LOOP ;LOOP 8 TIMES (UNTIL R(X) = 0  #20 Store $47 in location LOC and then decrement0@ 0080TEST LDA #$4P 0090 STA LOC ;LOC = 4` 0100 DEC LOC ;NOW LOC =4p 0110 BRK ;DEC INSTR. ALWAY 260 JSR MESS.OUT ;PRINT MESSAGŐ 0270 RT 0280 0290DO_B LDX #B-MESSAGES ;SET INDEX FOR "...FLAT!  0300 JSR MESS.OUT ;PRINT MESSAG0 0310 RT@ 0320P ) AND LO@ 0140 BRP` #18 Subtract hex 14 from LOCp 0080TEST SEĐ 0090 SE 0100 LDA LO 0110 SUB #$1  0120 STA LO0 0130 BR@P #19  JSR RDT. ;GET KEYBOARD INPU 0180 AND %01111111 ;MASK OUT BIT  0190 CMP #'A ;WAS THE INPUT A  0200 BEQ DO_A ;BRANCH IF IT WAS 0 0210 CMP  0110 SUB #$1 0120 STA LOC ;RESULT IN R(A) AND LO 0130 BR 0140; OBSERVE THAT R(A) AND LOC CONTAIN 10 P #17 Hex mode arithmetic - Store hex 26 at location LOC and the` add hex 06 tNp #25 Set up two messages and let user select message via keyboard input 0080MESSAGE 0090A .BY 'THE WORLD IS ROUND!' $0D $0A $0  0100B .BY 'THE WORLD IS FLAT!' $0D $0A $00 0110INTRO .BY 'INPU ;  0110 CLC ;CLEAR CARRY BEFORE ADDINǐ 0120 ADC #06 ;ADD 06 TO R(A 0130 STA LOC ;AND PUT IN LO 0140 BRK ;BRK TO EXAMINE LOCATION LO  p 0090 0100TEST LDY #00 ;INDEX TO START OF MESSAGŐ 0110LOOP LDA MESSAGE,Y ;GET CHARACTE 0120 BEQ DONE ;IF 00 BYTE THEN DON 0130 STY LOC ;SAVE R(Y EX ;PRESERVE R(X 0380 JSR WRT. ;PUT TO SCREE 0390 LDX SAVEX ;RESTORE R(X 0400 INX ;INCREMENT FOR NEXT CHAR0 0410 BNE MESS.OUT ;LO  #23 Define two locations TEMP1 and TEMP2, preload with 4F and 030 then add in hex mode and display on screen@P 0080TEMP1 .BY $4` 0090TEMP2 .BY $0p 0100 0110TEST CLĐ 0120 CL 07 0Assembler Example@P` #1 Begin assembly at $1000 and store object codep .BA $100 .OӐ #2 Begin assembly at $1000 but store object code at $4000 .BA $100  .MC $4000 .O@ 049The following examples can be entered and actually tried, but yo will need to enter the following source sequence to be used wit0each example@P 0010 .BA $800 ;ASSEMBLE OBJECT CODE AT $080` 0020 .OS ;INDICATE ;INPUT ASCII FROM KEYBOARD ROUTIN 0 @ P insert code from example her` p  9000 9010 RTS ;RTS WILL CAUSE A RETURN TO ASSM/TE 9020  9030 ---- * PET (old) $FFD2 $0613 $065 PET (new) $FFD2 $E775 $FFC  ** APPLE $FDED $FDDA $FD00 SYM $A663 $82FA $A66@ KIM et vector so the relocating loader wil! not alter the address during loadingP RESET .DE $FFFC ;6502 RESET VECTO` p  LDA RESEԐ -- OR -  LDA $FFF0 ve entered the source for the example you are tryingtype >ASSEMBLE to assemble the program. If you get no errors, the valid object code is stored starting at $0800. If you ge0errors, correct them and then assemble again. Repeat thi@procedure  loads, you should know that you have overflowe the text buffer. The solution is to allocat more memory (via ]SET command) and the  reassemble0@ #11 Show example of a very long labelP 80 8000 commanto delete the lines associated with the example. This wil leave the required setup intact for the next example0@If an example uses the BRK instruction, then you should use youPmonitor to examine the registers and/or memory to ve @ #8 Give example of .BY pseudo opP .BY 'ALARM CONDITION ON MOTOR 1' $0D $0`p #9 Store the address of the internal label TABLE an the external label OUT1 .SI TABL .SE OUT  #10 Define the content 0G #13 Load R(A) with hex F3, R(X) with decimal 96, and R(Y) wit binary 110110  0080TEST LDA #$F3 ;$ MEANS HE0 0090 LDX #96 ;NO SPECIAL SYMBOL = DECIMA@ 0100 LDY #%110110 P #3 Defind a ROM routine` ROM1 .DE $FFDp #4 Assign an internal work location in zero page WORK .DI $ #5 Allocate 6 bytes of storage  TABLE .DS 0@ #6 Define label EOI as mask with bit 6 set a  TO ASSM TO STORE OBJECT CODp 0030LOC .DS 1 ;RESERVE ONE BYTE OF STORAGE FOR LOÀ 0040 0050WRT. .DE see note ;WRITE ASCII TO SCREEN ROUTIN 0060TBYT .DE see note ;WRITE BYTE AS 2 HEX DIGIT 0070RDT. .DE see note  .EN ;INDICATE END OF ASSEMBL0@P NOTE: Enter the following for the above 50-70 lines dependin` on your type of microcomputerp MICROCOMPUTER WRT. TBYT. RDT ------------- ----- -----  $1EA0 $1E3B $1E5P * = Insure that you have loaded you machine language monitor` ** = This will display in inverse video. For normal videop provide an ORA #$80 instruction before each JSR WRT instructionAfter you ha@PEMORY.TEST.FOR.650` JMP MEMORY.TEST.FOR.650p NOTE: Long labels (greater than that specified vi ]FO command) are allowed if defined on a line with no mnemonics  #12 Define the 6502 res until you have an error-free assemblyP`When you get an error-free assembly, type >RUN TEST to executpthe program example. Note that TEST is the label where we wanthe program to begin executionWhen you complete an example, use the >DELETE  MEMORY.TEST.FOR.650` JMP MEMORY.TEST.FOR.650p NOTE: Long labels (greater than that specified vi ]FO command) are allowed if defined on a line with no mnemonics  #12 Define the 6502 resNrify th`operation. Then type G to your monitor to reenter ASSM/TEDpy, type >RUN TEST to executpthe program example. Note that TEST is the label where we wanthe program to begin executionWhen you complete an example, use the >DELETE s of the text file as Macro Globa0 so its macro definitions can be used by subsequen@ files in the assemblyP .M`p NOTE: This locks the macro definitions in the tex buffer. If you get a !0F error on subsequen ;% = BINARP 0110 BRK ;ENTER MONITOR TO EXAMINE REGISTER`p #14 Load R(A) with hex 69 and output to screen 0080TEST LDA #$69 ;LOAD R(A) WITH 6 0090 JSR TBYT ;WRITE TO SCRE nd show usP in AND statement` EOI .DE %0100000p AND #EOɀ #7 Load the low address part of the label VALUES in register  and high part in register Y LDX #L,VALUE  LDY #H,VALUE0 0;C #20 Now assemble agai!! >ASSEMBL !0! Note that the assembler continues assembling with errors@!P!`! #21 Now lets find and output all occurrances of thp! phrase THIS PROGRAM!! >FIND /THIS PROGRAM"" The occurrances of phrases LOOP01, LOOg01, LOOK011 or any phrase with LOO followed with some character we don'1 care about, then 0122 >FIND /LOOP%01/ _ % is the don't care characte 202@2 b) Search for all occurrances of period, som ^ ^ 0) ^ ^ Range where loaded in memor@) ^ Length of filP) File loade`)p)) #30 Copy lines 100 thru 120 to after line 900)0 >COPY 900 100 120 000 #31 Delete lines 140 thru 15@0P0 >DELETE r all slashes (/) in text file@3P3 >FIND A/A _ Note that A is the string terminato`3p33 d) Always put an end of file mark at the end of tape modules a3 various commands key on this mark to terminate operatio4 at the logical en is linP' ^F - Enter edit form 2 (^F is control F`' X - Exit this command operatiop' M - Move to next fiel''( #28 Now lets clear the text file( ( >CLEA0(@(P( #29 Lets reload the texLOUTPUT DRIVE  .FI D8 "UART.M03" ;UART INPUT DRIVE0@P`END.PGM .E------------------NO.PADBITS .DS 1 ;NO. OF PAD BITS ON CR LBIT.TIME .DS 1 ;BAUD RATE CODE (0-7 ; ;---- ---- ---- ----0;  PET versions& The phrase ADD appears in several places in the text file & Set up to search for ADD and conditionally replace wit0& SUBTRACT@&P& >EDIT /ADD/SUBTRACT/`&p& xx 1000 ;THIS PROGRAM ADDS 06 TO THE ACCUMULATOҀ& , and you have foun4 an error in file # 6. What do you do? Well, you insert the4 tape containing the 10 modules in tape deck # 1, the inser5 a blank tape in deck # 0, and peform the following5 5 Press play on deck # 05 Press RAM/THIS STUPID PROGRAM $ ^ 0$ search string replacement strin@$P$ Note, after replacement the edited line will be output`$p$$ #25 Replace all occurrances of the character A with X betwee$  ready for editing55 Correct the text and then type: >PUT F66 >DUPLICATE F99 _ This duplicates down to file 99 or end o 6 file mark - whichever comes first06@6P6 f) If you want to append say  line with the phrase will be ouput followed with th " # of occurrances0"@"P" #22 Find and ouput all occurrances of the letter A`"p" >FIND *A* _ Note that the terminator is "" The line with the phrase will be output fol e pair of #'s, the %P2 Here we have a delima - % is our don't care character. Bu`2 wait, it can be changed as followsp22 >FIND /.XX%/ %ؐ2 3 Here we change the don't care from % to 3 303 c) Search fo  140 15`0p00 #32 Move lines 100 thru 120 to after line 1601 >MOVE 160 100 121 101 Now that we have tried the basics, lets cover some more sofisticate11 operationsP1 Note: The following are not try by example`1p1 a) Search for all d of tape. You can put an end of file mar4 as follows 404 >PUT @4P4Q4 e) This example applies to all except the PET version`4 Assume you have a large program with for example 10 modulep4 recorded on tape with file #'s 1 thru 10 t file with that saved on tape in example # `( via the following procedurep(( Rewind cassette, press pla( >GET F3 if PET then >GET T1 F03 "program name)) F03 xxxx yyyy-zzzz _ Status message output during loadin )iRMAT CLEAR _ To prevent tabulating on fieldP7 >MANUSCRIPT SET _ To suppress output of line #' F99 _ This duplicates down to file 99 or end o 6 file mark - whichever comes first06@6P6 f) If you want to append say  ސ& --- Count in hex to start of search strin'' * _------ Experiment with the following one letter commands ' A - Go ahead and alter strin0' S - Skip over this lin@' D - Delete th play and record on deck # 15@5 >DUPLICATE F6 _ This reads from deck 1 and writes to deck P5 all files down to but not including file # 6`5 When done, file # 6 will be in the text filp5 lines 100 and 150%% >EDIT /A/X/ 100 15 %0% Note, lines will be output with the replaced string@%P%`% #26 Now lets change the text file back but show no outputp%% >EDIT /X/A/# 100 15%&& #27 This example does not apply to  F12 to the contents of the text buffer`6 do the followingp66 >GET F12 APPEND or for PET: >GET T1 F12 "program name677 g) If you use ASSM/TED for generating text, letters, etc.,then yo 7 should set up as follows07@7 >FO lowed with th# # of occurrances# #0# #23 Find all occurrances of the letter A but just show count@#P# >FIND /A/`#p## #24 Replace the phrase THIS PROGRAM with THIS STUPID PROGRA͐# using edit form 1$$ >EDIT /THIS PROG (r15l), sta *rol,  ty0 se@ adc *r15P sta *r15` bcc setp inc *r15set2 rtoptbl .by set-brtbl .by rtn- .by ld-  .by br-0 .by st-@ .by bnc-P .by ldat-` .by bc-p .by stat- .by bp- .by lddat- .by bm- .by stdat 08;pet 16 macros, from micro #2 ;uses pet 16 code @ $2e60-2ffPr0 .de $`r1 .de $pr2 .de $r3 .de $r4 .de $r5 .de $r6 .de $ r7 .de $0r8 .de $@r9 .de $Pra .de $`rb .de $prc .de $rd .de $ .by $60+re .m!!!std@ .md (reg  .by $70+re0 .m@!!!pop@ .md (regP .by $80+re` .mp!!!stp@ .md (reg .by $90+re .m!!!add .md (reg .by $a0+re  .m0!!!sub (reg` .by $f0+rep .m!!!rtn .m .by 0 .m!!!relbr .md (loc  ifp =-lo0 .by loc-=-@ **P ifm =-lo` .by =-loc+p ** .m!!!br .md (where .by  relbr (where *roh,P$ beq br`$ rtp$bnz asl $ ta$ lda *rol,% ora *roh,% bne br % rt0%bm1 asl @% taP% lda *rol,`% and *roh,p% eor #$f% beq br% rt&bnm1 asl & ta & lda *rol,0& and *roh,@& eor #$fP& bne br`&nul rtp&rs ldx #$1& jsr dc& lda  .mP !!!bm .md (where` .by p relbr (where .m !!!bz .md (where .by  relbr (where  .m0!!!bnz .md (where@ .by P relbr (where`  sbc *rol, sta rol, lda *ro sbc *roh, sub2 sta roh,0 ty@ adc #P sta *r14` rtp add lda *ro adc *rol, sta *ro! lda *ro! adc *roh, ! ldy #0! beq sub@!bs lda *r15P! jsr stat`! lda *r15p! jsr stat!br cl!bn .by $ .m!!!bs .md (where  .by $0 relbr (where@ .mP!!!@sw16 .m` jsr to.sw16 ;*undefinep .m!!!incd .md (where inc wher bne =+ inc where+  .mere` *r14pinr inc *rol, bne inr inc *roh,inr2 rtldat lda (rol,x  sta *ro0 ldy #@ sty *roP beq stat`pop ldy #p beq poppopd jsr dc lda (rol,x tapop2 jsr dc  lda (rol,x0 sta *ro@ sty *roPpop3 ldy #` sty *r14p 0>3 .CT ;DESIGNATE AS CONTROL FIL 0 .CE ;CONTINUE IF ERROR@P .BA $200`p; +++++++ DEFINITIONS +++++++PIA.PORT .DE $E841 ;PIA DATA PORPIA.DIR .DE $E843 ;PIA DIRECTION POR MSK.IN .DE %01000000 ;INPUT IS ON BIT 0MSK.OUT -  .by bz-0 .by pop-@ .by bnz-P .by stpat-` .by bm1-p .by add- .by bnm1- .by sub- .by bk- .by popd-  .by rs-0 .by cpr-@ .by bs-P .by inr-` .by nul-p .by dcr- .by nul- .by nul- .by nul-set bpl set re .de $rf .de $ .e !!!setr .md (reg addr0 .by $10+re@ .se addP .m`!!!ld .md (regp .by $20+re .m!!!st .md (reg .by $30+re .m !!!ld@ .md (reg0 .by $40+re@ .mP!!!st@ .md (reg` .by $50+rep .m!!!ldd@ .md (reg  .md (reg@ .by $b0+reP .m`!!!popd@ .md (regp .by $c0+re .m!!!cpr .md (reg .by $d0+re .m !!!incr .md (reg0 .by $e0+re@ .mP!!!decr .md   .m0!!!bnc .md (where@ .by P relbr (where` .mp!!!bc .md (where .by  relbr (where .m !!!bp .md (where .by 0 relbr (where@ d (rol,x' sta *r15' jsr dc ' lda (rol,x0' sta *r15@' rtP'rtn jmp rtn`' .e 5"bnc2 rt"bc bcs b# rt#bp asl # ta0# lda *roh,@# bpl brP# rt`#bm asl p# ta# lda *roh,# bmi br$ rt$bz asl $ ta0$ lda *rol,@$ ora  .mp!!!bm1 .md (where .by  relbr (where .m!!!bnm1 .md (where  .by 0 relbr (where@ .mP!!!brk .m` .by $p .m!!!rs .m c bcs bnc"br1 lda (r15l)," bpl br " de0"br2 adc *r15@" sta *r15P" ty`" adc *r15p" sta *r15"bnc2 rt"bc bcs b# rt#bp asl # ta0# lda *roh,@# bpl brP# rt`#bm asl p# ta# lda *roh,# bmi br$ rt$bz asl $ ta0$ lda *rol,@$ ora  ;0 = 110 : 4 = 240@; ;1 = 300 : 5 = 480P; ;2 = 600 : 6 = 720`; ;3 = 1200 : 7 = 960p .FI D8 "UART.M01" ;SET BAUD AND TABLE DELAY .FI D8 "UART.M02" ;UART  rtlddat jsr lda lda (rol,x sta *ro jmp in stdat jsr sta0 lda *ro@ sta (rol,xP jmp in`stpat jsr dcp lda *ro sta (rol,x jmp popdcr lda *rol, bne dcr  dec *roh,0dcr2 dec *rol,@ rtPsub ldy #`cpr sep lda *ro  .DE %10000000 ;OUTPUT IS ON BIT @P`;UART CONTROL PARAMETERSp;-----------------------NO.PADBITS .DS 1 ;NO. OF PAD BITS ON CR LBIT.TIME .DS 1 ;BAUD RATE CODE (0-7 ; ;---- ---- ---- ----0; z ;from here on mus ld lda *rol,x ;be in same mem. pg0bk .de =-@ sta *roP lda *roh,` sta *rop rtst lda *ro sta *rol, lda *ro sta *roh,  rt0stat lda *ro@stat2 sta (rol,xP ldy #`stat3 sty  sty *quotflg ;Not in quote mod lda (where),y ;Hi byte of forward lin beq done ;0 here=end of tex jsr tstop ;Abort if stop key dow  jsr crlf ;Else, start new lin0orrectio pha ;Store ioutrang pla ;Remember for printin jmp prchar ;Use rts ther  .e Jumout pha ;Store characte  ora #%11000000 ;Is this a char0 cmp ;Prints a characte@print .de $dcd9 ;Print integer valuPquotflg .de $09 ;Flags Quote mod`ready .de $c389 ;Basic warm starptoktabl .de $c092 ;Start of token tabltstop .de $ffe1 ;Test stop kew jsr prchar ;Send token char bne ritetkn ;Jum fliptkn eor #%10000000 ;Flip last char bne chrmain ;Jumout pha ;Store characte  ora #%11000000 ;Is this a char0 cmp bc #%01111111 ;Convert from ASCIP tax ;to token ` sty *memory ;Store counter valup ldy #$ff ;set flanextokn dex ;Look at next toke beq ritetkn ;If found the right on nextchr in lda toktabl,y ;Next char. of toke 0>?; *** PET 16 ** ; PET Sweet 16 Interprete0;let PET think it's got 16-bit@; adaptation by James StrasmP`;adapted from work of S. Wozniap;as published in 11/77 Byte mag;see full description ther;only changes commented her  lda (where),y ;forward lin tax ;for the start locatio  iny ;of the next lin0 lda (where),y ;r(x)=lo, r(a)=h@ stx *where ;Next line now thP sta *where+1 ;current lin` bne newline ;Unless forwa de @roh .de Pr14h .de $1`r15l .de $1pr15h .de $1s16pag .de $2;interpreter prope sw16 jsr spg ;save zero pag0save sta *$20 ;in apple's ro@ stx *$21 ;save machine contexP sty *$2` php  ;Remember counter valu and #%1111111send jsr out ;Send char. in r(a cmp #'" ;In quote mode bne notquot ;If no  lda *quotflg ;Remember counter valu0 eor #%11111111 ;Flip quote fla@ @ lda (r15l),P and #$` asl p ta lsr  eor (r15l), beq tob stx *r14  lsr 0 lsr @ lsr P ta` lda optbl-2,p ph rttobr inc *r15 bne tobr inc *r15 tobr2 lda brtbl,0 ph@ lda *r14P lsr ` rtp  in@ lda (where),y ;Lo byte of line P ta` inp lda (where),y ;& hi byt cmp #$ff ;$ffff=maximum line  bne notlast ;If les cpx #$ff ;Now check low byt beq done ;If line # is $f ;exchange part of z. pslop lda cpg,x ;with given area of mem ph lda *0, sta cpg, pl0 sta *0,@ deP bpl slop ;max.=$7f location` rtp setz lda (r15l), sta *roh, de lda here .de $5c ;Block transfer ptr. # lda #$00 ;First line # is  sta *linstor ;Store i0 sta *linstor+@ jsr findlin ;Find address of line #P pla ;Ignore last ` pla ;items in the stacpnewline ldy #1 ;Set up char. counte #%11011011 ;acter that CB@ bcc outrang ;printers flub uP cmp #%11100000 ;in lower-case` bpl outrang ;If nop pla ;Remember characte eor #%10000000 ;Apply a c  bpl nextchr ;Last char. of toke0 bmi nextokn ;is in opposite cas@ ritetkn iny ;Got correct tokeP lda toktabl,y ;Read next char` bmi fliptkn ;Flip case if lasp ;to use with Richard C. Vile' ;article in Micro #20, page 20;change line 0123 there to@; 0123 jsr sw1P;with sw16=start of interprete`p;relocators, see note @ 271 .ba $2e6cpg .de $2e0 locs .de $20rol . rd link=pdone jmp ready ;Quit & goto Basinotlend bpl send ;Tokens are > $8 cmp #$ff ;May be a token, chec beq sen bit *quotflg ;If in quote mode  bmi send ;can't be a toke0 se@ s  pl sta *$2 ts stx *$2 cl  pl0 sta *r15@ plP sta *r15`sw16b jsr sw16p jmp sw16sw16c inc *r15 bne sw16 inc *r15sw16d lda #s16pa  ph0 ldy #  sta *quotflg ;Store it agaiPnotquot iny ;Up counte` beq done ;If it was $ff, quip lda (where),y ;Read next characte bne notlend ;0=end of lin tay ;Prepare to rea rtnz pl plrestore lda *$23 ;in apple's ro pha ;restore register lda *$2  ldx *$20 ldy *$2@ plP jsr spg ;restore zero pag` jmp (r15lpspg ldx #locs ff notlast sty *memory ;Store counte0 jsr print ;Print integer line @ lda #$11 ;Cursor down setP jsr prchar ;lower-case mod` lda #' ;Then send a spacpchrmain ldy *memory CMDTERR ;BR. IF NOT IN THERP STX *STATU` JSR TALK ;CMD TO TALp LDA *SA ;SEND SECONDARY ADDRESӀ JSR SECND ;  LDX *STATUCMDTERR RT 0;COMMAND "PUT" TO DEVICE [ CHAR IN R(A) ]@;----------------------------------------P`CMDPUT LDX |0t0 ;SECTOR DISPLAY PROGRA0@ .CP` .FI "MLMACROS.MLIBp .FI "SECTOR.PGM .FI "IEEE.LIBENDPGM .E (/;<><> SECTOR DISPLAY PROGRAM <>< 0 .BA $080@ .OP .E`pTBYT .DE $E775 ;PRINT BYTE AS 2 HEX DIGITӀCRLF .DE $FDCD ;OUTPUT CRLƐSECTOR SA (DABLK BLKPNT) ;OPEN 1,8,3,"#  JSR OPNUSEB ; 0 BNE ER@P SA (CMDBLK BLKPNT) ;OPEN 15, LDA #1 STA CO  JSR CRL0LPNXCOL LDY #1 ;LOGICAL FILE #@ JSR GET ;GET BYTE FROM IEEP BNE ERR ;BR. IF ERRO` JSR TBYT ;PUT ON SCREEp DEC CÒ BNE LPNXCOL ;LOOP UNTIL LINE DONŐ DEC RO BNE LPNXROW ;LOOP FOR NEXT RO  SA (INICMD BLKPNT%&END.IEEE .EΪ CMDLISTN ;CMD CHN 15 TO LISTE`# BNE ERRCMD1p# LDY #0#LP15 LDA (BLKPNT),Y ;GET CMD CHAR# BEQ DONE15 ;IF 00 THEN EN$ JSR CMDPUT ;PUT TO IEE$ IN $ BNE LP10$DONE15 LDY #15 ;CMD CHN 15 TO UNLISTE@$ JSR CMDUNLISN ; P$ERRCMD15 R CLOSE ;  LDY #15 ;CLOSE LF #1 JSR CLOSE ;  LDA #$EE ;EE= ERRO BNE STO 0;OPEN BLOCK FOR COMMAND CHANNE@;-----------------------------PCMDBLK .BY 15 ;LOGICAL ` .BY 8 ;PHYSICAL DEVICE (FAp .BY 15 ;CHANNEL (SA .SI 0 ;FILENAME ADDR MD15 LDY #1P# JSR CMDLISTN ;CMD CHN 15 TO LISTE`# BNE ERRCMD1p# LDY #0#LP15 LDA (BLKPNT),Y ;GET CMD CHAR# BEQ DONE15 ;IF 00 THEN EN$ JSR CMDPUT ;PUT TO IEE$ IN $ BNE LP10$DONE15 LDY #15 ;CMD CHN 15 TO UNLISTE@$ JSR CMDUNLISN ; P$ERRCMD15 R ;NAME = # FOR D- ;COMMAND STRING TO READ SECTOR 18,0;---------------------------------@RDCMD .BY 'U1 3 1 18 1' 0 ;SA=3, DRIVE=P`p;COMMAND STRING TO SET BUFFER POINTER TO ;----------------------------------------BPCMD .BY 'B-P,3,1' ISTE0! LDX *STATU@!CMDULERR RTP!`!p!;COMMAND DEVICE TO UNTALK [ R(Y) = LOGICAL # ]!;---------------------------------------------!"CMDUNTALK TY" JSR SETUP ;SETUP FROM TABL " BNE CMDUTERR ;BR. IF NOT IN THER0" STX *STATU@" JSR UNTALK ;CMD  e X K >  % * uΰί䩬   L   #U1 3 1 18 1B-P,3,1I14ȱȱ `ȱȱȱѥ  殩 ;`` H #0p STX *STATUӀ PH JSR CIOUT ;PUT BYTE TO IEEE DEVIC PL LDX *STATU  RT0@P;COMMAND "GET" FROM DEVICE [ CHAR IN R(A) ]`;------------------------------------------pCMDGET LDX #0 STX *STATU JSR ACPTR ;GET BYTE FROM IEEE DEVI 0c?;Lower-Case Lister for CBM Printer 0; Cleans up PET program listing@P`; by Rev. James Strasmp; 120 W. King Stree; Decatur, Il. 6252; as of Feb. 29, 198 0 .ba $033a ;sys(826@; (2nd. cassette bufferP` 8,1` JSR OPNUSEB ; p BNE ERҀ SA (RDCMD BLKPNT) ;PRINT#15,"U1";3;D;T; JSR SENDCMD15 ;  BNE ER 0 SA (BPCMD BLKPNT) ;PRINT#15,"B-P";SA;@ JSR SENDCMD15 ; P BNE ER`p;NOW READ AND DISPLAY SECTOR ON SCREE΀ LDA #1 STA ROLPNXROW ) ;PRINT#15,"I10 JSR SENDCMD1@ LDY #1 ;CLOSE LF #P JSR CLOSE ; ` LDY #15 ;CLOSE LF #1p JSR CLOSE ;  LDA #00 ;00= OːSTOP BR NO NO  JMP SECTO0@ERR SA (INICMD BLKPNT) ;PRINT#15,"I1P JSR SENDCMD15 ; ` LDY #1 ;CLOSE LF #p JSR p;Label values given for new ROMcrlf .de $c9e2 ;Return+line feefindlin .de $c52c ;Find Basic linlinstor .de $11 ;stores line memory .de $46 ;Temporary storag0prchar .de $ca45  .BY 0 ;FILENAME LENGT ;OPEN BLOCK FOR DIRECT ACCESS CHANNE0;-----------------------------------@DABLK .BY 1 ;LOGICAL P .BY 8 ;PHYSICAL DEVICE (FA` .BY 3 ;CHANNEL (SAp .SI DANAM ;FILENAME ADDRӀ .BY 1 ;FILENAME LENGTȐDANAM .BY '#' T`$p$$;SET UP LA, FA, SA. CHN# IN R(A)$;--------------------------------%%SETUP JSR FINDLT ;FIND ENTRY IN TABL % BNE NOENTRY ;BR. IF NOT IN THER0% JSR SETUPLT ;SET UP LA, FA, S@% LDX #0P% RT`%NOENTRY LDX #$FF ;Z=F IF NOT IN THERp% RTӀ% 0 ;SA=3, POINTER=  ;COMMAND STRING TO INITIALIZE DRIVE 0 ;-----------------------------------@ INICMD .BY 'I1' P ` p ROW .DS 1 ;ROW COUNTEҀ COL .DS 1 ;COLUMN COUNTEҐ ENDSECTOR .Eδ;FILENAME ADDRӀ .BY 1 ;FILENAME LENGTȐDANAM .BY '#' TO UNTALP" LDX *STATU`"CMDUTERR RTp""";SEND COMMAND STRING POINTED TO BY BLKPNT TO IEEE BUS#;----------------------------------------------------#;ASSUMES CHANNEL IS OPEN, AND STRING IS TERMINATE #;WITH 00. DOES NOT PERFORM CLOSE.0#@#SENDCh ``  ( o `  ( H h` (` (`H oh` `  `  ` @  f  | `  ``Eδ;FILENAME ADDRӀ .BY 1 ;FILENAME LENGTȐDANAM .BY '#' C LDX *STATU RT0 @ P ;COMMAND DEVICE TO UNLISTEN [ R(Y) = LOGICAL # ]` ;-----------------------------------------------p CMDUNLISN TY JSR SETUP ;SET UP FROM TABL! BNE CMDULERR ;BR. IF NOT IN THER! STX *STATU ! JSR UNLISN ;CMD TO UNL 0D;<><><> IEEE Machine Language Support Modules <><>< 0@; *** COPYRIGHT 1980 BY CARL MOSER **P; All Rights Reserve`p;WRITTEN: 14FEB198;UPDATED: 15FEB1980 - ADD CMDUNLISN, CMDUNTALK, SENDCMD1 0;ALL MBTOP+P BCS MOV P0P;WEDGE INTO BASI@PPPWEDGE LDA #$4C ;JUMP INSTRUCTIO`P STA *CHRGEpP LDY *MEMSIڀP LDX *MEMSIZ+P INQ BNE WEDGEQ IN QWEDGE1 STY *CHRGET+0Q STX *CHRGET+0R RT@RPR`REND.DOS .EH STA *SA H LDA #H,LDAD0H STA *SA@H LDA  ;PUT BYTE TO IEEE DEVICE [ BYTE IN R(A), CHN# IN R(Y) ];------------------------------------------------------ PUT STA *BSOUR ;SAVE R(A0 TY@ JSR SETUP ;SETUP FROM TABLP BNE PUTERR ;BR. IF NOT IN TABL` STX *STATUS ;CLEAR STATUp JS ORY DOWN, RELOCATES THG;PARSER AND SETS THE WEDGEG GPOKE LDA #L,CMD ;POKE DOWN TOP OF MEMOR0G STA *MEMSI@G LDA #H,CMPG STA *MEMSIZ+`GpG;MOVE THE CODŀGGMOVE LDY #$00 ;SET UP FROM ADDH LDA #L,LDADH STA *SA H LDA #H,LDAD0H STA *SA@H LDA AX. OF 10 OPEp CPX #10 ;10 MAX BCS OPNERR ;BR. ON TOO MANY OPEΐ INC *LDTND ;INC. AS TOO MANY OPE LDA #0 STA *STATUS ;CLEAR STATU JSR OPENI ;PUT IN TABLE AND OPE0 LDX *STATU@ RTP OPNERR LDX #$F` RTp ;CLOSE LOGICAL CHANNEL;TABLEDCMDSTRIN DS1 .BY '0:REL.EXE*' ;LC LOA0DS2 .BY '0:MAE.EXE*' ;AC LOA@DS3 .BY '0:EXTRAMON.EXE*' ;MC LOAPDS`DpDD;LENGTH OF COMMAND STRINGDSTRINGLEN .BY S2-SE .BY 0 ;NO STRINE .BY S3-S E .BY 0E .BY S4-S@E .BY PE`EpE;ADDRESS TO TRANˀ;IEEE OPEN: OPNUSEB = USE OPEN BLOCK POINTED TO BY BLKPN;---------; OPEN = USE LA, FA, SA, FNADR, FNLE 0OPNUSEB LDY #00 ;FIRST SET UP FROM BLOC@ LDA (BLKPNT),P STA *L` INp LDA (BLKPNT),ـ STA *F IN LDA (BLKPNP@ DEC DELAY ;NO - BUMP CT`@ BNE REPEXIp@@REP200 DEC REPDY ;TIME TO REPEAԐ@ BNE REPEXIT ;NA LDA #$04 ;YES - RESET CTA STA REPD A LDA #$00A STA *LST@A LDA #$02 ;FIX THE BLINK ON CRSPA STA *BLNC`A BNE REPEXIT :BR ALWAYpAAABB;COMMAND  .DE $F28D ;FIND ENTRY IN LOGICAL TABLŀSETUPLT .DE $F299 ;SET UP LA,FA,SA FROM TABLŐREMOVLT .DE $F2E5 ;REMOVE FROM TABLOPENI .DE $F53B ;PUT IN TABLE AND DO OPE CLOSEI .DE $F6F0 ;CLOSE CHANNE0@LISTN .DE $F0BA ;COMMAND TO LISTEPUNLISN .DE--------------------------------------------------------GET TY JSR SETUP ;SETUP FROM TABL  BNE GETERR ;BR. IF NOT IN THER0 STX *STATU@ JSR TALK ;CMD DEVICE TO TALP LDA *SA ;SEND SECONDARY ADDR` JSR SECND ; p JSR ACPTR ;IEEE INPUԀ PODULES: R(A) = BYTE INPUT OR OUTPU@;------------ R(Y) = LOGICAL FILE P; R(X) = 0 IF OK, <> 0 THEN ERRO`p;VARIABLE DEFINITIONS;-------------------- LA .DE $D2 ;LOGICAL ADDRES0FA .DE $D4 ;FIRST ADDRESS (DEVICE@SA .D *STATU  JSR LISTN ;CMD TO LISTE0 LDA *SA ;SEND SECONDARY ADDR@ JSR SECND ; P LDX *STATU`CMDLERR RTp;COMMAND DEVICE TO TALK [ CHN# IN R(Y) ];--------------------------------------- CMDTALK TY0 JSR SETUP ;SETUP FROM TABL@ BNE R LISTN ;IEEE CMD TO LISTE΀ LDA *SA ;SEND SECONDARY ADDRӐ JSR SECND ;  LDA *BSOUR ;RESTORE R(A JSR CIOUT ;IEEE OUTPU  JSR UNLISN ;IEEE CMD TO LISTE0 LDX *STATU@PUTERR RTP`p;GET BYTE FROM IEEE DEVICE [ BYTE IN R(A), CHN# IN R(Y) ݀;#L,CMD ;SET UP TO ADDPH STA *GRBTO`H LDA #H,CMpH STA *GRBTOP+HMOV1 LDA (SAL),Y ;RELOCATŐH STA (GRBTOP),I INC *SAI BNE SKP I INC *SA0ISKP1 INC *GRBTO@I BNE SKPPI INC *GRBTOP+`ISKP2 LDA #L,CMDENpI SEÀI SBC *GRBTOАI LDA #H,CMDENP SBC *GR--------------------- CLOSE TY0 JSR FINDLT ;FIND IF IN TABL@ BNE CLOERR ;BR. IF NOT IN THERP LDA #0` STA *STATUp TX PH JSR CLOSEI ;CLOSE CHANNE PL TA  JSR REMOVLT ;REMOVE FROM TABL0 LDX *STATU@ RTPCLOERR LDX #$F` RTpSFER TO (ADDR-1)ETRANSADDR .SE $0500-1 ;LOADER ADDRӐE .SE $0500-1 ; F .SE $5000-1 ;MAE COLD STARF .SE $5003-1 ;MAE WARM STAR F .SE $1000-1 ;EXTRAMON COLD STAR0F .SE $0400-1 ;EXTRAMON WARM STAR@FPF`FCMDENpFFF;THIS ROUTINE POKES TOP OF MEMT), ORA #$6  STA *S0 IN@ LDA (BLKPNT),P STA *FNAD` INp LDA (BLKPNT),ـ STA *FNADR+ IN LDA (BLKPNT), STA *FNLE 0OPEN LDA *L@ JSR FINDLT ;FIND IF IN LOGICAL TABLP BEQ OPNERR ;BR. IF ALREADY IN THER` LDX *LDTND ;CHECK IF MMNEMONIC TABLE BCMDTBL .BY 'LC0B .BY 'LW@B .BY 'ACPB .BY 'AW`B .BY 'MCpB .BY 'MWBCMDTBLEND .BY BCC;INDEX INTO COMMAND TABLE CINDEX .BY S1-CMDSTRIN0C .BY $F@C .BY S2-CMDSTRINPC .BY $F`C .BY S3-CMDSTRINpC .BY $FƀCCD;COMMAND STRING  $F183 ;COMMAND TO UNLISTE`pTALK .DE $F0B6 ;COMMAND TO TALˀUNTALK .DE $F17F ;COMMAND TO UNTALːSECND .DE $F128 ;SEND SECONDARY ADDR CIOUT .DE $F16F ;OUTPUT TO IEE0ACPTR .DE $F18C ;INPUT FROM IEE@P`pBLKPNT .DE $11 ;POINTER TO BLOC H JSR UNTALK ;CMD DEVICE TO UNTAL PL LDX *STATU GETERR RT0@P;COMMAND DEVICE TO LISTEN [ CHN# IN R(Y) ]`;-----------------------------------------pCMDLISTN TY JSR SETUP ;SET UP FROM TABL BNE CMDLERR ;BR. IF NOT IN THER STXE $D3 ;SECONDARY ADDRESS (CHN #PLDTND .DE $AE ;# OF FILES OPE`pFNADR .DE $DA ;FILE NAME ADDRESӀFNLEN .DE $D1 ;FILE NAME LENGTȐSTATUS .DE $96 ;IEEE STATUS BYTBSOUR .DE $A5 ;SAVE ARE 0@;SUBROUTINES USEDP;----------------`pFINDLT NGTH (-10# LDA #L,BUF+1 ;FILE NAME ADDR@# STA *FNADP# LDA #H,BU`# STA *FNADR+p# LDA #8 ;DEVICE ADDRӀ# STA *F# LDA *FLAG ;0 MEANS DI$ BNE LOADB ;DO A LOA$ LDA *LA ;SAVE L $ STA *WS0$ LDA *DFLTO ;SAVE DFLT@$ STA *CNTDP$ LDA #$60 ;SECONDARY  E CL0 BVC WG99@ P ` ;READ THE ERROR CHANNELp RDERR STY *TXTPTR ;FIX POINTEҐ LDA #08 ;SET F! STA *F! JSR TAL ! LDA #$6F ;COMMAND CHANNEL S0! STA *S@! JSR SECND ;SEND SP!WG140 JSR ACPTR ;GET BYTE FROM DIS`! CMP #Cp! BEQ WG13! JSR  AND #SPERR ;CHECK STATUS (EOI OKp5 BNE LDERҀ5 LDA $F384 ;CHECK FOR (-04) RO͐5 BMI LOAD1 ;NOT (-04)..6 INC *EAL ;FIX THE LOAD (-04) RO6 BNE LOAD 6 INC *EA06LOAD1 LDA *EAH ;SET BASIC'S POINTER@6 STA *VARTAB+P6 LDA *EA`6 STA *VARTAp6 RTӀ66G ANNE` CMP #'$ ;DIRECTORYp BEQ DODIR ;YEӀ BNE NOTDIҐWG997 JMP CHRGONOMAIN LDX *WSW ;RESTORE .X AN JMP CHRGOT ;RETURN TO CHRGO 0@;SEND COMMAND TO DISP`NOTDIR LDA #8 ;GET DEVICE ADDRESp STA *F LDA #$6F ;SECONDARY ADDRESS 1 ST FLOPP 3 JSR FCLOS03 PL@3 PLP3 JMP READY ;RETURN "READY`3p3LOAD JSR LOADPGM ;LOAD FROM FLOPPـ3 JSR RUNC ;FIX POINTERӐ3 JSR LNKPRG ;FIX LINK4 LDA *FLAG ;CHECK FOR LOAD OR RU4 CMP #'/ ;LOAD 4 BNE WG300 ;NO..04 JMP READY ;LOAD RETURN TO BASI;  JSR LOADPGM ;LOAD FROM DISː;NOW TRANSFER CONTROLTRANSCTL PL  TA0 LDA TRANSADDR+1,@ PHP LDA TRANSADDR+0,` PHp RTӀWG110 LDY #00 ;.Y IS BUF INDE STY *FLAG ;FLAG SET FOR DI LDA (TXTPTR),  CMP #'> ;COMMAND PRONPT0 BEQ 0 JSR CLRCH0 000;CHECK FOR STOP KEY AND PAUSE@0P0 JSR STOP1 ;STOP KE`0 BEQ WG230 ;YES..p0 JSR $FFE4 ;GET A CHAR FROM KEYBOARĀ0 BEQ WG250 ;NOTHING..0 CMP #$20 ;SPACE BAR1 BNE WG250 ;NO..1WG255 JSR $FFE4 ;ANY KEY START 1 BEQ WG2501 BNE WG BCS WG11 JSR GET.UC ;GET CHAR U.C CMP CMDTBL+0, BNE INC  IN0 JSR GET.U@ CMP CMDTBL+1,P BEQ GOTIT ;BR. ON COMMAND MNEMONIC MATC`INC2 INp IN؀ BNE LPCMD ;BR. ALWAYӐGOTIT TX PHA ;SAVE INDEX ON STAC  LSR A ;DIVIDE BY 0 TA@#0' BEQ X ' LDX *WSW ;OPEN THE PRINT CHANNE0' JSR CHKOU@'X7 LDX *TMPP' LDA *TMP2+`' JSR LINPRT ;PRINT LINE NUMBEp' LDA #' ;PRINT A SPACŀ' BNE SKIPB ;SKIP OVER BRANCHEӐ'LOADB BNE LOAD ;(JMP(WG235B BNE WG230 ;(JMP(WG220B BNE WG220 ;(JMP (SKp8DELAY .DS 8REPDY .BY 01 ;DEFAULT TO 08888REPEAT LDA $0105,X ;STUCK IN TWAIT8 CMP #L,TWAIԕ8 BNE REP050 ;BR IF Nϖ8 LDA $0106,ؗ8 CMP #H,TWAIԘ8 BNE REP058 JSR TNIF ;REMOVE REPEAT KEY999REP050 LDA SAVCHR ;GET LAST KE 9 CMP *LSTX ;SADDR`$ STA *Sp$ LDA #14 ;OPEN THE FILŀ$ STA *L$ JSR UNLSN ;DON'T LISTEN TO FLOPP% JSR FOPE% LDA #0 % STA *SATUS ;SET STATUS TO 0% LDY #03 ;LOOP THREE TIME@%WG220 STY *FNLEN ;SAVE NEW COUNP% LDX #14 ;DISK CHANNE`% JSR CHKIp% JSR BASI΀% STAPRT ;PRINT BYTE TO SCREEΐ! CL" BVC WG140 ;LOOP FOR MOR"WG130 JSR PRT ;PRINT C " JSR UNTLK ;UNTAL0"WG998 JMP CHRGOT ;CONE WITH CM@"P"`";PRINT THE DIRECTORYp""DODIR INY ;GET LENGTH OF CMĐ" LDA (TXTPTR),# BNE DODI# DE # STY *FNLEN ;SET LE ET.UC LDA (TXTPTR),7MAK.UC CMP #$67 BCC EXIT.UP_ 7 CMP #$707 BCS EXIT.UP_@7 AND #$DP7EXIT.UP_C RT`7p7; **** REPEAT KEY PROCESSOR ***778;HOLD ANY KEY FOR 1/2 SEC, IT REPEAT8 8IRQVEC .DE $E6208LSTX .DE $9@8BLNCT .DE $AP8`8SAVCHR .DS A *S JSR LIST LDA *S  JSR SECND ;SEND SECONDARY ADDRES0BUMP INC *TXTPTR@ LDY #0 ;INDEX =P LDA (TXTPTR),Y ;GET THE FIRST CHARACTE` BEQ WG120 ;ZERO IS LAST CHARp JSR CIOUT ;SEND THE CHAR CL֐ BVC BUMP ;MOR  WG120 JSR UNLSN ;UNLIST@4WG300 JSR STXTPT ;SET TXTPTR FOR RUP4 JMP NEWSTT ;RUN PROGRA`4LDERR JMP LD209 ;PRINT "LOAD ERRORp444;SUBROUTINE TO LOAD A FILE55LOADPGM LDA # 5 STA *SATUS ;CLEAR STATU05 STA *VERCK ;LOAD NOT VERIF@5 JSR LD15 ;LOAD A PROGRAP5 LDA *SATU`5WG115 ;YES..@ CMP #'@ ;BUSINESS KEYBOARD PROMPP BEQ WG115 ;YES..` INp STA *FLAG ;SET FLAG FOR LOAĀ CMP #'/ ;LOAD PROMPԐ BEQ DODI CMP #'^ ;CHECK FOR LOAD AND RU BEQ DODI  BNE WG990WG115 IN@ LDA (TXTPTR),P BEQ RDERR ;READ ERROR CH250 ;(JMP@1P1WG240 LDA #C`1 LDX *CNTDN ;CHECK DFLTO FOR SCREEp1 CPX #1 BEQ X771 LDX *WS2 JSR CHKOU2X777 JSR BSOU 2 JSR CLRCH02 JSR UNLS@2 LDY #$02 ;DO TWICP2 BNE WG220`2p22;CLOSE FLOPPY AND RETURΐ23WG230 JSR CLRCH3 LDA #14 ;CLOSE LDA STRINGLEN,P BEQ TRANSCTL ;LEN=0 THEN NO STRIN` STA *FNLEp LDA INDEX,Y ;GET INDEX IN CMD TABLE, FORM FNADҀ CLÐ ADC #L,CMDSTRIN STA *FNAD LDA #0  ADC #H,CMDSTRIN0 STA *FNADR+@P;NOW SEND COMMAND STRING` LDA #08 ;Fp STA *FA IPB JSR BSOU0( JSR CLRCH@(WG250 LDX #14 ;DISK CHANNEP( JSR CHKI`( JSR BASIp( PH( JSR CLRCHΐ( PL) LDX *SATU) BNE WG230 ;BA ) CMP #0 ;EO0) BEQ WG24@) LDX *CNTDN ;CKG. DFLTO FOR SCREEP) CPX #`) BEQ X7p) LDX *WS׀) JSR CHKOUԐ)X77 JSR BSOUAME AS LAST TIM09 BEQ REP100 ;YE@9 LDA #$10 ;NO - SET DELAY CTP9 STA DELA`9 LDA *LSTX ;COPY NEW CHAp9 STA SAVCHҀ9REPEXIT JMP IRQVEÐ9@REP100 LDA *LSTX ;IS THIS A NO KEY@ CMP #$F @ BEQ REPEXIT ;YE0@ LDA DELAY ;DELAYED ENOUGH@@ BEQ REP200 ;YE *TMP% LDY *SATUS ;CHECK STATU& BNE WG235B ;BAD STATU& JSR BASI & STA *TMP2+0& LDY *SATUS ;CHECK STATU@& BNE WG235P& LDY *FNLEN ;MORE TO DO`& DEp& BNE WG220 ;NOT DONE YEԀ& JSR CLRCHN ;CLEAR CHANNE̐& LDX *CNTDN ;CHECK DFLTO FOR SCREE' CPX  zH .C 0;****************************************************@;* P;* MAE/DOS SUPPORT PROGRAM `;* p;* BY BOB FAI @ @E3@ @E@ "D3ЌD"D3ЌD"D3@ "D3@ bx!YMJ,),#($YX$$#]#)i#$S#$S[[i$$)|mi)S4i#bZH&bTDThDt(ntJrtttrDh2"&&rr&HDDABCDFHINQTW',07bBT6L KOUT .DE $F7BC ;CHECK OU`CLRCHN .DE $FFCC ;CLEAR CHANNEpBASIN .DE $FFCF ;BASIC I΀STOP1 .DE $F301 ;CHECK FOR STOP KEِBSOUT .DE $FFD2 ;BASIC OUFOPEN .DE $F524 ;FILE OPELD209 .DE $F3E6 ;LOAD ERRO 0@;WEDGE IN ROUTINE WITH THE COMMAND PARS rs =tuL2   hhLGL膵`0G`8`ŸLHJJJJ h)L {Xhhhhhh{PzH~@8Ƴ  $   L2<~/SLM|}~ LAST CHARNEWSTT .DE $C6C4 ;NEW STATEMENT EXEPRT .DE $E3D8 ;PRINT A CHARLISTN .DE $F0BA ;SEND LISTE SECND .DE $F128 ;SEND S0CIOUT .DE $F16F ;SEND A CHAR@UNLSN .DE $F183 ;UNLISTEPACPTR .DE $F18C ;GET A CHAR`TALK .DE $F0B6 ;SEND TALpOP L. $)KӅH hILG   Z L .' jH h > ) . ` h 2 8 Zo'p L  0  )  LL hL   ;HɀDFLTO .DE $B0 ;DEFAULT OUTPUT DEVVARTAB .DE $2A ;END OF BASIC PGMTMP2 .DE $FD ;TEMP VARIABL 0;PROGRAM VARIABLES@PCR .DE $0D ;CARRIAGE RETUR`FLAG .DE WSWpPIAK .DE $E812 ;KEYBOARD I/O PORԀCMDLN .DE CMDEND-CMD ;LENGTH TO RELOCATe   T S W j `LV  }   LL2  } '  "  ɝ  琹 솴  &  L2   ,  E  8  j \VERIFY FLASAL .DE $C7 ;IND. POINTER L SAH .DE $C8 ;H0WSW .DE $B3 ;UNUSED FLAG (BASIC@CNTDN .DE $BA ;SAVE AREPGRBTOP .DE $5C ;INDIRECT POINTE`MEMSIZ .DE $34 ;POINTER TO TOP OF MEMORpTXTPTR .DE $77 ;POINTER TO BUƀSPERR .DE $10 ;EOI ERROR BLLED BY MAI BNE NOMAIN1 ;NO..  LDA $0102,X ;MAYBE0 CMP #$C@ BEQ MAIN ;BR. IF MAIPNOMAIN1 JMP NOMAIN ;JMP TO EXIT - NOT IN MAI`MAIN LDA *TXTPTR ;FIRST COLUMNp BNE WG997 ;GET OUT NOT FIRST CHҀ LDA *TXTPTR+ CMP #H,BUF ;IN BUFFER BNE WRBAIN ;* CONVERTED TO MAE ASSM/TED FORMAT BY CARL MOSER ;* ;* WRITTEN: 25 FEB 1980 ;*  0 + xN,>HILL z{芍|}L2 چ }dž }Ɇ W ̤ \@ 𸤶,8ȱȐȥeڑȱeۑ 0  } L}@E@ 0"E3 ER AND EXECUTIOP`pLDADR .DI $0800 ;OBJECT LOAD ADDҀ .BA $7C0 .MC $080 .O 0 CMD NO@ INC *TXTPTR ;BUMP POINTEP BNE WG10` INC *TXTPTR+p WG100 STX *WSW ;SAVE R(X) IN WS׀ TSX ;GET STACK POINTEҐ LDA $0101, CMP #$9B ;HERE WE CA 0 + xN,>HILL z{芍|}L2 چ }dž }Ɇ W ̤ \@ 𸤶,8ȱȐȥeڑȱeۑ 0  } L}@E@ 0"E3ENI .DE $F466 ;OPEN FILŀFCLOSE .DE $F2AE ;CLOSE FILŐREADY .DE $C389 ;REENTER BASIRUNC .DE $C572 ;CLEAR VARIABLELNKPRG .DE $C442 ;LINK BASIC LINE UNTLK .DE $F17F ;UN TAL0STXTPT .DE $C5A7 ;SET START TEXT POINTE@CHKIN .DE $F770 ;CHECK IPCH 08?Jn n  ": ) 0  ׆֢ޢ \ת @ 0 3 9   ŵL 礶*ɝ  l0hc_ʊޑAo 8  E pqv =;PET ROUTINES USED %TNIF .DE $FC7B ;STOP ALL IRQS,ENABLE 60H0LINPRT .DE $DCD9 ;PRINT LINE @SPMSG .DE $F315 ;SEND A MESSAGPLD15 .DE $F322 ;LOAD ROUTIN`TWAIT .DE $F8E6 ;WAIT FOR STOP KEpCHRGET .DE $70 ;INPUT CHARCHRGOT .DE $76 ;GETH h  =3 29 2` PȘ = u禴` O`8e`J J") JJJJJ)&)) JJJ Ȉ` = ĶȐ`@ֹש&*i? L h 2,L  {IԐBUF .DE $200 ;BASIC INPUT BUFFESATUS .DE $96 ;STATUS BYTSA .DE $D3 ;SECONDARY ADDRES FA .DE $D4 ;FIRST ADDRES0LA .DE $D2 ;LOG. DEVICE @FNLEN .DE $D1 ;FILE NAME LENGTPFNADR .DE $DA ;FILE NAME ADDR`EAL .DE $C9 ;END ADDR LpEAH .DE $CA G99;SET UP REPEAT KEY FUNCTIO SE LDA #L,REPEA STA *IR LDA #H,REPEA STA *IRQ+ CL ;CODE TO PROCESS MAE COMMANDS0;----------------------------@PCMDPROC LDX #0`LPCMD LDY #0p CPX #CMDTBLEND-CMDTBL ;CKG. END OF TABLŀ ;* DOS SUPPORT PROGRAM IS IN THE PUBLIC DOMAIN 0;* @;****************************************************P`p;BASIC VARIABLES USEDIRQ .DE $90 ;IRQ VECTOVERCK .DE $9D ; A12163: $C0004 (A)761639: BASIC2P(A)762151: BASIC4" UNIVERSAL DOS SUPPORT LOADED" -d" DISK.COPY.ALL JIM BUTTERFIELD"Kn L%(232),N$(232),T%(232)dx"FROM UNIT 8";Fm670wF$D$"TO UNIT 9";T670T$D$FT F$T$7301:15: 15,F,15:15,"I"F$700: E :200"HOLD  1,X$:X$""270'^X(X$):(X127)32340>h#1,X$:X$""360SrX80X83270e|N$;20);(X)tP(151)RZ$:Z$""P255430Z$"Y"Z$"N"Z(Z$):R255:430Z$(13)R0:430400Z80" ": ",17(N$(J)));/&3,F,3,F$":"N$(J)","(T%)[014,E,E$,E1,E2:710:E"** ";E$;E:620:4,T,4,T$":"N$(J)","(T%)",W":LLL%D700:E"*** ";E$;E:620N2862:N$(J)""X700:E"**** ";E$;E:620b""l4:3:15:14"DISK NAME,ID";X$,Y$% 15,"N"T$":"X$","Y$8 700:E:730^ 15,"I"T$:1,T,0,"$"T$":!#$%&"q 700:E:730z 830 *LXY256:"(";L;"BLOCKS FREE )" 41:15: >#1,X$,X$,X$,X$,X$,X$ H#1,X$:X$""840 R#1,X$,X$,X$ \. ""4)""Y4)" MAE/DOS SUPPORT ($7C00-$7FFF) "( " DOS SUPPORT IS A PUBLIC DOMAIN PROGRAM"2 " MODIFIED BY EASTERN HOUSE SOFTWARE "<F 8)" COMMAND SUMMARY: "P " DOS SUPPORT ";"";2 " LW - LOADER WARM"&M "COLD COMMANDS (AC,MC,LC) LOADS"{ "ASSOCIATED PROGRAM FROM DISK AND THEN" "BEGINS EXECUTION AT THE COLD START" "ENTRY. WARM COMMANDS (AW,MW,LW) DO NOT" "LOAD FROM DISK BUT INSTEAD B wwxɛL|w~xxx~X @ ~_~ ~`~HJ~ѹl~irکi~۩ }h~H~H`w>@ ȅ/c^_ ȱw2$TLvLvԩo (ww oP P#w o (  P Lvȱwwx:ɴ3w,x&w>@ ȅ/c^_ ȱw2$TLvLvԩo Cww P P#w o C  P  Lvȱwѩک۩ԥ9` C  ш ϩ @1  0ʥʅ+Ʌ*`wa{)`  {~ŗ ~~L.楗~~~~LCLWACAWMCMWREL.EXE*MAE.EXE*EXTRAMON.EXE* OP4|5ǩȩ\|]Ǒ\\]8\~]Lp45qr`Lvȱwwxɛ:3w,x&w>@ ȅ/c^_ ȱw2$TLvLvԩo (ww oP P#w o (  P Lvȱwѩک۩ԥ9` f (  ш ܩ @1 %DOWN 'Y' OR 'N' KEY TO SELECT"<"PROGRAMS TO BE COPIED..."O 1,F,0,"$"F$b700:E:200N0:R255:Z89:830:280850L%XY256"#1,X$:X$""460,X$(34)2906N$""@#1,X$:X$(34)340JN$N$X$:320 T#270!NN1:L%(N)L%:N$(N)N$:T%(N)X*270C1:15:" * * * * *"NJ1NnL%L%(J):T%T%(J):LL%530"*** OUTPUT DISK FULL""DO YOU HAVE A NEW ONE";Z$(Z$)89730:48014,F,15:15,T,15 N$(J);(" vJ% X(0):"ANOTHER INPUT DISK READY";Z$7 (Z$)89200= R "DRIVE 0";Db DDD670s D$(D48): 15,E,E$,E1,E2 E0E(ST 191):E$"*ST*"  15,T,15:"WANT TO NEW THE OUTPUT DISK";Z$ (Z$)89780 }X(X$):XX(X$)# f#1,X$:Y(X$):YY(X$)) p  0/ @A)  0@ )AƅL 15,E,E$,E1,E2 E0E(ST 191):E$"*ST*"  15,T,15:"WANT TO NEW THE OUTPUT DISK";Z$ (Z$)89780 );"  MAE SUPPORT "Id " $ AC - MAE ASSM/TED COLD"xn " $0 AW - MAE ASSM/TED WARM"x " $1 MC - EXTRAMON COLD" " / MW - EXTRAMON WARM" " ^ LC - LOADER COLD" EGINS"* "EXECUTION AT THE WARM START ENTRY"5(# 2721;)#)#ԩo (ww oP P#w o (  P Lvȱwѩک۩ԥS҅`ө $Ѣ p ) ш  ѩک۩ԥS҅`ө $Ѣ p ) ш  ܩ l]  p H hD& * ũ  У  hhL } r Bĥ/L LL ")%  5 ݩ  / hhL V)(0ʥʅ+Ʌ* /L "LJL%4g455ǩȥ4\5]Ǒ\]ȥLp45qr` )45LXxX` )  HH`04` ` L  ``HՕh`֤L8Ϙ`    }   B e  ݩ  hhLé ")(0ʥʅ+Ʌ* r Bĥ/L LL4g455ǩȥ4\5]Ǒ\]ȥLp45qr`A hASSEMBLER #1A12AUNIVERSAL WEDGECOPY ALLMAE/DOSEXTRAMON.EXE9.0B EXTRAMON.EXE9.0G DOS.ASMMAE/DOS.ASM)MLMACROS.MLIB#MAE.PAT.ASMPET.LIBIEEE.LIBKEYSORT.ASM4 SECTOR.CTL SECTOR.PGM SECTOR.EXE L.C.LISTER.ASM PET16.ASM PET16.MAC UART.CTUART.M01  LEARNING.AID1 LEARNING.AID2 LEARNING.AID3 LEARNING.AID4 LEARNING.AID5 LEARNING.AID6 LEARNING.AID7UNASSEMBLER/CBMUNASSEMBLER/MAECBM.TO.MAEMAE.TO.CBM EPROM.PRGM.ASM EPROM.PRGM.EXEEPROM.PRGM.INS3D.PLOT.ASMFREQ.CTR.ASM UART.M02UART.M03EXMON.CTEXMON.M01EXMON.M02 EXMON.M03 EXMON.M04!EXMON.M05 EXMON.M06"EXMON.M07 EXMON.M08EXMON.M09EXMON.M0A  )45LXxX` )  HH`04` ` L  ``HՕh`֤L8Ϙ`    }   B e H h  =3 29 2` PȘ = u禴` O`8e`J J") JJJJJ)&)) JJJ Ȉ` = ĶȐ`@ֹש&*i? L h 2,L  { 08?Jn n  ": ) 0  ׆֢ޢ \ת @ 0 3 9   ŵL 礶*ɝ  l0hc_ʊޑAo 8  E pqv = 0 + xN,>HILL z{芍|}L2 چ }dž }Ɇ W ̤ \@ 𸤶,8ȱȐȥeڑȱeۑ 0  } L}@E@ 0"E3 xN,>HILL z{芍|}L2 چ }dž }Ɇ W ̤ \@ 𸤶,8ȱȐȥeڑȱeۑ 0  } L}@E@ 0"E30L;**************************************************** ;* 0;* DOS SUPPORT PROGRAM @;* P;* BY BOB FAIRBAIN  ;**************************************************** 0;BASIC VARIABLES USED@PVERCK .DE $9D ;VERIFY FLA`SAL .DE $C7 ;IND. POINTER LpSAH .DE $C8 ;HɀWSW .DE $B3 ;UNUSED FLAG (BASICCNTDN .DE $BA ;SAVE AREGRBTOP .DE $5C ;INDIRECT PE FNLEN .DE $D1 ;FILE NAME LENGTFNADR .DE $DA ;FILE NAME ADDREAL .DE $C9 ;END ADDR L EAH .DE $CA ;H0DFLTO .DE $B0 ;DEFAULT OUTPUT DEV@VARTAB .DE $2A ;END OF BASIC PGMPTMP2 .DE $FD ;TEMP VARIABL`p;PROGRAM VARIABLESCR .DE $0D IT FOR STOP KE CHRGET .DE $70 ;INPUT CHAR0CHRGOT .DE $76 ;GET LAST CHAR@NEWSTT .DE $C6C4 ;NEW STATEMENT EXEPPRT .DE $E3D8 ;PRINT A CHAR`LISTN .DE $F0BA ;SEND LISTEpSECND .DE $F128 ;SEND SCIOUT .DE $F16F ;SEND A CHARUNLSN .DE $F183 ;UNLI .DE $C5A7 ;SET START TEXT POINTEҐCHKIN .DE $F770 ;CHECK ICHKOUT .DE $F7BC ;CHECK OUCLRCHN .DE $FFCC ;CLEAR CHANNE BASIN .DE $FFCF ;BASIC I0STOP1 .DE $F301 ;CHECK FOR STOP KE@BSOUT .DE $FFD2 ;BASIC OUPFOPEN .DE $F524 ;FILE OPE`LD209 .DEe   T S W j `LV  }   LL2  } '  "  ɝ  琹 솴  &  L2   ,  E  8  j \ L. BIAӅH hILG   Z L .' jH h > ) . ` h 2 8 Zo'p L  0  )  LL hL   rs =tuL2   hhLGL膵`0G`8`ŸLHJJJJ h)L {Xhhhhhh{PzH~@8Ƴ  $   L2<~o/SLM|}~@ @E3@ @E@ "D3ЌD"D3ЌD"D3@ "D3@ bx!YMJ,),#($YX$$#]#)i#$S#$S[[i$$)|mi)S4i#bZH&bTDThDt(ntJrtttrDh2"&&rr&HDDABCDFHINQTW',07bBT6L $F3E6 ;LOAD ERROp;WEDGE IN ROUTINE WITH THE COMMAND PARSER AND EXECUTIO  .BA $0700@CMD NOP INC *TXTPTR ;BUMP POINTE` BNE WG10p INC *TXTPTR+WG100 STX *WSW ;SAVE R(X) IN WSא TSX ;GET STACK POINTE LDA $0101, CMP #$9B ;H `;* CONVERTED TO MAE ASSM/TED FORMAT BY CARL MOSER p;* ;* DOS SUPPORT PROGRAM IS IN THE PUBLIC DOMAIN ;* OINTEMEMSIZ .DE $34 ;POINTER TO TOP OF MEMOR TXTPTR .DE $77 ;POINTER TO BU0SPERR .DE $10 ;EOI ERROR BI@BUF .DE $200 ;BASIC INPUT BUFFEPSATUS .DE $96 ;STATUS BYT`SA .DE $D3 ;SECONDARY ADDRESpFA .DE $D4 ;FIRST ADDRESӀLA .DE $D2 ;LOG. DEVIC;CARRIAGE RETURFLAG .DE WSW PIAK .DE $E812 ;KEYBOARD I/O POR0CMDLN .DE CMDEND-CMD ;LENGTH TO RELOCAT@P`;PET ROUTINES USEDpLINPRT .DE $DCD9 ;PRINT LINE SPMSG .DE $F315 ;SEND A MESSAGLD15 .DE $F322 ;LOAD ROUTINTWAIT .DE $F8E6 ;WA STEACPTR .DE $F18C ;GET A CHARTALK .DE $F0B6 ;SEND TAL OPENI .DE $F466 ;OPEN FIL0FCLOSE .DE $F2AE ;CLOSE FIL@READY .DE $C389 ;REENTER BASIPRUNC .DE $C572 ;CLEAR VARIABLE`LNKPRG .DE $C442 ;LINK BASIC LINEpUNTLK .DE $F17F ;UN TALˀSTXTPT ;CKG. DFLTO FOR SCREE΀# CPX ## BEQ X7$ LDX *WS$ JSR CHKOU $X77 JSR BSOU0$ JSR CLRCH@$P$`$;CHECK FOR STOP KEY AND PAUSEp$$ JSR STOP1 ;STOP KEِ$ BEQ WG230 ;YES..% JSR $FFE4 ;GET A CHAR FROM KEYBOAR% BEQ WG250 ;NOTHING.. % CMP #$20 ;SPA BNE WG220&'';CLOSE FLOPPY AND RETUR '0'WG230 JSR CLRCH@' LDA #14 ;CLOSE FLOPPP' JSR FCLOS`' PLp' PL' JMP READY ;RETURN "READY'((;LOAD A FILE (0(LOAD LDA #@( STA *SATUS ;CLEAR STATUP( STA *VERCK ;LOAD NOT VERIF`( JSR LD15 ;LOAD A  TA *VARTA) JSR RUNC ;FIX POINTER0 JSR LNKPRG ;FIX LINK0 LDA *FLAG ;CHECK FOR LOAD OR RU 0 CMP #'/ ;LOAD 00 BNE WG300 ;NO..@0 JMP READY ;LOAD RETURN TO BASIP0WG300 JSR STXTPT ;SET TXTPTR FOR RU`0 JMP NEWSTT ;RUN PROGRAp0LDERR JMP LD209 ;PRINT  2`2MOVE LDY #$01 ;SET UP FROM ADDp2 LDA #L,CMĀ2 STA *SA̐2 LDA #H,CM3 STA *SA3 LDA *MEMSIZ ;SET UP TO ADD 3 STA *GRBTO03 LDA *MEMSIZ+@3 STA *GRBTOP+P3MOV1 LDA (SAL),Y ;RELOCAT`3 STA (GRBTOP),p3 INـ3 BNE MOV3 INC *GRBTOP+4 INC *SA4 LDAERE WE CALLED BY MAI BNE NOMAIN ;NO..0 LDA $0102,X ;MAYBE@ CMP #$CP BNE NOMAIN ;NOT THERE..` LDA *TXTPTR ;FIRST COLUMNp BNE WG997 ;GET OUT NOT FIRST CHҀ LDA *TXTPTR+ CMP #H,BUF ;IN BUFFER BNE WG99 WG110 LDY #00 ;.Y IS BUF INDE0@ BEQ DODIP BNE WG99`WG115 INp LDA (TXTPTR),ـ BEQ RDERR ;READ ERROR CHANNE̐ CMP #'$ ;DIRECTORY BEQ DODIR ;YE BNE NOTDI WG997 JMP CHRGO0NOMAIN LDX *WSW ;RESTORE .X AN@ JMP CHRGOT ;RETURN TO CHRGOP`p;SEND COMMAND TO DISˀN JSR CIOUT ;SEND THE CHAR CL  BVC BUMP ;MOR0@WG120 JSR UNLSN ;UNLISTEP CL` BVC WG99p;READ THE ERROR CHANNELRDERR STY *TXTPTR ;FIX POINTE  LDA #08 ;SET F0 STA *F@ JSR TALP LDA #$6F ;COMMAND CHANNEL S` STA *Sp JSR R INY ;GET LENGTH OF CM  LDA (TXTPTR),0 BNE DODI@ DEP STY *FNLEN ;SET LENGTH (-1` LDA #L,BUF+1 ;FILE NAME ADDRp STA *FNADҀ LDA #H,BUƐ STA *FNADR+ LDA #8 ;DEVICE ADDR STA *F  LDA *FLAG ;0 MEANS DI0 BNE LOADB ;DO A LOA@ LDA *LA STY *FNLEN ;SAVE NEW COUNԀ LDX #14 ;DISK CHANNE̐ JSR CHKI JSR BASI STA *TMP LDY *SATUS ;CHECK STATU0 BNE WG235B ;BAD STATU@ JSR BASIP STA *TMP2+` LDY *SATUS ;CHECK STATUp BNE WG235€ LDY *FNLEN ;MORE TO DO DE! BNE WG220 ;NOT HE "LOADB BNE LOAD ;(JMP0"WG235B BNE WG230 ;(JMP@"WG220B BNE WG220 ;(JMPP"SKIPB JSR BSOU`" JSR CLRCHp"WG250 LDX #14 ;DISK CHANNÈ" JSR CHKIΐ" JSR BASI# PH# JSR CLRCH # PL0# LDX *SATU@# BNE WG230 ;BAP# CMP #0 ;EO`# BEQ WG24p# LDX *CNTDN CE BAR0% BNE WG250 ;NO..@%WG255 JSR $FFE4 ;ANY KEY STARTP% BEQ WG25`% BNE WG250 ;(JMPp%%WG240 LDA #CҐ% LDX *CNTDN ;CHECK DFLTO FOR SCREE& CPX #& BEQ X77 & LDX *WS0& JSR CHKOU@&X777 JSR BSOUP& JSR CLRCH`& JSR UNLSp& LDY #$02 ;DO TWICŀ& PROGRAp( LDA *SATUӀ( AND #SPERR ;CHECK STATUS (EOI OK( BNE LDER) LDA $F384 ;CHECK FOR (-04) RO) BMI LOAD1 ;NOT (-04).. ) INC *EAL ;FIX THE LOAD (-04) RO0) BNE LOAD@) INC *EAP)LOAD1 LDA *EAH ;SET BASIC'S POINTER`) STA *VARTAB+p) LDA *EÀ) S"LOAD ERROR001CMDEN1 101;THIS ROUTINE POKES TOP OF MEMORY DOWN, RELOCATES TH@1;PARSER AND SETS THE WEDGEP1`1POKE LDA *MEMSIZ ;POKE TOP DOWp1 CLÀ1 SBC #L,CMDLΐ1 STA *MEMSI2 LDA *MEMSIZ+2 SBC #H,CMDL 2 STA *MEMSIZ+02@2;MOVE THE CODP *SA 4 CMP #H,CMDEN04 BEQ MOV@4 BCS WEDGP4MOV2 LDY #`4 BEQ MOVp44;WEDGE INTO BASIÐ45WEDGE LDA #$4C ;JUMP INSTRUCTIO5 STA *CHRGE 5 LDY *MEMSI05 LDX *MEMSIZ+@5 INP5 BNE WEDGE`5 INp5WEDGE1 STY *CHRGET+5 STX *CHRGET+5 RT66 6END.DO STY *FLAG ;FLAG SET FOR DI@ LDA (TXTPTR),P CMP #'> ;COMMAND PRONPT` BEQ WG115 ;YES..p CMP #'@ ;BUSINESS KEYBOARD PROMPԀ BEQ WG115 ;YES.. IN STA *FLAG ;SET FLAG FOR LOA CMP #'/ ;LOAD PROMP  BEQ DODI0 CMP #'^ ;CHECK FOR LOAD AND RUOTDIR LDA #8 ;GET DEVICE ADDRES STA *F LDA #$6F ;SECONDARY ADDRESS 1  STA *S0 JSR LIST@ LDA *SP JSR SECND ;SEND SECONDARY ADDRES`BUMP INC *TXTPTRp LDY #0 ;INDEX = LDA (TXTPTR),Y ;GET THE FIRST CHARACTEҐ BEQ WG120 ;ZERO IS LAST CHARSECND ;SEND SWG140 JSR ACPTR ;GET BYTE FROM DISː CMP #C BEQ WG13 JSR PRT ;PRINT BYTE TO SCREE  CL0 BVC WG140 ;LOOP FOR MOR@WG130 JSR PRT ;PRINT CP JSR UNTLK ;UNTAL`WG998 JMP CHRGOT ;CONE WITH CMp;PRINT THE DIRECTORYDODI;SAVE LP STA *WS` LDA *DFLTO ;SAVE DFLTp STA *CNTD΀ LDA #$60 ;SECONDARY ADDRӐ STA *S LDA #14 ;OPEN THE FIL STA *L  JSR UNLSN ;DON'T LISTEN TO FLOPP0 JSR FOPE@ LDA #0P STA *SATUS ;SET STATUS TO ` LDY #03 ;LOOP THREE TIMEpWG220  DONE YE! JSR CLRCHN ;CLEAR CHANNE ! LDX *CNTDN ;CHECK DFLTO FOR SCREE0! CPX #0@! BEQ XP! LDX *WSW ;OPEN THE PRINT CHANNE`! JSR CHKOUp!X7 LDX *TMP! LDA *TMP2+! JSR LINPRT ;PRINT LINE NUMBE" LDA #' ;PRINT A SPAC" BNE SKIPB ;SKIP OVER BRANC 05=; ::: MACRO LIBRARY FOR M.L. DEVELOPMENT :: 0@;WRITTEN: 10FEB198P;UPDATED: 15FEB1980 - ADDED S`p .MG ;DECLARE AS MACRO GLOBA 0;FLAG MANIPULATION MACROS@P;SET BITS IN SPECIFIED FLAG REGISTER WHICH CORRESPOND WI D *...FLG  STA *...FLG0 .M@P`;TEST SPECIFIED FLAG AND BRANCH IF SOME CORRESPONDING WITp;MASK ARE SET!!!TBFS .MD (...FLGTS ...MSKTS ...LPTS LDA *...FLGT AND #...MSKT  BNE ...LPT0 .M@P`;TEST SPECIFIED FLAG AND BRANCH IF AL P!!!BLE .MD (...LPBLE` BCC ...LPBLp BEQ ...LPBLŀ .MŐ;BRANCH ON GREATER THA 0!!!BGT .MD (...LPBGT@ BEQ ...SKBGP BCS ...LPBG`...SKBGT .Mp;BRANCH ON GREATER THAN OR EQUA!!!BGE .MD (...LPBGE  BCS ...LPBG0 .M@P`S .EΪVE LDY #$01 ;SET UP FROM ADDp2 LDA #L,CMĀ2 STA *SA̐2 LDA #H,CM3 STA *SA3 LDA *MEMSIZ ;SET UP TO ADD 3 STA *GRBTO03 LDA *MEMSIZ+@3 STA *GRBTOP+P3MOV1 LDA (SAL),Y ;RELOCAT`3 STA (GRBTOP),p3 INـ3 BNE MOV3 INC *GRBTOP+4 INC *SA4 LDANT ZERO PAGE 16-BIT REGp!!!DINC .MD (...L1 INC *...L BNE ...SK INC *...L1+ ...SK1 .M0@P;DECREMENT ZERO PAGE 16-BIT REG`p!!!DDEC .MD (...L2 DEC *...L LDA *...L CMP #$F BNE ...SK  DEC *...L1+0...SK2 .M@P`;ADD..L` LDA *...L5+p SBC *...L6+ STA *...L5+ .M ;DOUBLE COMPARE ZERO PAGE REGISTER0@!!!DCMP .MD (...L7 ...L8P SE` LDA *...Lp SBC *...L LDA *...L7+ SBC *...L8+ .M 0;MOVE ZERO PAGE REGISTER@P!!!DMOV .MD (...L9 .!DMOVM .MD (...L13 ...L14` LDA *...L1p STA ...L1 LDA *...L13+ STA ...L14+ .M 0;ADD IMM. TO Z-PAGE REGISTE@P!!!DADDI .MD (...L15 ...L16` CLp LDA #L,...L1 ADC *...L1 STA *...L1 LDA #H,...L1 ADC *...L15+ STA *...L1Q ...EXDO@"...LPDO JSR ...DOLOOP" DEC ...L1`" BNE ...LPDp"...EXDO1 JMP ...EXDπ"...DOLOOP .MŐ"##;END STATEMENT TO TERMINATE DO LOO #0#!!!END .M@# RTP# .M`#p##; SA (S D) - STORE ADDRESS "S" AT ZERO PAGE LOC. "D#!!!SA .MD (...S ...D) 0>; ****************************************************** ; ** *0; ** PET LIBRARY FILE *@; ** * `p; GENERAL SUBROUTINES; -------------------@WRT .DE $FFD2 ;WRITE ASCII CHAR. IN R(A) TO SCREE @RDT .DE $FFCF ;READ ASCII CHAR. FROM KEYBOARD TO R(A0@GET .DE $FFE4 ;GET CHAR. IF ANY, ELSE R(A)=0@@CRLF .DE $FDCD ;WRITE A CR LP@SPACET`;1'S IN MASKp!!!SETBIT .MD (...FLGS ...MSKS LDA *...FLG ORA #...MSK STA *...FLG  .M0@P;CLEAR BITS IN SPECIFIED FLAG REGISTER WHICH CORRESPOND WIT`;1'S IN MASKp!!!CLRBIT .MD (...FLGC ...MSKC LDA #...MSK EOR #$F ANL BITS CORRESPONDING WITp;MASK ARE CLEAR!!!TBFC .MD (...FLGTC ...MSKTC ...LPTC LDA *...FLGT AND #...MSKT  BEQ ...LPT0 .M@P`;BRANCH ON LESS THAp!!!BLT .MD (...LPBLT BCC ...LPBL .M 0;BRANCH ON LESS THAN OR EQUA@;PUSH ZERO PAGE 16-BIT REG. ON STACp!!!PUSH .MD (...ZRPH LDA *...ZRPH+ PH LDA *...ZRPH+ PH0 .M@ P ` ;PULL ZERO PAGE 16-BIT REG. OFF STACp !!!PULL .MD (...ZRPL PL STA *...ZRPL+ PL  STA *...ZRPL+0 .M@P`;INCREME2 .DE $FDCA ;WRITE 2 SPACE`@SPACE .DE $FDCD ;WRITE 1 SPACp@WROB .DE $E775 ;WRITE TWO DIGITS REPRESENTING CONTENTS OF R(A@RDOB .DE $E7B6 ;READ TWO DIGITS AND PACK INTO R(A@HEXIT .DE $E7E0 ;CONVERT R(A) TO HE@CLRSCRN .DE $E229 ;CLEAR SCREE@ ZERO PAGE REGISTERp!!!DADD .MD (...L3 ...L4 CL LDA *...L ADC *...L  STA *...L0 LDA *...L3+@ ADC *...L4+P STA *...L3+` .Mp;SUBTRACT ZERO PAGE REGISTER!!!DSUB .MD (...L5 ...L6  SE0 LDA *...L@ SBC *...LP STA *...L10` LDA ...L1p STA *...L LDA ...L10+ STA *...L9+ .M 0;MOVE IMM. TO ZERO PAGE REGISTE@P!!!DMOVI .MD (...L11 ...L12` LDA #L,...L1p STA *...L1 LDA #H,...L1 STA *...L11+ .M 0;MOVE FROM REG. TO ABS. MEMOR@P!!5+0 .M@ P ` ;SUBTRACT IMM. FROM Z-PAGE REGISTEp !!!DSUBI .MD (...L17 ...L18 SE! LDA #L,...L1! SBC *...L1 ! STA *...L10! LDA #H,...L1@! SBC *...L17+P! STA *...L17+`! .Mp!!!;DO LOO""!!!DO .MD (...EXDO ...L19 " LDA ...L10" BEW;8-BYTE INSTRUCTIO$ LDA #L,...$ STA *... $ LDA #H,...0$ STA *...D+@$ .MP$`$ SE! LDA #L,...L1! SBC *...L1 ! STA *...L10! LDA #H,...L1@! SBC *...L17+P! STA *...L17+`! .Mp!!!;DO LOO""!!!DO .MD (...EXDO ...L19 " LDA ...L10" BE P; ******************************************************QRST; CONTAINED IN THIS FILE IS SOME PET ROM LOCATIONU; WHICH MAY BE OF INTEREST TO THOSE OF YOU WHO ARV; DEVELOPING PROGRAMS WHICH INTERFACE WITH THE PEWX J; pet keysor 0; a multi-key sort for pet basic array@P`; by rev. james strasmp; 120 w. king st; decatur, il. 6252; as of feb. 26, 198 0sart .ba $7c54 ;sys(31 .de $05 ;key field set fla flds .de $06 ;sort field 0@P;most var.s as in basic heapsor`i .de $0pj .de $0k .de $0l .de $0ln .de $0f ;1 by-$ lengthln1  v1 .de $23 ;pointer start- ;rom-dependent var.0aras .de $2c ;start of array spac@eara .de $2e ;end of array spacPhim .de $34 ;end of memor`arer .de $80 ;offset w/i error tablper SCROLL .DE $E53F ;SCROLL SCREE @BASIC.WRM .DE $C389 ;BASIC WARM START (USE JMP0@TST.STOPB .DE $FFE1 ;TEST STOP KEY AND GO TO BASIC IF DOW@@TST.STOPR .DE $F301 ;TEST STOP KEY - ENABLED IF Z=P`p; IEEE SUBROUTINES:; ----------------@ TO NOT LISTEp@UNTALK .DE $F17F ;COMMAND DEVICE TO NOT TALˀ@IEEEPUT .DE $F16F ;OUTPUT R(A) TO IEE@IEEEGET .DE $F18C ;INPUT FROM IEEE TO R(A@IEEEBUF .DE $F0EE ;IEEE OUPUT BUFFERED VIA CHAR. IN @BUFFCH 0@RELSATTN .DE $F12D ;RELEASE IEEE AT ;01= 08= LONG BLOCK ERRO` ;02= TIMEOUT 10=p ;04= SHORT BLOCK ERROR 40= EOɀ@FNLEN .DE $D1 ;FILE NAME LENGT@FNADR .DE $DA ;FILE NAME ADDRES@SAL .DE $C7 ;IEEE START ADDRES HAR. IN KEYBOARD INPUT BUFFEP@KEYD .DE $026F ;KEYBOARD INPUT BUFFE`@CHR/LINE .DE $D5 ;CURRENT LINE LENGTH 40 =$37, 80 =$4p@KEYCHR .DE $97 ;KEY DEPRESSED, =$FF IF NO KEـ; VECTORS ; -------0@@IRQVEC .DE $90 ;IRQ VECTOP@BRKVEC .DE $@P`p;6522 (CHIP C5) = E84x = USER PORԐ@DRB .DE $E840 ;DATA REG. @DRA .DE $E841 ;DATA REG. A WITH HANDSHAK @DDRB .DE $E842 ;DIRECTION REG. 0@DDRA .DE $E843 ;DIRECTION REG. @@T1L_LWLRC .DE $E844 ;TIMMER #1 WRITE LATCH READ COUNTE0@PCR .DE $E84C ;PERIPHERAL CONTROL REGISTE@@IFR .DE $E84D ;INTERRUPT FLAG REGISTEP@IER .DE $E84E ;INTERRUPT ENABLE REGISTE`@DRANH .DE $E84F ;DATA REGISTER A BUT NO HANDSHAKpl @@T1L_LWLRC .DE $E844 ;TIMMER #1 WRITE LATCH READ COUNTE bcc sav ;don't lower hime bne cut ;do lower i lda *him ;depends on lo byt sbc #l,sar  bcc sav ;if already lowe0cut lda #l,sart ;cut lo, then h@ sta *hi828@P`;first 5 var.s poked from basiparnm .de $00 ;stores array namnmfl .de $02 ;array selected fladflg .de $03 ;delimiter set fladlim .de $04 ;delim. charfdfl  .de $10 ; ln2 .de $11 ;0n .de $12 ;elements in arra@r1 .de $14 ;3 by-temp. registerPr2 .de $17 ;`r3 .de $1a ;pr4 .de $1d ;s .de $20 ; rp .de $c357 ;error msg. & sto;other labeldch .de $09 ;tab char locs .de $24 ;# of locations to fli0@P lda *him+1 ;should we cut himem` sep sbc #h,sar OPEN .DE $F466 ;OPEN IEEE CHANNE @SENDSEC .DE $F128 ;SEND IEEE SECONDARY ADDRS IN R(A0@CLOSE .DE $F6F0 ;CLOSE IEEE CHANNE@@LISTEN .DE $F0BA ;COMMAND IEEE DEVICE TO LISTEP@TALK .DE $F0B6 ;COMMAND DEVICE TO TAL`@UNLISTEN .DE $F183 ;COMMAND DEVICETENTIO@P`p; OPERATING SYSTEM VARIABLEӀ; --------------------------; NOTE: THE O.S. USES $0090-$00FF, BASIC ALL @FA .DE $D4 ;IEEE FIRST ADDRESS (DEVICE0@SA .DE $D3 ;IEEE SECONDARY ADDRESS (CHANNEL@@STATUS .DE $96 ;STATUE BYTP@EAL .DE $C9 ;IEEE END ADDRES0@@BUFFCHR .DE $A5 ;BUFFER FOR IEEE OUTPUP@FAT .DE $025B ;SAVE LOC. FOR F`@TBUF1 .DE $027A ;TAPE BUFFER #p@TBUF2 .DE $033A ;TAPE BUFFER #; SCREEN VARIABLES ; ----------------0@@NDX .DE $9E ;# OF C92 ;BREAK VECTO`@NMIVEC .DE $94 ;NMI VECTOp  ; PET I/O ; -------0 @ ;6520 (CHIP C7) = $E81x = KEYBOARD SCAP ` @DRA/DDRA .DE $E81p @CRA .DE $E81 @DRB/DDRB .DE $E81 @CRB .DE $E81 ;6520 (CHIP C6) = E82x = IEEE 488 INTERFAC0P@T1C_H .DE $E845 ;TIMMER #`@T1L_L .DE $E846 ; p@T1L_H .DE $E847 ; @T2L_LWLRC .DE $E848 ;TIMMER #2 WRITE LATCH READ COUNTEҐ@T2C_LWLRC .DE $E848 ; @T2C_H .DE $E849 ; @SR .DE $E84A ;SHIFT REGISTE @ACR .DE $E84B ;AUXILLARY CONTROL REGISTEP lda #h,sar` sta *him+psav jsr spg ;save z.p lda *aras ;set current array ptr sta *r1+1 ;curr. ar. st lda *aras+ sta *r1+  lda *nmf0 cmp #'$  ag set beq flch ;ye lda #$00 ;no, set 0 field sta *fld flch ldy #2 ;offset to next arra0 lda (r1+1),y ;l@ clP adc *r1+1 ;add to current's star` sta *r2+1 ;to next array  q efnd ;end foun bcs nare ;not enefnd cpx #2 ;found array bcs fara ;ye bcc oops ;n nare cpx #2 ;found it0 bcs fara ;ye@ lda *r2+1 ;no, next=cur jmp errp ;print error & aborpfsiz ldy #6 ;# of element lda (r1+1),y ;l sta * de lda (r1+1),y ;h  sta *n+0 clc ;find mid elemen@ ror P sta *l+ sta *v1+ ;k=0 lda *@ sta *P lda *n+` sta *k+p;if l<>1 goto l=l-main lda *l+ beq ndedec2 jmp decndec lda *  cmp #0 bne dec@;r1=P lda *k ;get ` sta *r3+s+;v(k)=v(1 lda *v1 ;r(2)=v1+  cl0 adc #$0@ sta *r2+P lda *v1+` adc #$0p sta *r2+ lda (r2+1),y ;(r(1))=(r(2) sta (r1+1), de lda (r2+1), sta (r1+1),0 de@ lda (*! bne jeq!;r1=" lda *i ;converted i to r(1" sta *r3+ " lda *i+0" sta *r3+@" jsr conP";v(i)=`" lda *p" ldy #" sta (r1+1),y ;s to (r(1)" in# lda *s+# sta (r1+1), # in0#;l=l-p$decl se$ lda *$ sbc #1 ;-% sta *% lda *l+ % sbc #00% sta *l+@%;r1=P% sta *r3+`% lda *l ;conv. l to r(1p% sta *r3+% jsr con%;s=v(l& ldy #0 ;(r(1))`' sta *p' lda *j+' sta *i+';j=j+( cl( rol *j ;double ( rol *j+0(;compare j & @( lda *j+1 ;hi firsP( cmp *k+`( beq hep( bcc j<(toj> jmp j>(heq lda *j ;flags array nam@ beq ckna ;find name to matcP lda #$80 ;basic's $ array fla` sta *arnm ;use any $ arrap sta *arnm+ckna ldy # lda (r1+1), cmp *h wrnm ty tax ;name flag to lda *dflg ;flag to change delim0 cmp #'% ;unless=, use [tab@ beq flc2 ;delimiter entereP lda #dch ;standard char` sta *dlip flc2 lda *fdfl ;see if fields> cmp #'# ;flptrp in lda (r1+1),y ;h adc *r1+ sta *r2+ lda *eara+1 ;last array  cmp *r2+2 ;next ar. st0 beq ehfd ;meyb@ bcs nare ;nPehfd lda *eara ;check l` cmp *r2+p berenP sta *r1+` lda *r2+p sta *r1+ cl bcc ckna ;jumfara ldy #4 ;1 dimension allowe lda (r1+1),  cmp #0 beq fsiz ;o@oops jsr spg ;restore basiP ldx #are` ` lda *p ror  clc ;make % & + adc # sta * lda *l+  adc #0 sta *l+@ lda *r1+1 ;current=element#0-P cl` adc #p sta *v lda *r1+ adc # p lda *k+ sta *r3+ jsr conv ;ele. # to ptr. addr;s=v(k ldy #0 ;r(1) to  lda (r1+1),0 sta *@ inP lda (r1+1),` sta *s+p in lda (r1+1), sta *r2+1),P sta (r1+1),` ;k=k-p se lda * sbc #1 ;subtract with borro! sta *! lda *k+ ! sbc #00! sta *k+@!;if k<>1 goto jeqP! cmp #`! bne jeqp! lda  lda *s+@# sta (r1+1),P#;exchange z.p. s/`#spg ldx #locs ;flip z.p. locationp#slop lda cpg,# ph# lda *0,$ sta cpg,$ pl $ sta *0,0$ de@$ bpl slop ;$7f maP$ rts ;end or retur`$ to & lda (r1+1), & sta *0& in@& lda (r1+1),P& sta *s+`& inp& lda (r1+1),& sta *s+&;j='jeql lda *' sta * ' lda *l+0' sta *j+@';i=P'ieqj lda * ;if hi=, then ck. l) cmp *) bcc j< ) beq jeq0) bcs toj@);if j=$80 if $ arra iny ;y>1=rig +1),06 sta *r@6 lda *s+2 ;P6 sta *r4+`6 lda *s+p6 sta *r4+6 lda *6 sta *r7 jsr cmpr ;compare $7;if s=v(j+1) goto jeq`3 lda *r1 ;deciding char.p3 j to r(15 lda *j+ 5 sta *r3+05 jsr con@5;compare v(j) & P5 ldy #2 ;(r(1)) =ed v(j`5 lda (r1+1),p5 sta *r3+2 ;copy for s/5 de5 lda (r1+1),y ;v(j6 sta *r3+6 de 6 lda (r1 cmp *r2 ;r(3)'s in r(2@7 beq j>k ;ifP7 bcs sr(2`7;r1=p7j>k lda *i ;v(j)'s<=s'7 sta *r3+7 lda *i+1 ;conv. i to r(18 sta *r3+8 jsr con 8;v(i)=08 ldy #0 ;s to (r(1)sta *r3+`9 lda *i+1 ;conv. i to r(2p9 sta *r3+9 jsr con9 lda *r1+1 ;move to r(2@ sta *r2+@ lda *r1+ @ sta *r2+0@;r1=@@ lda *j ;conv. j to r(1P@ npA lda (r1+1),A sta (r2+1),A jmp ieqj ;back to middlB;cmpr $s s/Bcmpr ldy # B sty *l0B ldx *fld@B bne notPB lda *r4 ;sort on field#`B sta *lnpB lda *r3 end of $`C bcc cont ;npC jmp oops ;on erroCfndd sty *ln ;mark current offseC deD beq sfld ;sort fielD bcs cnt3 ;count o Dsfld iny ;@ sort fiel0D cmp (r4+1),y ;next char@D beq fnef tarPE cl`E adc *r4+1 ;start of sort fielpE sta *r4+E lda *r4+E adc #$0F sta *r4+2 ;r(4)'s donF ldy #0 ;now other F sty *l0F ldx *fld@F lda *dlim ;only reg.s diffePFc se@H sbc *lPH sta *ln`H inc *lpH lda *lH clH adc *r3+I sta *r3+I lda *r3+ I adc #$00I sta *r3+@Ifsh lda *ln1 ;found shorter PI cmp *ln2 ;r(4)'s in ln`I beq epI nd. shorteP;init. $ ctrPbegs cmp #0 ;ck. if $ is nulQ beq nulQ ldy # Q;cmpr next char0Qnex lda (r3+1),@Q cmp (r4+1),PQ bne dif ;char.s differ`Q iny ;npQ;beyond last cha *r1+`1 adc #0p1 sta *r1+1;compare v(j+1) & v(j1 ldy #2 ;copy to r(3) & r(42 lda (r1+1),y ;v(j+12 sta *r3+ 2 de02 lda (r1+1),@2 sta *r3+P2 de`2 lda (r1+1),p2  cmp *r3 bcc jeqk ;r(2)>=r(13 beq jeq4;j=j+4 clc ;+ 4 lda *04 adc #@4 sta *P4 lda *j+`4 adc #0p4 sta *j+4;r1=4jeqk lda *j ;j =ed 5 sta *r3+1 ;conv.  programT bmi same ;jumU;conversion from # to address w/i pointer array s/Uconv lda *r3+ U sta *r4+0U lda *r3+@U sta *r4+PU cl`U rol *r3+1 ;double ipU rol *r3+U lda *r3+1 ;+t1=t*U clV a ;save z.p. her@W .e same ;jumU;conversion from # to address w/i pointer array s/Uconv lda *r3+ U sta *r4+0U lda *r3+@U sta *r4+PU cl`U rol *r3+1 ;double ipU rol *r3+U lda *r3+1 ;+t1=t*U clV a 07 ; +++++ SET BAUD RATE ++++0@SET.BAUD PHP ;SAVE PSP SEI ;CLEAR INTERRUPT` LDA PIA.DIR ;INITIALIZE PORT ON LOGOp AND #$FF-MSK.IN ; ORA #MSK.OUT ; STA PIA.DIR ; LP1 JSR GET.BI  BNE LP1 ;BR. IF ALREADY SPACIN0 P TBLBAUD,ـ BCS GOTBAUĐ IN BNE LP.FGOTBAUD STY BIT.TIME ;STORE BAUD RATE COD  LDX #12 ;WAIT UNTIL ALL BITS HAVE BEEN SEN0 JSR PAD.DEL@ PLP RT`pTBLBAUD .BY 255 ; >= 11 .BY 147 ; >= 30 .BY 74 ; >= 60 .BY 37 ; >= 120  .BYEQ NOT.THI  TA0LOOPDEL1 DE@ BNE LOOPDELP NO` RTp;---DELAY=5X+1UD.TBL1 .BY 00 ;DELAY FULL FOR 110 BAU .BY 00 ;DELAY FULL FOR 300  .BY 00 ;DELAY FULL FOR 600  .BY 154 ;DELAY FULL FOR 1200 0 .BY 71 ;DELAY FULL FOR 2400 @1 ;DELAY 0.5 FOR 2400 @ .BY 10 ;DELAY 0.5 FOR 4800 P .BY 03 ;DELAY 0.5 FOR 7200 ` .BY 01 ;DELAY 0.5 FOR 9600 pNOT.THIS LDA UD.TBL2,ِ TA LOOPDEL2 .BY $48 $48 $48 $48 $48 $48 $4 .BY $68 $68 $68 $68 $68 $68 $6 DE0 BNE LOOPDEL@ R5 FOR 600 FOR 2400 @ .BY 10 ;DELAY 0.5 FOR 4800 P .BY 03 ;DELAY 0.5 FOR 7200 ` .BY 01 ;DELAY 0.5 FOR 9600 pNOT.THIS LDA UD.TBL2,ِ TA LOOPDEL2 .BY $48 $48 $48 $48 $48 $48 $4 .BY $68 $68 $68 $68 $68 $68 $6 DE0 BNE LOOPDEL@ Rr.Q cpy *lQ bcc nex ;= 2400 .BY 10 ; >= 480@ .BY 7 ; >= 720P .BY 0 ; >= 960`pGET.BIT LDA PIA.PORT ;GET KEYBOARD INPUԐ AND #MSK.IN ;  RT DEL0.5 LDA BIT.TIM0 CL@ CLP ADC #0` TAp JMP EN0.DLYFULL LDY BIT.TIMEN0.5 LDA UD.TBL1, B .BY 29 ;DELAY FULL FOR 4800 P .BY 15 ;DELAY FULL FOR 7200 ` .BY 08 ;DELAY FULL FOR 9600 p;---DELAY=5X+2 .BY 00 ;DELAY 0.5 FOR 110 BAU .BY 00 ;DELAY 0.5 FOR 300  .BY 00 ;DELAY 0.5 FOR 600  .BY 72 ;DELAY 0.5 FOR 1200 0 .BY 3TP ` ;---DELAY=54X+2p UD.TBL2 .BY 167 ;DELAY FULL FOR 110 BAUĀ .BY 60 ;DELAY FULL FOR 300 .BY 30 ;DELAY FULL FOR 600  .BY 00 00 00 00 0 ;---DELAY=54X+30 .BY 83 ;DELAY 0.5 FOR 110 BAU@ .BY 30 ;DELAY 0.5 FOR 300 P .BY 14 ;DELAY 0.ke frequent references to th@manual for futher understanding. Learning is an iterative processPYou may find yourself advancing rapidly thru this material and later`having to fall back and reread previously covered material. Thipmay be because ypR sta *r2 ;from 4 optionR rtR;one is Sone<< lda (r4+1),S sta *r S lda #0S sta *r@S rtPS;two is `Stwo<< lda #pS sta *rS lda (r3+1),S  >XX _ You type garbage such as XX and retur  !ED AT LINE xxxxx _ And this error message will appea0@P #3 Change the text file memory allocation to $0800 - $1FFC` the label file to $4000 - $46FC, and relocatable buffer  reas0@P #4 Go to monitor and then reneter the ASSM/TED at warm start`p >BREAˀ The monitor greeting message appears (Registers displayed or whatever .G 2090 (for PET) *2003G (for APPLE) .G 2003 (for KIM, SYM 0  . Type this in as shown as later examples refer to it >AUTO 1  >1000;THIS PROGRAM ADDS 06 TO THE ACCUMULATO0 1010>@ 1020> .BA $800