$C6CF KILL FILE ENTRY POLCAT EQU $A000 POLE KEYS PUTCAT EQU $A002 ECHO KEY EOL EQU 0 PITCH EQU $8C SOUND PITCH BUFPNT EQU $A6 COMMAND BUFFER POINTER DFILNM EQU $094C FILSPC SET FILE NAME HERE THELIN EQU $02DD COLOR INPUT TERMINAL LINE ADR DKTYPE EQU $0957 FILE TYPE+ASCII FLAG DEFDRV EQU $095A DEFAULT DRIVE JXADDR EQU $836C PUT ADDRESS ONTO STACK CHROUT EQU $A002 DISPLAY CHAR CHRIN EQU $A176 GET CHAR. FROM DEVICE LINPUT EQU $A390 LINE INPUT CLRSCN EQU $A928 CLEAR SCREEN SOUND EQU $A951 SOUND GENERATOR DCOPC EQU $C006 DEVICE CONTROL POINTER DKOPEN EQU $C468 OPEN DISK FILE FILSPC EQU $C88A GET FILE SPEC ITEMS DKCLS EQU $CA53 CLOSE DISK FILE DKCLC EQU $CA3B CLOSE ALL FILES BASPNT EQU $A6 FILSEC EQU $0973 FDCODE EQU $EA DRIVE EQU $EB FNDF EQU $C65F AFN EQU $0974 SVERF EQU $D5FF FILSPEC EQU $0973 * FILE1 FDB SYSIN FCB FOR INPUT FILE INFILN FCB 1 FILE INPUT DEVICE FILE2 FDB SYSOUT FCB FOR OUTPUT FILE OUTFLN FCB 2 FILE OUTPUT DEVICE STDIN FDB ZGETC FCB FOR KEYBOARD FCB 3 INPUT DEVICE STDOUT FDB ZPUTC FCB FOR DISPLAY FCB 4 OUTPUT DEVICE PRINT FDB PROUT FCB FOR PRINTER FCB 4 * SUBROUTINE TO SET UP DEFAULT I/O * * ENTER HERE TO OPEN A FILE * B=FILE NUMBER, A='I FOR INPUT 'O FOR OUTPUT OPEN STB FILTYP SET FILE NUMBER LBSR OPNFIL RTS * ZERROR LEAX ERMSG,PCR LBSR OUTSTZ BRA ALLDON * ZWARMS EQU * ALLDON LBSR CLEARS CLEAR SCREEN JMP $C002 RETURN TO BASIC * * PEEK FUNCTION * * CALLING SEQ.- I=PEEK(MADR); * INPUT MADR= ADDRESS OF MEMORY TO EXAMINE * OUTPUT - THE CONTENT OF THE EXAMINED MEMORY * PEEK LDX [0,U] RTS * * POKE FUNCTION * * CALLING SEQ.= POKE(MADR,VAL); * INPUT: * MADR= MEMORY ADR TO FILL * VAL= VALUE TO PLACE IN MEMORY * POKE LDX 2,U LDD 0,U STB 0,X RTS * * RENAME FUNCTION * * RENAME(OLD,NEW) * INPUT: * OLD = CURRENT FILENAME SR * NEW = NEW FILENAME STR * RENAME LDA DEFDRV STA DRIVE LDX 2,U PSHU X LBSR FILMNM BEQ RENAMC LEAU 2,U LDA DRIVE PSHU A LDX 1,U PSHU X LBSR FILMNM BEQ RENAMB LEAU 2,U PULU A CMPA DRIVE BNE RENAMC PSHS U JSR FNDF PULS U TST FILSEC BNE RENAMD LDX 2,U PSHU X LBSR FILMNM LEAU 2,U PSHS U JSR FNDF PULS U TST FILSEC BEQ RENAMD LDX 0,U PSHU X LBSR FILMNM LEAU 2,U LDX #DFILNM LDY AFN LDB #11 RENAML LDA ,X+ STA ,Y+ DECB BNE RENAML LDB #3 STB FDCODE PSHS U JSR SVERF PULS U LDX #1 RENAMX RTS RENAMB PULU A RENAMC LEAU 2,U RENAMD LDX #0 BRA RENAMX * * PLACE FILE FROM STRING * INTO TRS DOS DISK FILENAME * STRING * FILMNM(STRING) * INPUT: * STRING= FILENAME STRINGADR * OUTPUT: * STATUS= 0-BAD 1-GOOD * * FILMNM LDY 0,U LDX #DFILNM LDB #11 LDA #$20 FILZZM STA ,X+ DECB BNE FILZZM LDX #DFILNM LDA DEFDRV STA DRIVE LDA 1,Y CMPA #'/ BEQ FALMNM CMPA #': BEQ FALMNM FLLMNM LDA 0,Y+ BEQ FXLMNM CMPA #': BEQ FBLMNM CMPA #'/ BEQ FBLMNM CMPA #'. BEQ FCLMNM STA 0,X+ BRA FLLMNM FXLMNM LDA DFILNM+8 CMPA #$20 BNE FGLMNM LDD #$5458 STD DFILNM+8 STA DFILNM+10 FGLMNM LDX #1 FHLMNM RTS FALMNM LDA 0,Y CMPA #'4 BGE FKLMNM CMPA #'0 BLO FKLMNM SUBA #'0 STA DRIVE LEAY 2,Y BRA FLLMNM FBLMNM LDA ,Y CMPA #'4 BGE FKLMNM CMPA #'0 BLO FKLMNM SUBA #'0 STA DRIVE BRA FXLMNM FCLMNM LDX #DFILNM+8 BRA FLLMNM FKLMNM LDX #0 BRA FHLMNM * * MAIN PROCESSOR * * REDIRECT OUTPUT TO PRINTER * RE-DIRECT INPUT DIRIN TFR X,D LDA #'I LBSR OPEN RTS * RE-DIRECT OUTPUT DIROUT LDD #$03FF STD DKTYPE TFR X,D LDA #'O OPEN TEXTFILE FOR OUTPUT LBSR OPEN RTS * GNCHAR BSR GCHAR CHECK NEXT CHAR. BEQ GCHAR DON'T PASS EOL CMPA #$D BEQ GCHAR INC BUFPNT+1,PCR BUMP POINTER TO NEXT CHAR BNE GCHAR INC BUFPNT GCHAR LDA [BUFPNT] RTS * * * OUTPUT STRING TO DISPLAY OUTST1 BSR ZPUTC OUTSTZ LDA ,X+ CMPA #4 BNE OUTST1 RTS * * EXTERNALLY REFERENCED PROCEDURES * * OUTPUT CHARACTER TO DISPLAY ZPUTC CLR FILTYP CMPA #7 BELL CHAR? BNE ZPUTC1 PSHS CC,X ANDCC #$EF INSURE IRQ ENABLED! LDD #$6405 PITCH:DURATION STA PITCH JSR SOUND PULS CC,X RTS * OUTPUT CHARACTER TO DEVICE SET ZPUTC1 BSR ZPZTCH RTS ZGETC CLR FILTYP FROM KEYBOARD BSR ZGZTCH PSHS A BSR ZPUTC ECHO THE INPUT PULS A,PC * * PRINTER OUTPUT PROUT PSHS B LDB #-2 STB FILTYP PULS B BRA ZPUTC1 * * FILE INPUT SYSIN PSHS B LDB INFILN,PCR STB FILTYP PULS B BRA ZGZTCH * * FILE OUTPUT SYSOUT PSHS B LDB OUTFLN,PCR STB FILTYP PULS B BRA ZPZTCH * FMS JMP ,X * * GET FILE NAME AND DRIVE GETSPC PSHS U JSR FILSPC PULS U RTS * * OUTPUT A CHARACTER ZPZTCH PSHS U JSR [CHROUT] PULS U RTS * * GET A CHARACTER ZGZTCH PSHS U JSR CHRIN TST IERR PULS U RTS * * CLOSE FILE NUMBER SET IN FILTYP CLOSE PSHS U JSR DKCLS PULS U RTS * * CLOSE ALL OPEN FILES CLSALL PSHS U JSR DKCLC PULS U RTS * ,X LBRA SCANB INPUCI LBSR ZLINEI BRA INPUTC INPUTD BSR PDECP NEW 5-18-81 LBRA SCANB NEW 5-18-81 PDECP LDD #0 NEW 5-18-81 PSHU D INPUDY LBSR ZGNCHR CMPA #EOL BEQ INPUDI BRA INPADA INPUDA LBSR ZGNCHR INPADA LDB #1 PSHU B CMPA #32 BEQ INPUDX CMPA #EOL BEQ INPUDX CMPA #'- BNE INPUDB LDA #-1 STA 0,U INPUDL LBSR ZGNCHR INPUDB CMPA #32 BEQ INPUDX CMPA #EOL BEQ INPUDX PSHU A LDX 2,U LDD #10 LBSR CCMULT PULU A SUBA #'0 LEAX A,X STX 1,U BRA INPUDL INPUDX CLRA LDB 0,U+ SEX LDX 0,U++ LBSR CCMULT STX [,U++] RTS INPUDI LBSR ZLINEI BRA INPUDY INPHEX LEAU -4,U LEAX ,U PSHU X LEAU -15,U BSR INPCHL LBSR INPLHH LDX 4,U LDD 2,U STD ,X LEAU 6,U LBRA SCANB INPOCT LEAU -4,U LEAX ,U PSHU X LEAU -15,U BSR INPCHL LBSR INPLOO LDX 4,U LDD 2,U STD ,X LEAU 6,U LBRA SCANB INPCHL LEAX ,U PSHS X LBSR ZGNCHR CMPA #EOL BNE INPCHB LBSR ZLINEI INPCHA LBSR ZGNCHR INPCHB CMPA #EOL BEQ INPCHC CMPA #32 BEQ INPCHC LDX ,S STA ,X+ STX ,S BRA INPCHA INPCHC CLR ,X LEAS 2,S RTS INPLOO LDX 15,U LDD #0 STD ,X STD 2,X LEAX ,U INPLGP LDA ,X+ BEQ INPLGS SUBA #0 CMPA #7 BLE INPLGQ CLRA INPLGQ PSHU A LDB #3 PSHS Y LDY 16,U INPLGR ANDCC #$FE ROL 3,Y ROL 2,Y ROL 1,Y ROL ,Y DECB BNE INPLGR LDA 3,Y ADDA ,U+ STA 3,Y PULS Y BRA INPLGP INPLGS LEAU 17,U RTS INPLGH BSR INPLHH LBRA SCANB INPLHH LDX 15,U LDD #0 STD ,X STD 2,X LEAX ,U INPLGI LDA ,X+ BEQ INPLGM SUBA #'0 CMPA #9 BLE INPLGK CMPA #$19 BLE INPLGJ SUBA #$20 INPLGJ SUBA #7 INPLGK PSHU A LDB #4 PSHS Y LDY 16,U INPGL ANDCC #$7E ROL 3,Y ROL 2,Y ROL 1,Y ROL ,Y DECB BNE INPGL LDA 3,Y ADDA ,U+ STA 3,Y PULS Y BRA INPLGI INPLGM LEAU 17,U RTS *\END-SCANF\ *\END\ *\EXIT\ GOTO DOS *\ENDHEAD EXIT LBRA ZWARMS *\END-EXIT\ *\END\ *\ISALPHA\ CHECK FOR ALPHABETIC *\ENDHEAD ISALPH LDD ,U CMPB #96 BLE ISALPB SUBB #32 ISALPB CMPB #'A BLT ISALPX CMPB #'Z BGT ISALPX LDX #1 RTS ISALPX LDX #0 RTS *\END-ISALPH\ *\END\ *\ISUPPE\ UPPER CASE ALPHABETIC *\ENDHEAD ISUPPE LDD ,U CMPB #'A BLT ISUPPX CMPB #'Z BGT ISUPPX LDX #1 RTS ISUPPX LDX #0 RTS *\END-ISUPPE\ *\END\ *\ISLOWE\ CHECK LOWER CASE *\ENDHEAD ISLOWE LDD ,U ISLOWZ CMPB #'a BLT ISLOWX CMPB #'z BGT ISLOWX LDX #1 RTS ISLOWX LDX #0 RTS *\END-ISLOWE\ *\END\ *\ISDIGI\ CHECK DIGIT *\ENDHEAD ISDIGI LDD ,U CMPB #'0 BLT ISDIGX CMPB #'9 BGT ISDIGX LDX #1 RTS ISDIGX LDX #0 RTS *\END-ISDIGI\ *\END\ *\ISSPAC\ SPACE,TAB,CR *\ENDHEAD ISSPAC LDD 0,U CMPB #32 BEQ ISSPAX CMPB #9 BEQ ISSPAX CMPB #13 BEQ ISSPAX LDX #0 RTS ISSPAX LDX #1 RTS *\END-ISSPAC\ *\END\ *\TOUPPE\ CONVERT UPPER CASE *\ENDHEAD TOUPPE LDD 0,U BSR ISLOWE CMPX #0 BEQ TOUPX SUBB #32 TOUPX TFR D,X RTS *\END TOUPPE\ *\END\ *TOLOWE\ CONVERT LOWER CASE *\ENDHEAD TOLOWE LDD 0,U BSR ISLOWE CMPX #0 BEQ TOLOWX ADDB #32 TOLOWX TFR D,X RTS *\END-TOLOWE\ *\END\ FOPEN LDX 2,U LDA 0,X ANDA #$5F CMPA #'W BNE ZOPNR LDY 4,U PSHU Y LBSR FILMNM LEAU 2,U LDA #1 LBSR DSKFND CMPX #0 BNE ZWOPZN LDX #0 RTS ZWOPZN LDX 0,U LBSR DIROUT LDX 0,U RTS ZOPNR LDY 4,U PSHU Y LBSR FILMNM LEAU 2,U LDA #2 LBSR DSKFND CMPX #0 BNE ROPZNZ LDX #0 RTS ROPZNZ LDX 0,U LBSR DIRIN LDX 0,U RTS FCLOSE LDD 0,U STB FILTYP LBSR CLOSE RTS DELFIL LDY 0,U PSHU Y LBSR FILMNM LEAU 2,U PSHS U JSR FLKILL PULS U LDX #1 RTS FDFIL LDY 0,U PSHU Y LBSR FILMNM LEAU 2,U PSHS U JSR FINDFL PULS U LDX #1 TST FLFLFD BNE FDFILX LDX #0 FDFILX RTS GETS LBSR GETLIN LDX 0,U LDY #THELIN GETSZX LDA ,Y+ STA ,X+ BNE GETSZX RTS *\\GETCHAR\\ GET INPUT STDIN GETCHA PSHS U LBSR ZGETC PULS U BEQ GETCHA TFR A,B CLRA TFR D,X RTS *\\NWCHAR\\CHECK FOR CHAR * NO WAIT * CALLING SEQUENCE: * C=NWCHAR(X); * WHERE X=0 OR 1 * X=1 ECHO CHARACTER * X=0 NO ECHO * USE GETCHAR TO WAIT FOR CHAR NWCHAR PSHS U JSR [POLCAT] BEQ NWCHAB PULS U LDX 0,U BEQ NWCHAA PSHS A,U JSR [PUTCAT] PULS A,U NWCHAA TFR A,B TFR D,X RTS NWCHAB PULS U LDX #0 RTS *\\PRTTOG\\ SET PRINTER ON OR OFF PRTTOG LDD 0,U STB PRTFLG,PCR RTS *\\PUTCHA\\ PUT CHAR TO STD OUT PUTCHA EQU * LDD 0,U TFR B,A LBSR ZPUTC TST PRTFLG BNE PXTCHR RTS PXTCHR LDD 0,U TFR B,A LBSR PROUT RTS PUTC LDD 2,U TFR B,A CMPA #10 BEQ PUTCA LBSR SYSOUT PUTCA LDX #1 RTS GETC LBSR SYSIN BEQ GETCB GETCA LDX #-1 RTS GETCB TFR A,B CLRA TFR D,X RTS ZLINEI LBSR GETLIN DEC BUFPNT+1 RTS ZGNCHR LBSR GNCHAR CMPA #$0D BNE ZZGNCH CLRA ZZGNCH RTS * * EXTERNAL EQUATES FILTYP EQU $6F FILE TYPE 0,-2=DISPLAY,PRINTER >0=FILE # IERR EQU $70 INPUT ERROR - $FF=EOF,0=OK EEOF EQU $FF FINDFL EQU $C65F CHECK IF EXIST FLFLFD EQU $0973 FIND FILE FLAG FLKILL EQU0,U BEQ PRINBD BAD FORMAT LDA ,X+ PICKUP NEXT FIELD CMPA #'% CHECK FOR % PRINTING BEQ PRINCS PRINT AS SINGLE CHAR STX 1,U LDX 3,U VAR ADR LEAX -2,X POSITION TO VAR STX 3,U SAVE NEW POSITION LDX ,X DEC 0,U DECR VAR COUNT CMPA #'D BEQ PRIND PRINT DECIMAL CMPA #'d BEQ PRIND CMPA #'S BEQ PRINS PRINT STRING CMPA #'s BEQ PRINS CMPA #'C BEQ PRINC PRINT SINGLE CHAR CMPA #'c BEQ PRINC CMPA #'O LBEQ PRINO CMPA #'o LBEQ PRINO CMPA #'X LBEQ PRIXN CMPA #'x LBEQ PRIXN PRINBD LDX 1,U PRINT BAD FORMAT PSHU X LBSR OT LEAX ILLFOR,PCR PSHU X LBSR OL LEAU 5,U RTS PRIND PSHU X LBSR OUTDEC LEAU 2,U BRA PRINB PRINX LEAU 5,U RTS PRINS PSHU X LBSR OT LBRA PRINB PRINC PSHU X LBSR PUTCHA LEAU 2,U BRA PRINB PRINCS CMPA #'\ BNE PRINCK LDA 0,X+ LBEQ PRINBD CMPA #'\ BEQ PRINCK CMPA #'n BEQ PRINH CMPA #'N BEQ PRINH CMPA #'t TOP OF FORM BEQ PRINCL CMPA #'T BEQ PRINCL BRA PRINCL PRINCJ STX 1,U LBSR NL LBRA PRINB PRINCL LDA #12 PRINCK STX 1,U CMPA #10 BEQ PRINGG TFR A,B LBSR OUTBYT LBRA PRINB PRINBS LDX 1,U LEAX 1,X STX 1,U LBSR NL LBRA PRINB PRINGG LBSR NL LBRA PRINB PRINH LDA #10 LBRA PRINCK PRILX LDX 5,U LDD ,--X STX 5,U PSHU B LEAX ,U LBSR OUTHEX LEAU 1,X PULU X PRIXN PSHU X LEAX ,U LBSR OUTADR LEAU 2,U LBRA PRINB PRINO PSHU A PSHU X PSHU A LDA #6 LDB #1 PRINOA PSHU A PRINOB CLR 1,U PRINOC ASL 4,U ROL 3,U ROL 2,U ROL 1,U DECB BNE PRINOC LDB 1,U CLRA ADDB #$30 LBSR OUTBYT LDB #3 DEC ,U BNE PRINOB LEAU 5,U LBRA PRINB PRIOL LDX 5,U LDD ,--X STX 5,U PSHU D LDB #3 LDA #8 BRA PRINOA ILLFOR FCC ' *** ILLEGAL FORMAT ****' FCB 0 *\END-PRINTF\ *\END\ *\OUTBYT\ OUTPUT A BYTE *\PUTCHA *\ENDHEAD OUTBYT PSHU A CMPA #0 BNE OUTBYA LEAU 1,U LDX #0 RTS OUTBYA LDB 0,U PSHU D LBSR PUTCHA LEAU 2,U LDA 0,U+ RTS *\END-OUTBYT\ *\END\ *\OUTSTR\ OUTPUT STRING *\OUTBYT *\ENDHEAD OUTSTR PULU Y OUTSA LDA 0,Y+ LBSR OUTBYT BNE OUTSA RTS *\END-OUTSTR\ *\END\ *\NL\ SEND CR LF *\OUTBYT *\ENDHEAD NL LDA #10 LBSR OUTBYT LDA #13 LBSR OUTBYT RTS *\END-NL\ *\END\ *\OL\ OUTPUT LINE *\NL *ENDHEAD OL LBSR OT LBSR NL RTS *\END-OL\ *\END\ *\OT\ OUTPUT TEXT *\OUTSTR *\ENDHEAD OT LBSR OUTSTR RTS *\END-OT\ *\END\ *\STREQ\ COMPARE 2 STRINGS *\ENDHEAD STREQ LEAU -2,U LDX #0 STX 0,U LDX 4,U LDY 2,U LDB #0 STREQA LDA B,Y BEQ STREQC CMPA B,X BEQ STREQB LDX #0 RTS STREQB INCB BRA STREQA STREQC CLRA TFR D,X CMPB #0 LEAU 6,U RTS *\END-STREQ\ *\END\ *\OUTDEC\ *\CCDIV *\CCMOD *\OUTBYT *\ENDHEAD OUTDEC LEAU -5,U LDX #0 STX 1,U LDX #10000 STX 3,U LDD 5,U BPL OUTDEA COMA COMB ADDD #1 STD 5,U LDA #'- LBSR OUTBYT OUTDEA LDX 3,U CMPX #1 BLT OUTDEX LDD 5,U LDX 3,U LBSR CCDIV TFR X,D ADDB #'0 STB 0,U CMPB #'0 BNE OUTDEB LDX 3,U CMPX #1 BEQ OUTDEB LDX 1,U BEQ OUTDED OUTDEB LDX #1 STX 1,U LDA 0,U LBSR OUTBYT OUTDED LDD 5,U LDX 3,U LBSR CCMOD STX 5,U LDD 3,U LDX #10 LBSR CCDIV STX 3,U BRA OUTDEA OUTDEX LEAU 5,U RTS *\END-OUTDEC\ *\END\ *\OUTHEX -- OUTPUT HEX *\OUTBYT *\ENDHEAD OUTHEX LDA ,X PSHU A LSRA LSRA LSRA LSRA CMPA #10 BLT OUTHX1 ADDA #$37 BRA OUTHX2 OUTHX1 ADDA #$30 OUTHX2 LBSR OUTBYT PULU A ANDA #$0F CMPA #10 BLT OUTHX3 ADDA #$37 BRA OUTHX4 OUTHX3 ADDA #$30 OUTHX4 LBSR OUTBYT RTS *\END-OUTHEX\ *\END\ *\OUTADR\ OUT 2 HEX BYTES *\OUTHEX\ *\ENDHEAD\ OUTADR PSHU X LBSR OUTHEX PULU X LEAX 1,X LBSR OUTHEX RTS *\END\ *\SCANF\ FORMAT INPUT *\OL *\OT *\ENDHEAD SCANF LDD [0,S] ANDB #31 SUBB #2 LEAX B,U PSHU X LDX ,X PSHU X CLRB LDX 0,U SCANA LDA 0,X+ BEQ SCANG CMPA #'% BNE SCANA LDA 0,X CMPA #'% BNE SCANAA LEAX 1,X BRA SCANA SCANAA INCB BRA SCANA SCANG PSHU B SCANB LDX 1,U LDA ,X+ BEQ SCANX CMPA #'% BNE SCANBD TST 0,U BEQ SCANBD LDA ,X+ STX 1,U LDX 3,U LEAX -2,X STX 3,U LDX ,X DEC 0,U PSHU X CMPA #'D LBEQ INPUTD CMPA #'d LBEQ INPUTD CMPA #'S BEQ INPUTS CMPA #'s BEQ INPUTS CMPA #'H BEQ INPUTL CMPA #'h BEQ INPUTL CMPA #'C BEQ INPUTC CMPA #'c BEQ INPUTC CMPA #'O LBEQ INPOCT CMPA #'o LBEQ INPOCT CMPA #'X LBEQ INPHEX CMPA #'x LBEQ INPHEX SCANBD LDX 3,U PSHU X LBSR OT LEAX ILLFOR,PCR PSHU X LBSR OT SCANX LEAU 5,U RTS INPUTL PSHU X NEW 5-18-81 LEAX 0,U NEW 5-18-81 PSHU X NEW 5-18-81 BSR PDECP NEW 5-18-81 PULU D NEW 5-18-81 STB [,U++] NEW 5-18-81 LBRA SCANB INPUTS LBSR ZGNCHR CMPA #EOL BEQ INPUSI LDX 0,U INPUSS STA ,X+ STX 0,U LBSR ZGNCHR CMPA #EOL BEQ INPUSX CMPA #32 BNE INPUSS INPUSX LDX 0,U CLR ,X+ LEAU 2,U LBRA SCANB INPUSI LBSR ZLINEI BRA INPUTS INPUTC LBSR ZGNCHR CMPA #EOL BEQ INPUCI CMPA #32 NEW 5-18-81 BEQ INPUTC NEW 5-18-81 PULU X STAMMOO390B"'O392E (" o39INVALID EXPRESSION63ZF,^D!0461!1^1!1&3^1!1&3^1 !1&D3H9D'F"1!'F(0Ľ,^'0Ľ"F' & *^*pҮğ' ' *^*p*F*p1 !'F(0Ľ,^'0Ľ"F' & *j*pğ' & *j*p3m*R*pd0461!1'U3^1!1&K(0Ľ,^'0Ľ"F' & *X*p0ğ' & *X*p*@*p0461!1'U3^1!1&K(0Ľ,^'0Ľ"F' & *d*pğ' & *d*p*L*p3H9W&f&99O&99o_96o7ݦ&9 '6J6"9 '9'9 &OO9CS9966 66EG=BEF=AAGD=AAB3H9!3_o6663BD-DhCiBiAiD%DlC0&BgF$63G9' .6|lF93G2b996U6a6?6"6J5?7h5B7j7l5E7n6m5.9oT97Z n~ L Z& L'/' .'Z& T'Z&9'T TX UT V95E7j9597hI5;95<7j WO5>y9' '|&|90DDDD@ &9o&D4dQ5 :L9oS454o5 45;o5 645>o5 n4_5454@Ȋ5@94@᭟5@94@Խv5@}p94@ŽS5@94@;5@94@h5@94@l5@594@5@94@(5@964@75@} s&7'997'976 ݦ_N&94@75@9FILE EXISTS -KILL FILE(Y/N)? PCDTXT ERROR  AT 6o_~6v6o~6v'44H~5s666 '3\ 7ݽ4H77݁X'9~wA&M0C69'997'976 ݦ_N&94@75@9FILE EXISTS -KILL FILE(Y/N)? PCDTXT ERROR  AT 6o_~6v6o~6v'44H~5s666 '3\ 7ݽ4H77݁X'9~wA&M0C69*COLOR COMPUTER-C COMPILER REV 1.2 NAM DGSC ORG $0F00 *0 ERRORS IN COMPILATION END CINT ? ' FCB EOL ERMSG FCB $D,7 FCC 'ERROR ' FCB 4 PRTFLG FCB 0 OPT LIS * END OF LIB CC2 FCC '%D%S\N' FCB 0 FCC ' primes' FCB 0 PRIME RMB 4095 COUNT RMB 2 I RMB 2********* *\\CINT\\ INITIALZATION ROUTINE CINT LDU #$6FFF SET U STACK LBSR MAIN GOTO MAIN ROUTINE LBRA ZWARMS RETURN SYSTEM *\\CCOR\\ LOGICAL OR CCOR PSHU X ORA ,U+ ORB ,U+ TFR D,X RTS *\\CCAND\\ LOGICAL AND CCAND PSHU X ANDA ,U+ ANDB ,U+ TFR D,X RTS *\\CCXOR\\ LOGICAL XOR CCXOR PSHU X EORA ,U+ EORB ,U+ TFR D,X RTS *\\CCASL\\ ARITHMETIC SHIFT LEFT CCASL EXG D,X CCASLA LSLA LSLB BCC CCASLB ORA #1 CCASLB LEAX -1,X CMPX #0 BNE CCASLA TFR D,X RTS *\\CCASR\\ ARITHMETIC SHIFT RIGHT CCASR EXG D,X CCASRA LSRB ASRA BCC CCASRB ORB #128 CCASRB LEAX -1,X CMPX #0 BNE CCASRA TFR D,X RTS *\\CCCOM\\ COMPLEMENT CCCOM TFR X,D COMA COMB TFR D,X RTS *\\CCNEG\\ NEGATE OR 2'S COMPLEMENT CCNEG BSR CCCOM LEAX 1,X RTS *\\CCNEGD\\ NEGATE D REGISTER CCNEGD COMA COMB ADDD #1 RTS *\\CCMULT\\ INTEGER MULTIPLY CCMULT PSHU X PSHU D LDD #0 PSHU D PSHU D LDA 5,U LDB 7,U MUL STD 2,U LDA 5,U LDB 6,U MUL ADDD 1,U STD 1,U LDB 7,U LDA 4,U MUL ADDD 1,U STD 1,U LDX 2,U LEAU 8,U RTS *\\CCDIV\\ INTEGER DIVIDE CCDIV LEAU -1,U CLR 0,U PSHU X PSHU D LDX #0 PSHU X BSR FIXNEG STD 2,U LDD 4,U BSR FIXNEG STD 4,U LDX #16 DIV1 ASL 3,U ROL 2,U ROL 1,U ROL 0,U LDD 0,U CMPD 4,U BLO DIV2 SUBD 4,U STD 0,U INC 3,U DIV2 LEAX -1,X BNE DIV1 LDD 2,U ASR 6,U BCC DIV3 BSR FIXNE1 DIV3 TFR D,X LDD 0,U LEAU 7,U RTS FIXNEG CMPD #0 BEQ CCDIVZ BGT CCDIVK FIXNE1 BSR CCNEGD INC 6,U CCDIVK RTS CCDIVZ LDX #0 LEAU 7,U LEAS 2,S RTS *\\CCMOD\\ MODULE DIVIDE RETURN REMAINDER CCMOD LBSR CCDIV EXG X,D RTS *\PRINTF\ FORMAT PRINT ROUTINE PRINTF LDD [0,S] FORMAT PRINT ROUTINE ANDB #31 DETERMINE NUMBER OF BYTES SUBB #2 LEAX B,U FORMAT STRING STACK ADR PSHU X SAVE VAR POSITIONING LDX ,X FORMAT STRING ADR PSHU X SAVE FOR ANALYSIS CLRB LDX 0,U PRINA LDA 0,X+ BEQ PRING CMPA #'% BNE PRINA LDA 0,X CMPA #'% BNE PRINAA LEAX 1,X BRA PRINA PRINAA INCB BRA PRINA PRING PSHU B PRINB LDX 1,U PICKUP NEXT FIELD LDA ,X+ CHECK IF FINIS BEQ PRINX YES CMPA #'% BNE PRINCS PRINT AS SINGLE CHAR TST 00ā&3D900ā&00ā& 3D96&3A9'4i.- j Ľ4]9OUTPUT FILE ERROR6Ħ >&3B9& > >9 >9 >9 > !)9 EQU *~7^$[4 | $[ĮĜ,Ħ4 &  >0݆^ > $[! |B |! | 03D9 *****!) 967 |963^ĮDB' '3F9\ O3F966CA, &'\ 6'3F9Ħ'3F9O3E96!046B!1' 3B93B966!046CB!X'Խҽ' 3C93C9& 1Ǟ'ҁ & ҁ & 963[A'CE* CSE- >C-;EC400& C'A' AĽ >EC5EC 4C 3G96&'' '3B96' &$ '3B96*Ľ(3B96Ľ##'( 8Ľ#'( ,Ľ#' ( ڽ+ >Į"$!"3B93B9Į" 3B963[ACC'&C1#!'C1%!' ACSAC ֽҽ&3G9ҽ'ĮC 46B0OC A,CCSCCE3G963]A#ս!&3E9ā''AA AC3E9'6ٽ!&3B90턽ҁ"'9'50$-$D ٽ!&&3B96007000 000003B9STRING SPACE EXHAUSTED* >9$[$t | $!"9COLOR COMPUTER-C COMPILER REV 1.2 NAM DGSC ORG $0F00$!"9 END CINT6 '6 &0%!)0$!"'!"$!"3B9,PCR TFR D,X%!)0$!"3B9 LDB LDX LDA NDA FANDB FANDCCASL H ]ASLA H ASLB X ASR G ]ASRA G ASRB W BCC $ BCS % BEQ ' BGE , BGT . BHI " BHS $ BITA FBITB FBLE / BLO % BLS # BLT - BMI + BNE & BPL *BRA BRN ! BSR BVC ( BVS ) CLR O ]CLRA O CLRB _ CMPA FCMPB FCMPD CMPS CMPU CMPX FCMPY COM C ]COMA C COMB S CWAI <DAA  DEC J ]DECA J DECB Z (END  ENDC  ENDM  ENDR EORA FE6'!) "'$!) 9 LEAX ,U6 '! &'i!"'~!)0$!) 'x!)0$!) 3B9 TFR X,D STB STX STB &'i!"'!"9'!"9 STB [,U++] STX [,U++]&'Խ!"9'ܽ!"9 LDX ,X LDB ,X CLRA TFR D,X'!"9 EXG D,X(!)9'!)9 LDX #('!"09 PSHU X(<<>><=>=+-/%++--ILLEGAL ADDRESS63Q!'O*ʯĎ390Dr'0DjM'5'MO턮M OOM &OM &39390DB'0,ن' > ' > [!" FCB 03^&3B9*, '+( Ħ & 'Į&" 0' 'ս $[" | 9MISSING CLOSING BRACKET ERRORS IN COMPILATION3\%ؽ  Խ  44H9ҁY&  44H9ҁY&! 44H9ҁ& 0Ľ##B'ۮğؽڽ3D9** COLOR COMPUTER C COMPILER ** BY B W DUGGER 02/82 (C)1982 DUGGER'S GROWING SYSTEMSINCLUDE C-TEXT ON OUTPUT? DEFINE GLOBALS? STARTING LABEL NUMBER? 6 b9˽ 44H9ҁ&9ņ!' 94W4 &ݽ 9&3&, 44H9& 4R4 &ݽ ɽ9PRINTOUTPUT FILENAME? OPEN FAILUREINPUT FILENAME? !04I4 & 9INCLUDE OPEN FAILURE '4?963S'3N9K!' I0Ľr&0Ľ<'0Ľ!'YK'I I06K66O!&3N9*[,663S' ܣM) 39!' I0Ľr&0Ľj'0Ľ!'&YK'IO&,KKK#IKO& I'K KܣKMKM06K66ܽ!'`X3^!'3B90Ľ##&  ĮČ,  CSĎ3B9]MUST BE CONSTANT NEGATIVE SIZE ILLEGAL3U0Br& ҽ 3K90B<''Ħ '0B *Į &0B Ć 0B666!& 0B ގ!&>0Br'   o!46!1&!& ',ܞ'0ۆ!' , !' , Ҏ ') (ܞ,3K9ILLEGAL FUNC OR DECLAR(MISSING OPEN PAREN)ILLEGAL ARG NAMEEXPECTED COMMAWRONG #ARGS63T'y!' 0Cr& 0Cj'0C!']''Ľ7B6O6ރރ޽&!& 3N9ILLEGAL NAME&'9ۆ!' 9!' !'9!' 9!' Z9!' 9!' 9!' н9!'9!' 9*9@IFWHILERETURNBREAKCONTINUE;$ELSE#ENDASM!&ý 9MISSING SEMICOLON0!& '9 093X,FܯDB"D) ܮF,!&B 3H9Ľ(B D) ܮF,Ľ 3X,BDF0Ľ2D F"D(F ğ,B) ܽ3H9&*) (93^' ) Į(3B93^' ) Į(3B91!&& 4 | 966!B&(046!1&!&*B&(D(Ď!&ώB'(g () 3D9' ҽ' ҽ& ' !9!46!1&'99 o9ILLEGAL SYMBOL NAMEALREADY DEFINEMISSING BRACKETMUST BE 1 VALUE6ս $[ | 96Ľ!& $[Ľ | 3B9 963^Ğ*'B6B!X'3D9 ߞ3D963^Ğ,'B6B!X'3D90 3D963^F<&E*-  3H9*ğF0ԯF0Ľ&E D  B **3H9GLOBAL TABLE OVERFLOW63^Fj'3H9, - ] 3H9,ğFĦFĽ&E D  B ,0,3H9LOCAL TABLE OVERFLOW63]!ҽ&3E9Aҽ'AC짤A0A CAo3E9096ʽ |Ľ"3B9CCA-Z/_' a-z/990-9.99&&963^Ć4]B' 4]0 3D963^."& m 3D9ĮČ,B.1"0. 3D9TOO MANY ACTIVE WHILES'..9.&  9.9NO ACTIVE WHILES6Ħa-z. >&3B9Ԧ49&9Ԧ59&9Ԧ40Ԅ9ԟ49&'91 9&1'993\&'3D9&ĽĽ4tB/'ԌO,B40 ڞo4B,Ľ4?' ''' $[4 | 3D96֧֌O,0֦93T&3L9ԟֽ'M 'ҁ & ҁ ' &޽ ҁ"&/ҽҁ"'&ս  " ҁ'&,ҁ''&P  'nҁ/&5ہ*&.ҁ*&ہ/'&1 '2ҽ'uJҽ'J,0JҧJ0J 0Jo1ݯJ'J0IJ0J'ٽ J0JIJ0J' ֌O-c Ԏ4&3L9MISSING APOSTROPHELINE TOO LONG3U0Br& 3K91B&ҁ ' & &2&- 3K9MACRO TABLE FULL620ħ20&,2963^ĮĜ2,NB6B!X'{9O9+z9 &O9s[}o90z  ~ L Z& L'/' .'Z& T'Z&9'T TX U{!T V9I9 WO9' 'l^& 9&9o&4dQ5979o;454o5 43o5 4*o5{ n4@Ȋ5@94@5@94@v p5@94@S5@94@;5@94@h5@94@l5@94@ݟ5@94@(5@964@_5@} s&7'997'9{0"6ݦ_N&94@5@9FILE EXIST - KILL FILE(Y/N)? ERROR \NDGS 1983 ADD SEQUENCE NUMBERS\NINPUT FILE =%S\NOUTPUT FILE =%SRW%4@S5@94@;5@94@h5@94@l5@94@ݟ5@94@(5@964@_5@} s&7'997'9{0"6ݦ_N&94@5@9FILE EXIST - KILL FILE(Y/N)? ERROR \NDGS 1983 ADD SEQUENCE NUMBERS\NINPUT FILE =MMOO390B"'O392E (" o39INVALID EXPRESSION63ZF,^D!0461!1^1!1&3^1!1&3^1 !1&D3H9D'F"1!'F(0Ľ,^'0Ľ"F' & *^*pҮğ' ' *^*p*F*p1 !'F(0Ľ,^'0Ľ"F' & *j*pğ' & *j*p3m*R*pd0461!1'U3^1!1&K(0Ľ,^'0Ľ"F' & *X*p0ğ' & *X*p*@*p0461!1'U3^1!1&K(0Ľ,^'0Ľ"F' & *d*pğ' & *d*p*L*p3H9W&f&99O&99o_96o7ݦ&9 '6J6"9 '9'9 &OO9CS9966 66EG=BEF=AAGD=AAB3H9!3_o6663BD-DhCiBiAiD%DlC0&BgF$63G9' .6|lF93G2b996U6a6?6"6J5?7h5B7j7l5E7n6m5.9oT97Z n~ L Z& L~8'/' .'Z& T'Z&9'T TX UT V95E7j9597hI5;95<7j WO5>y9' '|&|90DDDD@ &9o&D4dQ5 :L9oS454o5 45;o5 645>o5 n4_5454@Ȋ5@94@᭟5@94@Խv5@}p94@ŽS5@94@;5@94@h5@94@l5@594@5@94@(5@964@75@} s&7'997'976 ݦ_N&94@75@9FILE EXISTS -KILL FILE(Y/N)? PCDTXT ERROR  AT 6o_~6v6o~6v'44H~5s666 '3\ 7ݽ4H77݁X'9~wA&M0C69'T~ Z!/',:'(':'3/'/.'< T & TX T V94,#0%01" Ŧ4,0% 0 Ȏ T !/',:'(':'3/'/.'< T & TX T V94,#0%01" Ŧ4,0% 0 Ȏ T STD 0,Y STORE NEG INT LDX #1 FTOIX RTS FTOIE LDX #0 STX 0,Y RTS PSHU D * * ********** * FLT POINT TEST FUNCTION * ********** * * FLT PT TEST FOR EQUAL * CALLING: FPEQ(X,Y) * X==Y RETURN 1 * X!=Y RETURN 0 * FPEQ LBSR FCMPR LDX #0 CMPA #0 BNE FPEQX LEAX 1,X FPEQX RTS * * FLT PT TEST - GREATER THAN * CALLING: FPGT(X,Y) * X>Y RETURN 1 * X<=Y RETURN 0 * FPGT LBSR FCMPR LDX #0 CMPA #1 BNE FPGTX LEAX 1,X FPGTX RTS * * FLT PT TEST- LESS THAN * CALLING: FPLT(X,Y) * X=Y RETURN 0 * FPLT LBSR FCMPR LDX #0 CMPA #2 BNE FPLTX LEAX 1,X FPLTX RTS * * FLT PT TEST- LESS THAN = * CALLING: FPLTE(X,Y) * X<=Y RETURN 1 * X>Y RETURN 0 * FPLTE LBSR FCMPR LDX #1 CMPA #2 BEQ FPLTEX FPLTEA CMPA #0 BEQ FPLTEX LDX #0 FPLTEX RTS * * FLT PT TEST - GREATER = * CALLING: FPGTE(X,Y) * X>=Y RETURN 1 * X Y * 2 X < Y FCMPR LEAU -4,U LDY 4,U LDX 6,U CLR 3,U CLR 2,U LDA 1,X ANDA #$80 STA 1,U LDA 1,Y ANDA #$80 CMPA 1,U BEQ FCMPRB INC 2,U CMPA #0 BNE FCMPRX INC 2,U FCMPRX LDA 2,U BEQ FCMPRO TST 3,U BEQ FCMPRO INCA CMPA #2 BEQ FCMPRO LDA #1 FCMPRO LEAU 4,U RTS FCMPRB STA 3,U LDA 0,X CMPA 0,Y BEQ FCMPRD FCMPRC INC 2,U CMPA 0,Y BHI FCMPRX INC 2,U BRA FCMPRX FCMPRD LDA 1,X ANDA #$7F STA 1,U LDA 1,Y ANDA #$7F STA 0,U LDA 1,U CMPA 0,U BEQ FCMPRF INC 2,U CMPA 0,U BHI FCMPRX INC 2,U BRA FCMPRX FCMPRF LDB #3 LEAX 2,X LEAY 2,Y FCMPRE LDA 0,X+ CMPA 0,Y+ BNE FCMPRG DECB BNE FCMPRE BRA FCMPRX FCMPRG LEAY -1,Y BRA FCMPRC * * FPOINT STORE (FPSTR) * CALLING: FPSTR(X,Y) * WHERE: Y IS STORE IN X * X=Y * FPSTR LDX 0,U LDY 2,U LDD 0,X STD 0,Y LDD 2,X STD 2,Y LDA 4,X STA 4,Y RTS #endasm MPA{0 `63B0 u63B0 y60 6:3D0 k63B0 p60 63D0 n60 \663F R0 h60 D663F :{{ 5 16/0'"0 ?6 0 07060 63B 6'0'= O6{ 63D O6 &0' 63B x63B9 m0 6706O0Ѯ O'k0 n6{q >70O69-0'=0 @6 0 070600 !6706O0֮6{/0'+060070O66q3D9o696969HX$0&9TG$ʀ0{g&9CS909CS96666EG=BEF=AAGD=AAB3H93_o6663BD-DhCiBiAiD%DlC0&BgF${3G9'.lF93G2b99066_Ħ'%&%&0 \ 6A'f%&vm'B%'lAC0CjāD'?d';S'Cs'?{]C'Cc'?O'o'X'x'A606 3E9653B 3E9663B \&&'Ɓ\'n'8N'4t'T' AX {A 'HA0A<6 ۮE샯E60"3760>3B6666oAhDiCiBiAZ&AO03j&3EE샯E6 {S *** ILLEGAL FORMAT ****6&3A963B97 &9 ن 9993^ĮDB' '9\ O3F93[{A'CE* CSE-C-;EC00& C'A' AZECEC C 3E96DDDD -7 0-7 -{I7 096709066_Ħ'%&%&0 \ 6A'd%&Pm'LAC0Cj6D'd'S'Ns'JH'7h'3C'{dc'`O'o'݁X'x'C60g63E9606I7'ħ' &o3Bc ' '7Lp {?B6h'D _6 '+''-&H ''6B 700A O9 3\063Q&DB3F3\063Q{1DB3F04&ځ' '䧀 o2b9O0Ħ'(0/O64 i#i"i!iZ&##5 39WO{50Ħ'/0 // 64 ~i#i"i!iZ&##5 39g`/ A-Z.99A-Z.99a-z.9{90-9.99 ' ' '99čŒ' 9č' 9B_W&D݆&99Dˌ&{+99o}9ݦ&94@5@'O94@'5@'4B5B95@999B '9'/* FLOATING POINT PRINT ROUTINE INPUT ADR OF FP NUMBER OUTPUT TO CONSOLE/PRINTER */ fpprt(val) char *val; @ int i,j,k; char r[5],s[5],x[5]; char *t; if(val[0]==0) @ printf("0.0"); return; $ k=j=0; fpstr(x,val); if((x[1]&128)==128) @ x[1]=x[1]&127; printf("-"); $ #asm LEAX TABLE,PCR STX 0,U #endasm while(k<9) @ if(fpgte(x,t)) @ j=1; fpdiv(r,x,t); ftoi(r,&i); printf("%d",i); itof(i,r); fpmul(s,r,t); fpsub(r,x,s); fpstr(x,r); $ else @ if(j) printf("0"); $ t=t+5; k++; $ printf("."); k=1; #asm LEAX TABLE,PCR LEAX 35,X STX 0,U #endasm while(k<4) @ fpmul(r,x,t); ftoi(r,&i); printf("%d",i); itof(i,s); fpsub(x,r,s); k++; $ $ #asm TABLE FCB $9B,$3E,$BC,$20,00 FCB $98,$18,$96,$80,00 FCB $94,$74,$24,00,00 FCB $91,$43,$50,00,00 FCB $8E,$1C,$40,00,00 FCB $8A,$7A,00,00,00 FCB $87,$48,00,00,00 FCB $84,$20,00,00,00 FCB $81,00,00,00,00 #endasm i,s); fpsub(x,r,s); k++; $ $ #asm TABLE FCB $9B,$3E,$BC,$#asm * FLOATING POINT PACKAGE * PERFORMS FLOATING ADD,SUB,MUL,DIV * CALLING SEQUENCE: * FPADD(R,X,Y) * FPSUB(R,X,Y) * FPMUL(R,X,Y) * FPDIV(R,X,Y) * WHERE R,X,Y DEFINED AS CHAR * ARRAYS CHAR R[5],X[5],Y[5] *R=RESULTS OF FLOAT OPERATION *X&Y ARE VARS. USED AS X+Y * X/Y X-Y X*Y * RS ENTRY POINTS BFPSUB EQU $B9B9 BFPADD EQU $B9C2 BFPMUL EQU $BACA BFPDIV EQU $BB8F MOVFP1 EQU $BC14 MOVTOX EQU $BC35 NORMAL EQU $BA1C UNNORM EQU $B9E2 FPAC1 EQU $50 * * FPADD - FLOATPOINT ADD * FPADD(R,X,Y) * FPADD PSHS U LDX 2,U JSR MOVFP1 LDU 0,S LDX 0,U JSR BFPADD LDU 0,S LDX 4,U JSR MOVTOX PULS U LDX #1 RTS * * FPSUB - FLOATPOINT SUBTRACT * FPSUB PSHS U LDX 0,U JSR MOVFP1 LDU 0,S LDX 2,U JSR BFPSUB LDU 0,S LDX 4,U JSR MOVTOX PULS U LDX #1 RTS * * FPMUL - FLOATPOINT MULTIPLY * FPMUL PSHS U LDX 2,U JSR MOVFP1 LDU 0,S LDX 0,U JSR BFPMUL LDU 0,S LDX 4,U JSR MOVTOX PULS U LDX #1 RTS * * FPDIV - FLOATPOINT DIVIDE * FPDIV PSHS U LDX 0,U LDD 0,X BEQ FPDIVB JSR MOVFP1 LDU 0,S LDX 2,U JSR BFPDIV LDU 0,S LDX 4,U JSR MOVTOX PULS U LDX #1 RTS FPDIVB PULS U *DIV BY 0 SET 0 LDX 4,U LDD #0 STD 0,X STD 2,X STA 4,X LDX #0 RTS * * ITOF * CONVERT INTEGER INTO FP * CALLING SEQ: * ITOF(I,R); * WHERE R=RESULTANT FP VALUE * I=INTEGER VALUE * DEFINE AS: * CHAR R[5]; * INT I; * ITOF LDX 0,U CLR 4,X CLR 3,X CLR 2,X CLR 1,X CLR 0,X LDD 2,U BEQ ITOFX SET ZERO BPL ITOFA SUBD #1 INC 4,X COMA COMB ITOFA ASLB ROLA INC 0,X BCC ITOFA LSRA TST 4,X BEQ ITOFB ORA #$80 ITOFB RORB STD 1,X LDA #17 SUBA 0,X ORA #$80 STA 0,X CLR 4,X ITOFX RTS * * FTOI - FP TO INTEGER * CALLING SEQ: * FTOI(X,&I); * WHERE: * I=RESULTANT INTEGER * ADDRESS * X=FP TO CONVERT * FTOI LDX 2,U FP ADDRESS LDY 0,U INTEGER ADDRESS CLR 0,Y CLEAR INTEGER CLR 1,Y LDA 0,X EXPONENT BEQ FTOIX ZERO IF EXP ZERO CMPA #$8F CHECK OVERFLOW BHI FTOIE JMP YES LDD 1,X PICKUP MSB STB 1,Y STORE LSB CLRB SET SIGN FLAG CMPA #0 BPL FTOIA INCB NEG VALUE FTOIA ORA #$80 SET MISSING BIT STA 0,Y SAVE MSB LDA 0,X GET EXPONENT CMPA #$80 CHECK UNDERFLOW BLO FTOIE JMP LESS NO INT ANDA #$F PSHU A LDA #$10 DETERMINE SHIFT SUBA 0,U+ FTOIB LSR 0,Y INTEGERIZE ROR 1,Y DECA BNE FTOIB CMPB #0 CHECK NEG BEQ FTOIX JMP NO LDD 0,Y NEG VALUE COMA COMB ADDD #1 00ā&3D900ā&00ā& 3D96&3A9'4i.- j Ľ4]9OUTPUT FILE ERROR6Ħ >&3B9& > >9 >9 >9 > !)9 EQU *~7^$[4 | $[ĮĜ,Ħ4 &  >0݆^ > $[! |B |! | 03D9 *****!) 967 |963^ĮDB' '3F9\ O3F966CA, &'\ 6'3F9Ħ'3F9O3E96!046B!1' 3B93B966!046CB!X'Խҽ' 3C93C9& 1Ǟ'ҁ & ҁ & 963[A'CE* CSE- >C-;EC400& C'A' AĽ >EC5EC 4C 3G96&'' '3B96' &$ '3B96*Ľ(3B96Ľ##'( 8Ľ#'( ,Ľ#' ( ڽ+ >Į"$!"3B93B9Į" 3B963[ACC'&C1#!'C1%!' ACSAC ֽҽ&3G9ҽ'ĮC 46B0OC A,CCSCCE3G963]A#ս!&3E9ā''AA AC3E9'6ٽ!&3B90턽ҁ"'9'50$-$D ٽ!&&3B96007000 000003B9STRING SPACE EXHAUSTED* >9$[$t | $!"9COLOR COMPUTER-C COMPILER REV 1.2 NAM DGSC ORG $0F00$!"9 END CINT6 '6 &0%!)0$!"'!"$!"3B9,PCR TFR D,X%!)0$!"3B9 LDB LDX LDA NDA FANDB FANDCCASL H ]ASLA H ASLB X ASR G ]ASRA G ASRB W BCC $ BCS % BEQ ' BGE , BGT . BHI " BHS $ BITA FBITB FBLE / BLO % BLS # BLT - BMI + BNE & BPL *BRA BRN ! BSR BVC ( BVS ) CLR O ]CLRA O CLRB _ CMPA FCMPB FCMPD CMPS CMPU CMPX FCMPY COM C ]COMA C COMB S CWAI <DAA  DEC J ]DECA J DECB Z (END  ENDC  ENDM  ENDR EORA FE6'!) "'$!) 9 LEAX ,U6 '! &'i!"'~!)0$!) 'x!)0$!) 3B9 TFR X,D STB STX STB &'i!"'!"9'!"9 STB [,U++] STX [,U++]&'Խ!"9'ܽ!"9 LDX ,X LDB ,X CLRA TFR D,X'!"9 EXG D,X(!)9'!)9 LDX #('!"09 PSHU X(<<>><=>=+-/%++--ILLEGAL ADDRESS63Q!'O*ʯĎ390Dr'0DjM'5'MO턮M OOM &OM &39390DB'0,ن' > ' > [!" FCB 03^&3B9*, '+( Ħ & 'Į&" 0' 'ս $[" | 9MISSING CLOSING BRACKET ERRORS IN COMPILATION3\%ؽ  Խ  44H9ҁY&  44H9ҁY&! 44H9ҁ& 0Ľ##B'ۮğؽڽ3D9** COLOR COMPUTER C COMPILER ** BY B W DUGGER 02/82 (C)1982 DUGGER'S GROWING SYSTEMSINCLUDE C-TEXT ON OUTPUT? DEFINE GLOBALS? STARTING LABEL NUMBER? 6 b9˽ 44H9ҁ&9ņ!' 94W4 &ݽ 9&3&, 44H9& 4R4 &ݽ ɽ9PRINTOUTPUT FILENAME? OPEN FAILUREINPUT FILENAME? !04I4 & 9INCLUDE OPEN FAILURE '4?963S'3N9K!' I0Ľr&0Ľ<'0Ľ!'YK'I I06K66O!&3N9*[,663S' ܣM) 39!' I0Ľr&0Ľj'0Ľ!'&YK'IO&,KKK#IKO& I'K KܣKMKM06K66ܽ!'`X3^!'3B90Ľ##&  ĮČ,  CSĎ3B9]MUST BE CONSTANT NEGATIVE SIZE ILLEGAL3U0Br& ҽ 3K90B<''Ħ '0B *Į &0B Ć 0B666!& 0B ގ!&>0Br'   o!46!1&!& ',ܞ'0ۆ!' , !' , Ҏ ') (ܞ,3K9ILLEGAL FUNC OR DECLAR(MISSING OPEN PAREN)ILLEGAL ARG NAMEEXPECTED COMMAWRONG #ARGS63T'y!' 0Cr& 0Cj'0C!']''Ľ7B6O6ރރ޽&!& 3N9ILLEGAL NAME&'9ۆ!' 9!' !'9!' 9!' Z9!' 9!' 9!' н9!'9!' 9*9@IFWHILERETURNBREAKCONTINUE;$ELSE#ENDASM!&ý 9MISSING SEMICOLON0!& '9 093X,FܯDB"D) ܮF,!&B 3H9Ľ(B D) ܮF,Ľ 3X,BDF0Ľ2D F"D(F ğ,B) ܽ3H9&*) (93^' ) Į(3B93^' ) Į(3B91!&& 4 | 966!B&(046!1&!&*B&(D(Ď!&ώB'(g () 3D9' ҽ' ҽ& ' !9!46!1&'99 o9ILLEGAL SYMBOL NAMEALREADY DEFINEMISSING BRACKETMUST BE 1 VALUE6ս $[ | 96Ľ!& $[Ľ | 3B9 963^Ğ*'B6B!X'3D9 ߞ3D963^Ğ,'B6B!X'3D90 3D963^F<&E*-  3H9*ğF0ԯF0Ľ&E D  B **3H9GLOBAL TABLE OVERFLOW63^Fj'3H9, - ] 3H9,ğFĦFĽ&E D  B ,0,3H9LOCAL TABLE OVERFLOW63]!ҽ&3E9Aҽ'AC짤A0A CAo3E9096ʽ |Ľ"3B9CCA-Z/_' a-z/990-9.99&&963^Ć4]B' 4]0 3D963^."& m 3D9ĮČ,B.1"0. 3D9TOO MANY ACTIVE WHILES'..9.&  9.9NO ACTIVE WHILES6Ħa-z. >&3B9Ԧ49&9Ԧ59&9Ԧ40Ԅ9ԟ49&'91 9&1'993\&'3D9&ĽĽ4tB/'ԌO,B40 ڞo4B,Ľ4?' ''' $[4 | 3D96֧֌O,0֦93T&3L9ԟֽ'M 'ҁ & ҁ ' &޽ ҁ"&/ҽҁ"'&ս  " ҁ'&,ҁ''&P  'nҁ/&5ہ*&.ҁ*&ہ/'&1 '2ҽ'uJҽ'J,0JҧJ0J 0Jo1ݯJ'J0IJ0J'ٽ J0JIJ0J' ֌O-c Ԏ4&3L9MISSING APOSTROPHELINE TOO LONG3U0Br& 3K91B&ҁ ' & &2&- 3K9MACRO TABLE FULL620ħ20&,2963^ĮĜ2,NB6B!X' LEAU 2,U RENAMD LDX #0 BRA RENAMX * * PLACE FILE FROM STRING * INTO TRS DOS DISK FILENAME * STRING * FILMNM(STRING) * INPUT: * STRING= FILENAME STRINGADR * OUTPUT: * STATUS= 0-BAD 1-GOOD * * FILMNM LDY 0,U LDX #DFILNM LDB #11 LDA #$20 FILZZM STA ,X+ DECB BNE FILZZM LDX #DFILNM LDA DEFDRV STA DRIVE LDA 1,Y CMPA #'/ BEQ FALMNM CMPA #': BEQ FALMNM FLLMNM LDA 0,Y+ BEQ FXLMNM CMPA #': BEQ FBLMNM CMPA #'/ BEQ FBLMNM CMPA #'. BEQ FCLMNM STA 0,X+ BRA FLLMNM FXLMNM LDA DFILNM+8 CMPA #$20 BNE FGLMNM LDD #$5458 STD DFILNM+8 STA DFILNM+10 FGLMNM LDX #1 FHLMNM RTS FALMNM LDA 0,Y CMPA #'4 BGE FKLMNM CMPA #'0 BLO FKLMNM SUBA #'0 STA DRIVE LEAY 2,Y BRA FLLMNM FBLMNM LDA ,Y CMPA #'4 BGE FKLMNM CMPA #'0 BLO FKLMNM SUBA #'0 STA DRIVE BRA FXLMNM FCLMNM LDX #DFILNM+8 BRA FLLMNM FKLMNM LDX #0 BRA FHLMNM * * MAIN PROCESSOR * * REDIRECT OUTPUT TO PRINTER * RE-DIRECT INPUT DIRIN TFR X,D LDA #'I LBSR OPEN RTS * RE-DIRECT OUTPUT DIROUT LDD #$03FF STD DKTYPE TFR X,D LDA #'O OPEN TEXTFILE FOR OUTPUT LBSR OPEN RTS * GNCHAR BSR GCHAR CHECK NEXT CHAR. BEQ GCHAR DON'T PASS EOL CMPA #$D BEQ GCHAR INC BUFPNT+1,PCR BUMP POINTER TO NEXT CHAR BNE GCHAR INC BUFPNT GCHAR LDA [BUFPNT] RTS * * * OUTPUT STRING TO DISPLAY OUTST1 BSR ZPUTC OUTSTZ LDA ,X+ CMPA #4 BNE OUTST1 RTS * * EXTERNALLY REFERENCED PROCEDURES * * OUTPUT CHARACTER TO DISPLAY ZPUTC CLR FILTYP CMPA #7 BELL CHAR? BNE ZPUTC1 PSHS CC,X ANDCC #$EF INSURE IRQ ENABLED! LDD #$6405 PITCH:DURATION STA PITCH JSR SOUND PULS CC,X RTS * OUTPUT CHARACTER TO DEVICE SET ZPUTC1 BSR ZPZTCH RTS ZGETC CLR FILTYP FROM KEYBOARD BSR ZGZTCH PSHS A BSR ZPUTC ECHO THE INPUT PULS A,PC * * PRINTER OUTPUT PROUT PSHS B LDB #-2 STB FILTYP PULS B BRA ZPUTC1 * * FILE INPUT SYSIN PSHS B LDB INFILN,PCR STB FILTYP PULS B BRA ZGZTCH * * FILE OUTPUT SYSOUT PSHS B LDB OUTFLN,PCR STB FILTYP PULS B BRA ZPZTCH * FMS JMP ,X * * GET FILE NAME AND DRIVE GETSPC PSHS U JSR FILSPC PULS U RTS * * OUTPUT A CHARACTER ZPZTCH PSHS U JSR [CHROUT] PULS U RTS * * GET A CHARACTER ZGZTCH PSHS U JSR CHRIN TST IERR PULS U RTS * * CLOSE FILE NUMBER SET IN FILTYP CLOSE PSHS U JSR DKCLS PULS U RTS * * CLOSE ALL OPEN FILES CLSALL PSHS U JSR DKCLC PULS U RTS * * OPEN FILE IN COMMAND LINE WITH X=DEFAULT EXT OPNFIL PSHS U JSR DKOPEN PULS U RTS * * GET ADDRESS IN BASIC FORMAT (HEX OR DECIMAL) GETADR PSHS U JSR JXADDR PULS U RTS * * GET LINE OF INPUT GETLIN PSHS U LDX #THELIN STX BUFPNT JSR LINPUT PULS U RTS * * CLEAR SCREEN CLEARS PSHS U JSR CLRSCN PULS U RTS DSKFND PSHU A PSHS U JSR FINDFL PULS U TST FLFLFD BNE DSKAND FILE FOUND PULU A LDX #1 CMPA #2 BEQ DSKBND RTS DSKBND LDX #0 RTS DSKAND PULU A LDX #1 CMPA #1 BEQ DSKCND RTS DSKCND LEAX DELMSG,PCR PSHU X LBSR OT LBSR GETLIN LDX #THELIN LDA ,X LDX #0 ANDA #$5F CMPA #'N BNE DSKDND RTS DSKDND PSHS U JSR FLKILL KILL FILE PULS U LDX #1 RTS DELMSG FCC 'FILE EXISTS - KILL FILE(Y/N)? ' FCB EOL ERMSG FCB $D,7 FCC 'ERROR ' FCB 4 PRTFLG FCB 0 OPT LIS * END OF LIB #endasm LDX #THELIN LDA ,X LDX #0 ANDA #$5F CMPA #'N BNE DSKDND RTS DSKDND PSHS U JSR FLKILL KILL FILE PULS U LDX #1 RTS DELMSG FCC 'FILE EXISTS - KILL FILE(Y/N)? ' FCB EOL ERMSG FCB $D,7 FCC 'ERROR ' FCB 4 PRTFLG FCB 0 OPT LIS * ENDSR OUTHEX RTS *\END\ *\SCANF\ FORMAT INPUT *\OL *\OT *\ENDHEAD SCANF LDD [0,S] ANDB #31 SUBB #2 LEAX B,U PSHU X LDX ,X PSHU X CLRB LDX 0,U SCANA LDA 0,X+ BEQ SCANG CMPA #'% BNE SCANA LDA 0,X CMPA #'% BNE SCANAA LEAX 1,X BRA SCANA SCANAA INCB BRA SCANA SCANG PSHU B SCANB LDX 1,U LDA ,X+ BEQ SCANX CMPA #'% BNE SCANBD TST 0,U BEQ SCANBD LDA ,X+ STX 1,U LDX 3,U LEAX -2,X STX 3,U LDX ,X DEC 0,U PSHU X CMPA #'D LBEQ INPUTD CMPA #'d LBEQ INPUTD CMPA #'S BEQ INPUTS CMPA #'s BEQ INPUTS CMPA #'H BEQ INPUTL CMPA #'h BEQ INPUTL CMPA #'C BEQ INPUTC CMPA #'c BEQ INPUTC CMPA #'O LBEQ INPOCT CMPA #'o LBEQ INPOCT CMPA #'X LBEQ INPHEX CMPA #'x LBEQ INPHEX SCANBD LDX 3,U PSHU X LBSR OT LEAX ILLFOR,PCR PSHU X LBSR OT SCANX LEAU 5,U RTS INPUTL PSHU X NEW 5-18-81 LEAX 0,U NEW 5-18-81 PSHU X NEW 5-18-81 BSR PDECP NEW 5-18-81 PULU D NEW 5-18-81 STB [,U++] NEW 5-18-81 LBRA SCANB INPUTS LBSR ZGNCHR CMPA #EOL BEQ INPUSI LDX 0,U INPUSS STA ,X+ STX 0,U LBSR ZGNCHR CMPA #EOL BEQ INPUSX CMPA #32 BNE INPUSS INPUSX LDX 0,U CLR ,X+ LEAU 2,U LBRA SCANB INPUSI LBSR ZLINEI BRA INPUTS INPUTC LBSR ZGNCHR CMPA #EOL BEQ INPUCI CMPA #32 NEW 5-18-81 BEQ INPUTC NEW 5-18-81 PULU X STA ,X LBRA SCANB INPUCI LBSR ZLINEI PLHH LBRA SCANB INPLHH LDX 15,U LDD #0 STD ,X STD 2,X LEAX ,U INPLGI LDA ,X+ BEQ INPLGM SUBA #'0 CMPA #9 BLE INPLGK CMPA #$19 BLE INPLGJ SUBA #$20 INPLGJ SUBA #7 INPLGK PSHU A LDB #4 PSHS Y LDY 16,U INPGL ANDCC #$7E ROL 3,Y ROL 2,Y ROL 1,Y ROL ,Y DECB BNE INPGL LDA 3,Y ADDA ,U+ STA 3,Y PULS Y BRA INPLGI INPLGM LEAU 17,U RTS *\END-SCANF\ *\END\ *\EXIT\ GOTO DOS *\ENDHEAD EXIT LBRA ZWARMS *\END-EXIT\ *\END\ *\ISALPHA\ CHECK FOR ALPHABETIC *\ENDHEAD ISALPH LDD ,U CMPB #96 BLE ISALPB SUBB #32 ISALPB CMPB #'A BLT ISALPX CMPB #'Z BGT ISALPX LDX #1 RTS ISALPX LDX #0 RTS *\END-ISALPH\ *\END\ *\ISUPPE\ UPPER CASE ALPHABETIC *\ENDHEAD ISUPPE LDD ,U CMPB #'A BLT ISUPPX CMPB #'Z BGT ISUPPX LDX #1 RTS ISUPPX LDX #0 RTS *\END-ISUPPE\ *\END\ *\ISLOWE\ CHECK LOWER CASE *\ENDHEAD ISLOWE LDD ,U ISLOWZ CMPB #'a BLT ISLOWX CMPB #'z BGT ISLOWX LDX #1 RTS ISLOWX LDX #0 RTS *\END-ISLOWE\ *\END\ *\ISDIGI\ CHECK DIGIT *\ENDHEAD ISDIGI LDD ,U CMPB #'0 BLT ISDIGX CMPB #'9 BGT ISDIGX LDX #1 RTS ISDIGX LDX #0 RTS *\END-ISDIGI\ *\END\ *\ISSPAC\ SPACE,TAB,CR *\ENDHEAD ISSPAC LDD 0,U CMPB #32 BEQ ISSPAX CMPB #9 BEQ ISSPAX CMPB #13 BEQ ISSPAX LDX #0 RTS ISSPAX LDX #1 RTS *\END-ISSPAC\ *\END\ *\TOUPPE\ CONVERT UPPER CASE *\ENDHEAD TOUPPE LDD 0,U BSR ISLOWE CMPX #0 BEQ TOUPX SUBB #32 TOUPX TFR D,X RTS *\END TOUPPE\ *\END\ *TOLOWE\ CONVERT LOWER CASE *\ENDHEAD TOLOWE LDD 0,U BSR ISLOWE CMPX #0 BEQ TOLOWX ADDB #32 TOLOWX TFR D,X RTS *\END-TOLOWE\ *\END\ FOPEN LDX 2,U LDA 0,X ANDA #$5F CMPA #'W BNE ZOPNR LDY 4,U PSHU Y LBSR FILMNM LEAU 2,U LDA #1 LBSR DSKFND CMPX #0 BNE ZWOPZN LDX #0 RTS ZWOPZN LDX 0,U LBSR DIROUT LDX 0,U RTS ZOPNR LDY 4,U PSHU Y LBSR FILMNM LEAU 2,U LDA #2 LBSR DSKFND CMPX #0 BNE ROPZNZ LDX #0 RTS ROPZNZ LDX 0,U LBSR DIRIN LDX 0,U RTS FCLOSE LDD 0,U STB FILTYP LBSR CLOSE RTS DELFIL LDY 0,U PSHU Y LBSR FILMNM LEAU 2,U PSHS U JSR FLKILL PULS U LDX #1 RTS FDFIL LDY 0,U PSHU Y LBSR FILMNM LEAU 2,U PSHS U JSR FINDFL PULS U LDX #1 TST FLFLFD BNE FDFILX LDX #0 FDFILX RTS GETS LBSR GETLIN LDX 0,U LDY #THELIN GETSZX LDA ,Y+ STA ,X+ BNE GETSZX RTS *\\GETCHAR\\ GET INPUT STDIN GETCHA PSHS U LBSR ZGETC PULS U BEQ GETCHA TFR A,B CLRA TFR D,X RTS *\\NWCHAR\\CHECK FOR CHAR * NO WAIT * CALLING SEQUENCE: * C=NWCHAR(X); * WHERE X=0 OR 1 * X=1 ECHO CHARACTER * X=0 NO ECHO * USE GETCHAR TO WAIT FOR CHAR NWCHAR PSHS U JSR [POLCAT] BEQ NWCHAB PULS U LDX 0,U BEQ NWCHAA PSHS A,U JSR [PUTCAT] PULS A,U NWCHAA TFR A,B TFR D,X RTS NWCHAB PULS U LDX #0 RTS *\\PRTTOG\\ SET PRINTER ON OR OFF PRTTOG LDD 0,U STB PRTFLG,PCR RTS *\\PUTCHA\\ PUT CHAR TO STD OUT PUTCHA EQU * LDD 0,U TFR B,A LBSR ZPUTC TST PRTFLG BNE PXTCHR RTS PXTCHR LDD 0,U TFR B,A LBSR PROUT RTS PUTC LDD 2,U TFR B,A CMPA #10 BEQ PUTCA LBSR SYSOUT PUTCA LDX #1 RTS GETC LBSR SYSIN BEQ GETCB GETCA LDX #-1 RTS GETCB TFR A,B CLRA TFR D,X RTS ZLINEI LBSR GETLIN DEC BUFPNT+1 RTS ZGNCHR LBSR GNCHAR CMPA #$0D BNE ZZGNCH CLRA ZZGNCH RTS * FILE1 FDB SYSIN FCB FOR INPUT FILE INFILN FCB 1 FILE INPUT DEVICE FILE2 FDB SYSOUT FCB FOR OUTPUT FILE OUTFLN FCB 2 FILE OUTPUT DEVICE STDIN FDB ZGETC FCB FOR KEYBOARD FCB 3 INPUT DEVICE STDOUT FDB ZPUTC FCB FOR DISPLAY FCB 4 OUTPUT DEVICE PRINT FDB PROUT FCB FOR PRINTER FCB 4 * SUBROUTINE TO SET UP DEFAULT I/O * * ENTER HERE TO OPEN A FILE * B=FILE NUMBER, A='I FOR INPUT 'O FOR OUTPUT OPEN STB FILTYP SET FILE NUMBER LBSR OPNFIL RTS * ZERROR LEAX ERMSG,PCR LBSR OUTSTZ BRA ALLDON * ZWARMS EQU * ALLDON LBSR CLEARS CLEAR SCREEN JMP $C002 RETURN TO BASIC * * PEEK FUNCTION * * CALLING SEQ.- I=PEEK(MADR); * INPUT MADR= ADDRESS OF MEMORY TO EXAMINE * OUTPUT - THE CONTENT OF THE EXAMINED MEMORY * PEEK LDX [0,U] RTS * * POKE FUNCTION * * CALLING SEQ.= POKE(MADR,VAL); * INPUT: * MADR= MEMORY ADR TO FILL * VAL= VALUE TO PLACE IN MEMORY * POKE LDX 2,U LDD 0,U STB 0,X RTS * * RENAME FUNCTION * * RENAME(OLD,NEW) * INPUT: * OLD = CURRENT FILENAME SR * NEW = NEW FILENAME STR * RENAME LDA DEFDRV STA DRIVE LDX 2,U PSHU X LBSR FILMNM BEQ RENAMC LEAU 2,U LDA DRIVE PSHU A LDX 1,U PSHU X LBSR FILMNM BEQ RENAMB LEAU 2,U PULU A CMPA DRIVE BNE RENAMC PSHS U JSR FNDF PULS U TST FILSEC BNE RENAMD LDX 2,U PSHU X LBSR FILMNM LEAU 2,U PSHS U JSR FNDF PULS U TST FILSEC BEQ RENAMD LDX 0,U PSHU X LBSR FILMNM LEAU 2,U LDX #DFILNM LDY AFN LDB #11 RENAML LDA ,X+ STA ,Y+ DECB BNE RENAML LDB #3 STB FDCODE PSHS U JSR SVERF PULS U LDX #1 RENAMX RTS RENAMB PULU A RENAMC LDB #1 PRINOA PSHU A PRINOB CLR 1,U PRINOC ASL 4,U ROL 3,U ROL 2,U ROL 1,U DECB BNE PRINOC LDB 1,U CLRA ADDB #$30 LBSR OUTBYT LDB #3 DEC ,U BNE PRINOB LEAU 5,U LBRA PRINB PRIOL LDX 5,U LDD ,--X STX 5,U PSHU D LDB #3 LDA #8 BRA PRINOA ILLFOR FCC ' *** ILLEGAL FORMAT ****' FCB 0 *\END-PRINTF\ *\END\ *\OUTBYT\ OUTPUT A BYTE *\PUTCHA *\ENDHEAD OUTBYT PSHU A CMPA #0 BNE OUTBYA LEAU 1,U LDX #0 RTS OUTBYA LDB 0,U PSHU D LBSR PUTCHA LEAU 2,U LDA 0,U+ RTS *\END-OUTBYT\ *\END\ *\OUTSTR\ OUTPUT STRING *\OUTBYT *\ENDHEAD OUTSTR PULU Y OUTSA LDA 0,Y+ LBSR OUTBYT BNE OUTSA RTS *\END-OUTSTR\ *\END\ *\NL\ SEND CR LF *\OUTBYT *\ENDHEAD NL LDA #10 LBSR OUTBYT LDA #13 LBSR OUTBYT RTS *\END-NL\ *\END\ *\OL\ OUTPUT LINE *\NL *ENDHEAD OL LBSR OT LBSR NL RTS *\END-OL\ *\END\ *\OT\ OUTPUT TEXT *\OUTSTR *\ENDHEAD OT LBSR OUTSTR RTS *\END-OT\ *\END\ *\STREQ\ COMPARE 2 STRINGS *\ENDHEAD STREQ LEAU -2,U LDX #0 STX 0,U LDX 4,U LDY 2,U LDB #0 STREQA LDA B,Y BEQ STREQC CMPA B,X BEQ STREQB LDX #0 RTS STREQB INCB BRA STREQA STREQC CLRA TFR D,X CMPB #0 LEAU 6,U RTS *\END-STREQ\ *\END\ *\OUTDEC\ *\CCDIV *\CCMOD *\OUTBYT *\ENDHEAD OUTDEC LEAU -5,U LDX #0 STX 1,U LDX #10000 STX 3,U LDD 5,U BPL OUTDEA COMA COMB ADDD #1 STD 5,U LDA #'- LBSR OUTBYT OUTDEA LDX 3,U CMPX #1 BLT OUTDEX LDD 5,U LDX 3,U LBSR CCDIV TFR X,D ADDB #'0 STB 0,U CMPB #'0 BNE OUTDEB LDX 3,U CMPX #1 BEQ OUTDEB LDX 1,U BEQ OUTDED OUTDEB LDX #1 STX 1,U LDA 0,U LBSR OUTBYT OUTDED LDD 5,U LDX 3,U LBSR CCMOD STX 5,U LDD 3,U LDX #10 LBSR CCDIV STX 3,U BRA OUTDEA OUTDEX LEAU 5,U RTS *\END-OUTDEC\ *\END\ *\OUTHEX -- OUTPUT HEX *\OUTBYT *\ENDHEAD OUTHEX LDA ,X PSHU A LSRA LSRA LSRA LSRA CMPA #10 BLT OUTHX1 ADDA #$37 BRA OUTHX2 OUTHX1 ADDA #$30 OUTHX2 LBSR OUTBYT PULU A ANDA #$0F CMPA #10 BLT OUTHX3 ADDA #$37 BRA OUTHX4 OUTHX3 ADDA #$30 OUTHX4 LBSR OUTBYT RTS *\END-OUTHEX\ *\END\ *\OUTADR\ OUT 2 HEX BYTES *\OUTHEX\ *\ENDHEAD\ OUTADR PSHU X LBSR OUTHEX PULU X LEAX 1,X LBSR OUTHEX RTS *\END\ *\SCANF\ FORMAT INPUT *\OL *\OT *\ENDHEAD SCANF LDD [0,S] ANDB #31 SUBB #2 LEAX B,U PSHU X LDX ,X PSHU X CLRB LDX 0,U SCANA LDA 0,X+ BEQ SCANG CMPA #'% BNE SCANA LDA 0,X CMPA #'% BNE SCANAA LEAX 1,X BRA SCANA SCANAA INCB BRA SCANA SCANG PSHU B SCANB LDX 1,U LDA ,X+ BEQ SCANX CMPA #'% BNE SCANBD TST 0,U BEQ SCANBD LDA ,X+ STX 1,U LDX 3,U LEAX -2,X STX 3,U LDX ,X DEC 0,U PSHU X CMPA #'D LBEQ INPUTD CMPA #'d LBEQ INPUTD CMPA #'S BEQ INPUTS CMPA #'s BEQ INPUTS CMPA #'H BEQ INPUTL CMPA #'h BEQ INPUTL CMPA #'C BEQ INPUTC CMPA #'c BEQ INPUTC CMPA #'O LBEQ INPOCT CMPA #'o LBEQ INPOCT CMPA #'X LBEQ INPHEX CMPA #'x LBEQ INPHEX SCANBD LDX 3,U PSHU X LBSR OT LEAX ILLFOR,PCR PSHU X LBSR OT SCANX LEAU 5,U RTS INPUTL PSHU X NEW 5-18-81 LEAX 0,U NEW 5-18-81 PSHU X NEW 5-18-81 BSR PDECP NEW 5-18-81 PULU D NEW 5-18-81 STB [,U++] NEW 5-18-81 LBRA SCANB INPUTS LBSR ZGNCHR CMPA #EOL BEQ INPUSI LDX 0,U INPUSS STA ,X+ STX 0,U LBSR ZGNCHR CMPA #EOL BEQ INPUSX CMPA #32 BNE INPUSS INPUSX LDX 0,U CLR ,X+ LEAU 2,U LBRA SCANB INPUSI LBSR ZLINEI BRA INPUTS INPUTC LBSR ZGNCHR CMPA #EOL BEQ INPUCI CMPA #32 NEW 5-18-81 BEQ INPUTC NEW 5-18-81 PULU X STA ,X LBRA SCANB INPUCI LBSR ZLINEI BRA INPUTC INPUTD BSR PDECP NEW 5-18-81 LBRA SCANB NEW 5-18-81 PDECP LDD #0 NEW 5-18-81 PSHU D INPUDY LBSR ZGNCHR CMPA #EOL BEQ INPUDI BRA INPADA INPUDA LBSR ZGNCHR INPADA LDB #1 PSHU B CMPA #32 BEQ INPUDX CMPA #EOL BEQ INPUDX CMPA #'- BNE INPUDB LDA #-1 STA 0,U INPUDL LBSR ZGNCHR INPUDB CMPA #32 BEQ INPUDX CMPA #EOL BEQ INPUDX PSHU A LDX 2,U LDD #10 LBSR CCMULT PULU A SUBA #'0 LEAX A,X STX 1,U BRA INPUDL INPUDX CLRA LDB 0,U+ SEX LDX 0,U++ LBSR CCMULT STX [,U++] RTS INPUDI LBSR ZLINEI BRA INPUDY INPHEX LEAU -4,U LEAX ,U PSHU X LEAU -15,U BSR INPCHL LBSR INPLHH LDX 4,U LDD 2,U STD ,X LEAU 6,U LBRA SCANB INPOCT LEAU -4,U LEAX ,U PSHU X LEAU -15,U BSR INPCHL LBSR INPLOO LDX 4,U LDD 2,U STD ,X LEAU 6,U LBRA SCANB INPCHL LEAX ,U PSHS X LBSR ZGNCHR CMPA #EOL BNE INPCHB LBSR ZLINEI INPCHA LBSR ZGNCHR INPCHB CMPA #EOL BEQ INPCHC CMPA #32 BEQ INPCHC LDX ,S STA ,X+ STX ,S BRA INPCHA INPCHC CLR ,X LEAS 2,S RTS INPLOO LDX 15,U LDD #0 STD ,X STD 2,X LEAX ,U INPLGP LDA ,X+ BEQ INPLGS SUBA #'0 CMPA #7 BLE INPLGQ CLRA INPLGQ PSHU A LDB #3 PSHS Y LDY 16,U INPLGR ANDCC #$FE ROL 3,Y ROL 2,Y ROL 1,Y ROL ,Y DECB BNE INPLGR LDA 3,Y ADDA ,U+ STA 3,Y PULS Y BRA INPLGP INPLGS LEAU 17,U RTS INPLGH BSR IN#asm * ***************************************************** * DUGGER'S GROWING SYSTEMS - 6809 C RUNTIME PACKAGE * * WRITTEN BY B W DUGGER 7/83 VERSION 1.2 * * ***************************************************** OPT NOL * * EXTERNAL EQUATES FILTYP EQU $6F FILE TYPE 0,-2=DISPLAY,PRINTER >0=FILE # IERR EQU $70 INPUT ERROR - $FF=EOF,0=OK EEOF EQU $FF FINDFL EQU $C65F CHECK IF EXIST FLFLFD EQU $0973 FIND FILE FLAG FLKILL EQU $C6CF KILL FILE ENTRY POLCAT EQU $A000 POLE KEYS PUTCAT EQU $A002 ECHO KEY EOL EQU 0 PITCH EQU $8C SOUND PITCH BUFPNT EQU $A6 COMMAND BUFFER POINTER DFILNM EQU $094C FILSPC SET FILE NAME HERE THELIN EQU $02DD COLOR INPUT TERMINAL LINE ADR DKTYPE EQU $0957 FILE TYPE+ASCII FLAG DEFDRV EQU $095A DEFAULT DRIVE JXADDR EQU $836C PUT ADDRESS ONTO STACK CHROUT EQU $A002 DISPLAY CHAR CHRIN EQU $A176 GET CHAR. FROM DEVICE LINPUT EQU $A390 LINE INPUT CLRSCN EQU $A928 CLEAR SCREEN SOUND EQU $A951 SOUND GENERATOR DCOPC EQU $C006 DEVICE CONTROL POINTER DKOPEN EQU $C468 OPEN DISK FILE FILSPC EQU $C88A GET FILE SPEC ITEMS DKCLS EQU $CA53 CLOSE DISK FILE DKCLC EQU $CA3B CLOSE ALL FILES BASPNT EQU $A6 FILSEC EQU $0973 FDCODE EQU $EA DRIVE EQU $EB FNDF EQU $C65F AFN EQU $0974 SVERF EQU $D5FF FILSPEC EQU $0973 * *\\CINT\\ INITIALZATION ROUTINE CINT LDU #$6FFF SET U STACK LBSR MAIN GOTO MAIN ROUTINE LBRA ZWARMS RETURN SYSTEM *\\CCOR\\ LOGICAL OR CCOR PSHU X ORA ,U+ ORB ,U+ TFR D,X RTS *\\CCAND\\ LOGICAL AND CCAND PSHU X ANDA ,U+ ANDB ,U+ TFR D,X RTS *\\CCXOR\\ LOGICAL XOR CCXOR PSHU X EORA ,U+ EORB ,U+ TFR D,X RTS *\\CCASL\\ ARITHMETIC SHIFT LEFT CCASL EXG D,X CCASLA LSLA LSLB BCC CCASLB ORA #1 CCASLB LEAX -1,X CMPX #0 BNE CCASLA TFR D,X RTS *\\CCASR\\ ARITHMETIC SHIFT RIGHT CCASR EXG D,X CCASRA LSRB ASRA BCC CCASRB ORB #128 CCASRB LEAX -1,X CMPX #0 BNE CCASRA TFR D,X RTS *\\CCCOM\\ COMPLEMENT CCCOM TFR X,D COMA COMB TFR D,X RTS *\\CCNEG\\ NEGATE OR 2'S COMPLEMENT CCNEG BSR CCCOM LEAX 1,X RTS *\\CCNEGD\\ NEGATE D REGISTER CCNEGD COMA COMB ADDD #1 RTS *\\CCMULT\\ INTEGER MULTIPLY CCMULT PSHU X PSHU D LDD #0 PSHU D PSHU D LDA 5,U LDB 7,U MUL STD 2,U LDA 5,U LDB 6,U MUL ADDD 1,U STD 1,U LDB 7,U LDA 4,U MUL ADDD 1,U STD 1,U LDX 2,U LEAU 8,U RTS *\\CCDIV\\ INTEGER DIVIDE CCDIV LEAU -1,U CLR 0,U PSHU X PSHU D LDX #0 PSHU X BSR FIXNEG STD 2,U LDD 4,U BSR FIXNEG STD 4,U LDX #16 DIV1 ASL 3,U ROL 2,U ROL 1,U ROL 0,U LDD 0,U CMPD 4,U BLO DIV2 SUBD 4,U STD 0,U INC 3,U DIV2 LEAX -1,X BNE DIV1 LDD 2,U ASR 6,U BCC DIV3 BSR FIXNE1 DIV3 TFR D,X LDD 0,U LEAU 7,U RTS FIXNEG CMPD #0 BEQ CCDIVZ BGT CCDIVK FIXNE1 BSR CCNEGD INC 6,U CCDIVK RTS CCDIVZ LDX #0 LEAU 7,U LEAS 2,S RTS *\\CCMOD\\ MODULE DIVIDE RETURN REMAINDER CCMOD LBSR CCDIV EXG X,D RTS *\PRINTF\ FORMAT PRINT ROUTINE PRINTF LDD [0,S] FORMAT PRINT ROUTINE ANDB #31 DETERMINE NUMBER OF BYTES SUBB #2 LEAX B,U FORMAT STRING STACK ADR PSHU X SAVE VAR POSITIONING LDX ,X FORMAT STRING ADR PSHU X SAVE FOR ANALYSIS CLRB LDX 0,U PRINA LDA 0,X+ BEQ PRING CMPA #'% BNE PRINA LDA 0,X CMPA #'% BNE PRINAA LEAX 1,X BRA PRINA PRINAA INCB BRA PRINA PRING PSHU B PRINB LDX 1,U PICKUP NEXT FIELD LDA ,X+ CHECK IF FINIS BEQ PRINX YES CMPA #'% BNE PRINCS PRINT AS SINGLE CHAR TST 0,U BEQ PRINBD BAD FORMAT LDA ,X+ PICKUP NEXT FIELD CMPA #'% CHECK FOR % PRINTING BEQ PRINCS PRINT AS SINGLE CHAR STX 1,U LDX 3,U VAR ADR LEAX -2,X POSITION TO VAR STX 3,U SAVE NEW POSITION LDX ,X DEC 0,U DECR VAR COUNT CMPA #'D BEQ PRIND PRINT DECIMAL CMPA #'d BEQ PRIND CMPA #'S BEQ PRINS PRINT STRING CMPA #'s BEQ PRINS CMPA #'C BEQ PRINC PRINT SINGLE CHAR CMPA #'c BEQ PRINC CMPA #'O LBEQ PRINO CMPA #'o LBEQ PRINO CMPA #'X LBEQ PRIXN CMPA #'x LBEQ PRIXN PRINBD LDX 1,U PRINT BAD FORMAT PSHU X LBSR OT LEAX ILLFOR,PCR PSHU X LBSR OL LEAU 5,U RTS PRIND PSHU X LBSR OUTDEC LEAU 2,U BRA PRINB PRINX LEAU 5,U RTS PRINS PSHU X LBSR OT LBRA PRINB PRINC PSHU X LBSR PUTCHA LEAU 2,U BRA PRINB PRINCS CMPA #'\ BNE PRINCK LDA 0,X+ LBEQ PRINBD CMPA #'\ BEQ PRINCK CMPA #'n BEQ PRINH CMPA #'N BEQ PRINH CMPA #'t TOP OF FORM BEQ PRINCL CMPA #'T BEQ PRINCL BRA PRINCL PRINCJ STX 1,U LBSR NL LBRA PRINB PRINCL LDA #12 PRINCK STX 1,U CMPA #10 BEQ PRINGG TFR A,B LBSR OUTBYT LBRA PRINB PRINBS LDX 1,U LEAX 1,X STX 1,U LBSR NL LBRA PRINB PRINGG LBSR NL LBRA PRINB PRINH LDA #10 LBRA PRINCK PRILX LDX 5,U LDD ,--X STX 5,U PSHU B LEAX ,U LBSR OUTHEX LEAU 1,X PULU X PRIXN PSHU X LEAX ,U LBSR OUTADR LEAU 2,U LBRA PRINB PRINO PSHU A PSHU X PSHU A LDA #6 20 DIM PRIME(4095) 50 COUNT = 0 60 FOR I = 1 TO 4095 70 PRIME(I) = 1 80 NEXT I 90 FOR I = 1 TO 4095 100 IF PRIME(I) = 0 THEN 180 110 J = I + I + 3 120 K = I + J 130 IF K > 4095 THEN 170 140 PRIME(K) = 0 150 K = K + J 160 GOTO 130 170 COUNT = COUNT + 1 180 NEXT I 190 PRINT COUNT;" PRIMES" 200 END = 1 TO 4095 70 PRIME(I) = 1 80 NEXT I 90 FOR I = 1 TO 4095 100 IF PRIME(I) = 0 THEN 180 110 J = I + I + 3 120 K = I + J 130 IF K > 4095 THEN 170 140 PRIME(K) = 0 150 K = K + J 160 GOTO 130 170 COUNT = COUNT + 1 180/* PRINT A FILE ROUTINE */ #define EOF -1 #define EOL 13 main() @ int i,j,k,l,m,nn,fp; char instr[16],inbuf[80],c; j=k=l=0; while(1) @ PRINTF("\N*****LIST A FILE*****"); PRINTF("\NEITHER CONTINUOUS OR PAGE"); PRINTF("\NC OR P ?"); c=GETCHAR(); if(c=='C') @ PRINTF("\NSLOW,MED,FAST S,M,F ?"); c=GETCHAR(); if(c=='S')nn=10000; else if(c=='M')nn=5000; else nn=1000; l=1; $ PRINTF("\N(HIT ANY CHAR) TO CONTINUE OR STOP."); PRINTF("\NHIT $ TO QUIT"); printf("\NINPUT FILE NAME?= "); scanf("%s",instr); fp=fopen(instr,"r",1); if(fp!=0)break; $ while((i=getc(fp))!=EOF) @ if(i==EOL) @ if(j>31)++k; inbuf[j]=0; j=0; printf("\n%s",inbuf); if(l==0) @ if(k++>=14) @ k=0; c=GETCHAR(); if(c=='$')break; $ $ else @ c=NWCHAR(0); if(c!=0) @ if(c=='$')break; c=getchar(); $ m=0; /* CHANGE FOLLOWING TO SPEEDUP OR SLOW DOWN VIEW RATE */ while(m++3B{]6666oAhDiCiBiAZ&AO03j&3EE샯E6 *** ILLEGAL FORMAT ****6&3A96A3B97 &9 {ن 9993^ĮDB' '9\ O3F93[A'CE* CSE-C-;EC00& C'A' {SAZECEC C 3E96DDDD -7 0-7 -7 096709066_Ħ'%&%&0 \ 6{A'd%&Pm'LAC0Cj6D'd'S'Ns'JH'7h'3C'dc'`O'o'݁X'x'C60g63E9606I7{I'ħ' &o3Bc ρ' '7L B6'D 6 '+''-& ''6B {700A O9\ 3\063Q&DB3F3\063Q1DB3F04*& ' '䧀 o2b9O{?0Ħ'(0/O64 i#i"i!iZ&##5 39WO0Ħ'/0 // 64 ~i#i"i!iZ&##5 39{`/ A-Z.99A-Z.99a-z.990-9.99 ' ' '99čŒ' 9č'{5 9B_W& D6 3Bڌ&9 9D6 3B&99ol96 Y3B4@5@96 D3B4@{_5@} s&9Vݦ&94@5@'O94@'5@'4B5B95@99}&99B '9{+'9O9z96 &O9o906+ ~9B9 ZB6k'b3B6A6\'Q3B7&K4@_5@}    "%'()*+,?598:;3B6666oAhDiCiBiAZ&AO03j&3EE샯E6 *** ILLEGAL FORMAT ****6&3A96{A3B97 &9 ن 9993^ĮDB' '9\ O3F93[A'CE* CSE-C-;EC0{?0& C'A' AZECEC C 3E96DDDD -7 0-7 -7 096709066_Ħ'{%&%&0 \ 6A'd%&Pm'LAC0Cj6D'd'S'Ns'JH'7h'3C'dc'`O'o'݁X'x'C60g6{53E9606I7'ħ' &o3Bc ρ' '7L B6'D 6 '+''-&{ ''6B 700A O9\ 3\063Q&DB3F3\063Q1DB3F04*& ' '{+ o2b9O0Ħ'(0/O64 i#i"i!iZ&##5 39WO0Ħ'/0 // 64 ~i#i"i!i{Z&##5 39`/ A-Z.99A-Z.99a-z.990-9.99 ' ' '99{!Œ' 9č' 9B_W& D6 3Bڌ&9 9D6 3B&99ol96 Y3B4@{5@96 D3B4@_5@} s&9Vݦ&94@5@'O94@'5@'4B5B95@99}&9{9B '9'9O9z96 &O9o905+ ~9B9 ZB6k'b3B6A6{\'Q3B7&K4@_5@} s&AB6?3B4@_5@} s',6*3B L t Z&4@5@973B Ď L Z& L Z!/',{ :'(':'2/'..': T & TX T V94,!0%01" Ʀ4,0% 0 ʎ T I9 WO9' 'l!&{ 9&9o&4dQ5979o;454o5 4o5 4yo5 n4@Ȋ5@94@5@94@v p5@94@S5@94@{;5@94@h5@94@l5@94@ݟ5@94@(5@964@_5@} s&7'997'90"6ݦ_N&94@5@9FILE{~ EXIST - KILL FILE(Y/N)? ERROR \N*****LIST A FILE*****\NEITHER CONTINUOUS OR PAGE\NC OR P ?\NSLOW,MED,FAST S,M,F ?U\N(HIT ANY CHAR) TO CONTINUE OR STOP.\NHIT $ TO QUIT\NINPUT FILE NAME?= %sr\n%skݦ_N&94@5@9FILE OPT NOL * ***************************************************** * DUGGER'S GROWING SYSTEMS - 6809 C RUNTIME PACKAGE * * WRITTEN BY B W DUGGER 7/83 VERSION 1.2 * * ***************************************************** * * EXTERNAL EQUATES FILTYP EQU $6F FILE TYPE 0,-2=DISPLAY,PRINTER >0=FILE # IERR EQU $70 INPUT ERROR - $FF=EOF,0=OK EEOF EQU $FF FINDFL EQU $C65F CHECK IF EXIST FLFLFD EQU $0973 FIND FILE FLAG FLKILL EQU $C6CF KILL FILE ENTRY POLCAT EQU $A000 POLE KEYS PUTCAT EQU $A002 ECHO KEY EOL EQU 0 PITCH EQU $8C SOUND PITCH BUFPNT EQU $A6 COMMAND BUFFER POINTER DFILNM EQU $094C FILSPC SET FILE NAME HERE THELIN EQU $02DD COLOR INPUT TERMINAL LINE ADR DKTYPE EQU $0957 FILE TYPE+ASCII FLAG DEFDRV EQU $095A DEFAULT DRIVE JXADDR EQU $836C PUT ADDRESS ONTO STACK CHROUT EQU $A002 DISPLAY CHAR CHRIN EQU $A176 GET CHAR. FROM DEVICE LINPUT EQU $A390 LINE INPUT CLRSCN EQU $A928 CLEAR SCREEN SOUND EQU $A951 SOUND GENERATOR DCOPC EQU $C006 DEVICE CONTROL POINTER DKOPEN EQU $C468 OPEN DISK FILE FILSPC EQU $C88A GET FILE SPEC ITEMS DKCLS EQU $CA53 CLOSE DISK FILE DKCLC EQU $CA3B CLOSE ALL FILES BASPNT EQU $A6 FILSEC EQU $0973 FDCODE EQU $EA DRIVE EQU $EB FNDF EQU $C65F AFN EQU $0974 SVERF EQU $D5FF FILSPEC EQU $0973 *\\CINT\\ INITIALZATION ROUTINE CINT LDU #$6FFF SET U STACK LBSR MAIN GOTO MAIN ROUTINE LBRA ZWARMS RETURN SYSTEM *\\CCOR\\ LOGICAL OR CCOR PSHU X ORA ,U+ ORB ,U+ TFR D,X RTS *\\CCAND\\ LOGICAL AND CCAND PSHU X ANDA ,U+ ANDB ,U+ TFR D,X RTS *\\CCXOR\\ LOGICAL XOR CCXOR PSHU X EORA ,U+ EORB ,U+ TFR D,X RTS *\\CCASL\\ ARITHMETIC SHIFT LEFT CCASL EXG D,X CCASLA LSLA LSLB BCC CCASLB ORA #1 CCASLB LEAX -1,X CMPX #0 BNE CCASLA TFR D,X RTS *\\CCASR\\ ARITHMETIC SHIFT RIGHT CCASR EXG D,X CCASRA LSRB ASRA BCC CCASRB ORB #128 CCASRB LEAX -1,X CMPX #0 BNE CCASRA TFR D,X RTS *\\CCCOM\\ COMPLEMENT CCCOM TFR X,D COMA COMB TFR D,X RTS *\\CCNEG\\ NEGATE OR 2'S COMPLEMENT CCNEG BSR CCCOM LEAX 1,X RTS *\\CCNEGD\\ NEGATE D REGISTER CCNEGD COMA COMB ADDD #1 RTS *\\CCMULT\\ INTEGER MULTIPLY CCMULT PSHU X PSHU D LDD #0 PSHU D PSHU D LDA 5,U LDB 7,U MUL STD 2,U LDA 5,U LDB 6,U MUL ADDD 1,U STD 1,U LDB 7,U LDA 4,U MUL ADDD 1,U STD 1,U LDX 2,U LEAU 8,U RTS *\\CCDIV\\ INTEGER DIVIDE CCDIV LEAU -1,U CLR 0,U PSHU X PSHU D LDX #0 PSHU X BSR FIXNEG STD 2,U LDD 4,U BSR FIXNEG STD 4,U LDX #16 DIV1 ASL 3,U ROL 2,U ROL 1,U ROL 0,U LDD 0,U CMPD 4,U BLO DIV2 SUBD 4,U STD 0,U INC 3,U DIV2 LEAX -1,X BNE DIV1 LDD 2,U ASR 6,U BCC DIV3 BSR FIXNE1 DIV3 TFR D,X LDD 0,U LEAU 7,U RTS FIXNEG CMPD #0 BEQ CCDIVZ BGT CCDIVK FIXNE1 BSR CCNEGD INC 6,U CCDIVK RTS CCDIVZ LDX #0 LEAU 7,U LEAS 2,S RTS *\\CCMOD\\ MODULE DIVIDE RETURN REMAINDER CCMOD LBSR CCDIV EXG X,D RTS *\PRINTF\ FORMAT PRINT ROUTINE PRINTF LDD [0,S] FORMAT PRINT ROUTINE ANDB #31 DETERMINE NUMBER OF BYTES SUBB #2 LEAX B,U FORMAT STRING STACK ADR PSHU X SAVE VAR POSITIONING LDX ,X FORMAT STRING ADR PSHU X SAVE FOR ANALYSIS CLRB LDX 0,U PRINA LDA 0,X+ BEQ PRING CMPA #'% BNE PRINA LDA 0,X CMPA #'% BNE PRINAA LEAX 1,X BRA PRINA PRINAA INCB BRA PRINA PRING PSHU B PRINB LDX 1,U PICKUP NEXT FIELD LDA ,X+ CHECK IF FINIS BEQ PRINX YES CMPA #'% BNE PRINCS PRINT AS SINGLE CHAR TST 0,U BEQ PRINBD BAD FORMAT LDA ,X+ PICKUP NEXT FIELD CMPA #'% CHECK FOR % PRINTING BEQ PRINCS PRINT AS SINGLE CHAR STX 1,U LDX 3,U VAR ADR LEAX -2,X POSITION TO VAR STX 3,U SAVE NEW POSITION LDX ,X DEC 0,U DECR VAR COUNT CMPA #'D BEQ PRIND PRINT DECIMAL CMPA #'d BEQ PRIND CMPA #'S BEQ PRINS PRINT STRING CMPA #'s BEQ PRINS CMPA #'C BEQ PRINC PRINT SINGLE CHAR CMPA #'c BEQ PRINC CMPA #'O LBEQ PRINO CMPA #'o LBEQ PRINO CMPA #'X LBEQ PRIXN CMPA #'x LBEQ PRIXN PRINBD LDX 1,U PRINT BAD FORMAT PSHU X LBSR OT LEAX ILLFOR,PCR PSHU X LBSR OL LEAU 5,U RTS PRIND PSHU X LBSR OUTDEC LEAU 2,U BRA PRINB PRINX LEAU 5,U RTS PRINS PSHU X LBSR OT LBRA PRINB PRINC PSHU X LBSR PUTCHA LEAU 2,U BRA PRINB PRINCS CMPA #'\ BNE PRINCK LDA 0,X+ LBEQ PRINBD CMPA #'\ BEQ PRINCK CMPA #'n BEQ PRINH CMPA #'N BEQ PRINH CMPA #'t TOP OF FORM BEQ PRINCL CMPA #'T BEQ PRINCL BRA PRINCL PRINCJ STX 1,U LBSR NL LBRA PRINB PRINCL LDA #12 PRINCK STX 1,U CMPA #10 BEQ PRINGG TFR A,B LBSR OUTBYT LBRA PRINB PRINBS LDX 1,U LEAX 1,X STX 1,U LBSR NL LBRA PRINB PRINGG LBSR NL LBRA PRINB PRINH LDA #10 LBRA PRINCK PRILX LDX 5,U LDD ,--X STX 5,U PSHU B LEAX ,U LBSR OUTHEX LEAU 1,X PULU X PRIXN PSHU X LEAX ,U LBSR OUTADR LEAU 2,U LBRA PRINB PRINO PSHU A PSHU X PSHU A LDA #6 LDB #1 PRINOA PSHU A PRINOB CLR 1,U PRINOC ASL 4,U ROL 3,U ROL 2,U ROL 1,U DECB BNE PRINOC LDB 1,U CLRA ADDB #$30 LBSR OUTBYT LDB #3 DEC ,U BNE PRINOB LEAU 5,U LBRA PRINB PRIOL LDX 5,U LDD ,--X STX 5,U PSHU D LDB #3 LDA #8 BRA PRINOA ILLFOR FCC ' *** ILLEGAL FORMAT ****' FCB 0 *\END-PRINTF\ *\END\ *\OUTBYT\ OUTPUT A BYTE *\PUTCHA *\ENDHEAD OUTBYT PSHU A CMPA #0 BNE OUTBYA LEAU 1,U LDX #0 RTS OUTBYA LDB 0,U PSHU D LBSR PUTCHA LEAU 2,U LDA 0,U+ RTS *\END-OUTBYT\ *\END\ *\OUTSTR\ OUTPUT STRING *\OUTBYT *\ENDHEAD OUTSTR PULU Y OUTSA LDA 0,Y+ LBSR OUTBYT BNE OUTSA RTS *\END-OUTSTR\ *\END\ *\NL\ SEND CR LF *\OUTBYT *\ENDHEAD NL LDA #10 LBSR OUTBYT LDA #13 LBSR OUTBYT RTS *\END-NL\ *\END\ *\OL\ OUTPUT LINE *\NL *ENDHEAD OL LBSR OT LBSR NL RTS *\END-OL\ *\END\ *\OT\ OUTPUT TEXT *\OUTSTR *\ENDHEAD OT LBSR OUTSTR RTS *\END-OT\ *\END\ *\STREQ\ COMPARE 2 STRINGS *\ENDHEAD STREQ LEAU -2,U LDX #0 STX 0,U LDX 4,U LDY 2,U LDB #0 STREQA LDA B,Y BEQ STREQC CMPA B,X BEQ STREQB LDX #0 RTS STREQB INCB BRA STREQA STREQC CLRA TFR D,X CMPB #0 LEAU 6,U RTS *\END-STREQ\ *\END\ *\OUTDEC\ *\CCDIV *\CCMOD *\OUTBYT *\ENDHEAD OUTDEC LEAU -5,U LDX #0 STX 1,U LDX #10000 STX 3,U LDD 5,U BPL OUTDEA COMA COMB ADDD #1 STD 5,U LDA #'- LBSR OUTBYT OUTDEA LDX 3,U CMPX #1 BLT OUTDEX LDD 5,U LDX 3,U LBSR CCDIV TFR X,D ADDB #'0 STB 0,U CMPB #'0 BNE OUTDEB LDX 3,U CMPX #1 BEQ OUTDEB LDX 1,U BEQ OUTDED OUTDEB LDX #1 STX 1,U LDA 0,U LBSR OUTBYT OUTDED LDD 5,U LDX 3,U LBSR CCMOD STX 5,U LDD 3,U LDX #10 LBSR CCDIV STX 3,U BRA OUTDEA OUTDEX LEAU 5,U RTS *\END-OUTDEC\ *\END\ *\OUTHEX -- OUTPUT HEX *\OUTBYT *\ENDHEAD OUTHEX LDA ,X PSHU A LSRA LSRA LSRA LSRA CMPA #10 BLT OUTHX1 ADDA #$37 BRA OUTHX2 OUTHX1 ADDA #$30 OUTHX2 LBSR OUTBYT PULU A ANDA #$0F CMPA #10 BLT OUTHX3 ADDA #$37 BRA OUTHX4 OUTHX3 ADDA #$30 OUTHX4 LBSR OUTBYT RTS *\END-OUTHEX\ *\END\ *\OUTADR\ OUT 2 HEX BYTES *\OUTHEX\ *\ENDHEAD\ OUTADR PSHU X LBSR OUTHEX PULU X LEAX 1,X LBSR OUTHEX RTS *\END\ *\SCANF\ FORMAT INPUT *\OL *\OT *\ENDHEAD SCANF LDD [0,S] ANDB #31 SUBB #2 LEAX B,U PSHU X LDX ,X PSHU X CLRB LDX 0,U SCANA LDA 0,X+ BEQ SCANG CMPA #'% BNE SCANA LDA 0,X CMPA #'% BNE SCANAA LEAX 1,X BRA SCANA SCANAA INCB BRA SCANA SCANG PSHU B SCANB LDX 1,U LDA ,X+ BEQ SCANX CMPA #'% BNE SCANBD TST 0,U BEQ SCANBD LDA ,X+ STX 1,U LDX 3,U LEAX -2,X STX 3,U LDX ,X DEC 0,U PSHU X CMPA #'D LBEQ INPUTD CMPA #'d LBEQ INPUTD CMPA #'S BEQ INPUTS CMPA #'s BEQ INPUTS CMPA #'H BEQ INPUTL CMPA #'h BEQ INPUTL CMPA #'C BEQ INPUTC CMPA #'c BEQ INPUTC CMPA #'O LBEQ INPOCT CMPA #'o LBEQ INPOCT CMPA #'X LBEQ INPHEX CMPA #'x LBEQ INPHEX SCANBD LDX 3,U PSHU X LBSR OT LEAX ILLFOR,PCR PSHU X LBSR OT SCANX LEAU 5,U RTS INPUTL PSHU X NEW 5-18-81 LEAX 0,U NEW 5-18-81 PSHU X NEW 5-18-81 BSR PDECP NEW 5-18-81 PULU D NEW 5-18-81 STB [,U++] NEW 5-18-81 LBRA SCANB INPUTS LBSR ZGNCHR CMPA #EOL BEQ INPUSI LDX 0,U INPUSS STA ,X+ STX 0,U LBSR ZGNCHR CMPA #EOL BEQ INPUSX CMPA #32 BNE INPUSS INPUSX LDX 0,U CLR ,X+ LEAU 2,U LBRA SCANB INPUSI LBSR ZLINEI BRA INPUTS INPUTC LBSR ZGNCHR CMPA #EOL BEQ INPUCI CMPA #32 NEW 5-18-81 BEQ INPUTC NEW 5-18-81 PULU X STA ,X LBRA SCANB INPUCI LBSR ZLINEI BRA INPUTC INPUTD BSR PDECP NEW 5-18-81 LBRA SCANB NEW 5-18-81 PDECP LDD #0 NEW 5-18-81 PSHU D INPUDY LBSR ZGNCHR CMPA #EOL BEQ INPUDI BRA INPADA INPUDA LBSR ZGNCHR INPADA LDB #1 PSHU B CMPA #32 BEQ INPUDX CMPA #EOL BEQ INPUDX CMPA #'- BNE INPUDB LDA #-1 STA 0,U INPUDL LBSR ZGNCHR INPUDB CMPA #32 BEQ INPUDX CMPA #EOL BEQ INPUDX PSHU A LDX 2,U LDD #10 LBSR CCMULT PULU A SUBA #'0 LEAX A,X STX 1,U BRA INPUDL INPUDX CLRA LDB 0,U+ SEX LDX 0,U++ LBSR CCMULT STX [,U++] RTS INPUDI LBSR ZLINEI BRA INPUDY INPHEX LEAU -4,U LEAX ,U PSHU X LEAU -15,U BSR INPCHL LBSR INPLHH LDX 4,U LDD 2,U STD ,X LEAU 6,U LBRA SCANB INPOCT LEAU -4,U LEAX ,U PSHU X LEAU -15,U BSR INPCHL LBSR INPLOO LDX 4,U LDD 2,U STD ,X LEAU 6,U LBRA SCANB INPCHL LEAX ,U PSHS X LBSR ZGNCHR CMPA #EOL BNE INPCHB LBSR ZLINEI INPCHA LBSR ZGNCHR INPCHB CMPA #EOL BEQ INPCHC CMPA #32 BEQ INPCHC LDX ,S STA ,X+ STX ,S BRA INPCHA INPCHC CLR ,X LEAS 2,S RTS INPLOO LDX 15,U LDD #0 STD ,X STD 2,X LEAX ,U INPLGP LDA ,X+ BEQ INPLGS SUBA #0 CMPA #7 BLE INPLGQ CLRA INPLGQ PSHU A LDB #3 PSHS Y LDY 16,U INPLGR ANDCC #$FE ROL 3,Y ROL 2,Y ROL 1,Y ROL ,Y DECB BNE INPLGR LDA 3,Y ADDA ,U+ STA 3,Y PULS Y BRA INPLGP INPLGS LEAU 17,U RTS INPLGH BSR INPLHH LBRA SCANB INPLHH LDX 15,U LDD #0 STD ,X STD 2,X LEAX ,U INPLGI LDA ,X+ BEQ INPLGM SUBA #'0 CMPA #9 BLE INPLGK CMPA #$19 BLE INPLGJ SUBA #$20 INPLGJ SUBA #7 INPLGK PSHU A LDB #4 PSHS Y LDY 16,U INPGL ANDCC #$7E ROL 3,Y ROL 2,Y ROL 1,Y ROL ,Y DECB BNE INPGL LDA 3,Y ADDA ,U+ STA 3,Y PULS Y BRA INPLGI INPLGM LEAU 17,U RTS *\END-SCANF\ *\END\ *\EXIT\ GOTO DOS *\ENDHEAD EXIT LBRA ZWARMS *\END-EXIT\ *\END\ *\ISALPHA\ CHECK FOR ALPHABETIC *\ENDHEAD ISALPH LDD ,U CMPB #96 BLE ISALPB SUBB #32 ISALPB CMPB #'A BLT ISALPX CMPB #'Z BGT ISALPX LDX #1 RTS ISALPX LDX #0 RTS *\END-ISALPH\ *\END\ *\ISUPPE\ UPPER CASE ALPHABETIC *\ENDHEAD ISUPPE LDD ,U CMPB #'A BLT ISUPPX CMPB #'Z BGT ISUPPX LDX #1 RTS ISUPPX LDX #0 RTS *\END-ISUPPE\ *\END\ *\ISLOWE\ CHECK LOWER CASE *\ENDHEAD ISLOWE LDD ,U ISLOWZ CMPB #'a BLT ISLOWX CMPB #'z BGT ISLOWX LDX #1 RTS ISLOWX LDX #0 RTS *\END-ISLOWE\ *\END\ *\ISDIGI\ CHECK DIGIT *\ENDHEAD ISDIGI LDD ,U CMPB #'0 BLT ISDIGX CMPB #'9 BGT ISDIGX LDX #1 RTS ISDIGX LDX #0 RTS *\END-ISDIGI\ *\END\ *\ISSPAC\ SPACE,TAB,CR *\ENDHEAD ISSPAC LDD 0,U CMPB #32 BEQ ISSPAX CMPB #9 BEQ ISSPAX CMPB #13 BEQ ISSPAX LDX #0 RTS ISSPAX LDX #1 RTS *\END-ISSPAC\ *\END\ *\TOUPPE\ CONVERT UPPER CASE *\ENDHEAD TOUPPE LDD 0,U BSR ISLOWE CMPX #0 BEQ TOUPX SUBB #32 TOUPX TFR D,X RTS *\END TOUPPE\ *\END\ *TOLOWE\ CONVERT LOWER CASE *\ENDHEAD TOLOWE LDD 0,U BSR ISLOWE CMPX #0 BEQ TOLOWX ADDB #32 TOLOWX TFR D,X RTS *\END-TOLOWE\ *\END\ FOPEN LDX 2,U LDA 0,X ANDA #$5F CMPA #'W BNE ZOPNR LDY 4,U PSHU Y LBSR FILMNM LEAU 2,U LDA #1 LBSR DSKFND CMPX #0 BNE ZWOPZN LDX #0 RTS ZWOPZN LDX 0,U LBSR DIROUT LDX 0,U RTS ZOPNR LDY 4,U PSHU Y LBSR FILMNM LEAU 2,U LDA #2 LBSR DSKFND CMPX #0 BNE ROPZNZ LDX #0 RTS ROPZNZ LDX 0,U LBSR DIRIN LDX 0,U RTS FCLOSE LDD 0,U STB FILTYP LBSR CLOSE RTS DELFIL LDY 0,U PSHU Y LBSR FILMNM LEAU 2,U PSHS U JSR FLKILL PULS U LDX #1 RTS FDFIL LDY 0,U PSHU Y LBSR FILMNM LEAU 2,U PSHS U JSR FINDFL PULS U LDX #1 TST FLFLFD BNE FDFILX LDX #0 FDFILX RTS GETS LBSR GETLIN LDX 0,U LDY #THELIN GETSZX LDA ,Y+ STA ,X+ BNE GETSZX RTS *\\GETCHAR\\ GET INPUT STDIN GETCHA PSHS U LBSR ZGETC PULS U BEQ GETCHA TFR A,B CLRA TFR D,X RTS *\\NWCHAR\\CHECK FOR CHAR * NO WAIT * CALLING SEQUENCE: * C=NWCHAR(X); * WHERE X=0 OR 1 * X=1 ECHO CHARACTER * X=0 NO ECHO * USE GETCHAR TO WAIT FOR CHAR NWCHAR PSHS U JSR [POLCAT] BEQ NWCHAB PULS U LDX 0,U BEQ NWCHAA PSHS A,U JSR [PUTCAT] PULS A,U NWCHAA TFR A,B TFR D,X RTS NWCHAB PULS U LDX #0 RTS *\\PRTTOG\\ SET PRINTER ON OR OFF PRTTOG LDD 0,U STB PRTFLG,PCR RTS *\\PUTCHA\\ PUT CHAR TO STD OUT PUTCHA EQU * LDD 0,U TFR B,A LBSR ZPUTC TST PRTFLG BNE PXTCHR RTS PXTCHR LDD 0,U TFR B,A LBSR PROUT RTS PUTC LDD 2,U TFR B,A CMPA #10 BEQ PUTCA LBSR SYSOUT PUTCA LDX #1 RTS GETC LBSR SYSIN BEQ GETCB GETCA LDX #-1 RTS GETCB TFR A,B CLRA TFR D,X RTS ZLINEI LBSR GETLIN DEC BUFPNT+1 RTS ZGNCHR LBSR GNCHAR CMPA #$0D BNE ZZGNCH CLRA ZZGNCH RTS * FILE1 FDB SYSIN FCB FOR INPUT FILE INFILN FCB 1 FILE INPUT DEVICE FILE2 FDB SYSOUT FCB FOR OUTPUT FILE OUTFLN FCB 2 FILE OUTPUT DEVICE STDIN FDB ZGETC FCB FOR KEYBOARD FCB 3 INPUT DEVICE STDOUT FDB ZPUTC FCB FOR DISPLAY FCB 4 OUTPUT DEVICE PRINT FDB PROUT FCB FOR PRINTER FCB 4 * SUBROUTINE TO SET UP DEFAULT I/O * * ENTER HERE TO OPEN A FILE * B=FILE NUMBER, A='I FOR INPUT 'O FOR OUTPUT OPEN STB FILTYP SET FILE NUMBER LBSR OPNFIL RTS * ZERROR LEAX ERMSG,PCR LBSR OUTSTZ BRA ALLDON * ZWARMS EQU * ALLDON LBSR CLEARS CLEAR SCREEN JMP $C002 RETURN TO BASIC * * PEEK FUNCTION * * CALLING SEQ.- I=PEEK(MADR); * INPUT MADR= ADDRESS OF MEMORY TO EXAMINE * OUTPUT - THE CONTENT OF THE EXAMINED MEMORY * PEEK LDX [0,U] RTS * * POKE FUNCTION * * CALLING SEQ.= POKE(MADR,VAL); * INPUT: * MADR= MEMORY ADR TO FILL * VAL= VALUE TO PLACE IN MEMORY * POKE LDX 2,U LDD 0,U STB 0,X RTS * * RENAME FUNCTION * * RENAME(OLD,NEW) * INPUT: * OLD = CURRENT FILENAME SR * NEW = NEW FILENAME STR * RENAME LDA DEFDRV STA DRIVE LDX 2,U PSHU X LBSR FILMNM BEQ RENAMC LEAU 2,U LDA DRIVE PSHU A LDX 1,U PSHU X LBSR FILMNM BEQ RENAMB LEAU 2,U PULU A CMPA DRIVE BNE RENAMC PSHS U JSR FNDF PULS U TST FILSEC BNE RENAMD LDX 2,U PSHU X LBSR FILMNM LEAU 2,U PSHS U JSR FNDF PULS U TST FILSEC BEQ RENAMD LDX 0,U PSHU X LBSR FILMNM LEAU 2,U LDX #DFILNM LDY AFN LDB #11 RENAML LDA ,X+ STA ,Y+ DECB BNE RENAML LDB #3 STB FDCODE PSHS U JSR SVERF PULS U LDX #1 RENAMX RTS RENAMB PULU A RENAMC LEAU 2,U RENAMD LDX #0 BRA RENAMX * * PLACE FILE FROM STRING * INTO TRS DOS DISK FILENAME * STRING * FILMNM(STRING) * INPUT: * STRING= FILENAME STRINGADR * OUTPUT: * STATUS= 0-BAD 1-GOOD * * FILMNM LDY 0,U LDX #DFILNM LDB #11 LDA #$20 FILZZM STA ,X+ DECB BNE FILZZM LDX #DFILNM LDA DEFDRV STA DRIVE LDA 1,Y CMPA #'/ BEQ FALMNM CMPA #': BEQ FALMNM FLLMNM LDA 0,Y+ BEQ FXLMNM CMPA #': BEQ FBLMNM CMPA #'/ BEQ FBLMNM CMPA #'. BEQ FCLMNM STA 0,X+ BRA FLLMNM FXLMNM LDA DFILNM+8 CMPA #$20 BNE FGLMNM LDD #$5458 STD DFILNM+8 STA DFILNM+10 FGLMNM LDX #1 FHLMNM RTS FALMNM LDA 0,Y CMPA #'4 BGE FKLMNM CMPA #'0 BLO FKLMNM SUBA #'0 STA DRIVE LEAY 2,Y BRA FLLMNM FBLMNM LDA ,Y CMPA #'4 BGE FKLMNM CMPA #'0 BLO FKLMNM SUBA #'0 STA DRIVE BRA FXLMNM FCLMNM LDX #DFILNM+8 BRA FLLMNM FKLMNM LDX #0 BRA FHLMNM * * MAIN PROCESSOR * * REDIRECT OUTPUT TO PRINTER * RE-DIRECT INPUT DIRIN TFR X,D LDA #'I LBSR OPEN RTS * RE-DIRECT OUTPUT DIROUT LDD #$03FF STD DKTYPE TFR X,D LDA #'O OPEN TEXTFILE FOR OUTPUT LBSR OPEN RTS * GNCHAR BSR GCHAR CHECK NEXT CHAR. BEQ GCHAR DON'T PASS EOL CMPA #$D BEQ GCHAR INC BUFPNT+1,PCR BUMP POINTER TO NEXT CHAR BNE GCHAR INC BUFPNT GCHAR LDA [BUFPNT] RTS * * * OUTPUT STRING TO DISPLAY OUTST1 BSR ZPUTC OUTSTZ LDA ,X+ CMPA #4 BNE OUTST1 RTS * * EXTERNALLY REFERENCED PROCEDURES * * OUTPUT CHARACTER TO DISPLAY ZPUTC CLR FILTYP CMPA #7 BELL CHAR? BNE ZPUTC1 PSHS CC,X ANDCC #$EF INSURE IRQ ENABLED! LDD #$6405 PITCH:DURATION STA PITCH JSR SOUND PULS CC,X RTS * OUTPUT CHARACTER TO DEVICE SET ZPUTC1 BSR ZPZTCH RTS ZGETC CLR FILTYP FROM KEYBOARD BSR ZGZTCH PSHS A BSR ZPUTC ECHO THE INPUT PULS A,PC * * PRINTER OUTPUT PROUT PSHS B LDB #-2 STB FILTYP PULS B BRA ZPUTC1 * * FILE INPUT SYSIN PSHS B LDB INFILN,PCR STB FILTYP PULS B BRA ZGZTCH * * FILE OUTPUT SYSOUT PSHS B LDB OUTFLN,PCR STB FILTYP PULS B BRA ZPZTCH * FMS JMP ,X * * GET FILE NAME AND DRIVE GETSPC PSHS U JSR FILSPC PULS U RTS * * OUTPUT A CHARACTER ZPZTCH PSHS U JSR [CHROUT] PULS U RTS * * GET A CHARACTER ZGZTCH PSHS U JSR CHRIN TST IERR PULS U RTS * * CLOSE FILE NUMBER SET IN FILTYP CLOSE PSHS U JSR DKCLS PULS U RTS * * CLOSE ALL OPEN FILES CLSALL PSHS U JSR DKCLC PULS U RTS * * OPEN FILE IN COMMAND LINE WITH X Y& 1024,&H7FFF&  #2,""&&,&5y T0 34&Dz S1 18&h{ #2,"Track: ";T;" Sector: ";S&}| DR,T,S,DH$,DL$&DE$(0)(DH$,64):DE$(1)(DH$,64):DE$(2)(DL$,64):DE$(3)(DL$,64)& J0 0&JJ$DE$(J)&JJJ64' #2, "ADR 0 1 2 3 4 5 6 7"'D #2, "--- -- -- -- -- -- -- -- --"'R K0 7'{BK8:XBJJ: 4000: #2, HH$;":";' L0 7:X((JJ$,BL1,1)): 4000: #2, " ";HH$;: L: #2,""'‹ K'̋ J: #2,"": S,T'(:CONVERT X TO 2 HEX BYTES(0HH$(X): (HH$)1 HH$"0"HH$(6(U:CONVERT GRANULE # TO T,S(pGGG: GG33 GGGG2(T(GG2):S1: TTGG S10((:CONVERT SECTOR OFFSET TO(:T,S(GSG)G1(SS9): G1G 5000: #2, "*** ERROR":) G10 5150)0 J1 G1:GFT(G): J)F 5000::GET T,S)X(SSSS9G1:GG: GG33 GGGG2(T(GG2):S1: TTGG S10((:CONVERT SECTOR OFFSET TO(:T,S(GSG)G1(SS9): G1G 5000: #2, "*** ERRO *\\CCMULT\\ INTEGER MULTIPLY CCMULT PSHU X PSHU D LDD #0 PSHU D PSHU D LDA 5,U LDB 7,U MUL STD 2,U LDA 5,U LDB 6,U MUL ADDD 1,U STD 1,U LDB 7,U LDA 4,U MUL ADDD 1,U STD 1,U LDX 2,U LEAU 8,U RTS *\\CCDIV\\ INTEGER DIVIDE CCDIV LEAU -1,U CLR 0,U PSHU X PSHU D LDX #0 PSHU X BSR FIXNEG STD 2,U LDD 4,U BSR FIXNEG STD 4,U LDX #16 DIV1 ASL 3,U ROL 2,U ROL 1,U ROL 0,U LDD 0,U CMPD 4,U BLO DIV2 SUBD 4,U STD 0,U INC 3,U DIV2 LEAX -1,X BNE DIV1 LDD 2,U ASR 6,U BCC DIV3 BSR FIXNE1 DIV3 TFR D,X LDD 0,U LEAU 7,U RTS FIXNEG CMPD #0 BEQ CCDIVZ BGT CCDIVK FIXNE1 BSR CCNEGD INC 6,U CCDIVK RTS CCDIVZ LDX #0 LEAU 7,U LEAS 2,S RTS *\\CCMOD\\ MODULE DIVIDE RETURN REMAINDER CCMOD LBSR CCDIV EXG X,D RTS *\PRINTF\ FORMAT PRINT ROUTINE PRINTF LDD [0,S] FORMAT PRINT ROUTINE ANDB #31 DETERMINE NUMBER OF BYTES SUBB #2 LEAX B,U FORMAT STRING STACK ADR PSHU X SAVE VAR POSITIONING LDX ,X FORMAT STRING ADR PSHU X SAVE FOR ANALYSIS CLRB LDX 0,U PRINA LDA 0,X+ BEQ PRING CMPA #'% BNE PRINA LDA 0,X CMPA #'% BNE PRINAA LEAX 1,X BRA PRINA PRINAA INCB BRA PRINA PRING PSHU B PRINB LDX 1,U PICKUP NEXT FIELD LDA ,X+ CHECK IF FINIS BEQ PRINX YES CMPA #'% BNE PRINCS PRINT AS SINGLE CHAR TST 0,U BEQ PRINBD BAD FORMAT LD*COLOR COMPUTER-C COMPILER REV 1.2 NAM DGSC ORG $0F00 *#define SIZE 4094 * /* Prime number program in C */ *char prime[4095]; *int count,i,j,k,l; *main() MAIN EQU * * @ * l=0; LDX #0 STX L,PCR * while(l<10) CC3 EQU * LDX L,PCR PSHU X LDX #10 TFR X,D LDX #0 CMPD ,U++ BLE *+4 LEAX 1,X CMPX #0 LBEQ CC4 * @ * count = i = 0; LDX #0 STX I,PCR STX COUNT,PCR * while(i<=SIZE)@prime[i++]=1;$ CC5 EQU * LDX I,PCR PSHU X LDX #4094 TFR X,D LDX #0 CMPD ,U++ BLT *+4 LEAX 1,X CMPX #0 LBEQ CC6 LEAX PRIME,PCR PSHU X LDX I,PCR LEAX 1,X STX I,PCR LEAX -1,X PULU D LEAX D,X PSHU X LDX #1 TFR X,D STB [,U++] LBRA CC5 CC6 EQU * * i=0; LDX #0 STX I,PCR * while(i<=SIZE) CC7 EQU * LDX I,PCR PSHU X LDX #4094 TFR X,D LDX #0 CMPD ,U++ BLT *+4 LEAX 1,X CMPX #0 LBEQ CC8 * @ if(prime[i]!=0) LEAX PRIME,PCR PSHU X LDX I,PCR PULU D LEAX D,X LDB ,X CLRA TFR D,X PSHU X LDX #0 TFR X,D LDX #0 CMPD ,U++ BEQ *+4 LEAX 1,X CMPX #0 LBEQ CC9 * @ j=i+i+3; k = i+j; LDX I,PCR PSHU X LDX I,PCR PULU D LEAX D,X PSHU X LDX #3 PULU D LEAX D,X STX J,PCR LDX I,PCR PSHU X LDX J,PCR PULU D LEAX D,X STX K,PCR * while(k<=SIZE) CC10 EQU * LDX K,PCR PSHU X LDX #4094 TFR X,D LDX #0 CMPD ,U++ BLT *+4 LEAX 1,X CMPX #0 LBEQ CC11 * @prime[k]=0; LEAX PRIME,PCR PSHU X LDX K,PCR PULU D LEAX D,X PSHU X LDX #0 TFR X,D STB [,U++] * k=k+j; $ LDX K,PCR PSHU X LDX J,PCR PULU D LEAX D,X STX K,PCR LBRA CC10 CC11 EQU * * ++count; LDX COUNT,PCR LEAX 1,X STX COUNT,PCR * $ * ++i; CC9 EQU * LDX I,PCR LEAX 1,X STX I,PCR * $ LBRA CC7 CC8 EQU * * printf("%D%S\N",count," primes"); LEAX CC2+0,PCR PSHU X LDX COUNT,PCR PSHU X LEAX CC2+7,PCR PSHU X LBSR PRINTF LEAU 6,U * ++l; LDX L,PCR LEAX 1,X STX L,PCR * $ LBRA CC3 CC4 EQU * * $ RTS CC2 FCC '%D%S\N' FCB 0 FCC ' primes' FCB 0 PRIME RMB 4095 COUNT RMB 2 I RMB 2 J RMB 2 K RMB 2 L RMB 2 *0 ERRORS IN COMPILATION END CINT ,PCR PSHU X LBSR PRINTF LEAU 6,U * ++l; LDX L,PCR LEAX 1,X STX L,PCR * $ LBRA CC3 CC4 EQU * * $ RTS CC2 FCC '%D%S\N' FCB 0 FCC ' primes' FCB 0 PRIME RMB 4095 COUNT RMB 2 I RMB 2 J RMB 2 NAM CLIBR OPT NOG,S *OPT NOL * ***************************************************** * DUGGER'S GROWING SYSTEMS - 6809 C RUNTIME PACKAGE * * WRITTEN BY B W DUGGER 7/83 VERSION 1.2 * * ***************************************************** * * EXTERNAL EQUATES FILTYP EQU $6F FILE TYPE 0,-2=DISPLAY,PRINTER >0=FILE # IERR EQU $70 INPUT ERROR - $FF=EOF,0=OK EEOF EQU $FF FINDFL EQU $C65F CHECK IF EXIST FLFLFD EQU $0973 FIND FILE FLAG FLKILL EQU $C6CF KILL FILE ENTRY POLCAT EQU $A000 POLE KEYS PUTCAT EQU $A002 ECHO KEY EOL EQU 0 PITCH EQU $8C SOUND PITCH BUFPNT EQU $A6 COMMAND BUFFER POINTER DFILNM EQU $094C FILSPC SET FILE NAME HERE THELIN EQU $02DD COLOR INPUT TERMINAL LINE ADR DKTYPE EQU $0957 FILE TYPE+ASCII FLAG DEFDRV EQU $095A DEFAULT DRIVE JXADDR EQU $836C PUT ADDRESS ONTO STACK CHROUT EQU $A002 DISPLAY CHAR CHRIN EQU $A176 GET CHAR. FROM DEVICE LINPUT EQU $A390 LINE INPUT CLRSCN EQU $A928 CLEAR SCREEN SOUND EQU $A951 SOUND GENERATOR DCOPC EQU $C006 DEVICE CONTROL POINTER DKOPEN EQU $C468 OPEN DISK FILE FILSPC EQU $C88A GET FILE SPEC ITEMS DKCLS EQU $CA53 CLOSE DISK FILE DKCLC EQU $CA3B CLOSE ALL FILES BASPNT EQU $A6 FILSEC EQU $0973 FDCODE EQU $EA DRIVE EQU $EB FNDF EQU $C65F AFN EQU $0974 SVERF EQU $D5FF FILSPEC EQU $0973 *\\CINT\\ INITIALZATION ROUTINE CINT LDU #$6FFF SET U STACK LBSR MAIN GOTO MAIN ROUTINE LBRA ZWARMS RETURN SYSTEM *\\CCOR\\ LOGICAL OR CCOR PSHU X ORA ,U+ ORB ,U+ TFR D,X RTS *\\CCAND\\ LOGICAL AND CCAND PSHU X ANDA ,U+ ANDB ,U+ TFR D,X RTS *\\CCXOR\\ LOGICAL XOR CCXOR PSHU X EORA ,U+ EORB ,U+ TFR D,X RTS *\\CCASL\\ ARITHMETIC SHIFT LEFT CCASL EXG D,X CCASLA LSLA LSLB BCC CCASLB ORA #1 CCASLB LEAX -1,X CMPX #0 BNE CCASLA TFR D,X RTS *\\CCASR\\ ARITHMETIC SHIFT RIGHT CCASR EXG D,X CCASRA LSRB ASRA BCC CCASRB ORB #128 CCASRB LEAX -1,X CMPX #0 BNE CCASRA TFR D,X RTS *\\CCCOM\\ COMPLEMENT CCCOM TFR X,D COMA COMB TFR D,X RTS *\\CCNEG\\ NEGATE OR 2'S COMPLEMENT CCNEG BSR CCCOM LEAX 1,X RTS *\\CCNEGD\\ NEGATE D REGISTER CCNEGD COMA COMB ADDD #1 RTS *\\CCMULT\\ INTEGER MULTIPLY CCMULT PSHU X PSHU D LDD #0 PSHU D PSHU D LDA 5,U LDB 7,U MUL STD 2,U LDA 5,U LDB 6,U MUL ADDD 1,U STD 1,U LDB 7,U LDA 4,U MUL ADDD 1,U STD 1,U LDX 2,U LEAU 8,U RTS *\\CCDIV\\ INTEGER DIVIDE CCDIV LEAU -1,U CLR 0,U PSHU X PSHU D LDX #0 PSHU X BSR FIXNEG STD 2,U LDD 4,U BSR FIXNEG STD 4,U LDX #16 DIV1 ASL 3,U ROL 2,U ROL 1,U ROL 0,U LDD 0,U CMPD 4,U BLO DIV2 SUBD 4,U STD 0,U INC 3,U DIV2 LEAX -1,X BNE DIV1 LDD 2,U ASR 6,U BCC DIV3 BSR FIXNE1 DIV3 TFR D,X LDD 0,U LEAU 7,U RTS FIXNEG CMPD #0 BEQ CCDIVZ BGT CCDIVK FIXNE1 BSR CCNEGD INC 6,U CCDIVK RTS CCDIVZ LDX #0 LEAU 7,U LEAS 2,S RTS *\\CCMOD\\ MODULE DIVIDE RETURN REMAINDER CCMOD LBSR CCDIV EXG X,D RTS *\PRINTF\ FORMAT PRINT ROUTINE PRINTF LDD [0,S] FORMAT PRINT ROUTINE ANDB #31 DETERMINE NUMBER OF BYTES SUBB #2 LEAX B,U FORMAT STRING STACK ADR PSHU X SAVE VAR POSITIONING LDX ,X FORMAT STRING ADR PSHU X SAVE FOR ANALYSIS CLRB LDX 0,U PRINA LDA 0,X+ BEQ PRING CMPA #'% BNE PRINA LDA 0,X CMPA #'% BNE PRINAA LEAX 1,X BRA PRINA PRINAA INCB BRA PRINA PRING PSHU B PRINB LDX 1,U PICKUP NEXT FIELD LDA ,X+ CHECK IF FINIS BEQ PRINX YES CMPA #'% BNE PRINCS PRINT AS SINGLE CHAR TST 0,U BEQ PRINBD BAD FORMAT LDA ,X+ PICKUP NEXT FIELD CMPA #'% CHECK FOR % PRINTING BEQ PRINCS PRINT AS SINGLE CHAR STX 1,U LDX 3,U VAR ADR LEAX -2,X POSITION TO VAR STX 3,U SAVE NEW POSITION LDX ,X DEC 0,U DECR VAR COUNT CMPA #'D BEQ PRIND PRINT DECIMAL CMPA #'d BEQ PRIND CMPA #'S BEQ PRINS PRINT STRING CMPA #'s BEQ PRINS CMPA #'C BEQ PRINC PRINT SINGLE CHAR CMPA #'c BEQ PRINC CMPA #'O LBEQ PRINO CMPA #'o LBEQ PRINO CMPA #'X LBEQ PRIXN CMPA #'x LBEQ PRIXN PRINBD LDX 1,U PRINT BAD FORMAT PSHU X LBSR OT LEAX ILLFOR,PCR PSHU X LBSR OL LEAU 5,U RTS PRIND PSHU X LBSR OUTDEC LEAU 2,U BRA PRINB PRINX LEAU 5,U RTS PRINS PSHU X LBSR OT LBRA PRINB PRINC PSHU X LBSR PUTCHA LEAU 2,U BRA PRINB PRINCS CMPA #'\ BNE PRINCK LDA 0,X+ LBEQ PRINBD CMPA #'\ BEQ PRINCK CMPA #'n BEQ PRINH CMPA #'N BEQ PRINH CMPA #'t TOP OF FORM BEQ PRINCL CMPA #'T BEQ PRINCL BRA PRINCL PRINCJ STX 1,U LBSR NL LBRA PRINB PRINCL LDA #12 PRINCK STX 1,U CMPA #10 BEQ PRINGG TFR A,B LBSR OUTBYT LBRA PRINB PRINBS LDX 1,U LEAX 1,X STX 1,U LBSR NL LBRA PRINB PRINGG LBSR NL LBRA PRINB PRINH LDA #10 LBRA PRINCK PRILX LDX 5,U LDD ,--X STX 5,U PSHU B LEAX ,U LBSR OUTHEX LEAU 1,X PULU X PRIXN PSHU X LEAX ,U LBSR OUTADR LEAU 2,U LBRA PRINB PRINO PSHU A PSHU X PSHU A LDA #6 LDB #1 PRINOA PSHU A PRINOB CLR 1,U PRINOC ASL 4,U ROL 3,U ROL 2,U ROL 1,U DECB BNE PRINOC LDB 1,U CLRA ADDB #$30 LBSR OUTBYT LDB #3 DEC ,U BNE PRINOB LEAU 5,U LBRA PRINB PRIOL LDX 5,U LDD ,--X STX 5,U PSHU D LDB #3 LDA #8 BRA PRINOA ILLFOR FCC ' *** ILLEGAL FORMAT ****' FCB 0 *\END-PRINTF\ *\END\ *\OUTBYT\ OUTPUT A BYTE *\PUTCHA *\ENDHEAD OUTBYT PSHU A CMPA #0 BNE OUTBYA LEAU 1,U LDX #0 RTS OUTBYA LDB 0,U PSHU D LBSR PUTCHA LEAU 2,U LDA 0,U+ RTS *\END-OUTBYT\ *\END\ *\OUTSTR\ OUTPUT STRING *\OUTBYT *\ENDHEAD OUTSTR PULU Y OUTSA LDA 0,Y+ LBSR OUTBYT BNE OUTSA RTS *\END-OUTSTR\ *\END\ *\NL\ SEND CR LF *\OUTBYT *\ENDHEAD NL LDA #10 LBSR OUTBYT LDA #13 LBSR OUTBYT RTS *\END-NL\ *\END\ *\OL\ OUTPUT LINE *\NL *ENDHEAD OL LBSR OT LBSR NL RTS *\END-OL\ *\END\ *\OT\ OUTPUT TEXT *\OUTSTR *\ENDHEAD OT LBSR OUTSTR RTS *\END-OT\ *\END\ *\STREQ\ COMPARE 2 STRINGS *\ENDHEAD STREQ LEAU -2,U LDX #0 STX 0,U LDX 4,U LDY 2,U LDB #0 STREQA LDA B,Y BEQ STREQC CMPA B,X BEQ STREQB LDX #0 RTS STREQB INCB BRA STREQA STREQC CLRA TFR D,X CMPB #0 LEAU 6,U RTS *\END-STREQ\ *\END\ *\OUTDEC\ *\CCDIV *\CCMOD *\OUTBYT *\ENDHEAD OUTDEC LEAU -5,U LDX #0 STX 1,U LDX #10000 STX 3,U LDD 5,U BPL OUTDEA COMA COMB ADDD #1 STD 5,U LDA #'- LBSR OUTBYT OUTDEA LDX 3,U CMPX #1 BLT OUTDEX LDD 5,U LDX 3,U LBSR CCDIV TFR X,D ADDB #'0 STB 0,U CMPB #'0 BNE OUTDEB LDX 3,U CMPX #1 BEQ OUTDEB LDX 1,U BEQ OUTDED OUTDEB LDX #1 STX 1,U LDA 0,U LBSR OUTBYT OUTDED LDD 5,U LDX 3,U LBSR CCMOD STX 5,U LDD 3,U LDX #10 LBSR CCDIV STX 3,U BRA OUTDEA OUTDEX LEAU 5,U RTS *\END-OUTDEC\ *\END\ *\OUTHEX -- OUTPUT HEX *\OUTBYT *\ENDHEAD OUTHEX LDA ,X PSHU A LSRA LSRA LSRA LSRA CMPA #10 BLT OUTHX1 ADDA #$37 BRA OUTHX2 OUTHX1 ADDA #$30 OUTHX2 LBSR OUTBYT PULU A ANDA #$0F CMPA #10 BLT OUTHX3 ADDA #$37 BRA OUTHX4 OUTHX3 ADDA #$30 OUTHX4 LBSR OUTBYT RTS *\END-OUTHEX\ *\END\ *\OUTADR\ OUT 2 HEX BYTES *\OUTHEX\ *\ENDHEAD\ OUTADR PSHU X LBSR OUTHEX PULU X LEAX 1,X LBSR OUTHEX RTS *\END\ *\SCANF\ FORMAT INPUT *\OL *\OT *\ENDHEAD SCANF LDD [0,S] ANDB #31 SUBB #2 LEAX B,U PSHU X LDX ,X PSHU X CLRB LDX 0,U SCANA LDA 0,X+ BEQ SCANG CMPA #'% BNE SCANA LDA 0,X CMPA #'% BNE SCANAA LEAX 1,X BRA SCANA SCA#ASM LIBS INCLIB.TXT #ENDASM CMPRE BRA FCMPRX FCMPRG LEAY -1,Y BRA FCMPRC * * FPOINT STORE (FPSTR) * CALLING: FPSTR(X,Y) * WHERE: Y IS STORE IN X * X=Y * FPSTR LDX 0,U LDY 2,U LDD 0,X STD 0,Y LDD 2,X STD 2,Y LDA 4,X STA 4,Y RTS #endasm MPA#DEFINE SIZE 4094 /* PRIME NUMBER PROGRAM IN C */ CHAR PRIME[4095]; INT COUNT,I,J,K,L; MAIN() @ L=0; WHILE(L<10) @ COUNT = I = 0; WHILE(I<=SIZE)@PRIME[I++]=1;$ I=0; WHILE(I<=SIZE) @ IF(PRIME[I]!=0) @ J=I+I+3; K = I+J; WHILE(K<=SIZE) @PRIME[K]=0; K=K+J; $ ++COUNT; $ ++I; $ PRINTF("%D%S\N",COUNT," PRIMES"); ++L; $ $ @ IF(PRIME[I]!=0) {0 j63B0 63B0 60 6D3D0 |63B0 60 6(3D0 60 m663F c0 y60 U663F K{{ F >6"3B /6'0'n 6,0'O663DO6 &0{'670f6 3B63B9o696969HX$0&9TG$ʀ0{q&9CS909CS96666EG=BEF=AAGD=AAB3H93_o6663BD-DhCiBiAiD%DlC0&BgF${3G9'.lF93G2b99066_Ħ'%&%&0 \ 6A'f%&vm'B%'lAC0CjāD'?d';S'Cs'?{gC'Cc'?O'o'X'x'A606 3E9653B 3E9663B \&&'Ɓ\'n'8N'4t'T' AX {A 'HA0A<6 ۮE샯E60"3760>3B6666oAhDiCiBiAZ&AO03j&3EE샯E6 {] *** ILLEGAL FORMAT ****6&3A963B97 &9 ن 9993^ĮDB' '9\ O3F93[{A'CE* CSE-C-;EC00& C'A' AZECEC C 3E96DDDD -7 0-7 -{S7 096709066_Ħ'%&%&0 \ 6A'd%&Pm'LAC0Cj6D'd'S'Ns'JH'7h'3C'{dc'`O'o'݁X'x'C60g63E9606I7'ħ' &o3Bc ' '7Lp {IB6h'D _6 '+''-&H ''6B 700A O9 3\063Q&DB3F3\063Q{č1DB3F04&ځ' '䧀 o2b9O0Ħ'(0/O64 i#i"i!iZ&##5 39WO{?0Ħ'/0 // 64 ~i#i"i!iZ&##5 39g`/ A-Z.99A-Z.99a-z.9{90-9.99 ' ' '99čŒ' 9č' 9B_W&D݆&99Dˌ&{599o}9ݦ&94@5@'O94@'5@'4B5B95@999B '9'{9O9+z9 &O9}eo90z  ~ L Z& L'/' .'Z& T'Z&9'T TX U{+T V9I9 WO9' 'lT& 9&9o&4dQ5979o;454o5 43o5 4*o5{ n4@Ȋ5@94@5@94@v p5@94@S5@94@;5@94@h5@94@l5@94@ݟ5@94@(5@964@_5@} s&7'997'9{!0"6ݦ_N&94@5@9FILE EXIST - KILL FILE(Y/N)? ERROR \NSTRIP SEQUENCE NUMBER OFF TRS SOURCE\NINPUT" FILE =%S\NOUTPUT FILE =%SRW/94@;5@94@h5@94@l5@94@ݟ5@94@(5@964@_5@} s&7'997'9{!0"6ݦ_N&94@5@9FILE EXIST - KILL FILE(Y/N)? ERROR \NSTRIP SEQUENCE NUMBER OFF TRS SOURCE\NINPUT+<_7_܂'ؽ )׫܂a݂'?܂݂ 6׫ 2+&0+&0 ܂'' ]' & ܂'&& ܂&  ' &'B6v5H8e_%|%j %X"  $ &*,.A$ab7$-~7 &Qۆ!' 5! !' !' !' ӎ!'q ƽ 9"charint#asm#include#define3\0&3D9ڽĮĜ0,(BB'B00ā' >B'0,ن' > ' > [!" FCB 03^&3B9*, '+( Ħ & 'Į&" 0' 'ս $[" | 9MISSING CLOSING BRACKET ERRORS IN COMPILATION3\%ؽ  Խ  44H9ҁY&  44H9ҁY&! 44H9ҁ& 0Ľ##B'ۮğؽڽ3D9** COLOR COMPUTER C COMPILER ** BY B W DUGGER 02/82 (C)1982 DUGGER'S GROWING SYSTEMSINCLUDE C-TEXT ON OUTPUT? DEFINE GLOBALS? STARTING LABEL NUMBER? 6 b9˽ 44H9ҁ&9ņ!' 94W4 &ݽ 9&3&, 44H9& 4R4 &ݽ ɽ9PRINTOUTPUT FILENAME? OPEN FAILUREINPUT FILENAME? !04I4 & 9INCLUDE OPEN FAILURE '4?963S'3N9K!' I0Ľr&0Ľ<'0Ľ!'YK'I I06K66O!&3N9*[,663S' ܣM) 39!' I0Ľr&0Ľj'0Ľ!'&YK'IO&,KKK#IKO& I'K KܣKMKM06K66ܽ!'`X3^!'3B90Ľ##&  ĮČ,  CSĎ3B9]MUST BE CONSTANT NEGATIVE SIZE ILLEGAL3U0Br& ҽ 3K90B<''Ħ '0B *Į &0B Ć 0B666!& 0B ގ!&>0Br'   o!46!1&!& ',ܞ'0ۆ!' , !' , Ҏ ') (ܞ,3K9ILLEGAL FUNC OR DECLAR(MISSING OPEN PAREN)ILLEGAL ARG NAMEEXPECTED COMMAWRONG #ARGS63T'y!' 0Cr& 0Cj'0C!']''Ľ7B6O6ރރ޽&!& 3N9ILLEGAL NAME&'9ۆ!' 9!' !'9!{6 /0'G6-0'"0 c6^0X0706Ž?;6{{-0'0 670O6'0'670670߮670Ϯ6{-0',0 6706Ѯ670}0wu0o-0 X6`60 S63FW0Q9o{q696969HX$0&9TG$ʀ0&9CS909CS96666EG=BEF=AAGD=AAB3{H93_o6663BD-DhCiBiAiD%DlC0&BgF$3G9'.lF93G2b99066_Ħ'%&{g%&0 \ 6A'f%&vm'B%'lAC0CjāD'?d';S'Cs'?C'Cc'?O'o'X'x'A606 3E9653B 3E9{663B \&&'Ɓ\'n'8N'4t'T' AX A 'HA0A<6 ۮE샯E60"3760>3B{]6666oAhDiCiBiAZ&AO03j&3EE샯E6 *** ILLEGAL FORMAT ****6&3A96A3B97 &9 {ن 9993^ĮDB' '9\ O3F93[A'CE* CSE-C-;EC00& C'A' {SAZECEC C 3E96DDDD -7 0-7 -7 096709066_Ħ'%&%&0 \ 6{A'd%&Pm'LAC0Cj6D'd'S'Ns'JH'7h'3C'dc'`O'o'݁X'x'C60g63E9606I7{I'ħ' &o3Bc ρ' '7L B6'D 6 '+''-& ''6B {700A O9\ 3\063Q&DB3F3\063Q1DB3F04*& ' '䧀 o2b9O{?0Ħ'(0/O64 i#i"i!iZ&##5 39WO0Ħ'/0 // 64 ~i#i"i!iZ&##5 39{`/ A-Z.99A-Z.99a-z.990-9.99 ' ' '99čŒ' 9č'{5 9B_W& D6 3Bڌ&9 9D6 3B&99ol96 Y3B4@5@96 D3B4@{_5@} s&9Vݦ&94@5@'O94@'5@'4B5B95@99}&99B '9{+'9O9z96 &O9o905+ ~9B9 ZB6k'b3B6A6\'Q3B7&K4@_5@} {s&AB6?3B4@_5@} s',6*3B L t Z&4@5@973B Ď L Z& L Z!/',:'(':'2/'..':{! T & TX T V94,!0%01" Ʀ4,0% 0 ʎ T I9 WO9' 'l!& 9&9o{&4dQ5979o;454o5 4o5 4yo5 n4@Ȋ5@94@5@94@v p5@94@S5@94@;5@94@h5@94@l5{@94@ݟ5@94@(5@964@_5@} s&7'997'90"6ݦ_N&94@5@9FILE EXIST - KILL FILE(Y/N)? ERROR %D%S\N PRIMESk5 4o5 4yo5 n4@Ȋ5@94@5@94@v p5@94@S5@94@;5@94@h5@94@l5{@94@ݟ5@94@(5@964@_5@} s&7'997'90"6ݦ_N&94@5@9FILE EXIST - KILL FILE(Y>Į"$!"3B93B9Į" 3B963[ACC'&C1#!'C1%!' ACSAC ֽҽ&3G9ҽ'ĮC 46B0OC A,CCSCCE3G963]A#ս!&3E9ā''AA AC3E9'6ٽ!&3B90턽ҁ"'9'50$-$D ٽ!&&3B96007000 000003B9STRING SPACE EXHAUSTED* >9$[$t | $!"9COLOR COMPUTER-C COMPILER REV 1.2 NAM DGSC ORG $0F00$!"9 END CINT6 '6 &0%!)0$!"'!"$!"3B9,PCR TFR D,X%!)0$!"3B9 LDB LDX LDA NDA FANDB FANDCCASL H ]ASLA H ASLB X ASR G ]ASRA G ASRB W BCC $ BCS % BEQ ' BGE , BGT . BHI " BHS $ BITA FBITB FBLE / BLO % BLS # BLT - BMI + BNE & BPL *BRA BRN ! BSR BVC ( BVS ) CLR O ]CLRA O CLRB _ CMPA FCMPB FCMPD CMPS CMPU CMPX FCMPY COM C ]COMA C COMB S CWAI <DAA  DEC J ]DECA J DECB Z (END  ENDC  ENDM  ENDR EORA FE6'!) "'$!) 9 LEAX ,U6 '! &'i!"'~!)0$!) 'x!)0$!) 3B9 TFR X,D STB STX STB &'i!"'!"9'!"9 STB [,U++] STX [,U++]&'Խ!"9'ܽ!"9 LDX ,X LDB ,X CLRA TFR D,X'!"9 EXG D,X(!)9'!)9 LDX #('!"09 PSHU X(&3B9Ԧ49&9Ԧ59&9Ԧ40Ԅ9ԟ49&'91 9&1'993\&'3D9&ĽĽ4tB/'ԌO,B40 ڞo4B,Ľ4?' ''' $[4 | 3D96֧֌O,0֦93T&3L9ԟֽ'M 'ҁ & ҁ ' &޽ ҁ"&/ҽҁ"'&ս  " ҁ'&,ҁ''&P  'nҁ/&5ہ*&.ҁ*&ہ/'&1 '2ҽ'uJҽ'J,0JҧJ0J 0Jo1ݯJ'J0IJ0J'ٽ J0JIJ0J' ֌O-c Ԏ4&3L9MISSING APOSTROPHELINE TOO LONG3U0Br& 3K91B&ҁ ' & &2&- 3K9MACRO TABLE FULL620ħ20&,2963^ĮĜ2,NB6B!X'00ā&3D900ā&00ā& 3D96&3A9'4i.- j Ľ4]9OUTPUT FILE ERROR6Ħ >&3B9& > >9 >9 >9 > !)9 EQU *~7^$[4 | $[ĮĜ,Ħ4 &  >0݆^ > $[! |B |! | 03D9 *****!) 967 |963^ĮDB' '3F9\ O3F966CA, &'\ 6'3F9Ħ'3F9O3E96!046B!1' 3B93B966!046CB!X'Խҽ' 3C93C9& 1Ǟ'ҁ & ҁ & 963[A'CE* CSE- >C-;EC400& C'A' AĽ >EC5EC 4C 3G96&'' '3B96' &$ '3B96*Ľ(3B96Ľ##'( 8Ľ#'( ,Ľ#' ( ڽ+ >Į"$!"3B93B9Į" 3B963[ACC'&C1#!'C1%!' ACSAC ֽҽ&3G9ҽ'ĮC 46B0OC A,CCSCCE3G963]A#ս!&3E9ā''AA AC3E9'6ٽ!&3B90턽ҁ"'9'50$-$D ٽ!&&3B96007000 000003B9STRING SPACE EXHAUSTED* >9$[$t | $!"9COLOR COMPUTER-C COMPILER REV 1.2 NAM DGSC ORG $0F00$!"9 END CINT6 '6 &0%!)0$!"'!"$!"3B9,PCR TFR D,X%!)0$!"3B9 LDB LDX LDA NDA FANDB FANDCCASL H ]ASLA H ASLB X ASR G ]ASRA G ASRB W BCC $ BCS % BEQ ' BGE , BGT . BHI " BHS $ BITA FBITB FBLE / BLO % BLS # BLT - BMI + BNE & BPL *BRA BRN ! BSR BVC ( BVS ) CLR O ]CLRA O CLRB _ CMPA FCMPB FCMPD CMPS CMPU CMPX FCMPY COM C ]COMA C COMB S CWAI <DAA  DEC J ]DECA J DECB Z (END  ENDC  ENDM  ENDR EORA FE6'!) "'$!) 9 LEAX ,U6 '! &'i!"'~!)0$!) 'x!)0$!) 3B9 TFR X,D STB STX STB &'i!"'!"9'!"9 STB [,U++] STX [,U++]&'Խ!"9'ܽ!"9 LDX ,X LDB ,X CLRA TFR D,X'!"9 EXG D,X(!)9'!)9 LDX #('!"09 PSHU X(<<>><=>=+-/%++--ILLEGAL ADDRESS63Q!'O*ʯĎ390Dr'0DjM'5'MO턮M OOM &OM &39390Dy9' '|&|90DDDD@ &9o&D4dQ5 :L9oS454o5 45;o5 645>o5 n4_5454@Ȋ5@94@᭟5@94@Խv5@}p94@ŽS5@94@;5@94@h5@94@l5@594@5@94@(5@964@75@} s&7'997'976 ݦ_N&94@75@9FILE EXISTS -KILL FILE(Y/N)? PCDTXT ERROR  AT 6o_~6v6o~6v'44H~5s666 '3\ 7ݽ4H77݁X'9~wA&M0C69'T~ Z!/',:'(':'3/'/.'< T & TX T V94,#0%01" Ŧ4,0% 0 Ȏ T !/',:'(':'3/'/.'< T & TX T V94,#0%01" Ŧ4,0% 0 Ȏ T PSHS U JSR FNDF PULS U TST FILSEC BEQ RENAMD LDX 0,U PSHU X LBSR FILMNM LEAU 2,U LDX #DFILNM LDY AFN LDB #11 RENAML LDA ,X+ STA ,Y+ DECB BNE RENAML LDB #3 STB FDCODE PSHS U JSR SVERF PULS U LDX #1 RENAMX RTS RENAMB PULU A RENAMC LEAU 2NAA INCB BRA SCANA SCANG PSHU B SCANB LDX 1,U LDA ,X+ BEQ SCANX CMPA #'% BNE SCANBD TST 0,U BEQ SCANBD LDA ,X+ STX 1,U LDX 3,U LEAX -2,X STX 3,U LDX ,X DEC 0,U PSHU X CMPA #'D LBEQ INPUTD CMPA #'d LBEQ INPUTD CMPA #'S BEQ INPUTS CMPA #'s BEQ INPUTS CMPA #'H BEQ INPUTL CMPA #'h BEQ INPUTL CMPA #'C BEQ INPUTC CMPA #'c BEQ INPUTC CMPA #'O LBEQ INPOCT CMPA #'o LBEQ INPOCT CMPA #'X LBEQ INPHEX CMPA #'x LBEQ INPHEX SCANBD LDX 3,U PSHU X LBSR OT LEAX ILLFOR,PCR PSHU X LBSR OT SCANX LEAU 5,U RTS INPUTL PSHU X NEW 5-18-81 LEAX 0,U NEW 5-18-81 PSHU X NEW 5-18-81 BSR PDECP NEW 5-18-81 PULU D NEW 5-18-81 STB [,U++] NEW 5-18-81 LBRA SCANB INPUTS LBSR ZGNCHR CMPA #EOL BEQ INPUSI LDX 0,U INPUSS STA ,X+ STX 0,U LBSR ZGNCHR CMPA #EOL BEQ INPUSX CMPA #32 BNE INPUSS INPUSX LDX 0,U CLR ,X+ LEAU 2,U LBRA SCANB INPUSI LBSR ZLINEI BRA INPUTS INPUTC LBSR ZGNCHR CMPA #EOL BEQ INPUCI CMPA #32 NEW 5-18-81 BEQ INPUTC NEW 5-18-81 PULU X STA ,X LBRA SCANB INPUCI LBSR ZLINEI BRA INPUTC INPUTD BSR PDECP NEW 5-18-81 LBRA SCANB NEW 5-18-81 PDECP LDD #0 NEW 5-18-81 PSHU D INPUDY LBSR ZGNCHR CMPA #EOL BEQ INPUDI BRA INPADA INPUDA LBSR ZGNCHR INPADA LDB #1 PSHU B CMPA #32 BEQ INPUDX CMPA #EOL BEQ INPUDX CMPA #'- BNE INPUDB LDA #-1 STA 0,U INPUDL LBSR ZGNCHR INPUDB CMPA #32 BEQ INPUDX CMPA #EOL BEQ INPUDX PSHU A LDX 2,U LDD #10 LBSR CCMULT PULU A SUBA #'0 LEAX A,X STX 1,U BRA INPUDL INPUDX CLRA LDB 0,U+ SEX LDX 0,U++ LBSR CCMULT STX [,U++] RTS INPUDI LBSR ZLINEI BRA INPUDY INPHEX LEAU -4,U LEAX ,U PSHU X LEAU -15,U BSR INPCHL LBSR INPLHH LDX 4,U LDD 2,U STD ,X LEAU 6,U LBRA SCANB INPOCT LEAU -4,U LEAX ,U PSHU X LEAU -15,U BSR INPCHL LBSR INPLOO LDX 4,U LDD 2,U STD ,X LEAU 6,U LBRA SCANB INPCHL LEAX ,U PSHS X LBSR ZGNCHR CMPA #EOL BNE INPCHB LBSR ZLINEI INPCHA LBSR ZGNCHR INPCHB CMPA #EOL BEQ INPCHC CMPA #32 BEQ INPCHC LDX ,S STA ,X+ STX ,S BRA INPCHA INPCHC CLR ,X LEAS 2,S RTS INPLOO LDX 15,U LDD #0 STD ,X STD 2,X LEAX ,U INPLGP LDA ,X+ BEQ INPLGS SUBA #0 CMPA #7 BLE INPLGQ CLRA INPLGQ PSHU A LDB #3 PSHS Y LDY 16,U INPLGR ANDCC #$FE ROL 3,Y ROL 2,Y ROL 1,Y ROL ,Y DECB BNE INPLGR LDA 3,Y ADDA ,U+ STA 3,Y PULS Y BRA INPLGP INPLGS LEAU 17,U RTS INPLGH BSR INPLHH LBRA SCANB INPLHH LDX 15,U LDD #0 STD ,X STD 2,X LEAX ,U INPLGI LDA ,X+ BEQ INPLGM SUBA #'0 CMPA #9 BLE INPLGK CMPA #$19 BLE INPLGJ SUBA #$20 INPLGJ SUBA #7 INPLGK PSHU A LDB #4 PSHS Y LDY 16,U INPGL ANDCC #$7E ROL 3,Y ROL 2,Y ROL 1,Y ROL ,Y DECB BNE INPGL LDA 3,Y ADDA ,U+ STA 3,Y PULS Y BRA INPLGI INPLGM LEAU 17,U RTS *\END-SCANF\ *\END\ *\EXIT\ GOTO DOS *\ENDHEAD EXIT LBRA ZWARMS *\END-EXIT\ *\END\ *\ISALPHA\ CHECK FOR ALPHABETIC *\ENDHEAD ISALPH LDD ,U CMPB #96 BLE ISALPB SUBB #32 ISALPB CMPB #'A BLT ISALPX CMPB #'Z BGT ISALPX LDX #1 RTS ISALPX LDX #0 RTS *\END-ISALPH\ *\END\ *\ISUPPE\ UPPER CASE ALPHABETIC *\ENDHEAD ISUPPE LDD ,U CMPB #'A BLT ISUPPX CMPB #'Z BGT ISUPPX LDX #1 RTS ISUPPX LDX #0 RTS *\END-ISUPPE\ *\END\ *\ISLOWE\ CHECK LOWER CASE *\ENDHEAD ISLOWE LDD ,U ISLOWZ CMPB #'a BLT ISLOWX CMPB #'z BGT ISLOWX LDX #1 RTS ISLOWX LDX #0 RTS *\END-ISLOWE\ *\END\ *\ISDIGI\ CHECK DIGIT *\ENDHEAD ISDIGI LDD ,U CMPB #'0 BLT ISDIGX CMPB #'9 BGT ISDIGX LDX #1 RTS ISDIGX LDX #0 RTS *\END-ISDIGI\ *\END\ *\ISSPAC\ SPACE,TAB,CR *\ENDHEAD ISSPAC LDD 0,U CMPB #32 BEQ ISSPAX CMPB #9 BEQ ISSPAX CMPB #13 BEQ ISSPAX LDX #0 RTS ISSPAX LDX #1 RTS *\END-ISSPAC\ *\END\ *\TOUPPE\ CONVERT UPPER CASE *\ENDHEAD TOUPPE LDD 0,U BSR ISLOWE CMPX #0 BEQ TOUPX SUBB #32 TOUPX TFR D,X RTS *\END TOUPPE\ *\END\ *TOLOWE\ CONVERT LOWER CASE *\ENDHEAD TOLOWE LDD 0,U BSR ISLOWE CMPX #0 BEQ TOLOWX ADDB #32 TOLOWX TFR D,X RTS *\END-TOLOWE\ *\END\ FOPEN LDX 2,U LDA 0,X ANDA #$5F CMPA #'W BNE ZOPNR LDY 4,U PSHU Y LBSR FILMNM LEAU 2,U LDA #1 LBSR DSKFND CMPX #0 BNE ZWOPZN LDX #0 RTS ZWOPZN LDX 0,U LBSR DIROUT LDX 0,U RTS ZOPNR LDY 4,U PSHU Y LBSR FILMNM LEAU 2,U LDA #2 LBSR DSKFND CMPX #0 BNE ROPZNZ LDX #0 RTS ROPZNZ LDX 0,U LBSR DIRIN LDX 0,U RTS FCLOSE LDD 0,U STB FILTYP LBSR CLOSE RTS DELFIL LDY 0,U PSHU Y LBSR FILMNM LEAU 2,U PSHS U JSR FLKILL PULS U LDX #1 RTS FDFIL LDY 0,U PSHU Y LBSR FILMNM LEAU 2,U PSHS U JSR FINDFL PULS U LDX #1 TST FLFLFD BNE FDFILX LDX #0 FDFILX RTS GETS LBSR GETLIN LDX 0,U LDY #THELIN GETSZX LDA ,Y+ STA ,X+ BNE GETSZX RTS *\\GETCHAR\\ GET INPUT STDIN GETCHA PSHS U LBSR ZGETC PULS U BEQ GETCHA TFR A,B CLRA TFR D,X RTS *\= DEFAULT EXT OPNFIL PSHS U JSR DKOPEN PULS U RTS * * GET ADDRESS IN BASIC FORMAT (HEX OR DECIMAL) GETADR PSHS U JSR JXADDR PULS U RTS * * GET LINE OF INPUT GETLIN PSHS U LDX #THELIN STX BUFPNT JSR LINPUT PULS U RTS * * CLEAR SCREEN CLEARS PSHS U JSR CLRSCN PULS U RTS DSKFND PSHU A PSHS U JSR FINDFL PULS U TST FLFLFD BNE DSKAND FILE FOUND PULU A LDX #1 CMPA #2 BEQ DSKBND RTS DSKBND LDX #0 RTS DSKAND PULU A LDX #1 CMPA #1 BEQ DSKCND RTS DSKCND LEAX DELMSG,PCR PSHU X LBSR OT LBSR GETLIN LDX #THELIN LDA ,X LDX #0 ANDA #$5F CMPA #'N BNE DSKDND RTS DSKDND PSHS U JSR FLKILL KILL FILE PULS U LDX #1 RTS DELMSG FCC 'FILE EXISTS - KILL FILE(Y/N)? ' FCB EOL ERMSG FCB $D,7 FCC 'ERROR ' FCB 4 PRTFLG FCB 0 * END OF LIB OT LBB GETLIN LDX #THELIN LDA ,X LDX #0 ANDA #$5F CMPA #'N BNE DSKDND RTS DSKDND PSHS U JSR FLKILL KILL FILE PULS U LDX #1 RTS DELMSG FCC 'FILE EXISTS - KILL FILE(Y/N)? ' FCB EOL ERMSG FCB $D,7 FCC 'ERROR ' FCB 4 PRTFLG FCB 0 OPT LIS * END OF LI\NWCHAR\\CHECK FOR CHAR * NO WAIT * CALLING SEQUENCE: * C=NWCHAR(X); * WHERE X=0 OR 1 * X=1 ECHO CHARACTER * X=0 NO ECHO * USE GETCHAR TO WAIT FOR CHAR NWCHAR PSHS U JSR [POLCAT] BEQ NWCHAB PULS U LDX 0,U BEQ NWCHAA PSHS A,U JSR [PUTCAT] PULS A,U NWCHAA TFR A,B TFR D,X RTS NWCHAB PULS U LDX #0 RTS *\\PRTTOG\\ SET PRINTER ON OR OFF PRTTOG LDD 0,U STB PRTFLG,PCR RTS *\\PUTCHA\\ PUT CHAR TO STD OUT PUTCHA EQU * LDD 0,U TFR B,A LBSR ZPUTC TST PRTFLG BNE PXTCHR RTS PXTCHR LDD 0,U TFR B,A LBSR PROUT RTS PUTC LDD 2,U TFR B,A CMPA #10 BEQ PUTCA LBSR SYSOUT PUTCA LDX #1 RTS GETC LBSR SYSIN BEQ GETCB GETCA LDX #-1 RTS GETCB TFR A,B CLRA TFR D,X RTS ZLINEI LBSR GETLIN DEC BUFPNT+1 RTS ZGNCHR LBSR GNCHAR CMPA #$0D BNE ZZGNCH CLRA ZZGNCH RTS * FILE1 FDB SYSIN FCB FOR INPUT FILE INFILN FCB 1 FILE INPUT DEVICE FILE2 FDB SYSOUT FCB FOR OUTPUT FILE OUTFLN FCB 2 FILE OUTPUT DEVICE STDIN FDB ZGETC FCB FOR KEYBOARD FCB 3 INPUT DEVICE STDOUT FDB ZPUTC FCB FOR DISPLAY FCB 4 OUTPUT DEVICE PRINT FDB PROUT FCB FOR PRINTER FCB 4 * SUBROUTINE TO SET UP DEFAULT I/O * * ENTER HERE TO OPEN A FILE * B=FILE NUMBER, A='I FOR INPUT 'O FOR OUTPUT OPEN STB FILTYP SET FILE NUMBER LBSR OPNFIL RTS * ZERROR LEAX ERMSG,PCR LBSR OUTSTZ BRA ALLDON * ZWARMS EQU * ALLDON LBSR CLEARS CLEAR SCREEN JMP $C002 RETURN TO BASIC * * PEEK FUNCTION * * CALLING SEQ.- I=PEEK(MADR); * INPUT MADR= ADDRESS OF MEMORY TO EXAMINE * OUTPUT - THE CONTENT OF THE EXAMINED MEMORY * PEEK LDX [0,U] RTS * * POKE FUNCTION * * CALLING SEQ.= POKE(MADR,VAL); * INPUT: * MADR= MEMORY ADR TO FILL * VAL= VALUE TO PLACE IN MEMORY * POKE LDX 2,U LDD 0,U STB 0,X RTS * * RENAME FUNCTION * * RENAME(OLD,NEW) * INPUT: * OLD = CURRENT FILENAME SR * NEW = NEW FILENAME STR * RENAME LDA DEFDRV STA DRIVE LDX 2,U PSHU X LBSR FILMNM BEQ RENAMC LEAU 2,U LDA DRIVE PSHU A LDX 1,U PSHU X LBSR FILMNM BEQ RENAMB LEAU 2,U PULU A CMPA DRIVE BNE RENAMC PSHS U JSR FNDF PULS U TST FILSEC BNE RENAMD LDX 2,U PSHU X LBSR FILMNM LEAU 2,U PSHS U JSR FNDF PULS U TST FILSEC BEQ RENAMD LDX 0,U PSHU X LBSR FILMNM LEAU 2,U LDX #DFILNM LDY AFN LDB #11 RENAML LDA ,X+ STA ,Y+ DECB BNE RENAML LDB #3 STB FDCODE PSHS U JSR SVERF PULS U LDX #1 RENAMX RTS RENAMB PULU A RENAMC LEAU 2,U RENAMD LDX #0 BRA RENAMX * * PLACE FILE FROM STRING * INTO TRS DOS DISK FILENAME * STRING * FILMNM(STRING) * INPUT: * STRING= FILENAME STRINGADR * OUTPUT: * STATUS= 0-BAD 1-GOOD * * FILMNM LDY 0,U LDX #DFILNM LDB #11 LDA #$20 FILZZM STA ,X+ DECB BNE FILZZM LDX #DFILNM LDA DEFDRV STA DRIVE LDA 1,Y CMPA #'/ BEQ FALMNM CMPA #': BEQ FALMNM FLLMNM LDA 0,Y+ BEQ FXLMNM CMPA #': BEQ FBLMNM CMPA #'/ BEQ FBLMNM CMPA #'. BEQ FCLMNM STA 0,X+ BRA FLLMNM FXLMNM LDA DFILNM+8 CMPA #$20 BNE FGLMNM LDD #$5458 STD DFILNM+8 STA DFILNM+10 FGLMNM LDX #1 FHLMNM RTS FALMNM LDA 0,Y CMPA #'4 BGE FKLMNM CMPA #'0 BLO FKLMNM SUBA #'0 STA DRIVE LEAY 2,Y BRA FLLMNM FBLMNM LDA ,Y CMPA #'4 BGE FKLMNM CMPA #'0 BLO FKLMNM SUBA #'0 STA DRIVE BRA FXLMNM FCLMNM LDX #DFILNM+8 BRA FLLMNM FKLMNM LDX #0 BRA FHLMNM * * MAIN PROCESSOR * * REDIRECT OUTPUT TO PRINTER * RE-DIRECT INPUT DIRIN TFR X,D LDA #'I LBSR OPEN RTS * RE-DIRECT OUTPUT DIROUT LDD #$03FF STD DKTYPE TFR X,D LDA #'O OPEN TEXTFILE FOR OUTPUT LBSR OPEN RTS * GNCHAR BSR GCHAR CHECK NEXT CHAR. BEQ GCHAR DON'T PASS EOL CMPA #$D BEQ GCHAR INC BUFPNT+1,PCR BUMP POINTER TO NEXT CHAR BNE GCHAR INC BUFPNT GCHAR LDA [BUFPNT] RTS * * * OUTPUT STRING TO DISPLAY OUTST1 BSR ZPUTC OUTSTZ LDA ,X+ CMPA #4 BNE OUTST1 RTS * * EXTERNALLY REFERENCED PROCEDURES * * OUTPUT CHARACTER TO DISPLAY ZPUTC CLR FILTYP CMPA #7 BELL CHAR? BNE ZPUTC1 PSHS CC,X ANDCC #$EF INSURE IRQ ENABLED! LDD #$6405 PITCH:DURATION STA PITCH JSR SOUND PULS CC,X RTS * OUTPUT CHARACTER TO DEVICE SET ZPUTC1 BSR ZPZTCH RTS ZGETC CLR FILTYP FROM KEYBOARD BSR ZGZTCH PSHS A BSR ZPUTC ECHO THE INPUT PULS A,PC * * PRINTER OUTPUT PROUT PSHS B LDB #-2 STB FILTYP PULS B BRA ZPUTC1 * * FILE INPUT SYSIN PSHS B LDB INFILN,PCR STB FILTYP PULS B BRA ZGZTCH * * FILE OUTPUT SYSOUT PSHS B LDB OUTFLN,PCR STB FILTYP PULS B BRA ZPZTCH * FMS JMP ,X * * GET FILE NAME AND DRIVE GETSPC PSHS U JSR FILSPC PULS U RTS * * OUTPUT A CHARACTER ZPZTCH PSHS U JSR [CHROUT] PULS U RTS * * GET A CHARACTER ZGZTCH PSHS U JSR CHRIN TST IERR PULS U RTS * * CLOSE FILE NUMBER SET IN FILTYP CLOSE PSHS U JSR DKCLS PULS U RTS * * CLOSE ALL OPEN FILES CLSALL PSHS U JSR DKCLC PULS U RTS * * OPEN FILE IN COMMAND LINE WITH X = DEFAULT EXT OPNFIL PSHS U JSR DKOPEN PULS U RTS * * GET ADDRESS IN BASIC FORMAT (HEX OR DECIMAL) GETADR PSHS U JSR JXADDR PULS U RTS * * GET LINE OF INPUT GETLIN PSHS U LDX #THELIN STX BUFPNT JSR LINPUT PULS U RTS * * CLEAR SCREEN CLEARS PSHS U JSR CLRSCN PULS U RTS DSKFND PSHU A PSHS U JSR FINDFL PULS U TST FLFLFD BNE DSKAND FILE FOUND PULU A LDX #1 CMPA #2 BEQ DSKBND RTS DSKBND LDX #0 RTS DSKAND PULU A LDX #1 CMPA #1 BEQ DSKCND RTS DSKCND LEAX DELMSG,PCR PSHU X LBSR OT LBSR GETLIN LDX #THELIN LDA ,X LDX #0 ANDA #$5F CMPA #'N BNE DSKDND RTS DSKDND PSHS U JSR FLKILL KILL FILE PULS U LDX #1 RTS DELMSG FCC 'FILE EXISTS - KILL FILE(Y/N)? ' FCB EOL ERMSG FCB $D,7 FCC 'ERROR ' FCB 4 PRTFLG FCB 0 * END OF LIB MAIN EQU * END LDX #THELIN LDA ,X LDX #0 ANDA #$5F CMPA #'N BNE DSKDND RTS DSKDND PSHS U JSR FLKILL KILL FILE PULS U LDX #1 RTS DELMSG FCC 'FILE EXISTS - KILL FILE(Y/N)? ' FCB EOL ERMSG FCB $D,7 FCC 'ERROR ' FCB 4 PRTFLG FCB W FILENAME STR 010310* 010320RENAME LDA DEFDRV 010330 STA DRIVE 010340 LDX 2,U 010350 PSHU X 010360 LBSR FILMNM 010370 BEQ RENAMC 010380 LEAU 2,U 010390 LDA DRIVE 010400 PSHU A 010410 LDX 1,U 010420 PSHU X 010430 LBSR FILMNM 010440 BEQ RENAMB 010450 LEAU 2,U 010460 PULU A 010470 CMPA DRIVE 010480 BNE RENAMC 010490 PSHS U 010500 JSR FNDF 010510 PULS U 010520 TST FILSEC 010530 BNE RENAMD 010540 LDX 2,U 010550 PSHU X 010560 LBSR FILMNM 010570 LEAU 2,U 010580 PSHS U 010590 JSR FNDF 010600 PULS U 010610 TST FILSEC 010620 BEQ RENAMD 010630 LDX 0,U 010640 PSHU X 010650 LBSR FILMNM 010660 LEAU 2,U 010670 LDX #DFILNM 010680 LDY AFN 010690 LDB #11 010700RENAML LDA ,X+ 010710 STA ,Y+ 010720 DECB 010730 BNE RENAML 010740 LDB #3 010750 STB FDCODE 010760 PSHS U 010770 JSR SVERF 010780 PULS U 010790 LDX #1 010800RENAMX RTS 010810RENAMB PULU A 010820RENAMC LEAU 2,U 010830RENAMD LDX #0 010840 BRA RENAMX 010850* 010860* PLACE FILE FROM STRING 010870* INTO TRS DOS DISK FILENAME 010880* STRING 010890* FILMNM(STRING) 010900* INPUT: 010910* STRING= FILENAME STRINGADR 010920* OUTPUT: 010930* STATUS= 0-BAD 1-GOOD 010940* 010950* 010960FILMNM LDY 0,U 010970 LDX #DFILNM 010980 LDB #11 010990 LDA #$20 011000FILZZM STA ,X+ 011010 DECB 011020 BNE FILZZM 011030 LDX #DFILNM 011040 LDA DEFDRV 011050 STA DRIVE 011060 LDA 1,Y 011070 CMPA #'/ 011080 BEQ FALMNM 011090 CMPA #': 011100 BEQ FALMNM 011110FLLMNM LDA 0,Y+ 011120 BEQ FXLMNM 011130 CMPA #': 011140 BEQ FBLMNM 011150 CMPA #'/ 011160 BEQ FBLMNM 011170 CMPA #'. 011180 BEQ FCLMNM 011190 STA 0,X+ 011200 BRA FLLMNM 011210FXLMNM LDA DFILNM+8 011220 CMPA #$20 011230 BNE FGLMNM 011240 LDD #$5458 011250 STD DFILNM+8 011260 STA DFILNM+10 011270FGLMNM LDX #1 011280FHLMNM RTS 011290FALMNM LDA 0,Y 011300 CMPA #'4 011310 BGE FKLMNM 011320 CMPA #'0 011330 BLO FKLMNM 011340 SUBA #'0 011350 STA DRIVE 011360 LEAY 2,Y 011370 BRA FLLMNM 011380FBLMNM LDA ,Y 011390 CMPA #'4 011400 BGE FKLMNM 011410 CMPA #'0 011420 BLO FKLMNM 011430 SUBA #'0 011440 STA DRIVE 011450 BRA FXLMNM 011460FCLMNM LDX #DFILNM+8 011470 BRA FLLMNM 011480FKLMNM LDX #0 011490 BRA FHLMNM 011500* 011510* MAIN PROCESSOR 011520* 011530* REDIRECT OUTPUT TO PRINTER 011540* RE-DIRECT INPUT 011550DIRIN TFR X,D 011560 LDA #'I 011570 LBSR OPEN 011580 RTS 011590* RE-DIRECT OUTPUT 011600DIROUT LDD #$03FF 011610 STD DKTYPE 011620 TFR X,D 011630 LDA #'O OPEN TEXTFILE FOR OUTPUT 011640 LBSR OPEN 011650 RTS 011660* 011670GNCHAR BSR GCHAR CHECK NEXT CHAR. 011680 BEQ GCHAR DON'T PASS EOL 011690 CMPA #$D 011700 BEQ GCHAR 011710 INC BUFPNT+1,PCR BUMP POINTER TO NEXT CHAR 011720 BNE GCHAR 011730 INC BUFPNT 011740GCHAR LDA [BUFPNT] 011750 RTS 011760* 011770* 011780* OUTPUT STRING TO DISPLAY 011790OUTST1 BSR ZPUTC 011800OUTSTZ LDA ,X+ 011810 CMPA #4 011820 BNE OUTST1 011830 RTS 011840* 011850* EXTERNALLY REFERENCED PROCEDURES 011860* 011870* OUTPUT CHARACTER TO DISPLAY 011880ZPUTC CLR FILTYP 011890 CMPA #7 BELL CHAR? 011900 BNE ZPUTC1 011910 PSHS CC,X 011920 ANDCC #$EF INSURE IRQ ENABLED! 011930 LDD #((100)!<8)!+5 PITCH:DURATION 011940 STA PITCH 011950 JSR SOUND 011960 PULS CC,X 011970 RTS 011980* OUTPUT CHARACTER TO DEVICE SET 011990ZPUTC1 BSR ZPZTCH 012000 RTS 012010ZGETC CLR FILTYP FROM KEYBOARD 012020 BSR ZGZTCH 012030 PSHS A 012040 BSR ZPUTC ECHO THE INPUT 012050 PULS A,PC 012060* 012070* PRINTER OUTPUT 012080PROUT PSHS B 012090 LDB #-2 012100 STB FILTYP 012110 PULS B 012120 BRA ZPUTC1 012130* 012140* FILE INPUT 012150SYSIN PSHS B 012160 LDB INFILN,PCR 012170 STB FILTYP 012180 PULS B 012190 BRA ZGZTCH 012200* 012210* FILE OUTPUT 012220SYSOUT PSHS B 012230