OPT NOL *********************** REV EQU 0 * Set REV = 0 for DOS 1.0, =1 for DOS 1.1 *********************************************** * RADIO SHACK COLOR COMPUTER DOS * * IMPROVEMENTS AND MODIFICATIONS * * * * (C)1984 COLIN J. STEARMAN * *********************************************** * Patch #1 OPT NOG ******************** * COMMENT OUT THE NEXT LINE FOR A SERIAL PORT VERSION *(Controls conditional assembly) PARPRT EQU 1 ******************** ****DOS 1.0 PATCH ADDRESSES******* IFEQ REV A001 EQU $C028 A0001 EQU $C0D1 A0002 EQU $C108 A0003 EQU $C118 A0004 EQU $C124 A0005 EQU $C17D A0006 EQU $C570 A0007 EQU $C575 A0008 EQU $C58F A0009 EQU $C65F A0010 EQU $C6B8 A0011 EQU $C6CB A0012 EQU $C6CF A0013 EQU $C990 A0014 EQU $CA3B A0015 EQU $CB4A A0016 EQU $CBCF A0017 EQU $CBD5 A0018 EQU $CC26 A0019 EQU $CC41 A00195 EQU $CC44 A0020 EQU $CE2E A0021 EQU $CEE5 A0022 EQU $D169 A0023 EQU $D182 A0024 EQU $D18E A0025 EQU $D1AF A0026 EQU $D1E5 A0027 EQU $D446 A0028 EQU $D4AB A0029 EQU $D4B2 A0030 EQU $D571 A0031 EQU $D594 A0032 EQU $D670 A0033 EQU $D6CD A0034 EQU $D723 A0035 EQU $D7DD HITOKN EQU $E0 * Highest command token in DOS 1.0 ENDC ************** ****DOS 1.1 PATCH ADDRESSES****** IFGT REV A001 EQU $C02C A0001 EQU $C0E4 A0002 EQU $C11B A0003 EQU $C12B A0004 EQU $C137 A0005 EQU $C190 A0006 EQU $C59D A0007 EQU $C5A2 A0008 EQU $C5BC A0009 EQU $C68C A0010 EQU $C6E5 A0011 EQU $C6F8 A0012 EQU $C6FC A0013 EQU $CA3E A0014 EQU $CAE9 A0015 EQU $CC1C A0016 EQU $CCA9 A0017 EQU $CCAF A0018 EQU $CD00 A0019 EQU $CD1B A00195 EQU $CD1E A0020 EQU $CF0A A0021 EQU $CFC1 A0022 EQU $D256 A0023 EQU $D26F A0024 EQU $D27B A0025 EQU $D29C A0026 EQU $D2D2 A0027 EQU $D534 A0028 EQU $D599 A0029 EQU $D5A0 A0030 EQU $D65E A0031 EQU $D681 A0032 EQU $D761 A0033 EQU $D7C0 A0034 EQU $D816 A0035 EQU $D8D0 HITOKN EQU $E1 * Highest command token in DOS 1.1 ENDC ******************* * CHRVCT EQU A0008 OLD VECTOR JUMP NTRACK EQU $80 USE CASSETTE TEMP STORE ********************** * USES UNUSED(?) LOW RAM LOCATIONS ELINE EQU $76 LINE # CAUSING ERROR JLINE EQU $DC LINE TO JUMP TO ON ERROR ECODE EQU $5A ERROR CODE ********************** ZERO EQU $8A ZERO CONSTANT 16 BITS DATA EQU $FF26 PIA DATA REGISTER GETKEY EQU $A1B1 BASIC'S CURSOR/KEY ROUTINE RETURN EQU $B958 OUTPUTS A CARRIAGE RETURN SPACE EQU A0019 OUTPUT A SPACE CHROUT EQU $A282 OUTPUTS CHARACTER IN A STROUT EQU $B9A2 BASICS STRING OUTPUT X POINTS * TO STRING, B HAS CHAR COUNT DEVNUM EQU $6F OUTPUT DEVICE NUMBER HLDBFR EQU $1DA CASSETTE BUFFER FOR HOLD BASBFR EQU $2DD BASIC BUFFER HLDPTR EQU $1D7 IN CASSETTE FILE NAME BFR INSERT EQU $1D8 DITTO WHLINE EQU $1D9 DITTO BDFLAG EQU $95 BAUD RATE LOCATION USED AS * SERIAL/PARALLEL FLAG BAUDRT EQU $96 NORMAL SERIAL BAUD RATE LSB * NEXT 3 WORDS ARE IN CASSETTE FILE NAME LINNUM EQU $1D1 AUTO CURRENT LINE NUMBER INCNUM EQU $1D3 AUTO LINE INCREMENT LCOUNT EQU $1D5 USED IN DIR DELAY * there are 4 empty ram locations in the command *dispatch table terminator. they are $149/4A and * $14E/F. AUTOFG EQU $149 INTFLG EQU $14A RAM FLAG FOR REISSUED LINE DATUM EQU $14E USES TWO BYTES TO STORE DATE * * This section contains the overlays to patch in * the new commands, functions and revisions * * REMOVE AFTER BANNER ORG A0005 FCB 0 * **** PCLEAR PATCH **** ORG A001 SETS TABLE TO A0020 ORIGINALLY LDD #PCLEAR REPOINT TO NEW ROUTINE * IFEQ REV DOS 1.0 **** FILES PATCH **** ORG $D0E4 PATCH OVER EXISTING CODE JMP FILES DO EXTRA CODE ENDC * *** PATCH FOR NEW KEYBOARD ROUTINE **** ORG A0002 SETUP FOR JMP AT $16A FDB KEYBRD GOES TO NEW KEYBOARD RTN [REF 1] * [REF 1: Uncomment when FLEXIKEY code is installed] * DID HAVE A0008, JUMP TO THIS IF DEV CODE<>0 * **** ADD COMMANDS PATCH **** ORG A0001 JMP ADDCOM * ORG A0004 FDB ERCNCL [REF 2] * [REF 2: Uncomment when ERRORS code is installed] *PATCH INTO RUN COMMAND TO CANCEL ERROR JUMP *A0004 ORIGINALLY HAD A0013 ******* *PATCH IN FOR AUTO INPUT ORG A0003 FDB INPUT [REF 3] * [REF 3: Uncomment when AUTO code is installed] *A0003 DID HAVE $C6B7 WHICH JUST RETURNED *********************** ** DO A PAUSE AFTER EACH 15 LINES IN DIR ORG A0017 * INITIALIZE COUNTER JSR NOTBRK * ORG A0018 * DO PAUSE IN DIR JSR LINHLD * * ********************************** * PATCH TO ADD DATE TO FILE WHEN OPENING ORG A0006 JMP FILDAT PUT DATE INTO FILE ******* * PATCH FOR DSKINI EXTRA TRACKS ********************************* ORG A0030 CMPA 16? BHS FCERR YES, ERROR LDA #6 MULTIPLY BY 1536(1 SCREEN) MUL 6*256=1536 ADDB $BC ADD TO START OF TFR B,A 1SRT GRAPHIC SCREEN LDB #1 TFR D,Y COPY THIS+1 TO Y CMPD $B7 IS THIS PAGE RESERVED? BLO FCERR YES, SO ERROR SUBD $19 SUB. START OF BASIC TFR D,U SAVE VALUE TEMPORARILY ADDD $1B ADD END OF BASIC TFR D,X SAVE NEW END ADDRESS ADDD #200 STACK SIZE SUBD $21 STACK TOP ADDRESS BHS FCERR NO ROOM, ERROR BSR DIRECT CHECK IF DIRECT BEQ L1 YES SO DIRECT NO FIX TFR U,D RECOVER OFFSET ADDD $A6 REVISE PARSER POINTER STD $A6 AND SAVE IT L1 JMP $96B4 CONTINUE PCLEAR ROUTINE * *THIS CHECKS IF IN DIRECT MODE, Z=1 IF SO DIRECT PSHS X PRESERVE A AND B LDX $68 GET LINE NUMBER LEAX 1,X IS IT $FFFF? PULS X RECOVER D RTS ************************** IFEQ REV DOS 1.0 * PATCH FIXES A SIMILAR BUG * IN THE FILES COMMAND FILES SUBD <$1B END OF BASIC ADDRESS * D HAS OFFSET DUE TO MOVE OF BASIC PSHS A,B SAVE RESULTS BSR DIRECT CHECK IF DIRECT MODE BEQ SKIP YES SO DIRECT COMMAND LDD ,S GET D OFF STACK FIX OFFSET ADDD $A6 ADD TO PARSER POINTER STD $A6 SAVE IT SKIP PULS A,B RECOVER OFFSET ADDD <$19 ADD BASIC START ADDRESS JMP $D0E8 CONTINUE FILES CODE ENDC * FCERR JMP $B44A ?FC ERROR * ************************* *FILE DATE TO DIRECTORY FILDAT STA $976 FINISH WHAT WAS DOING STA 2,U DITTO LDD DATUM GET DATE STD 5,U PUT INTO BUFFER JMP A0007 CONTINUE OPENING FILE ************************* * DIR command revisions * * ******************************************** * directory output of file creation date LINHLD PSHS B SAVE GRANULE COUNT JSR $BDCC OUTPUT IT TO SCREEN JSR SPACE OUTPUT 1 SPACE PULS B RECOVER GRANULE COUNT CMPB #9 HOW MANY DIGITS? BHI ATCLM DONT NEED EXTRA SPACE JSR SPACE OUTPUT A SPACE ATCLM LDX 2,S GET DIRECTORY PNTR LDD 16,X GET DATE FROM DIRECTORY PSHS D SAVE VALUE LDB #8 SEE IF ROOM FOR STRING JSR $B50F WONT RETURN IF NOT *X POINTS TO STRING SPACE PULS D GET DATE AGAIN JSR DATOUT PUT DATE IN IT [REF 5] LDB #-8 CHARACTERS TO FIX OUTCHR LDA B,X GET CHARACTER JSR CHROUT OUTPUT IT INCB REDUCE COUNTER BNE OUTCHR DO SOME MORE ********************************* * DIRECTORY PAUSE TO SCREEN ONLY * TST DEVNUM CHECK IF TO SCREEN BNE CR DON'T PAUSE IF DIR NOT TO SCREEN DEC LCOUNT DECREASE CURRENT LINE COUNT BNE CR OUTPUT NEXT LINE WAIT JSR GETKEY GET KEYBOARD ENTRY BEQ WAIT IF NONE YET * CMPA #3 IS IT BREAK? BNE NOTBRK NO LEAS 4,S REMOVE OLD RETURN * AND X LEFT ON STACK * NOTBRK LDB #16 REST LCOUNT STB LCOUNT CR RTS ******************** ** PATCH DSKINI$ TO FORMAT UP TO 40 TRACKS ** SYNTAX IS DSKINI drive,number of tracks,skip factor ** NUMBER OF TRACKS IS 35 - 40, DEFAULTS TO 35 DSKINI LBEQ $A61F DN ERROR JSR A0022 CHECK FOR 0-3 DEVICE # LDB #35 DEFAULT # OF TRACKS JSR $A5 ANY MORE ON INPUT LINE? BEQ NOVALS NO MORE VALUES JSR $B738 GET TRACK VALUE NOVALS BSR TRKCHK CHECK FOR VALID DRIVE # * JMP A0029 RETURN TO REGULAR CODE * TRKCHK CMPB #35 LOWEST LEGAL VALUE BLO FCERR ?FC ERROR CMPB #40 HIGHEST LEGAL VALUE BHI FCERR ?FC ERROR STB NTRACK SAVE IN TEMP BUFFER RTS * ************************ **** PATCH TO BACKUP **** * BCKPAT PSHS B SAVE SOURCE DRIVE NO. LDB #35 DEFAULT TRACKS STB NTRACK SAVE DEFAULT VALUE PULS B RECOVER SOURCE DRIVE NO. JSR $A5 ANY MORE ON LINE? BEQ BUPOUT NO SO EXIT CMPA #', LOOK FOR A COMMA BEQ GTTRK YES SO GET NO OF TRACKS * LOOK FOR "TO" TOKEN LDB #$A5 "TO" TOKEN JSR $B26F CHECK FOR IT SN ERROR IF NOT JSR A0022 get second drive and check it * now we have second drive in b ************************ * NOW GET NO OF TRACKS GTTRK PSHS B PRESERVE SECOND DRIVE # JSR $A5 ANY MORE ON LINE? BEQ BUPEXT NO SO CONTINUE OLD CODE JSR $B738 PARSE , GET VALUE BSR TRKCHK FOR VALID DRIVE # BUPEXT PULS B RECOVER SECOND DRIVE VALUE BUPOUT JMP A0024 CONTINUE OLD CODE ********************** * REVISE KILL ROUTINE TO CHECK FOR ERASURE * KILLCK JSR A0009 CHECK FOR FILE JSR A0010 DID WE GET A MATCH? * WON'T RETURN HERE IF WE DIDN'T PSHS X,A,B SAVE REGISTERS JSR DIRECT only confirm in direct mode BNE NOCNF Dont confirm delete LDB #10 CHARACTER COUNT LDX #CHKMSG POINT TO MESSAGE JSR STROUT OUTPUT THIS JSR GETKEY GET ANSWER JSR CHROUT OUTPUT IT PSHS A SAVE IT JSR RETURN OUTPUT A CR PULS A GET RESPONSE CMPA #'Y IS IT YES BEQ CONFRM CONFIRM DELETION PULS X,A,B RTS EXIT AND DON'T DELETE CHKMSG FCC %SURE(Y/N)?% CNFMSG FCC /DELETED/ * CONFRM LDX #CNFMSG POINT TO CONFIRM MESSAGE LDB #7 CHARS IN IT JSR STROUT OUTPUT THIS JSR RETURN PLUS A CR NOCNF PULS X,A,B RECOVER REGS JMP A0012 CONTINUE KILL COMMAND ************************************** * COMMAND TABLE AND JUMP CODE * * ******************************************** * ADDED BASIC COMMANDS AND FUNCTIONS * ******************************************** * * * COMMAND TABLE * COMTBL FCC /COL/ FCB 'D+128 FCC /WPOK/ FCB 'E+128 FCC /FAS/ FCB 'T+128 FCC /SLO/ FCB 'W+128 FCC /XE/ FCB 'Q+128 FCC /AUT/ FCB 'O+128 FCC /SWA/ FCB 'P+128 FCC /ERROR/ FCB 'S+128 FCC /BAU/ FCB 'D+128 FCC /LDI/ FCB 'R+128 * IFDF PARPRT ASSEMBLE FOR PARALLEL PORT *KEEP THIS LAST IN LIST FOR TOKEN COMPATABILITY FCC /PARALLE/ [REF 6] FCB 'L+128 [REF 7] ENDC * [REF 6 & 7: If no conditional assembler and * parallel port is used, delete IFDF and ENDC * lines. If not used, delete all 4 lines.] * ***** * COMMAND JUMP TABLE * MUST BE IN SAME ORDER AS COMMANDS * CTABLE EQU * TABLE START COMDSP FDB COLD COLD RESTART FDB WPOKE FDB FAST FDB SLOW FDB XEQ FDB AUTO FDB SWAP FDB ERRCMD FDB BAUD FDB LDIR PRINT DIRECTORY * *KEEP THIS LAST IN LIST FOR TOKEN COMPATABILITY IFDF PARPRT ASSEMBLE FOR PARALLEL PORT FDB PARA [REF 8] ENDC * [REF 8: If no conditional assembler and * parallel port is used, delete IFDF and ENDC * lines. If not used, delete all 3 lines.]* CTBLEX EQU * TABLE END ***** NUMCMD EQU (CTBLEX-CTABLE)/2 NO. OF CMDS ******************************************** * FUNCTION TABLE * FUNTBL FCC /SCAN/ FCB '$+128 FCC /DATE/ FCB '$+128 FCC /ELIN/ FCB 'E+128 FCC /ECOD/ FCB 'E+128 IFEQ REV FCC /ENAME/ FCB '$+128 ENDC FCC /WPEE/ FCB 'K+128 ***** * FUNCTION JUMP TABLE * NTABLE EQU * FUNCTION TABLE START FUNDSP FDB SCAN FDB DATE FDB ERRLIN FDB ERRCOD IFEQ REV FDB ERNAME ENDC ARGMRK EQU * * put all functions without an argument above * this equate FDB WPEEK NTBLEX EQU * TABLE END ******* NUMFUN EQU (NTBLEX-NTABLE)/2 NO. OF FUNCTS ******************************************** * THIS IS EXECUTED DURING STARTUP * * Output revision banner ADDCOM LDX #BANNER-1 POINT TO BEFORE BANNER JSR $B99C USE BASIC'S OUTPUT ROUTINE *********************** CLR AUTOFG SET UP FOR NO AUTO CLR INTFLG OLD LINE REPEAT FLAG LDX #COMTBL POINT X TO COMMAND TABLE LDU #$13E START OF COMMAND VECTOR TABLE STX 1,U SAVE COMMAND TABLE ADDRESS LDA #NUMCMD GET NUMBER OF COMMANDS STA ,U SET IT IN TABLE LDX #COMCOD COMMAND CODE STX 3,U ************ LDA #NUMFUN GET NUMBER OF FUNCTIONS STA 5,U SAVE IT IN TABLE LDX #FUNTBL GET FUNCTION TABLE ADDRESS STX 6,U SAVE IT IN TABLE LDX #FUNCOD GET FUNCTION CODE ADDRESS STX 8,U CLR 10,U SET END OF TABLES FLAG LDX #$B277 ?SN ERROR STX 18,U STORE IN NEXT HOOK SLOTS STX 13,U FOR COMS & FUNCT. CLR 15,U SET TOKEN GROUP TO ZERO LDX ZERO STX 16,U CLEAR DATUM JSR RESET ERROR TRAP VALUES [REF 9-1] * REDIRECT ERRORS TO ERRTRP BY CHANGING JUMP ADDRESS *AT $18F LDD #ERRTRP [REF 9-2] STD $18F [REF 9-3] * [REF 9: Uncomment when ERRORS code is installed] * IFDF PARPRT DO FOR PARALLEL [REF 10] * [REF 10 & 11: If no conditional assembler and * parallel port is used, delete IFDF and ENDC * lines. If not used, delete these and * all lines in between.] * REDIRECT CALLS FOR OUTPUT VIA [A002] A282 * TO ALLOW PARALLEL PORT OPERATION. LDD #PAROUT PARALLEL PORT ROUTINE STD $168 * NOW INITIALIZE PARALLEL PORT ********************************************* * BASIC PATCH FOR PARALLEL OUTPUT ********************************************* * * * THE UART BAUD RATE MSB ($95) IS SET TO I TO * ACTIVATE THE PARALLEL INTERFACE. SET TO ZERO * FOR THE SERIAL OUTPUT. THIS MEANS 300 BAUD AND * HIGHER WILL ACTIVATE THE SERIAL PORT, 110 OR LOWER * WILL ACTIVATE THE PARALLEL PORT. * THIS IS THE DEFAULT CONDITION. ***************************************** * PIA LAYOUT * BIT 0 UNUSED INPUT * BIT 1 UNUSED INPUT * BIT 2 UNUSED INPUT * FF24 BIT 3 UNUSED INPUT * BIT 4 UNUSED INPUT * BIT 5 UNUSED INPUT * BIT 6 UNUSED INPUT * BIT 7 PRINTER BUSY=1 * FF25 SET TO $4 FOR ALL INPUTS * BIT 0 PARALLEL OUTPUT * BIT 1 PARALLEL OUTPUT * BIT 2 PARALLEL OUTPUT * FF26 BIT 3 PARALLEL OUTPUT * BIT 4 PARALLEL OUTPUT * BIT 5 PARALLEL OUTPUT * BIT 6 PARALLEL OUTPUT * BIT 7 PARALLEL OUTPUT * FF27 SET TO $2C FOR OUTPUTS & CB2 *BUSY IS ALSO CONNECTED TO CB1 BUT NOT USED *PIA DETECTS BUSY TO NOT BUSY TRANSITION * * SET UP PIA FOR PARALLEL PORT LDX #DATA POINT X TO PIA LDA #$FF STA ,X SET DATA DIRECTION REG TO $FF LDA #$2C SET FOR AUTO STROBE STA 1,X CONTROL REGISTER LDA #$4 SET UP BUSY PIA STA -1,X POINT FF24 TO DATA REG * SET UP OF PIA COMPLETE * SET UP DEFAULT BAUD RATE LDD #$1CA BASICS 120 BAUD STD BDFLAG SET VALUE ENDC END CONDITIONAL [REF 11] *********************** *RUN AUTOEXEC FILE * LDX #AUTFIL POINT X TO COMMAND LINE LDU #$2DD BASIC INPUT BUFFER LDB #FILEND-AUTFIL NUMBER OF CHARACTERS PSHS B,U SAVE COUNT AND BUFFER PNTR JSR $A59A MOVE X TO U B BYTES LDA #$55 WARM FLAG STA $71 SET IT JSR $B95C SET O/P PARAMETERS PULS B,X CHAR COUNT $ BUFR PTR IN X LEAX -1,X BACK OFF POINTER JMP $AC7F STARTUP BASIC *RETURN TO BASIC ROM AUTFIL FCS /RUN"AUTOEXEC"/ 0 BYTE ENDED FILEND EQU * BANNER FCS /REV(C)1984 C.STEARMAN<0D><0D>/ ******************************************** * COMMAND CODE *This is executed during token interpretation * to jump to correct code * COMCOD CMPA #HITOKN+NUMCMD HIGHEST LEGAL CODE BLS GOODVL GOT A GOOD VALUE * SNERR JMP >$B277 ?SN ERROR JUMP * GOODVL LDX #COMDSP POINT TO DISPATCH TABLE SUBA #HITOKN+1 LOWEST TOKEN IN RANGE * MAKES A HAVE OFFSET INTO DISPATCH TABLE JMP >$ADD4 CALCULATE AND EXECUTE IT ******************************************** * FUNCTION CODE *This is executed during token interpretation * to jump to correct code * FUNCOD CMPB #$4E+(2*NUMFUN) BHI SNERR BAD CODE SUBB #$50 LOWEST FUNCTION NUMBER CMPB #ARGMRK-NTABLE-2 Number of functions not * requiring an argument, X 2 +2 * *ACTUAL TOKEN IS 50/2 + 80 = A8 BLE NOARG FIRST FUNCTIONS HAVE * NO ARGUMENT *ALL OTHERS DO AND ITS OBTAINED * FIRST HERE PSHS B SAVE TOKEN OFFSET JSR $B262 EVAL BRACKETTED ARGUMENT PULS B RESTORE OFFSET NOARG LDX #FUNDSP POINT TO FUNCT. DISPATCH TABLE JMP $B2CE GO LOOKUP AND JUMP ****************************************** *COLD RTS [REF 12] *WPOKE RTS [REF 13] *FAST RTS [REF 14] *SLOW RTS [REF 15] *XEQ RTS [REF 16] *AUTO RTS [REF 17] *ERRCMD RTS [REF 18] *SWAP RTS [REF 19] *BAUD RTS [REF 20] *LDIR RTS [REF 21] *PARA RTS [REF 22] *SCAN RTS [REF 23] *DATE RTS [REF 24] *ERRLIN RTS [REF 25] *ERRCOD RTS [REF 26] *ERNAME RTS [REF 27] *WPEEK RTS [REF 28] *PAROUT RTS [REF 29] ********************************************* * PATCH #2 to RSDOS (C)1984 Colin Stearman * ********************************************* * ****************************************** * FLEXIKEY ** BASIC LAST LINE RE-ENTRY AND EDIT ROUTINE * This is not a callable command, but a set of * direct commands from the keyboard, to allow access * to the last command entered. It is designed to * work only when called from BASIC and does not * interfere with the EDIT commands. * COMMANDS ARE: * * LEFT ARROW - output next character of old line * SHIFT/LEFT ARROW- output rest of old line * SHIFT/UP ARROW - insert, no old line increment * DOWN ARROW - delete next character in buffer * SHIFT/@ - store line input so far. * No interpretation * ****************************************** * GENERAL PRINCIPLE OF OPERATION: * * To allow access to special keyboard entries the * RAM hook at $16A is modified to go to this routine. * If the device is 0, the keyboard, * the key and cursor are obtained and output from * here. The special keys interpreted and characters * are drawn from this as required. One permanent RAM * location is used to indicate the need to initialize * pointer. * * At the end the old return is removed from the stack * so it is not taken. This allows the input * handling routine to handle the character as normal. * * Because SHIFT/UP ARROW & SHIFT/RIGHT ARROW are also * used to create the left arrow and ], these are * now obtained by pressing SHIFT/CLEAR first. * As this is the backslash this can be obtained by * pressing SHIFT/CLEAR twice. * * FLAGS: * INTFLG 0 = line in BASIC buffer just stored * FF = line in hold buffer in use * HLDPTR zero-based pointer into hold buffer * INSERT 0 = Insert mode off * FF = Insert mode on * WHLINE 0 = SHIFT/RIGHT ARROW not previously pressed * FF = SHIFT/RIGHT ARROW previously pressed * ********************************************** * KEYBRD LDA DEVNUM BEQ KEY DEVICE IS KEYBOARD * SEE IF CASSETTE I/O GOING ON CMPA #-1 CASSETTE DEVICE CODE BNE JMPOUT NOT CASETTE SO DO NOTHING LDA #1 STA INTFLG MAKE FLAG POSITIVE JMPOUT JMP CHRVCT CONTINUE OLD CODE ********************************************** * KEY PSHS B,X PRESERVE REG VALUES LDX 7,S SEE IF CALLED FROM IDLE LOOP CMPX #$A39D IDLE LOOP CALL RETURN ADDRESS BEQ INIDLE IN THE IDLE LOOP PULS B,X FLAGS NOT AFFECTED BRA JMPOUT IS NOT IDLE LOOP * THIS ENTRY LINE RECALL WILL ONLY FUNCTION * WHEN IN THE BASIC IDLE LOOP * INIDLE CLR $70 FLAG BUFFER FLUSHED TST INTFLG HAVE WE BEEN HERE SINCE * LAST ? BEQ GETTKN NO CLEAR THE FLAGS * YES SEE IF CASSETTE I/O JUST DONE BMI TESTWH NO SO CONTINUE CLR HLDBFR SET FIRST BYTE IN HOLD=0 CLR INTFLG READY FOR COMPLEMENTING BRA GETTKN GO CLEAR FLAGS * * * FIRST TIME THROUGH SINCE SO SET UP GETTKN COM INTFLG SET FLAG TO $FF * CLEAR FLAGS RENTER CLR HLDPTR CLR INSERT CLR WHLINE * * READ CHARACTER FROM KEYBOARD * KYREAD JSR GETKEY RETURNS KEY IN A * * NOW SEE WHAT WE GOT * CMPA #$09 RIGHT ARROW next character BEQ GETCHR GO DO IT CMPA #$5D SHIFT/RT ARROW rest of line BNE J1 NOT THIS COM WHLINE SET WHOLE LINE FLAG BRA GETCHR GET NEXT BUFFER CHARACTER J1 CMPA #$5F SHIFT/UP ARROW insert toggle BNE J2 NOT THIS COM INSERT TOGGLE INSERT FLAG * * SEE IF SHIFT/RT ARROW PREVIOUSLY PRESSED TESTWH TST WHLINE OUTPUT WHOLE LINE IF SET BEQ KYREAD NO SO READ KEYBOARD ************************************** * GET CHARACTER FROM HOLDING BUFFER GETCHR CLR INSERT RESET INSERT FLAG LDB HLDPTR GET POINTER LDX #HLDBFR POINT X TO HOLDING BUFFER LDA B,X GET CHARACTER BNE GOODCH * ALL BUFFER IS OUT CLR WHLINE RESET POINTER BRA KYREAD IGNORE * GOT GOOD CHARACTER GOODCH INC HLDPTR MOVE PAST CHARACTER BRA EXIT AND RETURN WITH IT ************************** J2 CMPA #$13 SHIFT/@ close line BEQ LINCLS GO TO LINE CLOSE CMPA #$0D RETURN enter BEQ ENTER CMPA #$08 BACKSPACE delete last char BEQ J4 CMPA #$0A DOWN ARROW delete next char BNE J3 JSR INCPTR INCREASE HOLD POINTER BRA KYREAD JUMP BACK TO KEY READING * * HANDLE BACKSPACE IF INSERT OFF * DECREASE HLDPTR J4 TST INSERT BNE CONXIT ON SO DON'T DECREMENT BSR DECPNT CONDITIONAL DECREMENT HLDPTR BRA CONXIT GO TO CONDITIONAL EXIT ****** DECPNT TST HLDPTR BEQ ATZERO ALREADY ZERO DEC HLDPTR REDUCE HLDPTR BY ONE ATZERO RTS ****** J3 CMPA #$15 SHIFT/BCKSP clear to start BEQ CLRPNT GO CLEAR HLDPTR CMPA #$0C CLEAR BEQ CLRPNT DITTO CMPA #$03 BREAK BEQ CLRPNT YES SO RESET HLDPTR AND EXIT CMPA #$5C SHIFT/CLEAR special insert BNE CONXIT NO SO CONDITIONALLY EXIT JSR GETKEY GET ANOTHER KEY BRA CONXIT AND CONDITIONALLY EXIT ********* CLRPNT CLR HLDPTR CLEAR HLDPTR ********* CONXIT CMPA #$20 CHECK FOR CONTROL CHARACTER BLO EXIT EXIT FROM ROUTINE * PRINTABLE CHARACTER SO SEE IF INSERT ON TST INSERT BNE EXIT BSR INCPTR INCREMENT HLDPTR EXIT PULS B,X RECOVER INCOMING VALUES LEAS 2,S CLEAN OLD RETURN OFF RTS RETURN TO BASIC CALL ********** INCPTR LDX #HLDBFR POINT TO HOLDING BUFFER LDB HLDPTR TST B,X GET CHARACTER IN HOLD BEQ ZEROBT ZERO BYTE SO AT AT END INC HLDPTR ZEROBT RTS *********************************** * DO SHIFT/@ LINE CLOSE LINCLS CLR [1,S] ZERO OUT LAST BYTE * 1,S IS X, THE PNTR IN THE BASIC INPUT BFR * LDA #'@ LOAD @ SIGN JSR CHROUT OUTPUT IT JSR RETURN OUTPUT CARRIAGE RETURN LDB #1 RESET BASICS CHARACTER COUNT STB ,S ON STACK LDX #BASBFR ALSO BUFFER POINTER STX 1,S ALSO ON STACK BSR MOVBLK TRANSFER INPUT BUFFER TO HOLD JMP RENTER RESET AND START OVER ************************************** * DO ENTER ENTER CLR INTFLG INDICATE BASIC BUFFER CHANGED * * CLEAR LAST BYTE IN BASIC INPUT BUFFER * FOR MOVE CODE TO DETECT IT CLR [1,S] BSR MOVBLK TRANSFER INPUT BUFFER TO HOLD JMP EXIT AND LEAVE ************************************** * COPY BASIC INPUT BUFFER TO HOLD UNTOKENIZED MOVBLK LDX #BASBFR GET START OF BASIC BUFFER LDY #HLDBFR GET START OF HOLD BUFFER DOMORE LDB ,X+ STB ,Y+ BNE DOMORE NOT A ZERO BYTE YET RTS ****************************************** ********************************************* * PATCH #3 to RSDOS (C)1984 Colin Stearman * ********************************************* * ****************************************** * "COLD" performs a cold restart COLD CLR $71 RESET COLD FLAG JMP $A027 RESTART BASIC ************************ * "WPOKE" COMMAND WPOKE JSR $B73D GET 1ST ARGUMENT 0 TO FFFF STX $2B & SAVE TEMPORARILY JSR $B26D PARSE OVER REQUIRED COMMA JSR $B73D GET SECOND ARGUMENT STX [$2B] DO DOUBLE POKE RTS RETURN TO BASIC ************************* * "FAST" * FAST STA 65495 SPEED UP PROCESSOR RTS ********************* * "SLOW" * SLOW STA 65494 SLOW DOWN PROCESSOR RTS ******************** * "XEQ" COMMAND XEQ CMPA #'M XEQM? BEQ XEQM YES JMP $AE75 NO - SAME AS RUN XEQM JSR A0021 DO LOADM CLR $FF40 STOP DRIVE MOTOR JMP [$9D] EXEC *************************************** * "AUTO n,i" * AUTO JSR DIRECT CURRENT BASIC LINE # BNE SYNERR SYNTAX ERROR LDD #$0A DEFAULT LINE # STD LINNUM SAVE IT STD INCNUM SAVE IT FOR INCREMENT TOO JSR <$A5 ANY MORE ON LINE? BEQ NOMORE JSR $B73D EVALUATE ARGUMENT LDD <$52 GET IT IN D STD LINNUM OVERRIDE DEFAULT LINE # JSR <$A5 ANY MORE VALUES? BEQ NOMORE JSR $B26D PARSE COMMA JSR $B73D EVALUATE IT LDD <$52 GET IT IN D BEQ SYNERR CANNOT BE ZERO STD INCNUM OVERRIDE DEFAULT JSR <$A5 ANY MORE ON LINE? BNE SYNERR ERROR IF SO NOMORE LDA #$FF SET UP AUTO FLAG STA AUTOFG RTS ALL DONE *********************** * This is the trap routine to see if in * AUTO mode * INPUT TST AUTOFG AUTO MODE? BEQ INEXIT ******* DOAUTO LDD LINNUM GET LAST LINE NUMBER CMPD #$F9FF TOO HIGH? BLS NOTHI CLR AUTOFG RESET FLAG INEXIT RTS RETURN * ******* NOTHI CLR $87 INKEY STORE CLR $70 FLAG BUFFER FLUSHED STD ,S D SAVE CURRENT VALUE OVER RETURN ADDD INCNUM INCREMENT IT STD LINNUM AND SAVE IT PULS D GET OLD VALUE OFF STACK JSR $BDCC DISPLAY NUMBER LDA #$20 SPACE JSR CHROUT DISPLAY IT LDU #$3DA WHERE CONVERTED # IS LDX #BASBFR POINT TO BASIC BUFFER CLRB SET UP CHARACTER COUNTER ILOOP LDA ,U+ GET FIRST CHAR BEQ GOTNUM GET ALL NUMBERS STA ,X+ MOVE TO BUFFER INCB COUNTER UP BRA ILOOP CONTINUE * JUMP IS HERE SO EVERYONE CAN GET IT WITHOUT * LONG BRANCHING SYNERR JMP SNERR * GOTNUM LDA #$20 SPACE STA ,X+ SAVE IT AT BUFFER END INCB COUNT IT JSR $A171 READ A CHARACTER CMPA #$0D RETURN? BEQ ENDAUT END AUTO FUNCTION CMPA #$03 BREAK? BNE INDONE NOT SPECIAL SO EXIT ENDAUT CLR AUTOFG RESET FLAG LDD #$0D01 GET A RETURN IN A, 1 CHR IN B LDX #BASBFR POINT TO BUFFER START INDONE JMP $A39D CONTINUE BASIC LOOP ********************* * "SCAN" * SCAN LDA $87 HAS A KEY BEEN PRESSED? BNE GOTKEY YES, RETURN WITH CODE KSCAN JSR $A1C1 NO CALL KEY SCAN BEQ KSCAN KEEP LOOKING GOTKEY JMP $A56B RETURN A 1 CHAR. STRING *********************** * * "DATE$" * DATE LDB #8 CHARACTERS IN MM/DD/YY JSR $B50F VERIFY SPACE AVLBLE, ALLOCATE * X IS RETURNED WITH ADDRESS OF STRING START BSR DATGET PUT CURRENT DATE AT 8 JMP $B69B EXIT VIA STRING$ CODE ********* * DATGET PUTS MM/DD/YY AT ADDRESS IN X BASED UPON * VALUE AT DATUM. DATE IS STORED AS FOLLOWS: * 15 - 9 8 - 5 4 - 0 * YEAR (MOD1900) MONTH DAY DATGET LDD DATUM GET DATA FOR MONTH * ENTER BELOW WITH DATE ALREADY IN D DATOUT PSHS D SAVE ON STACK LSRA GET UPPER BIT IN CARRY RORB MOVE DOWN LSRB MOVE DOWN LSRB MOVE DOWN LSRB MOVE DOWN LSRB MOVE DOWN BSR DECODE PUT CHARACTERS IN BUFFER LDA #'/ STA ,X+ LDB 1,S GET DAY ANDB #%00011111 MASK OFF MONTH BSR DECODE LDA #'/ STA ,X+ LDB ,S GET UPPER BYTE LSRB POSITION YEAR DATA BSR DECODE GET CHARACTERS IN A,B LEAS 2,S REMOVE DATE FROM STACK RTS * DECODE CLRA SET UP TENS COUNTER SUBTEN SUBB #10 REDUCE BY TEN BLO GOTTEN EXIT AS WENT NEG INCA INCREMENT TENS BRA SUBTEN CONTINUE SUBTRACTING * GOTTEN ADDB #10+'0 RESTORE UNITS AND ADDA #'0 TENS TO ASCII STD ,X++ SAVE IN BUFFER RTS ******************************************* * "WPEEK" * *WPEEK RETURNS 2 BYTES WPEEK JSR $B740 INTEGERIZE PARSED VALUE LDD ,X DO DOUBLE PEEK UNSIGN STD $52 JMP $880E SEND INSIGNED # TO VARIABLE ************************* OPT LIS ********************************************* * PATCH #4 to RSDOS (C)1984 Colin Stearman * ********************************************* * * "BAUD" COMMAND CODE * SYNTAX IS BAUD(N) WHERE N = * 300,600,1200,2400,4800,9600 * BDCNST FCB $BE,$57,$29,$12,$6,$1 300,600,1200,2400 * 4800,9600 BAUD CONSTANTS * * BAUD JSR $B262 EVAL BRKT ARGUMENT JSR $B740 GET INTEGER IN X CLR ,-S FOR COUNTER TFR X,D GET BAUD VALUE CMPD #9600 HIGHEST LEGAL VALUE LBHI FCERR ERROR IF HIGHER CNTBD INC ,S COUNT SUBTRACTION SUBD #300 DIVIDE BAUD BY 300 LBMI FCERR NOT A VALID VALUE BNE CNTBD CONTINUE SUBTRACTION * GOT A VALID MULTIPLE OF 300 PULS A GET RESULT CLRB POWER COUNTER LDX #BDCNST POINT X TO BAUD CONSTANTS SFTAGN LSRA BIT INTO CARRY BCS GETCON GOT BIT GET CONSTANT INCB COUNT SHIFT BRA SFTAGN GO SHIFT AGAIN GETCON LDA B,X GET BAUD RATE STA BAUDRT SET BAUD RATE CLR BDFLAG CLEAR TO ENABLE SERIAL PORT * AND SET LSB OF BAUD RATE * RTS ALL DONE ******************************************** * "LDIR" COMMAND, PRINT DIRECTORY * LDIR LDB #-2 POINT DEVNUM TO PRINTER STB DEVNUM JMP A0016 DO DIR COMMAND ******************************************** IFDF PARPRT ASSEMBLE FOR PARALLEL PORT * * "PARALLEL" COMMAND CODE AND OUTPUT ROUTINE PARA LDD #$1CA 120 BAUD DELAY * SET MSB TO 1 FOR PARALLEL PORT STD BDFLAG TO MAKE PARALLEL ACTIVE RTS ********** * Parallel port output routine * This is called by the modified jump at $168 PAROUT TST BDFLAG IF NOT ZERO THEN PARALLEL LBEQ A0015 DO SERIAL OUTPUT PSHS A SAVE VALUE LDA DEVNUM GOING TO DEVICE -2? CMPA #-2 PULS A RECOVER CHAR, FLAGS DONT CHANGE LBNE A0015 NOT DOING DEVICE #-2 * * PARALLEL OUTPUT WANTED CMPA #$0D WAS IT A CR? BEQ WASCR INC <$9C INCREMENT LINE PRINT POSITION FCB $8C SKIP NEXT 2 BYTES WASCR CLR <$9C LINE COUNTER PSHS CC,X PRESERVE BASIC VALUES LDX #DATA POINT X TO PIA CHKRDY TST -2,X BUSY IF LINE 7 HI BMI CHKRDY WAIT UNTIL LOW STA ,X DATA REGISTER PULS CC,X RECOVER VALUES LEAS 2,S OLD RETURN OFF STACK RTS TO ORIGINAL CALLER ********* ENDC OPT LIS ********************************************* * PATCH #5 to RSDOS (C)1984 Colin Stearman * ********************************************* * ********************* * "SWAP" * * CODE FOR SWAP COMMAND SYNTAX IS SWAP V1,V2 * WHERE V1 AND V2 ARE LIKE VARIABLE TYPES * SWAP JSR $B357 GET FIRST STRING POINTER LDA <6 TYPE 0=NUMBER -1=STRING PSHS X,A SAVE ON STACK JSR $B26D PARSE REQUIRED COMMA JSR $B357 GET 2ND STRING POINTER IN X * NOW TEST THAT BOTH VARIABLES ARE SAME TYPE PULS A RECOVER FIRST TYPE CMPA <6 CHECK FOR SAME AS SECOND * NOT SAME TYPE SO ISSUE ?TM ERROR LBNE $B151 TYPE MISMATCH * SAME TYPE SO SWAP POINTER INFO PULS U ONE IN X, OTHER IN U LDB #5 COUNTER SWAP5 LDA ,X GET VALUE AT X PSHS A PRESERVE IT LDA ,U GET VALUE AT U STA ,X+ PUT AT X PULS A GET ORIGINAL AT X STA ,U+ PUT AT U DECB REDUCE COUNTER BNE SWAP5 CONTINUE SWAPPING RTS ************************* * "ERRORS" Command * Executed when the ERRORS command is encountered * ERRCMD LDB #$81 CHECK "GO" JSR $B26F NOT THEN SYNTAX ERROR LDB #$A5 CHECK "TO" JSR $B26F NOT THEN SYNTAX ERROR JSR $AF67 PROCESS LINE # INTO $2B LDD <$2B GET THE LINE # STD JLINE SAVE IT ** IF ZERO THEN CLEAR TRAPPING BEQ ERRSET ** CHECK FOR VALID LINE NUMBER LDD $A6 GET PARSER POINTER PSHS D SAVE ON STACK JSR $AEA9 CHECK VALID NUMBER *IF WE GOT BACK HERE IT'S OK PULS D RESET PARSER POINTER STD $A6 RTS ************************ * ERROR TRAPPING AND HANDLING ROUTINE * * this code is executed when an error is * encountered by BASIC from jump at $18F * ERRTRP JSR DIRECT CURRENT LINE BEQ NOTRAP SO DONT TRAP IT LDX JLINE GET ERRLINE JUMP BEQ NOTRAP SO DONT TRAP IT ******** * WE WANT TO TRAP ERROR NOW B HAS ERROR CODE *2 * IF AN OD ERROR THEN THEN ADDRESS AT $2B NEEDS * PUTTING AT $A6 BECAUSE READ MOVED IT TO SCAN * THE DATA STATEMENTS * CMPB #$6 OD ERROR NUMBER BNE NOREAD NOT A OD ERROR LDX $2B GET POINTER STX $A6 PUT IT IN PARSER NOREAD LSRB DIVIDE BY 2 STB ECODE CODE ADDRESS LDX <$68 CURRENT LINE STX ELINE ERRLINE ADDRESS LDX JLINE GET ERROR GOTO LINE # STX <$2B PREPARE TO GO TO IT LDS <$21 CLEAN STACK LDD #$ADC4 RETURN TO INTERPRET LOOP PSHS D PUT ONTO STACK CLR DEVNUM RESET DEVICE CODE JMP $AEA9 GO TO NEW LINE **** *PROCESS NO TRAP NOTRAP BSR ERRSET RESET ERROR CODE * IFGT REV <---- JMP $AC49 | DOS 1.1 only ENDC <---- * IFEQ REV <---- * Process new error display | JSR A0026 CLEAR DISK SYSTEM | PSHS B PRESERVE ERROR CODE | JSR A0014 MORE DISK SHUTDOWN | PULS B GET ERROR CODE BACK | JSR $A7E9 MOTOR OFF | JSR $AD33 RESET STACK ETC. | CLR DEVNUM REST TO SCREEN | JSR $B95C OUT RETURN IF NEEDED | LSRB DIVIDE ERROR CODE BY 2 | BSR ERFIND FIND ERROR MESSAGE | * OUTPUT NEW ERROR MESSAGE | JSR STROUT OUTPUT IT | JMP $AC65 PRINT " ERROR" ETC. | DOS 1.O only ******* | * error message finder | * B has error count/2 coming in | * HAS CHARACTER COUNT COMING OUT | * X HAS POINTER TO FIRST CHAR | ERFIND TFR B,A MOVE ERROR CODE TO A | LDX #ERR0 POINT X TO MSG #0 | CLRB DONT AFFECT X FIRST TIME | KPLOOK ABX ADD COUNT TO ERROR ADDRESS | LDB ,X+ GET CHARS IN MESSAGE | DECA DECREASE ERROR COUNT | BPL KPLOOK KEEP LOOKING | RTS | ENDC <---- ******************************** * CLEAR ERROR TRAPPING ON RUN ERCNCL BSR ERRSET JMP A0013 ******************************** * THIS CODE RUNS ON A COLD START AND RESETS ALL * DRIVES TO TRACK ZERO AND RESETS ERROR TRAPPING * * Reset drive 0-1 to track zero RESET CLR $EA RESTORE OPCODE =0 LDB #1 NUMBER OF DRIVES-1 STB $EB DRIVE NUMBER NXTDRV BSR HOME DO RESTORE TO TRACK 0 WITH 1 RETRY DEC $EB NEXT DRIVE BPL NXTDRV * * * Clears ERROR trapping * ERRSET PSHS D,X SAVE REGS LDX ZERO STX JLINE LDD #$FFFF STD ELINE STA ECODE PULS D,X RECOVER REGS RTS ******** * restore drive head with no retries HOME PSHS A,B,X,Y,U LDA #1 RETRY COUNT 1= NO RETRIES JMP A0032 RESTORE CODE ENDS WITH AN RTS ******************************************** * * "ELINE" * ERRLIN LDD ELINE CMPD #$FFFF IF $FFFF NOT SET? LBNE UNSIGN YES IT IS SIGNED JMP $B4F4 RETURN AS SIGNED VALUE (-1) *********************** * * "ECODE" * ERRCOD CLRA LDB ECODE *IF MINUS THEN IT IS -1 AND THEREFORE UNSET LBPL UNSIGN OUTPUT UNSIGNED # TO VARIABLE SEX MAKE D HAVE VALUE IN B BRA SIGNED OUTPUT TO VARIABLE(-1) ************************** IFEQ REV <---- * ENAME$ | ERNAME LDB ECODE GET ERROR CODE | BPL GETNM GET ERROR NAME STRING | CLRB FOR NULL STRING LENGTH | FCB $A1 SKIP NEXT INSTRUCTION | * | GETNM JSR ERFIND RETURNS X AT ERROR NAME | * B WITH COUNT | TFR X,U SAVE ERROR STRING POINTER | JSR $B50F CHECK FOR AVAILABLE SPACE | *X NOW HAS STRING START ADDRESS | BEQ STREXT NULL LENGTH STRING | EXG X,U SWAP THE POINTERS | JSR $A59A MOVE STRING | STREXT JMP $B69B RETURN VIA STRING$ CODE | ******************************************* | * | * ERROR MESSAGES | * | * FORMAT IS CHARACTER COUNT/CHARACTERS | * | ERR0 FCB ERR1-(*+1) | FCC /NEXT WITHOUT FOR/ | ERR1 FCB ERR2-(*+1) | FCC /SYNTAX/ | ERR2 FCB ERR3-(*+1) | FCC /RETURN WITHOUT GOSUB/ | ERR3 FCB ERR4-(*+1) | FCC /OUT OF DATA/ | ERR4 FCB ERR5-(*+1) | FCC /FUNCTION CALL/ | ERR5 FCB ERR6-(*+1) | FCC /OVERFLOW/ | ERR6 FCB ERR7-(*+1) | FCC /OUT OF MEMORY/ | ERR7 FCB ERR8-(*+1) | FCC /NO SUCH LINE #/ | ERR8 FCB ERR9-(*+1) | FCC /SUBSCRIPT/ | ERR9 FCB ERR10-(*+1) | FCC /REDIMENSIONED ARRAY/ | ERR10 FCB ERR11-(*+1) | FCC /DIVIDE BY 0/ | ERR11 FCB ERR12-(*+1) | FCC /ILLEGAL DIRECT COMMAND/ | ERR12 FCB ERR13-(*+1) | FCC /TYPE MISMATCH/ | ERR13 FCB ERR14-(*+1) | FCC /OUT OF STRING SPACE/ | ERR14 FCB ERR15-(*+1) | FCC /STRING TOO LONG/ | ERR15 FCB ERR16-(*+1) | FCC /STRING TOO COMPLEX/ | ERR16 FCB ERR17-(*+1) | FCC /CAN'T CONTINUE/ | ERR17 FCB ERR18-(*+1) | DOS 1.0 only FCC /FILE DATA/ | ERR18 FCB ERR19-(*+1) | FCC /ALREADY OPEN/ | ERR19 FCB ERR20-(*+1) | FCC /DEVICE NUMBER/ | ERR20 FCB ERR21-(*+1) | FCC %READ/WRITE% | ERR21 FCB ERR22-(*+1) | FCC /FILE MODE/ | ERR22 FCB ERR23-(*+1) | FCC /FILE NOT OPEN/ | ERR23 FCB ERR24-(*+1) | FCC /READ PAST END OF FILE/ | ERR24 FCB ERR25-(*+1) | FCC /DIRECT COMMAND IN FILE/ | ERR25 FCB ERR26-(*+1) | FCC /UNDEFINED FUNCTION/ | ERR26 FCB ERR27-(*+1) | FCC /NO SUCH FILE/ | ERR27 FCB ERR28-(*+1) | FCC /RECORD #/ | ERR28 FCB ERR29-(*+1) | FCC /DISK FULL/ | ERR29 FCB ERR30-(*+1) | FCC /OUT OF BUFFER SPACE/ | ERR30 FCB ERR31-(*+1) | FCC /WRITE PROTECT/ | ERR31 FCB ERR32-(*+1) | FCC /FILE NAME/ | ERR32 FCB ERR33-(*+1) | FCC /DIRECTORY/ | ERR33 FCB ERR34-(*+1) | FCC /FILE EXISTS/ | ERR34 FCB ERR35-(*+1) | FCC /FIELD OVERFLOW/ | ERR35 FCB ERR36-(*+1) | FCC /SET TO NON-FIELDED STRING/ | ERR36 FCB ERR37-(*+1) | FCC /VERIFY/ | ERR37 FCB ENDERR-(*+1) | FCC /ACCESS PAST END OF FILE/ | ENDERR EQU * | ENDC <---- ZZLAST EQU *-1 last used address value * * ZZLAST must not be greater than $DFFF for * DOS 1.0 and $DEFF for DOS 1.1. The latter * has the OS-9 Boot program and SWI set routines * from $DF00 to $DF4C * * OPT NOL NAM DISKPTCH.MAC IFEQ REV TTL Cooking with CoCo Part 7 - DOS 1.0 Copyright 1984 Colin J. Stearman ENDC IFGT REV TTL Cooking with CoCo Part 7 - DOS 1.1 Copyright 1984 Colin J. Stearman ENDC OPT LIS END ADDCOM tDDCOM t EQU *-1 last used address value * * ZZLAST must not be greater than $DFFF for * DOS 1.0 and $DEFF for DOS 1.1џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџHI THERE! THANKS FOR ORDERING THE DOS PATCH DISK. THERE ARE SEVERAL FILES ON THIS DISK AND THEY ARE BRIEFLY DESCRIBED HERE. AS THE ENTIRE PATCH TO DOS IS INCLUDED THERE WILL BE SOME FEATURES NOT YET EXPLAINED BY THE ARTICLES SO FAR PUBLISHED. I CAN'T GIVE THE DETAILS HERE, SO EXPERIMENT AND KEEP READING RAINBOW. ALSO REVIEW THE GLOSSY PHOTO FOR HINTS! ***DISKPTCH.MAC*** THIS IS THE SOURCE FOR ALL THE PATCH FILES. LABELS "REV" AND "PARPRT" CONTROL THE TYPE OF PATCH FILE. I USE "MAC" FOR MY ASSEMBLY. YOU WILL HAVE TO EDIT TO GET THIS TO ASSEMBLE WITH EDTASM+. I HAVE MADE SOME MINOR REVISIONS SINCE THE ARTICLES WHERE SENT TO RAINBOW SO DON'T EXPECT AN EXACT MATCH TO THE PUBLISHED LISTING. THE CHANGES ARE ONLY MINOR AND DO NOT AFFECT OPERATION. ***SERIAL0.BIN*** THE PATCH FILE FOR DOS 1.0 WITHOUT THE PARALLEL PORT. ***SERIAL1.BIN*** THE PATCH FILE FOR DOS 1.1 WITHOUT THE PARALLEL PORT. ***PARA0.BIN*** THE PATCH FILE FOR DOS 1.0 WITH THE PARALLEL PORT. ***PARA0.BIN*** THE PATCH FILE FOR DOS 1.1 WITH THE PARALLEL PORT. FOLLOW THE INSTRUCTIONS IN THE SEPTEMBER ISSUE FOR TESTING. ***BASLOAD.BAS*** SEE RAINBOW JULY 1984 ISSUE ***SYSTEM.MAC*** SEE RAINBOW JULY 1984 ISSUE ***SYSTEM.BIN*** SEE RAINBOW JULY 1984 ISSUE ***SYSSAVE.MAC*** SEE RAINBOW JULY 1984 ISSUE ***SYSSAVE.BIN*** SEE RAINBOW JULY 1984 ISSUE FOLLOW THE INSTRUCTIONS IN THE JULY ISSUE FOR USING THESE FILES. ***EPROMPRG.MAC*** SOURCE CODE FOR THE EPROM PROGRAMMER. ***EPROMPRG.BIN*** ASSEMBLED BINARY FILE FOR THE EPROM PROGRAMMER. LOADS AND EXECUTES AT $E00. SEE THE AUGUST ISSUE OF RAINBOW FOR MORE INFORMATION ON THESE PROGRAMS. ****DATELOAD.BAS*** A BASIC PROGRAM TO LOAD TODAY'S DATE INTO MEMORY. IF YOU RENAME THIS "AUTOEXEC.BAS" AND HAVE IT IN DRIVE 0 WHEN YOU POWER UP, IT WILL RUN AUTOMATICALLY. +-+COPYRIGHT CONSIDERATIONS+-+ I CANNOT FURNISH YOU WITH THE DOS ALREADY PATCHED AS THIS WOULD INFRINGE TANDY AND MICROSOFT COPYRIGHTS. YOU MUST PATCH THE DOS YOU ALREADY OWN. NO PROGRAMS HERE CONTAIN ANY ORIGINAL DOS CODE, AND I RESERVE COPYRIGHTS TO ALL PROGRAMS ON THIS DISK. IF YOU HAVE PROBLEMS READING THIS DISK IT WILL BE REPLACED AT NO COST. ***ALTERNATIVE APPROACH*** BECAUSE OF PROBLEMS PUTTING BINARY PATCH FILES ONTO CASSETTE, EACH PATCH HAS BEEN CONVERTED TO A BASIC PROGRAM. YOUR SYSTEM CAN BE PATCHED BY THE FOLLOWING STEPS. NOTE THAT THIS PROCEDURE WILL ONLY WORK ON 64K COLOR COMPUTERS. TO USE THIS PROCEDURE YOU MUST HAVE SAVED A COPY OF YOUR UNMODIFIED DOS TO A DISK AS DESCRIBED IN PART 1 OF THE SERIES (JULY 1984,P20,"SAVING DOS TO DISK"). THE BASIC FILE NAME ON THE DISK DESCRIBES THE TYPE OF FILE AND WHICH DOS IT IS FOR. THE NAME CONSISTS OF "SERL" IF IT IS FOR A STANDARD COCO WITH SERIAL PORT OR "PARA" IF THE PARALLEL PORT HAS BEEN INSTALLED FROM PART 6. THE LAST 2 DIGITS SHOW THE DOS VERSION. "PARA11.BAS" IS FOR A COCO WITH PARALLEL PORT AND DOS1.1. SIMILARLY, "SERL10.BAS" IS FOR A SERIAL PORT COCO RUNNING DOS1.0. 1. TRANSFER THE PATCH FILE TO CASSETTE. 2. LOAD YOUR BOOTABLE DISK AND LOADM"SYSTEM":EXEC. 3. SELECT "E" FOR EXTENDED COLOR BASIC. 4. CLOAD THE CASSETTE FILE 5. RUN IT AND ANSWER "Y" TO THE QUESTION. WHEN FINISHED, THE NEW DOS WILL BE RUNNING. 6. IF YOU WISH, SAVE THE PATCHED VERSION TO A FRESH, FORMATTED DISK BY LOADM"SYSSAVE":EXEC ***CIRCUIT PROBLEM*** AN ERROR GOT INTO THE EPROM PROGRAMMER CIRCUIT ON PAGE 78 OF THE SEPTEMBER ISSUE. THE SUPPLIES TO THE TWO 6821'S AT U2 & U3 ARE REVERSED. PIN 1 GOES TO 0V AND PIN 20 TO +5V. THANKS AGAIN FOR YOUR ORDER AND I HOPE YOU ENJOY THE NEW FEATURES THESE PATCHES PROVIDE. IF YOU HAVE HALF AS MUCH FUN PLAYING WITH THIS STUFF AS I HAD WRITING IT, YOU'LL HAVE A GOOD TIME! KEEP FOLLOWING THE SERIES! BEST REGARDS, COLIN PS. DON'T USE THE PARALLEL PORT PATCHES TILL THE PORT IS BUILT! H TILL THE PORT IS BUILT! H PORT IS BUILT! ULL THE PORT IS BUILT! UILT! YF YOU HAVE HALF AS MUCH FUN PLAYING WITH THIS STUFF AS I HAD WRITING IT, YOU'LL HAVE A GOOD TIME! KEEP FOLLOWING THE SERIES! BEST REGџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџŠ&& ž:‡"COOKING WITH COCO DOS PATCH"&4 ‡"PART 7"&k ‡"USE ON COCO'S WITH THE PARALLEL PORT INSTALLED."& ‡:‡"IF YOU HAVE NOT YET DONE SO"&Ќ‡"PUT YOUR DOS1.1 DISK"&Х‡"IN DRIVE ZERO AND"&у‡"BOOT UP EXTENDED COLOR"&ќ‡"BASIC (KEY IN E)."'‰"HAVE YOU DONE THIS(Y/N)";A$'R… A$ДВ"Y"Ї ‡"PLEASE DO SO NOW AND RERUN THIS":‘'u‡"PATCHING, PLEASE WAIT......"'†€ I Г 1 Ѕ 1'’ BYTE$'Б’ 49552ЋIЌ1,џ‰("&H"ЋBYTE$)'З‹'П† 0'а€ I Г 1 Ѕ 3'м BYTE$'ћ’ 49196ЋIЌ1,џ‰("&H"ЋBYTE$)(‹(† CC,D8,D0(!€ I Г 1 Ѕ 2(-  BYTE$(L!’ 49435ЋIЌ1,џ‰("&H"ЋBYTE$)(R"‹(^#† DB,30(o$€ I Г 1 Ѕ 3({% BYTE$(š&’ 49380ЋIЌ1,џ‰("&H"ЋBYTE$)( '‹(Џ(† 7E,DA,6A(Р)€ I Г 1 Ѕ 2(Ь* BYTE$(ы+’ 49463ЋIЌ1,џ‰("&H"ЋBYTE$)(ё,‹(§-† DE,1C).€ I Г 1 Ѕ 2)/ BYTE$)90’ 49451ЋIЌ1,џ‰("&H"ЋBYTE$))?1‹)K2† DC,8F)\3€ I Г 1 Ѕ 3)h4 BYTE$)‡5’ 52399ЋIЌ1,џ‰("&H"ЋBYTE$))6‹)œ7† BD,D9,67)­8€ I Г 1 Ѕ 3)Й9 BYTE$)и:’ 52480ЋIЌ1,џ‰("&H"ЋBYTE$))о;‹)э<† BD,D9,27)ў=€ I Г 1 Ѕ 3* > BYTE$*)?’ 50589ЋIЌ1,џ‰("&H"ЋBYTE$)*/@‹*>A† 7E,D9,1A*OB€ I Г 1 Ѕ 2*[C BYTE$*zD’ 54878ЋIЌ1,џ‰("&H"ЋBYTE$)*€E‹*ŒF† 91,80*G€ I Г 1 Ѕ 2*ЉH BYTE$*ШI’ 54913ЋIЌ1,џ‰("&H"ЋBYTE$)*ЮJ‹*кK† 91,80*ыL€ I Г 1 Ѕ 1*їM BYTE$+N’ 54580ЋIЌ1,џ‰("&H"ЋBYTE$)+O‹+%P† 27+6Q€ I Г 1 Ѕ 3+BR BYTE$+aS’ 54681ЋIЌ1,џ‰("&H"ЋBYTE$)+gT‹+uU† 16,3,D1+†V€ I Г 1 Ѕ 3+’W BYTE$+БX’ 53871ЋIЌ1,џ‰("&H"ЋBYTE$)+ЗY‹+ЦZ† 7E,D9,8D+з[€ I Г 1 Ѕ 2+у\ BYTE$,]’ 53916ЋIЌ1,џ‰("&H"ЋBYTE$),^‹,_† 96,80,%`€ I Г 1 Ѕ 3,1a BYTE$,Pb’ 50936ЋIЌ1,џ‰("&H"ЋBYTE$),Vc‹,ed† 7E,D9,B5,ve€ I Г 1 Ѕ 1,‚f BYTE$,Ёg’ 55232ЋIЌ1,џ‰("&H"ЋBYTE$),Їh‹,Џi† 2,Рj€ I Г 1 Ѕ 1,Ьk BYTE$,ыl’ 55318ЋIЌ1,џ‰("&H"ЋBYTE$),ёm‹,њn† 16- o€ I Г 1 Ѕ 123-p BYTE$-8q’ 55504ЋIЌ1,џ‰("&H"ЋBYTE$)->r‹-šs† 81,C0,10,26,F6,34,9D,9F,BD,B7,B,5D,27,39,C1,11,24,35,86,6,3D,DB,BC,1F,98,C6,1,1F,2,10-ѕt† 93,B7,25,25,93,19,1F,3,D3,1B,1F,1,C3,0,C8,93,21,24,16,8D,B,27,6,1F,30,D3,A6,DD,A6,7E.Qu† 96,B4,34,10,9E,68,30,1,35,10,39,7E,B4,4A,B7,9,76,A7,42,FC,1,4E,ED,45,7E,C5,A2,34,4,BD.Њv† BD,CC,BD,CD,1B,35,4,C1,9,22,3,BD,CD,1B,AE,62,EC,88,10,34,6,C6,8,BD,B5,F,35,6,BD,DC.Йw† FF,C6,F8.Ьx€ I Г 1 Ѕ 123.иy BYTE$.їz’ 55627ЋIЌ1,џ‰("&H"ЋBYTE$).§{‹/Y|† A6,85,BD,A2,82,5C,26,F8,D,6F,26,15,7A,1,D5,26,10,BD,A1,B1,27,FB,81,3,26,2,32,64,C6,10/Ж}† F7,1,D5,39,10,27,CC,AE,BD,D2,56,C6,23,9D,A5,27,3,BD,B7,38,8D,3,7E,D5,A0,C1,23,25,91,C10~† 28,22,8D,D7,80,39,34,4,C6,23,D7,80,35,4,9D,A5,27,19,81,2C,27,8,C6,A5,BD,B2,6F,BD,D2,560o† 34,4,9D,A5,27,5,BD,B7,38,8D,D2,35,4,7E,D2,7B,BD,C6,8C,BD,C6,E5,34,16,BD,D9,E,26,38,C60}€† A,8E,D90€ I Г 1 Ѕ 1230œ‚ BYTE$0Лƒ’ 55750ЋIЌ1,џ‰("&H"ЋBYTE$)0С„‹1…† DE,BD,B9,A2,BD,A1,B1,BD,A2,82,34,2,BD,B9,58,35,2,81,59,27,14,35,16,39,53,55,52,45,28,591~†† 2F,4E,29,3F,44,45,4C,45,54,45,44,8E,D9,E8,C6,7,BD,B9,A2,BD,B9,58,35,16,7E,C6,FC,43,4F,4C1 C4,57,50,4F,4B,C5,46,41,53,D4,53,4C,4F,D7,58,45,D1,41,55,54,CF,53,57,41,D0,45,52,52,4F,522>ˆ† D3,42,41,55,C4,4C,44,49,D2,50,41,52,41,4C,4C,45,CC,DC,2C,DC,31,DC,41,DC,45,DC,49,DC,5A,DD2M‰† A6,DD,CF2`Š€ I Г 1 Ѕ 1232l‹ BYTE$2‹Œ’ 55873ЋIЌ1,џ‰("&H"ЋBYTE$)2‘‹2ёŽ† DD,3E,DD,6E,DD,75,53,43,41,4E,A4,44,41,54,45,A4,45,4C,49,4E,C5,45,43,4F,44,C5,57,50,45,453N† CB,DC,E6,DC,F2,DE,44,DE,51,DD,2E,8E,DA,F1,BD,B9,9C,7F,1,49,7F,1,4A,8E,D9,FF,CE,1,3E,AF3Ћ† 41,86,B,A7,C4,8E,DB,A,AF,43,86,5,A7,45,8E,DA,47,AF,46,8E,DB,19,AF,48,6F,4A,8E,B2,77,AF4 ‘† C8,12,AF,4D,6F,4F,9E,8A,AF,C8,10,BD,DE,21,CC,DD,EE,FD,1,8F,CC,DD,7B,FD,1,68,8E,FF,26,864’† FF,A7,844+“€ I Г 1 Ѕ 12347” BYTE$4V•’ 55996ЋIЌ1,џ‰("&H"ЋBYTE$)4\–‹4З—† 86,2C,A7,1,86,4,A7,1F,CC,1,CA,DD,95,8E,DA,E4,CE,2,DD,C6,E,34,44,BD,A5,9A,86,55,97,715˜† BD,B9,5C,35,14,30,1F,7E,AC,7F,52,55,4E,22,41,55,54,4F,45,58,45,43,22,0,52,45,56,28,43,295r™† 31,39,38,34,20,43,2E,53,54,45,41,52,4D,41,4E,D,D,0,81,EC,23,3,7E,B2,77,8E,DA,31,80,E25Эš† 7E,AD,D4,C1,58,22,F1,C0,50,C1,6,2F,7,34,4,BD,B2,62,35,4,8E,DA,60,7E,B2,CE,96,6F,27,C5웆 81,FF,265яœ€ I Г 1 Ѕ 1235ћ BYTE$6ž’ 56119ЋIЌ1,џ‰("&H"ЋBYTE$)6 Ÿ‹6y † 5,86,1,B7,1,4A,7E,C5,BC,34,14,AE,67,8C,A3,9D,27,4,35,14,20,F0,F,70,7D,1,4A,27,A,2B6бЁ† 2B,7F,1,DA,7F,1,4A,20,0,73,1,4A,7F,1,D7,7F,1,D8,7F,1,D9,BD,A1,B1,81,9,27,15,81,5D7)Ђ† 26,5,73,1,D9,20,C,81,5F,26,1F,73,1,D8,7D,1,D9,27,E4,7F,1,D8,F6,1,D7,8E,1,DA,A6,857‚Ѓ† 26,5,7F,1,D9,20,D2,7C,1,D7,20,4A,81,13,27,59,81,D,27,6E,81,8,27,9,81,A,26,17,BD,DB7‘Є† EC,20,B87ЄЅ€ I Г 1 Ѕ 1237АІ BYTE$7ЯЇ’ 56242ЋIЌ1,џ‰("&H"ЋBYTE$)7еЈ‹8,Љ† 7D,1,D8,26,25,8D,2,20,21,7D,1,D7,27H,PCR TARGET TOO HIGH LBSR OUTST$ BRA .KEY * NOROOM LEAX NROOM,PCR NOT ENOUGH ROOM IN EPROM LBSR OUTST$ * .KEY LEAX EKEY,PCR WAIT FOR ENTER LBSR INPUT$ LBRA COPY * GOODPR LEAX GOODP1,PCR GOOD PROGRAM LBSR OUTST$ LDX START GET LAST RAM ADDRESS LBSR HEXOUT OUTPUT IT LEAX GOODP2,PCR LBSR OUTST$ LDX TARGET GET LAST PROM ADDRESS LBSR HEXOUT OUTPUT IT BRA .KEY * UNERAS LEAX UNERSD,PCR NOT ERASED .LEAVE LBSR OUTST$ LDX TARGET GET LAST EPROM ADDRESS LBSR HEXOUT OUTPUT IT BRA .KEY * BADLOC LEAX BADPRM,PCR BAD PROM LOCATION BRA .LEAVE * ***** * CPYTTL FCC / RAM TO EPROM TRANSFER/ FCS /<0D> =====================<0D><0D>/ * DIFF FCS /<0D><0D>START HIGHER THAN END ADDRESS<0D>/ HIGH FCS /<0D><0D>TARGET ADDRESS TOO HIGH<0D>/ NROOM FCS /<0D><0D>NOT ENOUGH ROOM IN EPROM<0D>/ EKEY FCS /<0D>PRESS "ENTER" TO CONTINUE / STRTXT FCS / RAM START ADDRESS: / ENDMSG FCS / RAM END ADDRESS: / TGTMSG FCS /EPROM TARGET ADDRESS: / GOODP1 FCS /<0D><0D> LAST RAM ADDRESS USED: / GOODP2 FCS /<0D>LAST EPROM ADDRESS USED: / UNERSD FCS /<0D><0D>NOT ERASED AT / BADPRM FCS /<0D><0D>BAD EPROM AT / WRKADD FCS /<0D><0D>PROGRAMMING EPROM AT / **************************************** *********************************************** * DUMPS EPROM CONTENTS TO SCREEN OR PRINTER * *********************************************** * DUMP JSR CLEAR SCREEN LEAX DMPTTL,PCR DUMP TITLE LBSR OUTST$ * LEAX DSTRT,PCR GET START ADDRESS LBSR INPUT$ * DID WE GET A NULL? LDA BUFFER CMPA #$0D BNE DCONT CONTINUE ROUTINE * RTS RETURN TO MENU * DCONT LBSR HEXINT INTO X REG TSTB AN ERROR BNE DUMP RESTART IF SO CMPX #TOPADD CHECK RANGE BHI DUMP RESTART IF OVER PSHS X PRESERVE START * LEAX ESTRT,PCR GET END ADDRESS LBSR INPUT$ LBSR HEXINT INTO X REG TSTB FOR ERROR BNE RSTART RESTART IF SO * CHECK FOR OVER RANGE CMPX #TOPADD BLS GDUMP RANGE OK RSTART LEAS 2,S CLEAN STACK BRA DUMP RESTART GDUMP TFR X,D TO SEE IF START IS AFTER END SUBD ,S START ON STACK BMI RSTART NOT SO RESTART * PSHS X PRESERVE END ADDRESS LEAX DEV,PCR WHICH DEVICE? LBSR INPUT$ S OR P LDA BUFFER GET FIRST LETTER LDB #4 FOR SCREEN DUMP WIDTH CMPA #'P IS IT PRINTER? BNE SCR NO SO LEAVE DEVNUM LDA #-2 PRINTER DEVICE CODE STA DEVNUM LDB #16 FOR ITEM COUNT SCR PULS X,Y X HAS END, Y START NEGB FOR MASK PSHS B SAVE ON STACK TFR Y,D ROUND DOWN START ANDB ,S ROUNDED DOWN NOW TFR D,Y PUT IT BACK IN Y PSHS X SAVE END ON STACK * SET LINE COUNT FOR SCREEN LDA #16 # OF LINES STA COUNT * DMLOOP TFR Y,X OUTPUT ADDRESS PSHS Y SAVE Y LDA #$0D JSR [CHROUT] START NEW LINE LBSR HEXOUT OUTPUT ADDRESS PULS Y RECOVER Y LDB #6 SPACES COUNT LBSR SPACES OUTPUT THEM INLOOP TFR Y,D GET START ADDRESS STA HIADD STB LOWADD SET UP EPROM ADDRESS LEAY 1,Y INCREMENT ADDRESS **** OUTPUT THE HEX CHARACTERS LDB DATARG GET FROM EPROM PSHS Y PRESERVE VALUE LBSR HXPAIR PUT IN BUFFER LDX #BUFFER POINT TO IT LBSR OUTST$ PULS Y RECOVER Y LDB #1 BSR SPACES * TFR Y,D RECOVER COUNT IN D COM 2,S FOR LOOK AT LOWER BITS ANDB 2,S COUNT MASK PSHS CC PRESERVE TEST RESULT COM 3,S PUT IT BASK AS IT WAS PULS CC RECOVER TEST RESULT BNE INLOOP NOT AT END OF LINE YET * * LDB #2 SPACES BSR SPACES OUTPUT THEM LDB 2,S GET COUNT AS NEG * B NOW HAS -16 IN IT CHLOOP LEAX B,Y GET FIRST ADDR. IN GROUP PSHS B SAVE COUNT TFR X,D PUT IT TO EPROM STA HIADD STB LOWADD PULS B RECOVER COUNT LDA DATARG GET EPROM DATA CMPA #32 HIGHER TO PRINT BLO DOT CHANGE TO DOT LESS THAN 32 TST DEVNUM TO PRINTER? BEQ OKPRNT TO SCREEN SO OK CMPA #$80 HIGHEST PRINTABLE? BLO OKPRNT DOT LDA #'. REPLACE WITH DOT OKPRNT JSR [CHROUT] INCB BLT CHLOOP GOES ZERO WHEN DONE **** *ARE WE AT END YET? CMPY ,S END ON STACK BHI DMPXT YES SO EXIT LOOP * TST DEVNUM TO PRINTER? BEQ NXLINE DELETE SCREEN LINE COUNT JSR [POLCAT] BREAK STA CLINES * PSHS X FOR DELAY COUNT ORCC #%01010000 PREVENT INTERRUPTS LDX #$1600 FOR 50 MS DLOOP LEAX -1,X REDUCE COUNT BNE DLOOP KEEP LOOPING ANDCC #%10101111 ALLOW INTERRUPTS * LDA CLINES GET LINES ORA #%00000001 SET PGM HI STA CLINES PULS X,PC RECOVER X AND RETURN ******************************************* ******************************************** * V E R I F Y R O U T I N E * ******************************************** * * THIS VERIFIES ERASURE OF THE EPROM * PROVIDES A GO/NOGO RESPONSE * OF ERASURE OF ENTIRE EPROM * ERASE JSR CLEAR CLEAR SCREEN PSHS Y PRESERVE REGISTER Y LEAX ERAMSG,PCR PUT UP TITLE LBSR OUTST$ * *PUT UP PROGRESS MONITOR LDX CURLOC GET CURSOR LOCATION LEAX NUMK,X MOVE OVER NUMBER OF K IN EPROM STX CURLOC AND SAVE IT LDD #$BFBF 2 RED SQUARES LDY #NUMK COUNTER PUTMON STD ,X++ STORE ON SCREEN LEAY -1,Y DECREASE COUNT BNE PUTMON * LDY #0 START ADDRESS VLOOP JSR [POLCAT] TEST FOR BREAK BEQ NOBRK HE KEY PRESSED CMPA #3 BREAK? BNE NOBRK PULS Y,PC RETURN * NOBRK TFR Y,D STA HIADD SET UP ADDRESS ON PIA STB LOWADD LDA DATARG GET DATA CMPA #$FF IS IT ERASED BNE NOTMTY NOT ERASED LEAY 1,Y INCREASE * ADJUST PROGRESS COUNTER IF NEEDED TFR Y,D TSTB IF NOT ZERO CONTINUE BNE DONEYT DONE YET ANDA #%00000011 SEEE IF THESE ARE ZERO BNE DONEYT NO SO SKIP LDD #$8F8F GREEN SQUARES STD ,--X DECREASE MONITOR FROM RIGHT * DONEYT CMPY #TOPADD+1 ADDRESS LIMIT BNE VLOOP LEAX GOOD,PCR IS FULLY ERASED BRA VEXIT * NOTMTY LDD CURLOC ADDD #32 MOVE TO NEXT LINE STD CURLOC LEAX ADDNMT,PCR GET ADDRESS MESSAGE LBSR OUTST$ TFR Y,X LBSR HEXOUT PUT LAST ADDRESS UP LEAX BAD,PCR VEXIT LBSR OUTST$ LEAX VERFY,PCR LBSR OUTST$ * LBSR INSTR$ GET KEYBOARD RESPONSE PULS Y,PC RECOVER Y AND RETURN * ERAMSG FCC / EPROM ERASURE VERIFICATION/ FCB $0D FCS / ==========================<0D><0D>/ * ADDNMT FCS /<0D><0D>ADDRESS / BAD FCS / NOT / GOOD FCS /<0D><0D> FULLY / VERFY FCS /ERASED<0D><0D>PRESS "ENTER" TO CONTINUE / ******************************************** **************************************** * EPROM PROGRAMMING * **************************************** * * * THIS GETS START ADDRESS AND END ADDRESS IN * RAM AND START TARGET ADDRESS IN EPROM * CHECKS FOR ERRORS THEN TRANSFERS DATA **************************************** * COPY JSR CLEAR SCREEN LEAX CPYTTL,PCR GET HEADER LBSR OUTST$ PUT IT UP * * GET START ADDRESS IF NULL THEN RETURN LEAX STRTXT,PCR LBSR INPUT$ * DID WE GET A NULL LDA BUFFER GET FIRST BYTE CMPA #$0D IS IT CR? BNE GETST CEXIT RTS * GETST LBSR HEXINT CONVERT INTO REG X STX START SET START ADDRESS TSTB CHECK FOR ERRORS BNE COPY * LEAX ENDMSG,PCR GET ENDING RAM ADDRESS LBSR INPUT$ GET ENDING ADDRESS LDA BUFFER TEST FOR NULL CMPA #$0D IS IT CR? BEQ CEXIT * LBSR HEXINT GET VALUE ENTERED TSTB DID WE GET ERROR? BNE COPY RESTART * X NOW HAS ENDING TFR X,D PUT INTO ACC D SUBD START FIND DIFFERENCE BLO DERROR DATA ERROR MESSAGE ADDD #1 TO MAKE IT ACTUAL COUNT STD COUNT SAVE IT * *NOW GET TARGET ADDRESS LEAX TGTMSG,PCR LBSR INPUT$ LDA BUFFER NULL ENTRY? CMPA #$0D BEQ CEXIT SO EXIT ROUTINE * LBSR HEXINT GET VALUE IN X TSTB ERROR? BNE COPY RESTART * * X NOW HAS START ADDRESS STX TARGET CMPX #TOPADD HIGHEST ALLOWED VALUE BHI TOOHI GO TO ERROR MESSAGE PSHS X PUT TARGET ONTO STACK LDD #NUMK*1024 EPROM SIZE SUBD ,S++ SUBTRACT TARGET & CLEAN STACK * D NOW HAS AVAILABLE BYTES ABOVE TARGET CMPD COUNT BLO NOROOM NOT ENOUGH ROOM * ALL SEEMS OK GO PROGRAM * FIRST DISPLAY WORKING ADDRESS TEXT LEAX WRKADD,PCR LBSR OUTST$ * LBSR PROGRM * TSTB FOR ERROR CODE BEQ GOODPR GOOD PROGRAM CMPB #1 NOT ERASED BEQ UNERAS BRA BADLOC BAD PROM LOCATION **************************************** ** * DERROR LEAX DIFF,PCR START ABOVE END MSG LBSR OUTST$ BRA .KEY * TOOHI LEAX HIG******************** * EPROM ACCESS ROUTINES ******************************************* * * CONREG EQU $FF41 LOWEST CONTROL REGISTER LOWADD EQU $FF44 LOW ADDRESS OUTPUT HIADD EQU $FF46 HIGH ADDRESS OUTPUT DATARG EQU $FF40 DATA REGISTER CLINES EQU $FF42 CONTROL LINES REGISTER VOLTS EQU $FF43 RELAY CONTROL REGISTER * * ******************************************* * INITIALIZING ROUTINE * INIT CLRA EXPOSE ALL THE DDRS BSR DDRSET * * NOW ALL DATA DIRECTION REGISTERS ARE EXPOSED * LDB #$FF SET ALL ADDRESS LINES TO OUTPUTS STB LOWADD STB HIADD * LDB #7 SE CONTROL LINES TO OUTPUTS STB CLINES * CLR DATARG TO MAKE IN INPUTS * LDA #4 RESET THE CONTROL REGISTERS BSR DDRSET TO OUTPUTS * LDA #$34 SET CONTROL REG FOR RELAY OUTPUT STA VOLTS ENABLES CB2 AS OUTPUT AT ZERO * LDA #1 SET UP CONTROL LINES FOR READ STA CLINES OE,CS=0 PGM=1 * RTS * ** ******* SUBROUTINES ******** * SET CONTROL REGISTERS TO CONTENTS OF A DDRSET LDB #4 # OF CONTROL REGISTERS LDX #CONREG POINT X TO CONTROL REGISTERS CLRREG STA ,X++ CLEAR AND DOUBLE INCREMENT DECB DECREASE COUNTER BNE CLRREG DO NEXT REGISTER RTS ******************************************* * * ******************************************* * PROGRAM EPROM ROUTINE ******************************************* * * THIS PROGRAMS THE PROM FROM DATA STARTING * AT ADDRESS IN "START", FOR THE NUMBER OF * BYTES IN "COUNT",AT EPROM ADDRESS "TARGET" * THESE LOCATIONS ARE RESERVED IN THIS ROUTINE * START ENDS UP WITH LAST ADDRESS DATA WAS * TAKEN FROM RAM. TARGET HAS LAST ADDRESS * WRITTEN TO IN EPROM. * B HAS ERROR CODE * 1= NOT ERASED * 2= BAD EPROM LOCATION * 0= NO PROBLEM ******************************************* * START EQU $1D1 USED CASSETTE NAME AREA COUNT EQU START+2 TARGET EQU START+4 * PROGRM LDA VOLTS GET REG VALUE ORA #%00001000 SET BIT 8 TO APPLY 21V STA VOLTS * 21V IS NOW APPLIED * WAIT A WHILE FOR RELAY TO CLOSE LDX #$FFFF RLYDLY LEAX -1,X DECREMENT X BNE RLYDLY * * PRESERVE Y AND U REGISTERS PSHS U,Y * * LDY START POINT Y TO RAM START LDU TARGET POINT U TO TARGET CLRB LDX COUNT GET BYTE COUNT LBEQ PREXIT ALL DONE PROGRAMMING * * MOVE CURSOR AHEAD 4 LDD CURLOC ADDD #4 STD CURLOC ************************ * PROGRAMMING LOOP PLOOP TFR U,D SET UP EPROM ADDRESS LEAU 1,U INCREMENT EPROM ADDRESS STA HIADD STB LOWADD * * DISPLAY WORKING ADDRESS PSHS Y,X,D LDD COUNT DONT IF IT IS 1 CMPD #1 BEQ NODISP NO DISPLAY LDD ,S RECOVER VALUE IN D LDX CURLOC MOVE CURSOR BACK 4 LEAX -4,X STX CURLOC TFR D,X MOVE VALUE TO X LBSR HEXOUT DISPLAY IT NODISP PULS Y,X,D RECOVER VALUES * GET DATA TO BE LOADED INTO REG B LDB ,Y+ AND INCREMENT ADDRESS * LDA DATARG GET DATA AT THIS ADDRESS CMPA #$FF SHOULD BE THIS BEQ EMPTY LDB #1 NOT ERASED CODE BRA PEXIT * EMPTY LDA CLINES GET CONTROL LINES ORA #%00000010 RAISE OE STA CLINES * CLR CONREG MAKE DATA LINES OUTPUTS LDA #$FF STA DATARG LDA #4 RESET TO OUTPUT REG STA CONREG * * SAVE DATA IN B IN EPROM STB DATARG PUT ON DATA LINES * BSR PULSE THE PGM LINE LOW * *NOW VERIFY CLR CONREG MAKE DATA LINE INPUTS CLR DATARG LDA #4 STA CONREG * * ENABLE CHIP LDA CLINES ANDA #%11111101 OE LOW STA CLINES * * NOW COMPARE DATA ON DATARG WITH CONTENTS AT Y CMPB DATARG DATA WAS LEFT IN B FROM LOAD BEQ VERIOK IT WAS THE SAME LDB #2 VERIFY ERROR CODE BRA PEXIT * * END PROGRAMMING LOOP ************************ VERIOK JSR [POLCAT] BREAK PRESSED? BEQ DOWNCT NO SO DECREASE COUNT CLRB READY FOR RETURN CODE CMPA #3 BREAK VALUE BEQ PEXIT YES SO EXIT DOWNCT LEAX -1,X REDUCE COUNT BNE PLOOP NOT DONE YET CLRB NO ERROR CODE PEXIT LEAU -1,U DECREASE TO LAST LOADED ADDRESS STU TARGET LEAY -1,Y DO SAME FOR RAM ADDRESS STY START SAVE LAST RAM ADDRESS PREXIT LDA VOLTS GET VOLTS REGISTER ANDA #%11110111 TURN OFF 21V STA VOLTS PULS U,Y,PC RECOVER REGISTERS & RETURN * ******************************************* * * THIS PULSES THE PGM LINE LOW FOR 50MS * PULSE LDA CLINES GET LINES ANDA #%11111110 MAGE PGM LOW СР,ЬиаСл0Рф~кjС7оС+мЬЏНйgЭНй'Х~йж^‘€ж‘€е4'е™бвo~йвœ–€Цј~йЕзРи{иаР&і4ŸНЗ ]'9С$5†=лМ˜Ц“З%%“гУШ“!$ '0гІнІ~–Д4žh059~ДJЗ vЇBќNэE~ХЂ4ННЬНЭ5С "НЭЎbьˆ4ЦНЕ5НмџЦј{йKІ…НЂ‚\&ј o&zе&НЁБ'ћ&2dЦїе9'ЬЎНвVЦ#Ѕ'НЗ8~е С#%‘С("з€94Ц#з€5Ѕ','ЦЅНВoНвV4Ѕ'НЗ8в5~в{НЦŒНЦх4Нй&8Ц Žй{йЦоНЙЂНЁБНЂ‚4НЙX5Y'59SURE(Y/N)?DELETEDŽйшЦНЙЂНЙX5~ЦќCOLФWPOKХFASдSLOзXEбAUTЯSWAаERRORгBAUФLDIвPARALLEЬм,м1мAмEмIмZнІнЯ{кAн>нnнuSCANЄDATEЄELINХECODХWPEEЫмцмђоDоQн.ŽкёНЙœIJŽйџЮ>ЏA† ЇФŽл ЏC†ЇEŽкGЏFŽлЏHoJŽВwЏШЏMoOžŠЏШНо!Ьню§Ьн{§hŽџ&†џЇ„{кМ†,Ї†ЇЬЪн•ŽкфЮнЦ4DНЅš†U—qНЙ\50~ЌRUN"AUTOEXEC"REV(C)1984 C.STEARMAN ь#~ВwŽк1€т~­дСX"ёРPС/4НВb5Žк`~ВЮ–o' џ&{л7†ЗJ~ХМ4ЎgŒЃ'5 №p}J' ++кJ sJзийНЁБ ']&sй _&sи}й'фиізŽкІ…&й в|з J'Y 'n'  &Нль И{лВ}и&% !}з'zз9' ' ' \&НЁБ з %}и&52b9Žкізm…'|з9oј†@НЂ‚НЙXЦчфŽнЏa~лaJoј~лчŽнŽкц€ч &њ9{м-q~ 'НЗ=Ÿ+НВmНЗ=ЏŸ+9Зџз9Зџж9M'~ЎuНЯСџ@nŸНй&hЬ §б§гЅ'НЗ=мR§бЅ'НВmНЗ=мR'E§гЅ&>†џЗI9}I' ќбƒљџ#I9‡pэфѓ{мЈг§б5ННЬ† НЂ‚ЮкŽн_ІР'Ї€\ ї~л† Ї€\НЁq '& IЬ Žн~Ѓ–‡&НЁС'ћ~ЅkЦНЕ~Ж›ќN4DVTTTT†/Ї€цaФ †/Ї€цфT2b9OР %{н#L љЫ:‹0э9НЗ@ь„нR~ˆОW)НВbНЗ@oтƒ%€"ћЧlфƒ,+ћО&ѕ5_Žн8D%\ њІ…—–•9Цўзo~ЬЉЬЪн•9 •'ю›4–oў5&ю ' œŒœ4Žџ&m+{нžќЇ„52b9НГW–4НВmНГW5‘&г–5@ЦІ„4ІФЇ€5ЇРZ&ё9ЦНВoЦЅНВoНЏgм+нм'KмІ4НЎЉ5нІ9Нй'$žм' С&ž+ŸІTзZžhŸvžмŸ+о!Ь­Ф4o~ЎЉBо~ЌI~Ъ>ъЦзы ы*њ4žŠŸмЬџџнv—Z594v†~зaмvƒџџ&ўх~ДєOжZ*ўл ѓџкj–•9Цўзo~ЬЉЬЪн•9 •'ю›4–oў5&ю ' œŒœ4Žџ&m+{нžќЇ„52b9НГW–4НВmНГW5‘&г–5@ЦІ„4ІФЇ€5ЇРZ&ё9ЦНВoЦЅНВoНЏgм+нм'KмІ4НЎЉ5нІ9Нй'$žм' С&ž+ŸІTзZžhŸvžмŸ+о!Ь­Ф4o~ЎЉџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ********************************************* * E P R O M P R O G R A M M E R * * B Y * * C O L I N S T E A R M A N * * * * (C)1984 C.J.Stearman * ********************************************* * * THIS IS POSITION INDEPENDENT * * * ********************************** ORG $E00 * * ********************************************* * SOME EQUATES * CLEAR EQU $A928 BASIC CLEAR SCREEN ROUTINE BUFFER EQU $1DA USES THE CASSETTE BUFFER NUMK EQU 8 NUMBER OF K IN EPROM TOPADD EQU (NUMK*1024)-1 TOP EPROM ADDRESS * * ********************************************* * * MAINLINE OF PROGRAM * * EPROM LBSR INIT SET UP THE PIAS * NORMAL EPROM MODE IS TO READ THE EPROM MENU JSR CLEAR CLEAR SCREEN LEAX MENUT,PCR POINT TO MENU TEXT LBSR OUTST$ OUTPUT THE MENU * *GET RESPONSE LBSR INSTR$ GET RESPONSE INTO BUFFER * FIRST SEE IF ONLY 1 CHARACTER ENTERED LDA BUFFER+2 SHOULD BE ZERO BNE MENU IT WASNT LDA BUFFER GET FIRST CHARACTER IN BUFFER CMPA #'1 VERIFY ERASE BNE .COPY LBSR ERASE BRA MENU .COPY CMPA #'2 COPY RAM BNE .DUMP LBSR COPY BRA MENU .DUMP CMPA #'3 DUMP EPROM BNE .CELL LBSR DUMP BRA MENU .CELL CMPA #'4 INDIVIDUAL CELL PROGRAM BNE .FILE LBSR CELL BRA MENU .FILE CMPA #'5 CASSETTE FILE DATA RETURN BNE .BASIC LBSR CFILE BRA MENU .BASIC CMPA #'6 IS IT EXIT TO BASIC? BNE MENU NO SO DO MENU AGAIN JSR CLEAR BEFORE GOING TO BASIC RTS EXIT FOR CHECK SO FAR * MENUT FCC /E P R O M P R O G R A M M E R/ FCC /================================/ FDB $0D0D TWO FCC / 1 - VERIFY ERASURE/ FCB $0D FCC / 2 - PROGRAM EPROM FROM MEMORY/ FCB $0D FCC / 3 - DUMP EPROM CONTENTS/ FCB $0D FCC / 4 - PROGRAM INDIVIDUAL CELLS/ FCB $0D FCC / 5 - CASSETTE FILE DATA/ FCB $0D FCC / 6 - RETURN TO BASIC/ FDB $0D0D FCC / SELECTION? / FCB 0 MESSAGE TERMINATOR * * ********************************************* ***********************С}Р(Ьзнаф~и$Ск6Рб~йŠС$нСл•ЫеНи‰Ь&НиIХp~и<еq‘€е”‘€дF'дЋсб‚~иЏбЏ–€ЦЫ~изжЭз#{знР&іKŸНЗ ]'NС$J†=лМ˜Ц“З%:“гУШ“!$+ '0гІнІ~–Д4žh059“4ё'ьфгІнІ5г~аш~ДJЗ vЇBќNэE~Хu4ННЬНЬA5С "Н{иXЬAЎbьˆ4ЦНЕ5НмЦјІ…НЂ‚\&ј o&zе&НЁБ'ћ&2dЦїе9'ЭŒНбiЦ#Ѕ'НЗ8~дВС#%‘С("з€94Ц#з€5Ѕ','ЦЅНВoНбi4Ѕ'НЗ8в5{иг~бŽНЦ_НЦИ4Ни&8Ц ŽйНЙЂНЁБНЂ‚4НЙX5Y'59SURE(Y/N)?DELETEDŽй ЦНЙЂНЙX5~ЦЯCOLФWPOKХFASдSLOзXEбAUTЯSWAаERRORгBAUФLDIвл2л{йN7лGлKлOл`м{мЄмDмtSCANЄDATEЄELINХECODХENAMEЄWPEEЫльлјнAнNнXм4ŽйїНЙœIJŽй!Ю>ЏA† ЇФŽкЏC†ЇEŽй_ЏFŽкЏHoJŽВwЏШЏMoOžŠЏШНн{йЩЬмУ§ŽйъЮнЦ4DНЅš†U—qНЙ\50~ЌRUN"AUTOEXEC"REV(C)1984 C.STEARMAN ъ#~ВwŽйK€с~­дСZ"ёРPС/4НВb5Žй~~ВЮ–o' џ&†ЗJ~{кDХ4ЎgŒЃ'5 №p}J' ++кJ sJзийНЁБ ']&sй _&sи}й'фиізŽкІ…&й в|з J'Y 'n'  &Нкђ И}и&%{кП !}з'zз9' ' ' \&НЁБ з %}и&52b9Žкізm…'|з9oј†@НЂ‚НЙXЦчфŽнЏa~кgJoј~кэŽнŽкц€ч &њ9q~ 'НЗ={л:Ÿ+НВmНЗ=ЏŸ+9Зџз9Зџж9M'~ЎuНЮхџ@nŸНи&hЬ §б§гЅ'НЗ=мR§бЅ'НВmНЗ=мR'E§гЅ&>†џЗI9}I' ќбƒљџ#I9‡pэфѓг§б5{лЕННЬ† НЂ‚ЮкŽн_ІР'Ї€\ ї~к† Ї€\НЁq '& IЬ Žн~Ѓ–‡&НЁС'ћ~ЅkЦНЕ~Ж›ќN4DVTTTT†/Ї€цaФ †/Ї€цфT2b9OР %L љЫ:‹{м00э9НЗ@ь„нR~ˆОW)НВbНЗ@oтƒ%€"ћуlфƒ,+ћк&ѕ5_Žм>D%\ њІ…—–•9Цўзo~ЫЯНГW–4НВmНГW5‘&дС5@ЦІ„4ІФЇ€5ЇРZ&ё9ЦНВoЦЅ{мЋНВoНЏgм+нм'sмІ4НЎЉ5нІ9Ни'$žм' С&ž+ŸІTзZžhŸvžмŸ+о!Ь­Ф4o~ЎЉ<Нбх4НЪ;5НЇщН­3oНЙ\TНЙЂ~Ќe˜Žнp_:ц€J*њ9~ЩъЦзы{н& ы*њ4žŠŸмЬџџнv—Z594v†~жpмvƒџџ&ўю~ДєOжZ*ўф ѓжZ*_ЁНн НЕ'НЅš~Ж›NEXT WITHOUT FORSYNTAXRETURN WITHOUT GOSUB OUT{нЁ OF DATA FUNCTION CALLOVERFLOW OUT OF MEMORYNO SUCH LINE # SUBSCRIPTREDIMENSIONED ARRAY DIVIDE BY 0ILLEGAL DIRECT COMMA{оND TYPE MISMATCHOUT OF STRING SPACESTRING TOO LONGSTRING TOO COMPLEXCAN'T CONTINUE FILE DATA ALREADY OPEN DEVICE NUMBER{о— READ/WRITE FILE MODE FILE NOT OPENREAD PAST END OF FILEDIRECT COMMAND IN FILEUNDEFINED FUNCTION NO SUCH FILERECORD # D{пISK FULLOUT OF BUFFER SPACE WRITE PROTECT FILE NAME DIRECTORY FILE EXISTSFIELD OVERFLOWSET TO NON-FIELDED STRINGVERIFYпACCESS PAST END OF FILEџйŠOT OPENREAD PAST END OF FILEDIRECT COMMAND IN FILEUNDEFINED FUNCTION NO SUCH FILEСР,ЬиаСл Рф~к`С7нЧС+мkЬЏНйgЭНй'Х~йж^‘€ж‘€е4'е™бвo~йвœ–€Цј~йЕзРи{иаР&і4ŸНЗ ]'9С$5†=лМ˜Ц“З%%“гУШ“!$ '0гІнІ~–Д4žh059~ДJЗ vЇBќNэE~ХЂ4ННЬНЭ5С "НЭЎbьˆ4ЦНЕ5НмлЦј{йKІ…НЂ‚\&ј o&zе&НЁБ'ћ&2dЦїе9'ЬЎНвVЦ#Ѕ'НЗ8~е С#%‘С("з€94Ц#з€5Ѕ','ЦЅНВoНвV4Ѕ'НЗ8в5~в{НЦŒНЦх4Нй&8Ц Žй{йЦоНЙЂНЁБНЂ‚4НЙX5Y'59SURE(Y/N)?DELETEDŽйшЦНЙЂНЙX5~ЦќCOLФWPOKХFASдSLOзXEбAUTЯSWAаERRORгBAUФLDIвмм мм!м%м6нQнzннJSCAN{кAЄDATEЄELINХECODХWPEEЫмТмЮнянќн ŽкЭНЙœIJŽйџЮ>ЏA† ЇФŽкцЏC†ЇEŽк=ЏFŽкѕЏHoJŽВwЏШЏMoOžŠЏШНнЬЬн™§ŽкРЮнЦ4DНЅš†U—qНЙ\50{кМ~ЌRUN"AUTOEXEC"REV(C)1984 C.STEARMAN ы#~ВwŽк)€т~­дСX"ёРPС/4НВb5ŽкV~ВЮ–o' џ&†ЗJ~ХМ4ЎgŒЃ'5 №p}J' ++к{л7J sJзийНЁБ ']&sй _&sи}й'фиізŽкІ…&й в|з J'Y 'n'  &НлШ И}и&% !}з'zз9' ' ' \&НЁ{лВБ з %}и&52b9Žкізm…'|з9oј†@НЂ‚НЙXЦчфŽнЏa~л=Joј~лУŽнŽкц€ч &њ9q~ 'НЗ=Ÿ+НВmНЗ=ЏŸ+9Зџз9Зџж9M'~ЎuН{м-ЯСџ@nŸНй&hЬ §б§гЅ'НЗ=мR§бЅ'НВmНЗ=мR'E§гЅ&>†џЗI9}I' ќбƒљџ#I9‡pэфѓг§б5ННЬ† НЂ‚ЮкŽн_ІР'Ї€\ ї~къ† {мЈЇ€\НЁq '& IЬ Žн~Ѓ–‡&НЁС'ћ~ЅkЦНЕ~Ж›ќN4DVTTTT†/Ї€цaФ †/Ї€цфT2b9OР %L љЫ:‹0э9НЗ@ь„нR~ˆОW)НВbНЗ@oт{н#ƒ%€"ћыlфƒ,+ћт&ѕ5_ŽнD%\ њІ…—–•9Цўзo~ЬЉНГW–4НВmНГW5‘&гы5@ЦІ„4ІФЇ€5ЇРZ&ё9ЦНВoЦЅНВoНЏgм+нм'KмІ4НЎЉ5нІ9Нй'$hнžžм' С&ž+ŸІTзZžhŸvžмŸ+о!Ь­Ф4o~ЎЉ~ЌI~Ъ>ъЦзы ы*њ4žŠŸмЬџџнv—Z594v†~зaмvƒџџ&џ~ДєOжZ*џ  ѓџк`W)НВbНЗ@oџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ Ž&#:ƒTHIS IS THE MISSING PROGRAM&J:ƒ FROM "COOKING WITH COCO" PART 1&j:ƒ IN JULY ISSUE OF RAINBOW&Œ:ƒ===========================&А:ƒ BASLOAD BY COLIN J. STEARMAN&Я :ƒTHIS WILL TRANSFER BASIC&э:ƒEXTENDED BASIC AND DISK':ƒ BASIC TO ROM'(:ƒ CORRECT IT, THEN'/2:ƒ COLD START IT.'S<:ƒ IT WILL WORK WITH OR WITHOUT'wF:ƒ EXTENDED BASIC OR DISK BASIC'…P:ƒ IN ROM'ЏZ:ƒNOTE: For Color Basic 1.1/1.2 only.'йd:ƒRevs of Ext. and Disk not important'щn• 200,32511(x† 32512,41044,41092(‚:ƒRELOCATION PROGRAM(xŒ† 26,80,142,128,0,166,132,183,255,223,167,128,140,224,0,39,5,183,255,222,32,239,28,175,57(ˆ–:ƒ PATCH #1(Ї † 198,13,189,160,137,18,18(ЗЊ:ƒ PATCH #2(№Д† 142,127,254,32,10,167,193,90,38,251,206,255,224,57(џО S1,S2,S3)УTTГS1ЋS2ЋS3).Ш:ƒ LOAD RELOCATION PROGRAM)Aв€ AГS1 Ѕ S1Ћ24)Lм CODE)[сTTГTTЋCODE)hц’ A,CODE)p№‹ A)Єѕ… TTДВ117877 Ї ‡"PROGRAM ERROR, PLEASE CHECK":‘)Рњ:ƒ*SUBROUTINE IS NOW IN)д:ƒGO EXECUTE IT)рЂ 32512*  120,1:ƒ ANNOUNCE COMPLETION*/":ƒ OVERLAY PATCH #1 PREVENTS MEMORY TYPE*Z,:ƒ FROM BEING SWITCHED BACK TO ROM/RAM*l6€ AГS2 Ѕ S2Ћ6*w@ CODE*†ETTГTTЋCODE*’J’A,CODE*šT‹ A*ѕY… TTДВ118610 Ї ‡ "ERROR IN PATCH #1, PRESS RESET, RELOAD 'BASLOAD' AND CHECK":’113,0:‘+^:ƒ PATCH #2+h:ƒ INITIALIZE SAM+.r€ AГS3 Ѕ S3Ћ13+9| CODE+F†’ A,CODE+U‹TTГTTЋCODE+]‹ A+И•… TTДВ120656 Ї ‡ "ERROR IN PATCH #2, PRESS RESET, RELOAD 'BASLOAD' AND CHECK":’113,0:‘+еš:ƒ CLEAR COLD START FLAG+сЄ’ 113,0+іЎ:ƒSTART UP BASIC,ИЂ40999,,Т:ƒ THIS IS THE ASSMEBLY SOURCE FOR THE,GЬ:ƒ ABOVE CODE SEGMENTS,jж:ƒ****************************,‚р:ƒ* BASIC RELOCATOR,Џъ:ƒ ORCC #$50 DISABLE INTERRUPTS,оє:ƒ LDX #$8000 BASIC START ADDRESS-ў:ƒLOOP LDA ,X GET A BYTE-,:ƒ STA $FFDF SWITCH TO RAM MAP-T:ƒ STA ,X+ PUT BYTE IN RAM-}:ƒ CMPX #$E000 END OF BASIC-Б&:ƒ BEQ DONE ALL MOVED LEAVE IN RAM MAP-т0:ƒ STA $FFDE SWITCH BACK TO ROM MAP. ::ƒ BRA LOOP CONTINUE MOVING.8D:ƒDONE ANDCC #$AF ENABLE INTERRUPTS.fN:ƒ RTS RUNNING IN ALL RAM SYSTEM.X:ƒ********************************.Нb:ƒ*PATCH 1 PREVENTS SAM FROM BEING SWITCHED.юl:ƒ*BACK TO ROM MAP TYPE DURING BASIC STARTUP/v:ƒ ORG $A054/8€:ƒ LDB #0D ADDRESSES TO SET IN SAM/iŠ:ƒ JSR $A089 JUMP TO NEW SETUP CODE/””:ƒ* SPACE FOR THIS NEW ROUTINE IS MADE/Уž:ƒ* AVAILABLE BY THE REMOVAL OF THE MEMORY/ѓЈ:ƒ* SIZING ROUTINE IN PATCH #2. MEMORY MUST0В:ƒ* BY 32K TO EVEN BE DOING THIS.0@М:ƒ********************************0nЦ:ƒ*REMOVE MEMORY SIZE ROUTINE AND INSTALL0”а:ƒ*SAM SETUP ROUTINE FOR PATCH #10Ўк:ƒ ORG $A0840еф:ƒ LDX #$7FFE MEMORY SIZE1ю:ƒ BRA CONT DO REST OF ORIGINAL CODE1ј:ƒ*******1,:ƒ* INITIALIZE SAM1R :ƒINIT STA ,U++ WRITE TO SAM1x:ƒ DECB COUNTER DOWN1Ѕ :ƒ BNE INIT DONE ALL ADDRESSES?1и*:ƒ LDU #FFE0 RESET U FOR REST OF CODE24:ƒ RTS TO CODE AFTER PATCH #12#>:ƒ NOP FILLER BYTE2PH:ƒCONT EQU * FIRST BYTE OF OLD CODE2dR:ƒ END2\:ƒ**********************************T DONE ALL ADDRESSES?1и*:ƒ LDU #FFE0 RESET U FOR REST OF CODE24:ƒ RTS TO CODE AFTER PATCз.ž]Ÿ#9†—‰‹0ж‹'ў012b–n'†њ&9—‹Ї$Nђ$'І„-&и0І„-&0†—‰ †—‰мa'иJab Я)з‰Дмa“Bƒнa–…š†'?мaƒнa 6з‰ 2І„+&0І„+&0†—‰ –@—‰мa'ab–Š' І„]'џs–‰…& мa'уab–‰џ&–ˆџ&†—‰ мa‘a&†—‰ † —‰–‰…' &#Й–‰„§&–Š'01§*2b–n'џ92b§#–‰'B–œ.>'M–‰„њ&Eмa‘a'–n'r–‰„ў—‰ Д' b( b œ*–n'WZ–b—02bќз–‰Š—‰Iмaн02bќТ–n&–Œ&ч –В&смa‘a&кС.АС№-Ќ–Š'мa&Є–‰ 'ž†€—‰2bќ”†јЉ†јЄ–‰‰ ˆ+šˆšŠ‹€—/Х€'жb& Ц„ ˆ+кˆкŠ Фк/з/9ІˆќЁ$_І„X'Ы Y'Ы U' Ы S'ˆ90зˆў9І,&І„ЦA'ЦB' Ц D'90ў9І„P&(ІC&"ІR'ќC$0Ц ў9Іќ3$0Ц ќ99І€,' ]' ' &ю09†џ—™ ™ž#І„['RџW$MџЂ$H†џ—Q4џQцŸ#5Ÿ#С,'1 œ'.+M&жaбš'†їž M&жВ&жaбš&–™'ж.Фз.–b B–™&ж.Ыз.9ž#І„#&ё0Ÿ#ж.Сƒ%'*СŒ'&СŽ'"СУ'СЬ'СЮ'ФС "–n'€–b—/ћ –n'pžaŸ/ћ 2b9/E$C%9њџС'2›š/—/І€,'уњы/#$!%њнС'yš/—/І€,'уњЩ/њФ І€#& Ÿ#]–b—/ў99ж+&Ž/ žjІŠ€Ї9†џ—Q Ž<Ÿjž!4 А$Uкž#І€,&J2b–bц€С &—,Ц з.4њh5J'%—+†—ц€4 ,&С &—,Ц žjч€ŸjњD5 +&с†—o—+—,Q95ц€І€—.4њ&5с„'шз+†—І€Ÿ[žj4Ёр'а 'ЬЇ€ŸjŒ='љўž[ рК† і Ž<ц€4G—.†—С ''4љи54С 'сф'Ї Œ=$ 4љП5 хџz љГџro ŸjŒ=%Ћ2a9ц€С<'˜9oтц€С>'ІфHHHHЇфР0С #Рыфчф ф5‚†џ—…њ—†џ—…–1—2–0—1–/—0–.—/†—.љU†џ—†њuр .9†џ—…њl дІ€ 'џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ ШЧA(ЧЩЦ!Ф#Ц'&СЦ)*+,Щ.ТТТТ4Т6џ78С:;Щ=>?@ТBСџE BAS3;ЉUTOEXECBAS5LEANUP BAS9ЃUPERBAKBIN:EЉTCHORD CLRџ8ЇTCHCOPYBAS;кDISKPTCHMACџ†ЉџџџџџџџџџџџџџџBASLOAD BAS ‘ЉSERIAL0 BINЋЉSERIAL1 BINєЉPARA11 BASЉSERL10 BAS2bЉSERL11 BAS9EЉPARA10 BAS<`ЉPARA0 BIN%ЉPARA1 BINNЉSYSTEM MACџ"ШЉSYSSAVE MACџ$ЉEPROMPRGMACџГЉEPROMPRGBIN-TЉSYSTEM BIN/`ЉSYSSAVE BIN0ЂЉDATELOADBASџ1бЉTEXT DOCџ&ЉџџџџџџџџџџџџџџRUNME BAS3;ЉUTOEXECBAS5LEANUP BAS9ЃUPERBAKBIN:EЉTCHORD CLRџ8ЇTCHCOPYBAS;кUTOEXECBAS<`ЉATCHORDCLRџ=jџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ NAM SYSTEM OPT NOG * *THIS WILL LOAD A SYSTEM DISK *IN DRIVE 0 INTO 64K RAM AND *START IT UP *THE SYSTEM SHOULD HAVE BEEN SAVED *BY "SYSSAVE" AND OCCUPY THE FIRST 15 *GRANULES ON THE DISK. A FLAG IN THE *FIRST BYTE OF TRACK 17 SECTOR 1 TELLS *IF THE DISK CONTAINS A SYSTEM *THIS WILL RESTORE FROM $8000 TO $FF00 ***************************** * * ORG $E00 * *SOME EQUATES CHROUT EQU $A002 POLCAT EQU $A000 BASIC EQU $8000 DSKCON EQU $C004 DCOPC EQU $C006 CLEAR EQU $A928 DIRECT JUMP TO CLEAR ROUTINE ROM EQU $FFDE RAM EQU $FFDF COLD EQU $A027 * *SET UP FOR DRIVE 0 SYSTEM LDY DCOPC CLR 1,Y DRIVE NUMBER * *CLEAR SCREEN JSR CLEAR * *PUT UP TITLE LDX #TITLE LBSR DISPLY * * *CHECK FOR SYSTEM DISK BSR SYSCHK *RETURN "A" AS $55 IF SYSTEM DISK CMPA #$55 BEQ DISKOK LDX #NOSYS POINT X TO NO SYSTEM DISK MESSAGE LBRA DISPLY OUTPUT IT RTS * *ASK FOR WHICH SYSTEM TO BOOT DISKOK LDX #BOOT LBSR DISPLY POLAGN JSR [POLCAT] GET RESPONSE BEQ POLAGN NONE YET? PSHS A SAVE ANSWER BSR GETSYS GET SYSTEM OFF DISK * CLR $FF40 TURN OFF DRIVE ORCC #$50 DISABLE INTERRUPTS STA RAM SWITCH TO RAM CLR $71 CLEAR TO COLD START PULS A RECOVER ANSWER CMPA #'B IS IT BASIC? BNE EORD CLR $8000 SET UP COLOR BASIC JMP COLD GO TO IT EORD CMPA #'E IS IT EXTENDED BASIC BNE ISITD CLR $C000 SET UP FOR EXTENDED BASIC JMP COLD GO TO IT ISITD CMPA #'D LBEQ COLD GO TO DISK BASIC BRA POLAGN **************************** *SYSTEM DISK CHECK SYSCHK LDA #17 TRACK STA 2,Y LDA #1 SECTOR STA 3,Y LDD #BUFFER STD 4,Y LDA #2 READ OPCODE STA ,Y JSR [DSKCON] TST 6,Y BNE ERRORS *SEE IF FIRST BYTE IS $55 LDA BUFFER RTS ************************** *DISPLAY ROUTINE DISPL1 JSR [CHROUT] DISPLY LDA ,X+ BNE DISPL1 RTS ************************** * SYSTEM LOAD ROUTINE GETSYS LDX #BASIC POINT X AS START OF BASIC *SET UP DRIVE CLR TRACK CLR SECTOR INC SECTOR TO SECTOR 1 * DOTFR LDA TRACK SET UP TRACK STA 2,Y LDA SECTOR SET TO SECTOR STA 3,Y *READ SECTOR JSR [DSKCON] TST 6,Y BNE ERRORS * *MOVE BUFFER INTO RAM AREA BSR BUFMOV * *INCREMENT VALUES LDA TRACK IS IT LAST TRACK? CMPA #6 HIGHEST FULL TRACK BLO NOTLST *WE GOT HERE BECAUSE THIS IS ON TRACK 7 LDA SECTOR LAST SECTOR CMPA #2 ONLY NEED ONE SECTOR ON TRACK 7 BNE INCMT GO TO INCREMENT RTS * NOTLST LDA SECTOR LAST SECTOR IN OTHER TRACKS? CMPA #18 BEQ NXTTRK * *GOT HERE BECAUSE NOT ALL SECTORS READ YET INCMT INC SECTOR BRA DOTFR CONTINUE TRANSFER * *GOT HERE BECAUSE LAST SECTOR NXTTRK CLR SECTOR INC SECTOR INC TRACK BRA DOTFR CONTINUE TRANSFER *********** ERRORS LDX #ERR BSR DISPLY RTS *********** * THIS MOVES 256 BYTES FROM BUFFER *TO LOCATION POINTED TO BY REG X BUFMOV LDU #BUFFER POINT U TO BUFFER ORCC #$50 DISABLE INTERRUPTS STA RAM SWITCH TO RAM STORE LDA ,U+ GET BYTE AND INCR U STA ,X+ STORE & INCR X CMPU #BUFFER+256 ALL DONE BNE STORE CONTINUE MOVING STA ROM SWITCH BACK TO ROM ANDCC #$AF ENABLE INTERUPTS RTS ********************** *STORAGE BUFFER RMB 256 TRACK RMB 1 SECTOR RMB 1 ERR FCS *<0D>READ/WRITE ERROR<0D><0D>* NOSYS FCS /<0D>NO SYSTEM ON DISK IN DRIVE 0<0D>/ TITLE FCS / DISK BASIC LOADER<0D><0D>/ BOOT FCS /BASIC, EXTENDED OR DISK(B,E,D)?/ * END SYSTEM , DISK BASIC LOADER<0D><0D>/ BOOT FCS /BASIC, EXTENФ  ћќ'+'ѓ:'ѓ.'я/&ы94ЦїoћЅ­Ÿ ћЅ5”4Ž0)–РІ†Зoћк}p&„'є5 Р&†5іoћž РŽ=_жРX:ь„н Ы–Р%†хнŽ0)LІ†ЗoОІž!ПІŽ-‰ћіПІћQ} s'іo†Iћ:Ž=_жРX:мэ„м@н Р9BLSGNYMPKW COMPUTERWARE ASSEMBLER V3.3 (C) 1983 ILLEGAL FILE NAMEDELETE OLD BINARY? MAC:  SYMBOL TABLE:NO ERROR(S) DETECTEDMACROCMD=1Œ1И1Щ1Ї1к1ѕ2s1š22%2K2a2ƒ22Ќ2Т2м2є3 3"373E3\3j33”3Б>>>UNKNOWN ERRORSYNTAX ERRORUNKNOWN MNEMONICUNDEFINED SYMBOLDUPLICATE SYMBOLILLEGAL CHARACTER IN LABELILLEGAL CHARACTER IN OPERANDBAD INDEX VARIABLEIMPROPER CHARACTER FOR SPECIFIED BASEUNKNOWN OPTION SWITCHTOO MANY OPERANDSBRANCH TOO LONGPHASE ERRORREGISTER SPECIFICATION ERRORSYMBOL TABLE OVERFLOWCONDITIONAL NESTING ERRORMISSING MACRO ARGUMENTSMACRO T OPT NOL NAM SYSSAVE TTL COOKING WITH COCO PART 1/LISTING 2 (C)1984 COLIN J. STEARMAN OPT NOG,LIS * * THIS LOADS BASIC FROM $8000 * UP TO $FF00 ONTO A BLANK * FORMATTED DISK. IT USES *THE FIRST 15 GRANULES. * 14 gran * 9 sectors * 256 bytes = 32256 * plus * 1 sector = 32512 byte which cover from * $8000 to $FF00. All of accessible upper * memory * *************************** *SOME EQUATES RETURN EQU $C002 BASIC EQU $8000 DSKCON EQU $C004 DCOPC EQU $C006 CHROUT EQU $A002 POLCAT EQU $A000 CLEAR EQU $A928 DIRECT JUMP TO CLEAR ROUTINE * ORG $E00 * SYSSAV CLR TRACK RESET TRACK POINTER CLR SECTOR CLEAR SECTOR POINTER INC SECTOR SET T0 1 * JSR CLEAR CLEAR SCREEN LEAX TITLE,PCR LOAD TITLE MESSAGE POINTER INTO X LBSR DISPLY DISPLAY IT * ASKDNO LEAX DRIVNO,PCR ASK FOR DRIVE NUMBER LBSR DISPLY REPET JSR [POLCAT] GET DRIVE NUMBER BEQ REPET JSR [CHROUT] ECHO ENTRY CMPA #'0 IS IT LOWER THAN ASCII ZERO? BLO ASKDNO YES CMPA #'1 IS IT HIGHER THAN ASCII 1? BHI ASKDNO YES LDY DCOPC POINT Y AT PARAMETERS SUBA #'0 REDUCE TO A NUMBER STA 1,Y SELECT DRIVE * * *GET SECTOR1 TRACK17 TO SEE IF *THIS WAS A SYSTEM DISK LDA #17 TRACK STA 2,Y LDA #1 SECTOR STA 3,Y LDD #BUFFER STD 4,Y LDA #2 READ CODE STA ,Y JSR [DSKCON] TST 6,Y ERRORS? LBNE ERRORS LDB BUFFER TEST FOR $55 *GET EXISTING DISK MAP INTO BUFFER * LBSR GETMAP TST 6,Y ANY ERRORS LBNE ERRORS CMPB #$55 BNE NEWSYS LDX #BUFFER+15 BRA OUTMAP * *CHECK FOR 255 IN FIRST 15 BYTES *IF NOT ALL 255 THEN DISK NOT AVAILABLE. * NEWSYS LDX #BUFFER POINT X TO BUFFER NXTBYT LDA ,X+ GET BYTE CMPA #$FF IS IT 255? BNE NOTAV OUTPUT NOT AVAILABLE MESSAGE CMPX #BUFFER+15 DONE ALL 15? BLO NXTBYT * *SET UP MAP AND WRITE OUT * OUTMAP LDA #$C6 LAST GRANULE POINTER STA ,-X LDA #15 15 AT 14 ETC. DONEXT DECA STA ,-X CMPX #BUFFER DONE ALL 15? BHI DONEXT * *PUT IT ONTO DISK LBSR PUTMAP TST 6,Y ANY ERRORS? LBNE ERRORS ***** *MARK DISK AS A SYSTEM DISK BY *SETTING BYTE1 IN SECTOR 1 TO $55 IN TRACK 17 LDA #1 SECTOR STA 3,Y *SET UP DRIVE OP CODE LDA #$55 MARKER STA BUFFER JSR [DSKCON] TST 6,Y BNE ERRORS ********* LDA #3 WRITE CODE STA ,Y *POINT X AT START OF BASIC LDX #BASIC * * START TRANSFER * NXTSCT LDA TRACK GET TRACK NUMBER STA 2,Y LDA SECTOR GET SECTOR NUMBER STA 3,Y STX 4,Y BUFFER ADDRESS * JSR [DSKCOС}Р(Ьзнаф~и$СкZРб~й”С$нnСлЙЫеНи‰Ь&НиIХp~и<еq‘€е”‘€дF'дЋсб‚~иЏбЏ–€ЦЫ~изжЭз#{знР&іKŸНЗ ]'NС$J†=лМ˜Ц“З%:“гУШ“!$+ '0гІнІ~–Д4žh059“4ё'ьфгІнІ5г~аш~ДJЗ vЇBќNэE~Хu4ННЬНЬA5С "Н{иXЬAЎbьˆ4ЦНЕ5Нм)ЦјІ…НЂ‚\&ј o&zе&НЁБ'ћ&2dЦїе9'ЭŒНбiЦ#Ѕ'НЗ8~дВС#%‘С("з€94Ц#з€5Ѕ','ЦЅНВoНбi4Ѕ'НЗ8в5{иг~бŽНЦ_НЦИ4Ни&8Ц ŽйНЙЂНЁБНЂ‚4НЙX5Y'59SURE(Y/N)?DELETEDŽй ЦНЙЂНЙX5~ЦЯCOLФWPOKХFASдSLOзXEбAUTЯSWAаERRORгBAUФLDIвPAR{йNALLEЬлVл[лkлoлsл„мамљмhм˜мŸSCANЄDATEЄELINХECODХENAMEЄWPEEЫммн–нЃн­мXŽкНЙœIJŽй!Ю>ЏA† ЇФŽк4ЏC†ЇEŽйiЏFŽкCЏHoJŽВwЏШЏM{йЩoOžŠЏШНнsЬн§ЬмЅ§hŽџ&†џЇ„†,Ї†ЇЬЪн•ŽкЮнЦ4DНЅš†U—qНЙ\50~ЌRUN"AUTOEXEC"REV(C)1984 C.STEARMAN ы#~ВwŽйS€с~­дС{кDZ"ёРPС/4НВb5Žйˆ~ВЮ–o' џ&†ЗJ~Х4ЎgŒЃ'5 №p}J' ++кJ sJзийНЁБ ']&sй _&sи}й'фиізŽкІ…&{кПй в|з J'Y 'n'  &Нл И}и&% !}з'zз9' ' ' \&НЁБ з %}и&52b9Žкізm…'|з9oј†@НЂ‚НЙXЦчфŽнЏa{л:~к‹Joј~лŽнŽкц€ч &њ9q~ 'НЗ=Ÿ+НВmНЗ=ЏŸ+9Зџз9Зџж9M'~ЎuНЮхџ@nŸНи&hЬ §б§гЅ'НЗ=мR§бЅ'НВmНЗ=мR'E§гЅ&>†џ{лЕЗI9}I' ќбƒљџ#I9‡pэфѓг§б5ННЬ† НЂ‚ЮкŽн_ІР'Ї€\ ї~к8† Ї€\НЁq '& IЬ Žн~Ѓ–‡&НЁС'ћ~ЅkЦНЕ~Ж›ќN4DVTTT{м0T†/Ї€цaФ †/Ї€цфT2b9OР %L љЫ:‹0э9НЗ@ь„нR~ˆОW)НВbНЗ@oтƒ%€"ћПlфƒ,+ћЖ&ѕ5_ŽмbD%\ њІ…—–•9Цўзo~ЫЯЬЪн•9 •'юŸ{мЋ4–oў5&ю“ ' œŒœ4Žџ&m+ќЇ„52b9НГW–4НВmНГW5‘&дl5@ЦІ„4ІФЇ€5ЇРZ&ё9ЦНВoЦЅНВoНЏgм+нм'sмІ4НЎЉ5нІ9Ни'$žм' С&ž{н&+ŸІTзZžhŸvžмŸ+о!Ь­Ф4o~ЎЉ<Нбх4НЪ;5НЇщН­3oНЙ\TНЙЂ~Ќe˜ŽнХ_:ц€J*њ9~ЩъЦзы ы*њ4žŠŸмЬџџнv—Z594v†~жpмvƒџџ&ўН~{нЁДєOжZ*ўГ ѓжZ*_ЁНнaНЕ'НЅš~Ж›NEXT WITHOUT FORSYNTAXRETURN WITHOUT GOSUB OUT OF DATA FUNCTION CALLOVERFLOW OUT OF{о MEMORYNO SUCH LINE # SUBSCRIPTREDIMENSIONED ARRAY DIVIDE BY 0ILLEGAL DIRECT COMMAND TYPE MISMATCHOUT OF STRING SPACES{о—TRING TOO LONGSTRING TOO COMPLEXCAN'T CONTINUE FILE DATA ALREADY OPEN DEVICE NUMBER READ/WRITE FILE MODE FILE NOT OPENRE{пAD PAST END OF FILEDIRECT COMMAND IN FILEUNDEFINED FUNCTION NO SUCH FILERECORD # DISK FULLOUT OF BUFFER SPACE WRITE PROlпTECT FILE NAME DIRECTORY FILE EXISTSFIELD OVERFLOWSET TO NON-FIELDED STRINGVERIFYACCESS PAST END OF FILEџй”OT OPENRE{пAD PAST END OF FILEDIRECT COMMAND IN FILEUNDEFINED FUNCTION NO SUCH FILERECORD # DISK FULLOUT OF BUFFER SPACE WRITE PROlпTECT FILE NAME DIRECTORY FILE EXISTSFIELD OVERFLOWSET TO NON-FIELDED STRINGVERIFYACCESS PAST END OF FILEџй”џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџN] WRITE BLOCK TST 6,Y CHECK FOR ERRORS BNE ERRORS REPORT THEM * *INCREMENT VALUES LEAX 256,X MOVE BUFFER POINTER LDA TRACK IS IT LAST TRACK? CMPA #6 BLO NOTLST *WE GOT HERE BECAUSE THIS IS THE LAST TRACK(7) LDA SECTOR CMPA #2 LAST SECTOR IN TRACK 6 BEQ CLOSE BRA INCMT GO TO INCREMENT * NOTLST LDA SECTOR CMPA #18 BEQ NXTTRK *GET HERE BECAUSE NOT ALL SECTORS DONE YET INCMT INC SECTOR BRA NXTSCT DO NEXT SECTOR * *GOT HERE BECAUSE LAST SECTOR NXTTRK CLR SECTOR INC SECTOR INC TRACK BRA NXTSCT ***************** ERRORS LEAX ERR,PCR BSR DISPLY RTS ***************** NOTAV LEAX NTAV,PCR BSR DISPLY RTS ***************** CLOSE CLR $FF40 TURN OFF MOTOR RTS ***************** * DISPL1 JSR [CHROUT] DISPLAY ON SCREEN DISPLY LDA ,X+ GET CHARACTER BNE DISPL1 RTS * GETMAP LDA #2 READ OP CODE STORE STA ,Y BRA CONT PUTMAP LDA #3 WRITE OPCODE BRA STORE CONT LDA #17 SELECT TRACK STA 2,Y LDA #2 SELECT SECTOR STA 3,Y LDX #BUFFER BUFFER ADDRESSS STX 4,Y JSR [DSKCON] RTS ********************** * * VARIABLES AND STRINGS TRACK RMB 1 SECTOR RMB 1 BUFFER RMB 256 TITLE FCS / BASIC TO DISK<0D> STORAGE PROGRAM<0D><0D>/ DRIVNO FCS /<0D>DRIVE NUMBER (0 OR 1)? / ERR FCS *<0D><0D>READ/WRITE ERROR<0D>* NTAV FCS /<0D>DISK NOT FREE FOR SYSTEM STORAGE<0D>/ * END SYSSAV џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџPRESSED? CMPA #3 BREAK BEQ DMPXT EXIT ROUTINE LBRA DMLOOP CONTINUE OUTPUT * NXLINE DEC COUNT LINE COUNTER LBNE DMLOOP NOT DONE YET LDA #16 RESE LINE COUNT STA COUNT DWAIT JSR [POLCAT] WAIT FOR KEY BEQ DWAIT NO KEY YET CMPA #3 IS IT BREAK LBNE DMLOOP NOSO CONTINUE * DMPXT LEAS 3,S CLEAN STACK LDA #$0D CR AT END JSR [CHROUT] ALSO CLRS BUFFER IN PRINTER CLR DEVNUM RESET TO SCREEN LEAX EKEY,PCR ENTER MESSAGE LBSR INPUT$ LBRA DUMP RESTART **** ************** * OUTPUT SPACES BY COUNT IN B SPACES LDA #32 SPACE OLOOP JSR [CHROUT] DECB COUNT LBNE OLOOP RTS ************* DMPTTL FCC / EPROM DUMP/ FCB $0D FCS / ==========<0D><0D>/ DSTRT FCS /START ADDRESS: / ESTRT FCS / END ADDRESS: / DEV FCS /(P)rinter or (S)creen? / *********************************************** ***************************************** * INSPECTS AND PROGRAMS INDIVIDUAL CELL * ***************************************** * * CELL JSR CLEAR SCREEN LEAX CELMSG,PCR GET TITLE LBSR OUTST$ * * SET COUNT TO 1 AND START TO RAM LOCATION * TO STORE ENTERED DATA TEMP EQU TARGET+2 * LDD #1 SET COUNT STD COUNT LDD #TEMP GET TEMPORARY ADDRESS STD START PUT IT AS START * * CLEAR TARGET TO ZERO CLR TARGET CLR TARGET+1 * * DISPLAY DATA AT TARGET LOCATION DISDAT LDA #$0D CR JSR [CHROUT] MOVE DOWN A LINE LDD TARGET GET EPROM ADDRESS STA HIADD STB LOWADD * TFR D,X DISPLAY ADDRESS LBSR HEXOUT LBSR MOVCRS PLACE TO RIGHT * LDB DATARG GET EPROM DATA * PSHS B SAVE VALUE LBSR HXPAIR MAKE IT A HEX STRING LDX #BUFFER LBSR OUTST$ OUTPUT CONTENTS * LBSR MOVCRS MAKE A SPACE PULS A RECOVER CHARACTER IN A CMPA #32 LOWEST PRINTABLE CHARACTER BHI CHARCT OUTPUT AS A CHARACTER LDA #'. REPLACE BY A DOT CHARCT JSR [CHROUT] LBSR MOVCRS OVER A PLACE LDA #'? PROMPT JSR [CHROUT] DISPLAY IT * GTKEY JSR [POLCAT] GET RESPONSE BEQ GTKEY WAIT FOR KEY * * VALID RESPONSES ARE: * ^ PREVIOUS ADDRESS (WRAPS AROUND) * DOWN ARROW NEXT ADDRESS DITTO * N ENTER NEW ADDRESS * P PROGRAM THIS ADDRESS * X EXIT TO MENU ************************************** * CMPA #$5E UP ARROW BNE .DARROW LDD TARGET GET TARGET VALUE SUBD #1 REDUCE BY ONE BPL NOTNEG NO NEED TO WRAP LDD #TOPADD TO WRAP ADDRESS NOTNEG STD TARGET BRA DISDAT DISPLAY IT ******* .DARROW CMPA #$0A DOWN ARROW BNE NEWADD GET NEW ADDRESS FOR TARGET LDD TARGET ADDD #1 INCREASE IT CMPD #NUMK*1024 WRAPPED AROUND? BNE NTOVER CLRA CLRB NTOVER STD TARGET BRA DISDAT ******* NEWADD CMPA #'N ENTER A NEW ADDRESS BNE NEWDAT TOOHIG LEAX NADDRS,PCR GET NEW ADDRESS MESSAGE LBSR INPUT$ GET NEW VALUE LBSR HEXINT GET VALUE IN X * CHECK B FOR ERROR CODE B<>0 FOR ERROR TSTB LBNE DISDAT BAD SO DO NOTHING CMPX #TOPADD MUST NOT BE HIGHER THAN THIS BHI TOOHIG STX TARGET LBRA DISDAT GO DISPLAY IT ****** NEWDAT CMPA #'P PROGRAM THE LOCATION BNE DEXIT EXIT ROUTINE TOBIG LEAX NDATA,PCR HEW DATA MESSAGE LBSR INPUT$ GET DATA LBSR HEXINT GET VALUE IN X * TEST B FOR ERROR CODE B<>0 FOR ERROR TSTB LBNE DISDAT DO NOTHING CMPX #$FF HIGHEST ALLOWED DATA BHI TOBIG TFR X,D STB TEMP FOR PROGRAMMING LBSR PROGRM TRY TO PROGRAM IT TSTB LBEQ DISDAT ALL OK CMPB #1 NOT ERASED BEQ NOERSD NOT ERASED *** * BAD EPROM LEAX BADPRM,PCR .WRITE LBSR OUTST$ LDX TARGET LBSR HEXOUT LBRA DISDAT * NOERSD LEAX UNERSD,PCR UNERASED MESSAGE BRA .WRITE ********* DEXIT CMPA #'X IS IT EXIT? LBNE DISDAT NO SO REDISPLAY RTS RETURN TO MENU ********* ******* * THIS MOVES CURSOR 1 RIGHT IF NOT AT END OF SCREEN MOVCRS LDD CURLOC CMPD #$5FF AT END? BEQ ATEND ADDD #1 MAKE A SPACE STD CURLOC ATEND RTS ***************************************** CELMSG FCC / INDIVIDUAL CELL PROGRAMMING/ FCB $0D FCS / ===========================<0D><0D>/ NADDRS FCS /<0D>NEW ADDRESS? / NDATA FCS /<0D>NEW DATA? / ********************************************* * RETURNS CASSETTE FILE DATA ********************************************* * * THIS RETURNS THE ADDRESSES OF THE LAST CLOADM * * STADD EQU 487 START ADDRESS ENDADD EQU 126 END ADDRESS EXECAD EQU 485 EXEC ADDRESS * CFILE JSR CLEAR SCREEN LEAX FILMSG,PCR HEADING LBSR OUTST$ LDX STADD GET START ADDRESS LBSR HEXOUT OUTPUT IT * LEAX ENDTXT,PCR GET END MESSAGE LBSR OUTST$ LDX ENDADD LEAX -1,X MOVE TO ACTUAL END LBSR HEXOUT * LEAX EXEMSG,PCR GET EXE MESSAGE LBSR OUTST$ LDX EXECAD LBSR HEXOUT * * MOVE CURSOR DOWN 2 LINES LDD CURLOC ADDD #32 STD CURLOC * LEAX EKEY,PCR GET ENTER MESSAGE LBSR INPUT$ * RTS ********************************************* FILMSG FCC / CASSETTE FILE DATA/ FCB $0D FCC / ==================/ FDB $0D0D FCS / START ADDRESS: / ENDTXT FCS /<0D> END ADDRESS: / EXEMSG FCS /<0D> EXECUTE ADDRESS: / ********************************************* ******************************************** * U T I L I T Y L I B R A R Y * ******************************************** ********************************************* *INSTR$ GETS A STRING FROM KEYBOARD AND PUTS* *IT INTO "BUFFER" TERMINATED BY A ZERO BYTE.* ********************************************* * BASIC POINTERS CURLOC SET $88 CURSOR LOCATION POLCAT SET $A000 KEYBOARD POLL CHROUT SET $A002 CHARACTER OUTPUT DEVNUM SET $6F 0 FOR SCREEN, -2 FOR PRINTER ********************************************* INSTR$ LDY #BUFFER POINT Y TO BUFFER START CRSR BSR CURSOR PUT BLACK SQUARE UP GETKEY JSR [POLCAT] LOOK FOR KEY BEQ GETKEY NOTHING ENTERED YET CMPA #$8 BACKSPACE BNE CHKRET CMPY #BUFFER AT START OF BUFFER BEQ CRSR NO BACKSPACE POSSIBLE LDA #$60 BLANK STA [CURLOC] STORE AT CURRENT LOCATION LEAY -1,Y DECREASE CURSOR LOCATION LDD CURLOC GET CURSOR LOCATION SUBD #1 REDUCE D BY ONE STD CURLOC RESET CURSOR LOCATION BRA CRSR * * IF CR THEN PUT INTO BUFFER, WITH A ZERO BYTE * THEN EXIT CHKRET CMPA #$0D CARRIAGE RETURN BNE INKEY NO SO PUT INTO BUFFER STA ,Y+ PUT CR INTO BUFFER JSR [CHROUT] PUT RETURN ON SCREEN .EXIT CLR Y SET LAST BYTE TO ZERO RTS * * PUT CHARACTER INTO BUFFER, CHECK FOR * SPACE FIRST. IF BUFFER HAS 254 PUT IT * THEN SET 256 BYTE TO ZERO AND EXIT * INKEY CMPA #32 FIRST PRINTABLE CHARACTER BLO CRSR NOT PRINTABLE SO LOOP STA ,Y+ PUT INTO BUFFER JSR [CHROUT] OUTPUT ENTERED CHARACTER CMPY #BUFFER+254 BUFFER FULL? BLO CRSR NOT FULL BRA .EXIT * * CURSOR ROUTINE CURSOR LDA #128 BLACK SQUARE STA [CURLOC] RTS ********************************************* ********************************************* *OUTST$ TAKES A STRING POINTED TO BY REG X * *AND PUTS IT TO OUTPUT DEVICE. TERMINATED * *BY A ZERO BYTE IN BUFFER * ********************************************* * BASIC POINTER CHROUT SET $A002 OUTPUT ROUTINE * .DSPLY JSR [CHROUT] OUTPUT CHARACTER OUTST$ LDA ,X+ GET CHARACTER BNE .DSPLY DISPLAY IF NOT ZERO RTS ********************************************* ********************************************* *HEXINT GETS A HEX NUMBER FROM BUFFER AND * *PUTS IT IN REG X. REG B IS ZERO IF NO * *ERROR. WILL GET FIRST 4 CHARACTERS IN * *BUFFER OR TO OR ZERO BYTE * ********************************************* HEXINT LDY #BUFFER POINT Y TO BUFFER LDX #0 CLEAR X FOR NUMBER LDA #4 CHARACTER COUNTER GTHEX LDB ,Y+ GET CHARACTER FROM BUFFER BEQ HEXIT AT END OF BUFFER CMPB #$0D IS IT A ? BEQ HEXIT YES SO AT END CMPB #'0 IS IT LESS THAN 0? BLO HEXERR NO SO ERROR CMPB #'9 GREATER THAN 9 BHI ALPHA MAY BE A - F SUBB #'0 MAKE A NUMBER * *B NOW HAS VALUE ENTERED HEX EXG D,X SWAP REGISTERS FOR SHIFT * SHIFT D LEFT 4 PLACES RPT 4 ASLB ROLA ENDR EXG D,X PUT IT BACK INTO X ABX ADD VALUE INTO REGISTER X DECA BNE GTHEX HEXIT CLRB RTS ** ALPHA CMPB #'A LESS THAN "A" BLO HEXERR YES SO ERROR CMPB #'F HIGHER THAN "F" BHI HEXERR YES SO ERROR SUBB #'A-10 SET TO VALUE BRA HEX ** HEXERR LDB #1 LDX #0 RTS ********************************************* ********************************************* * HXPAIR CONVERTS CONTENTS OF REG B INTO A * * STRING IN BUFFER TERMINATED BY A ZERO * * BYTE. NO IS ADDED TO THE STRING * ********************************************* * HXPAIR LDY #BUFFER POINT TO BUFFER * GET HIGH NIBBLE FROM B TFR B,A INTO A RPT 4 MOVE DOWN 4 PLACES LSRA ENDR * BSR HEXASC TFR B,A GET LOW NIBBLE ANDA #$0F GET LOW 4 BITS BSR HEXASC CONVERT AND STORE CLR Y SET NEXT BUFFER LOCN TO 0 RTS * * * HEX TO ASCII CONVERSION ROUTINE HEXASC CMPA #9 IS DATA 9 OF LESS? BLS ASCZ ADDA #'A-'9-1 NO,ADD OFFSET FOR LETTERS ASCZ ADDA #'0 CONVERT DATA TO ASCII STA ,Y+ PUT INTO BUFFER RTS * ********************************************* ********************************************* * INPUT$ OUTPUTS A STRING POINTED TO BY REG * * X, THEN RECEIVES A STRING FROM KEYBOARD * * AND PUTS IT INTO "BUFFER" TERMINATED WITH * * A ZERO. IF X IS ZERO NO STRING IS OUTPUT.* * MAX. CHARACTERS IN BUFFER IS 255. * ********************************************* * BASIC POINTERS CURLOC SET $88 CURSOR LOCATION POLCAT SET $A000 KEYBOARD POLL CHROUT SET $A002 CHARACTER OUTPUT DEVNUM SET $6F 0 FOR SCREEN, -2 FOR PRINTER ********************************************* * * INPUT$ CMPX #0 ANY TEXT TO OUTPUT BEQ NOTEXT LBSR OUTST$ OUTPUT TEXT STRING NOTEXT LBSR INSTR$ GET INPUT STRING RTS * * * ********************************************* ********************************************* * HEXOUT TAKES CONTENTS OF X AND PUTS IT ON * * SCREEN. USES HXPAIR TO DO IT IN 2 PARTS * * OUTST$ IS ALSO USED * ********************************************* HEXOUT TFR X,D PUT DATA INTO REG D EXG A,B PUT HIGH BYTE IN B LBSR HXPAIR PUT INTO SCREEN PSHS X PRESERVE VALUE LDX #BUFFER POINT TO START OF STRING LBSR OUTST$ PUT OUT THE STRING PULS D RECOVER VALUE IN D LBSR HXPAIR PUT LOW BYTE ON SCREEN LDX #BUFFER POINT TO START OF STRING LBSR OUTST$ PUT OUT THE STRING RTS * ********************************************* * TTL 2764 EPROM PROGRAMMER By C.J.STEARMAN (C)1984 NAM EPROM.MAC * END EPROM PROM.MAC * END EPROM PROM.MAC * END EPROM PROM.MAC * {8НЉ(0C NњЖм&юЖк1& т2& й3&C а4&Ш Ч5& О6&КНЉ(9E P R O M P R O G R A M M E R=============={{================== 1 - VERIFY ERASURE 2 - PROGRAM EPROM FROM MEMORY 3 - DUMP EPROM CONTENTS 4 - PROGRAM INDIVIDUAL{і CELLS 5 - CASSETTE FILE DATA 6 - RETURN TO BASIC SELECTION? OЦџїџDїџFЦїџBџ@† †4ЗџC†ЗџB9ЦŽџAЇZ&ћ9ЖџCŠЗџCŽ{qџџ0&ќ4`Обўе_Ог'ќˆУ§ˆ03AЗџFїџD46ќгƒ'ьфОˆ0Пˆ56ц Жџ@џ'Ц FЖџBŠЗџBџA†џЗџ@†ЗџAїџ@AџAџ@†ЗџAЖџB{ь„§ЗџBёџ@'Ц ­Ÿ '_'0&ˆ_3_џе1?ПбЖџC„їЗџC5рЖџB„ўЗџB4PŽ0&ќЏЖџBŠЗџB5НЉ(4 0{Оˆ0ПˆЬППŽэ1?&њŽ­Ÿ {g'&5  ЗџFїџDЖџ@џ&1! ]& „&ЬэƒŒ &Я0y ќˆУ §ˆ0YБ!0XЅ0cžJ5  EPROM ERASURE VERIFICATION {т ========================== ADDRESS NOT FULLY ERASED PRESS "ENTER" TO CONTINUE НЉ(0Ь0qnЖк &9П{]б]&о0pVЖк 'шэ]&ЪГб%BУ§г0f5Жк 'ЧЬ]&ЉПеŒџ")4Ь ЃсГг%%0ЌЈ§В]')С'A N0ˆ• 0 Œ 0Вƒ{и0Чрџ^0rОбм0-eОеЯ к09VОеР Ы0; я RAM TO EPROM TRANSFER ===================== START {SHIGHER THAN END ADDRESS TARGET ADDRESS TOO HIGH NOT ENOUGH ROOM IN EPROM PRESS "ENTER" TO CONTINUE RAM START AD{ЮDRESS: RAM END ADDRESS: EPROM TARGET ADDRESS: LAST RAM ADDRESS USED: LAST EPROM ADDRESS USED: NOT ERASED A{IT BAD EPROM AT PROGRAMMING EPROM AT НЉ(0!н0H:Жк &9а]&сŒџ"м40<М]&Œџ#2b ФЃф+і40.ЖкЦ{ФP&†ўЗoЦ50P4 фф4†Зг!4 † ­Ÿ н5 Ц› ЗџFїџD1!іџ@4 ˜ŽкN5 Ц} cbфb4cc5&дЦkцb0Ѕ4ЗџFїџD5Жџ@ % }o{?'€%†.­Ÿ \-йЌф"(}o' ­Ÿ 'џ~zг&џw†Зг­Ÿ 'њ&џf2c† ­Ÿ o0ў2ўф† ­Ÿ Z&џї9 EPROM DUMP {К ========== START ADDRESS: END ADDRESS: (P)rinter or (S)creen? НЉ(0їOЬ§гЬз§беж† ­Ÿ ќеЗџFїџD™Л{5іџ@4bŽкЊ5 "†.­Ÿ ›†?­Ÿ ­Ÿ 'њ^&ќеƒ*Ьџ§е Љ &ќеУƒ &O_§е ’N&0Ќ(Ц]&џŒџ"ьПеџtP&;0{А Ј]&џaŒџ"ьїзљž]'џOС'0§uОеыџ;0§T юX&џ/9ќˆƒџ'У§ˆ9 INDIVIDUAL CELL PROGRAMMING ========={+================== NEW ADDRESS? NEW DATA? НЉ(05іОч`0qщž~0R0xлОхEќˆУ §ˆ0ќ)9 CASSETTE{І FILE DATA ================== START ADDRESS: END ADDRESS: EXECUTE ADDRESS: Žк@­Ÿ 'њ&Œк'ю†{!`ЇŸˆ1?мˆƒнˆ н & Ї ­Ÿ oЄ9 %ЬЇ ­Ÿ Œи%Р ы†€ЇŸˆ9­Ÿ І€&ј9Žкކц 'С 'С0%$С9"Р0XIXIXIXI:J&о_9СA%СF"Р7 тЦŽJœ9Žк˜DDDD ˜„oЄ9 #‹‹0Ї 9Œ'џ”џ@9‰џЭ4Žкџ5џРŽкџv9џ EXECUTE ADDRESS: Žк@­Ÿ 'њ&Œк'ю†{!`ЇŸˆ1?мˆƒнˆ н & Ї ­Ÿ oЄ9 %ЬЇ ­Ÿ Œи%Р ы†€ЇŸˆ9­Ÿ І€&ј9Žкކц 'С 'С0%$С9"Р0XIXIXIXI:J&о_9СA%СF"Р7 тЦŽџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ{ОРo!НЉ(ŽfCU'ŽєZ9Ž.S­Ÿ 'њ4Nџ@PЗџпq5B&€~ 'E&Р~ 'D'‘е Ю†Ї"†Ї#Ьоэ$†ЇЄ­ŸРm&&SЖо9­Ÿ І€&ј9Žc{€оп|пЖоЇ"ЖпЇ#­ŸРm&&(,Жо%Жп&9Жп'|п бп|п|о ЦŽрА9ЮоPЗџпІРЇ€ƒо&іЗџоЏ9nр READ/WRITE ERROR NO SYSTEM ON DISK IN DRIVE 0 DISK BASIC LOADER BASIC, EXTENDED OR DISK(B,E,D)?џ#Ьоэ$†ЇЄ­ŸРm&&SЖо9­Ÿ І€&ј9Žc{€оп|пЖоЇ"ЖпЇ#­ŸРm&&(,Жо%Жп&9Жп'|п бп|п|о ЦŽрА9ЮоPЗџпІРЇ€ƒо&іЗџоЏ9nр READ/WRITE ERROR џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ{|НЉ(0 у0$м­Ÿ 'њ­Ÿ 0%ы1"чОР€0Ї!†Ї"†Ї#Ьэ$†ЇЄ­ŸРm&&‘іІm&&…СU&Ž( ŽІ€џ&zŒ(%ѕ†ЦЇ‚†JЇ‚{{Œ"ј~m&&W†Ї#†UЗ­ŸРm&&F†ЇЄŽ€ЖЇ"ЖЇ#Џ$­ŸРm&&+0‰Ж% Ж'' Ж'| Ь|| С0p90} 9џ@9­Ÿ !іІ€&ј9†ЇЄ † ј†Ї"†Ї#ŽЏ$­ŸР9r BASIC TO DISK STORAGE PROGRAM DRIVE NUMBER (0 OR 1)? READ/WRITE ERROR DISK NOT FREE FOR SYSTEM STORAGE џ&F†ЇЄŽ€ЖЇ"ЖЇ#Џ$­ŸРm&&+0‰Ж% Ж'' Ж'| Ь|| С0p90} 9џ@9­Ÿ џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ 10 'DATE LOADER 11 DIM DAYS(12) 12 DATA 31,28,31,30,31,30,31,31,30,31,30,31 13 FOR I=1 TO 12 14 READ DAYS(I) 15 NEXT 30 INPUT"DATE(MM,DD,YY)";M,D,Y 50 IF M<0 OR M>12 THEN 1000 70 IF Y<0 THEN 1000 80 IF D<1 THEN 1000 90 IF M=2 THEN 120 100 IF D>DAYS(M) THEN 1000 ELSE 150 110 ' DO FEBRUARY 120 IF(INT(Y/4)<>Y/4)AND(D>DAYS(M))THEN 1000 130 ' LEAP YEAR 140 IF D>29 THEN 1000 150 DATE =(Y*INT(2^9))+(M*INT(2^5))+D 160 WPOKE &H14E,DATE 170 END 1000 PRINT"ERROR":GOTO30 EN 1000 90 IF M=2 THEN 120 100 IF D>DAYS(M) THEџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ$_&& ž:‡"COOKING WITH COCO DOS PATCH"&4 ‡"PART 7"&t ‡"USE ON COCO'S WITHOUT THE PARALLEL PORT INSTALLED."&™ ‡:‡"IF YOU HAVE NOT YET DONE SO"&Е‡"PUT YOUR DOS1.0 DISK"&Ю‡"IN DRIVE ZERO AND"&ь‡"BOOT UP EXTENDED COLOR"'‡"BASIC (KEY IN E)."''‰"HAVE YOU DONE THIS(Y/N)";A$'[… A$ДВ"Y"Ї ‡"PLEASE DO SO NOW AND RERUN THIS":‘'~‡"PATCHING, PLEASE WAIT......"'€ I Г 1 Ѕ 1'› BYTE$'К’ 49533ЋIЌ1,џ‰("&H"ЋBYTE$)'Р‹'Ш† 0'й€ I Г 1 Ѕ 3'х BYTE$(’ 49192ЋIЌ1,џ‰("&H"ЋBYTE$)( ‹(† CC,D7,DD(*€ I Г 1 Ѕ 3(6  BYTE$(U!’ 53476ЋIЌ1,џ‰("&H"ЋBYTE$)(["‹(j#† 7E,D8,24({$€ I Г 1 Ѕ 2(‡% BYTE$(І&’ 49416ЋIЌ1,џ‰("&H"ЋBYTE$)(Ќ'‹(И(† DA,36(Щ)€ I Г 1 Ѕ 3(е* BYTE$(є+’ 49361ЋIЌ1,џ‰("&H"ЋBYTE$)(њ,‹) -† 7E,D9,8A).€ I Г 1 Ѕ 2)&/ BYTE$)E0’ 49444ЋIЌ1,џ‰("&H"ЋBYTE$))K1‹)W2† DD,19)h3€ I Г 1 Ѕ 2)t4 BYTE$)“5’ 49432ЋIЌ1,џ‰("&H"ЋBYTE$))™6‹)Ѕ7† DB,95)Ж8€ I Г 1 Ѕ 3)Т9 BYTE$)с:’ 52181ЋIЌ1,џ‰("&H"ЋBYTE$))ч;‹)і<† BD,D8,89*=€ I Г 1 Ѕ 3*> BYTE$*2?’ 52262ЋIЌ1,џ‰("&H"ЋBYTE$)*8@‹*GA† BD,D8,49*XB€ I Г 1 Ѕ 3*dC BYTE$*ƒD’ 50544ЋIЌ1,џ‰("&H"ЋBYTE$)*‰E‹*˜F† 7E,D8,3C*ЉG€ I Г 1 Ѕ 2*ЕH BYTE$*дI’ 54641ЋIЌ1,џ‰("&H"ЋBYTE$)*кJ‹*цK† 91,80*їL€ I Г 1 Ѕ 2+M BYTE$+"N’ 54676ЋIЌ1,џ‰("&H"ЋBYTE$)+(O‹+4P† 91,80+EQ€ I Г 1 Ѕ 1+QR BYTE$+pS’ 54342ЋIЌ1,џ‰("&H"ЋBYTE$)+vT‹+U† 27+V€ I Г 1 Ѕ 3+œW BYTE$+ЛX’ 54443ЋIЌ1,џ‰("&H"ЋBYTE$)+СY‹+ЯZ† 16,3,E1+р[€ I Г 1 Ѕ 3+ь\ BYTE$, ]’ 53634ЋIЌ1,џ‰("&H"ЋBYTE$),^‹, _† 7E,D8,AF,1`€ I Г 1 Ѕ 2,=a BYTE$,\b’ 53679ЋIЌ1,џ‰("&H"ЋBYTE$),bc‹,nd† 96,80,e€ I Г 1 Ѕ 3,‹f BYTE$,Њg’ 50891ЋIЌ1,џ‰("&H"ЋBYTE$),Аh‹,Пi† 7E,D8,D7,аj€ I Г 1 Ѕ 1,мk BYTE$,ћl’ 54989ЋIЌ1,џ‰("&H"ЋBYTE$)-m‹- n† 2-o€ I Г 1 Ѕ 1-&p BYTE$-Eq’ 55075ЋIЌ1,џ‰("&H"ЋBYTE$)-Kr‹-Ts† 16-gt€ I Г 1 Ѕ 123-su BYTE$-’v’ 55261ЋIЌ1,џ‰("&H"ЋBYTE$)-˜w‹-єx† 81,C0,10,26,F6,4B,9D,9F,BD,B7,B,5D,27,4E,C1,11,24,4A,86,6,3D,DB,BC,1F,98,C6,1,1F,2,10.Oy† 93,B7,25,3A,93,19,1F,3,D3,1B,1F,1,C3,0,C8,93,21,24,2B,8D,B,27,6,1F,30,D3,A6,DD,A6,7E.Ћz† 96,B4,34,10,9E,68,30,1,35,10,39,93,1B,34,6,8D,F1,27,6,EC,E4,D3,A6,DD,A6,35,6,D3,19,7E/{† D0,E8,7E,B4,4A,B7,9,76,A7,42,FC,1,4E,ED,45,7E,C5,75,34,4,BD,BD,CC,BD,CC,41,35џ8& ž&™"I",#1,"TEXT.DOC"&X‡@448,џЁ(32,239);" PRESS ANY KEY TO CONTINUE";:NГ16&d(LNE Г 0&o2‡ @0,;&ƒ<… џŒ(1) Ї š:ž:Š&‘FЛ ‰ #1,A$&šP‡ A$&ЈZLNEГLNEЋ1&Лd… LNEДВ14 Ї 60&Эn… џ’ДВ"" Ї 40&ўx‡@448,џЁ(16ЌN,236);џЁ(2­N,239);џЁ(16ЌN,236);',‚NГNЋINC:… NГ16 Ї INCГЌ1 :„ … NГ0 Ї INCГЋ1'7ŒЅ 110ESS ANY KEY TO CONTINUE";:NГ16&d(LNE Г 0&o2‡ @0,;&ƒ<… џŒ(1) Ї š:ž:Š&‘FЛ ‰ #1,A$&šP‡ A$&ЈZLNEГLNEЋ1&Лd… LNEДВ14 Ї 60&Эn… џ’ДВ"" Ї 40&ўx‡@448,џЁ(16ЌN,236);џЁ(2­N,239);џЁ(16ЌN,236);џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ,4,C1,9/|† 22,3,BD/'}€ I Г 1 Ѕ 123/3~ BYTE$/R’ 55384ЋIЌ1,џ‰("&H"ЋBYTE$)/X€‹/В† CC,41,AE,62,EC,88,10,34,6,C6,8,BD,B5,F,35,6,BD,DC,5,C6,F8,A6,85,BD,A2,82,5C,26,F8,D0‚† 6F,26,15,7A,1,D5,26,10,BD,A1,B1,27,FB,81,3,26,2,32,64,C6,10,F7,1,D5,39,10,27,CD,8C,BD0kƒ† D1,69,C6,23,9D,A5,27,3,BD,B7,38,8D,3,7E,D4,B2,C1,23,25,91,C1,28,22,8D,D7,80,39,34,4,C60Ч„† 23,D7,80,35,4,9D,A5,27,19,81,2C,27,8,C6,A5,BD,B2,6F,BD,D1,69,34,4,9D,A5,27,5,BD,B7,380ж…† 8D,D2,350щ†€ I Г 1 Ѕ 1230ѕ‡ BYTE$1ˆ’ 55507ЋIЌ1,џ‰("&H"ЋBYTE$)1‰‹1wІ 4,7E,D1,8E,BD,C6,5F,BD,C6,B8,34,16,BD,D8,1B,26,38,C6,A,8E,D9,0,BD,B9,A2,BD,A1,B1,BD,A21勆 82,34,2,BD,B9,58,35,2,81,59,27,14,35,16,39,53,55,52,45,28,59,2F,4E,29,3F,44,45,4C,45,5423Œ† 45,44,8E,D9,A,C6,7,BD,B9,A2,BD,B9,58,35,16,7E,C6,CF,43,4F,4C,C4,57,50,4F,4B,C5,46,41,532“† D4,53,4C,4F,D7,58,45,D1,41,55,54,CF,53,57,41,D0,45,52,52,4F,52,D3,42,41,55,C4,4C,44,49,D22ЂŽ† DB,32,DB2Е€ I Г 1 Ѕ 1232С BYTE$2р‘’ 55630ЋIЌ1,џ‰("&H"ЋBYTE$)2ц’‹3F“† 37,DB,47,DB,4B,DB,4F,DB,60,DC,7B,DC,A4,DC,44,DC,74,53,43,41,4E,A4,44,41,54,45,A4,45,4C,493І”† 4E,C5,45,43,4F,44,C5,45,4E,41,4D,45,A4,57,50,45,45,CB,DB,EC,DB,F8,DD,41,DD,4E,DD,58,DC,344•† 8E,D9,F7,BD,B9,9C,7F,1,49,7F,1,4A,8E,D9,21,CE,1,3E,AF,41,86,A,A7,C4,8E,DA,10,AF,43,864a–† 6,A7,45,8E,D9,5F,AF,46,8E,DA,1F,AF,48,6F,4A,8E,B2,77,AF,C8,12,AF,4D,6F,4F,9E,8A,AF,C8,104p—† BD,DD,1E4ƒ˜€ I Г 1 Ѕ 1234™ BYTE$4Ўš’ 55753ЋIЌ1,џ‰("&H"ЋBYTE$)4Д›‹5œ† CC,DC,C3,FD,1,8F,8E,D9,EA,CE,2,DD,C6,E,34,44,BD,A5,9A,86,55,97,71,BD,B9,5C,35,14,30,1F5p† 7E,AC,7F,52,55,4E,22,41,55,54,4F,45,58,45,43,22,0,52,45,56,28,43,29,31,39,38,34,20,43,2E5Ьž† 53,54,45,41,52,4D,41,4E,D,D,0,81,EA,23,3,7E,B2,77,8E,D9,4B,80,E1,7E,AD,D4,C1,5A,22,F16%Ÿ† C0,50,C1,8,2F,7,34,4,BD,B2,62,35,4,8E,D9,7E,7E,B2,CE,96,6F,27,C,81,FF,26,5,86,1,B763 † 1,4A,7E6FЁ€ I Г 1 Ѕ 1236RЂ BYTE$6qЃ’ 55876ЋIЌ1,џ‰("&H"ЋBYTE$)6wЄ‹6бЅ† C5,8F,34,14,AE,67,8C,A3,9D,27,4,35,14,20,F0,F,70,7D,1,4A,27,A,2B,2B,7F,1,DA,7F,1,4A7(І† 20,0,73,1,4A,7F,1,D7,7F,1,D8,7F,1,D9,BD,A1,B1,81,9,27,15,81,5D,26,5,73,1,D9,20,C7Ї† 81,5F,26,1F,73,1,D8,7D,1,D9,27,E4,7F,1,D8,F6,1,D7,8E,1,DA,A6,85,26,5,7F,1,D9,20,D27лЈ† 7C,1,D7,20,4A,81,13,27,59,81,D,27,6E,81,8,27,9,81,A,26,17,BD,DA,F2,20,B8,7D,1,D8,267щЉ† 25,8D,27ќЊ€ I Г 1 Ѕ 1238џ& Я0&ш Ѕ 100&ž&1(… џЃ(1)ДВ68 Ї 110&c2… џ†(&HC142)ДВџŠ("0") Ї ž:‡"NOT IN DOS 1.0":–&†<‡"PUT MASTER IN 0, BLANK IN 1"&ŒF‡&ЎP‰"PRESS WHEN DONE";A$&СZхM"SUPERBAK:2"&оd… џЊГ130 Ї 140 :„ ž:Ѕ50&хnЯ2&ћxв"AUTOEXEC.BAS:1"'‚Ю1'ŒхM"DCLRFILE"&ž&1(… џЃ(1)ДВ68 Ї 110&c2… џ†(&HC142)ДВџŠ("0") Ї ž:‡"NOT IN DOS 1.0":–&†<‡"PUT MASTER IN 0, BLANK IN 1"&ŒF‡&ЎP‰"PRESS WHEN DONE";A$&СZхM"SUPERBAK:2"&оd… џЊГ130 Ї 140 :„ ž:Ѕ50&хnЯ2&ћxв"AUTOEXEC.BAS:1"'€яўђЗџеюўъmџ#&6€0lџ4яўеЗџдюўЭІ€яўЦЗџеюўОŠ0ЦпЦ† и5Їўш5M+'"@" $Š@ „ $Š@ЦВ† ЦЋ& Ќф%џIЦ’2b} …&ћяўjЗџдюўb†‹]&ŽРA'ў‚ŽР&и2q~ '07jТ0Z9CLEAR PROGRAM(Y,N)? 0>9RETURN TO BASIC(Y,N)? 0 9CASSETTE INSTEAD OF DISK(Y,N) І€' ?#„Ї  ђ9Ь 0ќљЇ€Z&ћ0АЦ_Ц0ќхoќђ0ќкŽ2І€Їф„"Š@.'/&lќЮ:&mќЦ&/„?Ї mф*вmќД&2aO940ќЅІ€' „?Ї  є5lќ’9я§6Зџею§.ЇРя§'Зџдю§9Ž4НЪ;5ї [Ю (Ž ‰o„ЏС0‰Z"ѕmП W4C5НФh‰YїoНЪS}MїoНЂ‚qAїoНЁvЇфc3НЦХW'ї ‡NЦџ\І… $љoтЖ ZЗыЮ L† ЇРƒ W&ј~ШЄ4zO‹ЖŽўЇџ[яџX†~3ЗŽџІфяџGnјT\ _ Іџ6юџ3ЗŽџюџ*5z2b]9†Зџ Ьў—oŽ•1ŒDІ Ї€Z&љЦ†‹ЮрїŽџШЇЇZ&ћ,0ŒЙL&: —ЫE FП _   EЧЪp„Ц0Œ|9Ь ŽŠч€J&ћЦ ч„9ЦŽˆo€Z&ћЬџ ч€J&ћм0ŒQЦ bЦ8„4Т0ŒЄЦSЦŽœї5'Р0>ц†0š:І€—›Ю”ц€Y$lФ3AJ&іж›хZ&њыH\  n ХЇ1hHхЧ2h хч3h  kdn™4hke d“'5h k…G6h  i  n™g7he / ‡8h-\ k­ЪYZ8ЉX ? i Ч F? $IaXZ7)П4 ŽœŽВ0ŒчiЦ7L5Ю”ЇG‹0ЇЄ1ЈХ_1Ј@\4$40ŒВЫ0чЈэдЇР0ŒАЦ5с5$б›%е o ƒ”н’‡oŸьц„'\:Ÿ4 ŽœŽ CŽŠŽ`<Ўф&E0Oы2b y4oтoтЬ Ž!4O_YIЃф$уфў ieidicib0&ц2bЫ0чЂьb&вьф&Ю5АЦ0Œ=ЋŽЊ5ЖŽœ§4Žд5Ž€Ыž0Ž РO0Ž ДфЋMY„ъ  ЫkcЫ† Ї€Ї Z&љ9†44V_^ & 5444т54 ъ&9 є& Ќa'п-1?Z0 r &.†Ўaцф:І‚Ќa' 'іŠ€Ї€Ѓa2c5 1Ѕ9сb%9ІЄˆ@ЇЄ9 †' ^&† Ш 'Фсф%Џ ‹[&44\сe$ІЇ€Ї  ѓЦџb54  & 0М1!\Вџ__&/4рaPZІ… 5&Н ˜54460…1ЅІЇ‚ЇЂZсф"ѕ5† Ї„ЇЄ Ш]& 44рePџ54 И„ПЇ€Ї  Џ4VЮ ŽOяJ&ћ5ж‹ ŽР4&Ь Ї Z&ћ5ІO †4І€…@&Ї *іІ?mр'Š€Ї?9„ љ4„0wц†0ч:Я5M йЦ ŸЎПZ&ј9Цўњ1!Z&ј94tO‹­Ÿ 'њЦ›5є4Бш1%Ёф"€15„š эџ_4€ @D1І5џu94Ћ BYTE$8'Ќ’ 55999ЋIЌ1,џ‰("&H"ЋBYTE$)8-­‹8…Ў† 20,21,7D,1,D7,27,3,7A,1,D7,39,81,15,27,11,81,C,27,D,81,3,27,9,81,5C,26,8,BD,A1,B18нЏ† 20,3,7F,1,D7,81,20,25,7,7D,1,D8,26,2,8D,5,35,14,32,62,39,8E,1,DA,F6,1,D7,6D,85,2797А† 3,7C,1,D7,39,6F,F8,1,86,40,BD,A2,82,BD,B9,58,C6,1,E7,E4,8E,2,DD,AF,61,8D,E,7E,DA,679‘Б† 7F,1,4A,6F,F8,1,8D,3,7E,DA,ED,8E,2,DD,10,8E,1,DA,E6,80,E7,A0,26,FA,39,F,71,7E,A0,279 В† BD,B7,3D9ГГ€ I Г 1 Ѕ 1239ПД BYTE$9оЕ’ 56122ЋIЌ1,џ‰("&H"ЋBYTE$)9фЖ‹:BЗ† 9F,2B,BD,B2,6D,BD,B7,3D,AF,9F,0,2B,39,B7,FF,D7,39,B7,FF,D6,39,81,4D,27,3,7E,AE,75,BD,CE:И† E5,7F,FF,40,6E,9F,0,9D,BD,D8,1B,26,68,CC,0,A,FD,1,D1,FD,1,D3,9D,A5,27,1D,BD,B7,3D,DC:њЙ† 52,FD,1,D1,9D,A5,27,11,BD,B2,6D,BD,B7,3D,DC,52,27,45,FD,1,D3,9D,A5,26,3E,86,FF,B7,1,49;QК† 39,7D,1,49,27,C,FC,1,D1,10,83,F9,FF,23,4,7F,1,49,39,F,87,F,70,ED,E4,F3,1,D3,FD,1;_Л† D1,35,6;rМ€ I Г 1 Ѕ 123;~Н BYTE$;О’ 56245ЋIЌ1,џ‰("&H"ЋBYTE$);ЃП‹<Р† BD,BD,CC,86,20,BD,A2,82,CE,3,DA,8E,2,DD,5F,A6,C0,27,8,A7,80,5C,20,F7,7E,DA,14,86,20,A7Ъ† 10,83,25,80,10,22,FB,E3,6C,E4,83,1,2C,10,2B,FB,DA,26,F5,35,2,5F,8E,DC,3E,44,25,3,5C,20>xЫ† FA,A6,85,97,96,F,95,39,C6,FE,D7,6F,7E,CB,CF,BD,B3,57,96,6,34,12,BD,B2,6D,BD,B3,57,35,2>дЬ† 91,6,10,26,D4,C1,35,40,C6,5,A6,84,34,2,A6,C4,A7,80,35,2,A7,C0,5A,26,F1,39,C6,81,BD,B2>уЭ† 6F,C6,A5>іЮ€ I Г 1 Ѕ 123?Я BYTE$?!а’ 56491ЋIЌ1,џ‰("&H"ЋBYTE$)?'б‹?…в† BD,B2,6F,BD,AF,67,DC,2B,DD,DC,27,73,DC,A6,34,6,BD,AE,A9,35,6,DD,A6,39,BD,D8,1B,27,24,9E?тг† DC,27,20,C1,6,26,4,9E,2B,9F,A6,54,D7,5A,9E,68,9F,76,9E,DC,9F,2B,10,DE,21,CC,AD,C4,34,6@>д† F,6F,7E,AE,A9,8D,3C,BD,D1,E5,34,4,BD,CA,3B,35,4,BD,A7,E9,BD,AD,33,F,6F,BD,B9,5C,54,8D@šе† 6,BD,B9,A2,7E,AC,65,1F,98,8E,DD,70,5F,3A,E6,80,4A,2A,FA,39,8D,F,7E,C9,90,F,EA,C6,1,D7@Љж† EB,8D,14@Мз€ I Г 1 Ѕ 123@Ши BYTE$@чй’ 56614ЋIЌ1,џ‰("&H"ЋBYTE$)@эк‹AKл† A,EB,2A,FA,34,16,9E,8A,9F,DC,CC,FF,FF,DD,76,97,5A,35,16,39,34,76,86,1,7E,D6,70,DC,76,10AЉм† 83,FF,FF,10,26,FE,EE,7E,B4,F4,4F,D6,5A,10,2A,FE,E4,1D,20,F3,D6,5A,2A,2,5F,A1,BD,DD,C,1FBн† 13,BD,B5,F,27,5,1E,13,BD,A5,9A,7E,B6,9B,10,4E,45,58,54,20,57,49,54,48,4F,55,54,20,46,4FBeо† 52,6,53,59,4E,54,41,58,14,52,45,54,55,52,4E,20,57,49,54,48,4F,55,54,20,47,4F,53,55,42,BBtп† 4F,55,54B‡р€ I Г 1 Ѕ 123B“с BYTE$BВт’ 56737ЋIЌ1,џ‰("&H"ЋBYTE$)BИу‹Cф† 20,4F,46,20,44,41,54,41,D,46,55,4E,43,54,49,4F,4E,20,43,41,4C,4C,8,4F,56,45,52,46,4C,4FCtх† 57,D,4F,55,54,20,4F,46,20,4D,45,4D,4F,52,59,E,4E,4F,20,53,55,43,48,20,4C,49,4E,45,20,23Cгц† 9,53,55,42,53,43,52,49,50,54,13,52,45,44,49,4D,45,4E,53,49,4F,4E,45,44,20,41,52,52,41,59D2ч† B,44,49,56,49,44,45,20,42,59,20,30,16,49,4C,4C,45,47,41,4C,20,44,49,52,45,43,54,20,43,4FDAш† 4D,4D,41DTщ€ I Г 1 Ѕ 123D`ъ BYTE$Dы’ 56860ЋIЌ1,џ‰("&H"ЋBYTE$)D…ь‹Dфэ† 4E,44,D,54,59,50,45,20,4D,49,53,4D,41,54,43,48,13,4F,55,54,20,4F,46,20,53,54,52,49,4E,47ECю† 20,53,50,41,43,45,F,53,54,52,49,4E,47,20,54,4F,4F,20,4C,4F,4E,47,12,53,54,52,49,4E,47,20EЁя† 54,4F,4F,20,43,4F,4D,50,4C,45,58,E,43,41,4E,27,54,20,43,4F,4E,54,49,4E,55,45,9,46,49,4CEџ№† 45,20,44,41,54,41,C,41,4C,52,45,41,44,59,20,4F,50,45,4E,D,44,45,56,49,43,45,20,4E,55,4DFё† 42,45,52F!ђ€ I Г 1 Ѕ 123F-ѓ BYTE$FLє’ 56983ЋIЌ1,џ‰("&H"ЋBYTE$)FRѕ‹FЏі† A,52,45,41,44,2F,57,52,49,54,45,9,46,49,4C,45,20,4D,4F,44,45,D,46,49,4C,45,20,4E,4F,54Gї† 20,4F,50,45,4E,15,52,45,41,44,20,50,41,53,54,20,45,4E,44,20,4F,46,20,46,49,4C,45,16,44,49Goј† 52,45,43,54,20,43,4F,4D,4D,41,4E,44,20,49,4E,20,46,49,4C,45,12,55,4E,44,45,46,49,4E,45,44GЭљ† 20,46,55,4E,43,54,49,4F,4E,C,4E,4F,20,53,55,43,48,20,46,49,4C,45,8,52,45,43,4F,52,44,20Gлњ† 23,9,44Gюћ€ I Г 1 Ѕ 123Gњќ BYTE$H§’ 57106ЋIЌ1,џ‰("&H"ЋBYTE$)Hў‹H~џ† 49,53,4B,20,46,55,4C,4C,13,4F,55,54,20,4F,46,20,42,55,46,46,45,52,20,53,50,41,43,45,D,57Hм† 52,49,54,45,20,50,52,4F,54,45,43,54,9,46,49,4C,45,20,4E,41,4D,45,9,44,49,52,45,43,54,4FI:† 52,59,B,46,49,4C,45,20,45,58,49,53,54,53,E,46,49,45,4C,44,20,4F,56,45,52,46,4C,4F,57,19I™† 53,45,54,20,54,4F,20,4E,4F,4E,2D,46,49,45,4C,44,45,44,20,53,54,52,49,4E,47,6,56,45,52,49IЈ† 46,59,17IК€ I Г 1 Ѕ 23IЦ BYTE$Iх’ 57229ЋIЌ1,џ‰("&H"ЋBYTE$)Iы‹J6† 41,43,43,45,53,53,20,50,41,53,54,20,45,4E,44,20,4F,46,20,46,49,4C,45JF ’ &HC000,68JR ’&H71,0J^ Ђ&HA027,46,49,45,4C,44,45,44,20,53,54,52,49,4E,47,6,56,45,52,49IЈ† 46,59,17IК€ I Г 1 Ѕ 23IЦ BYTE$Iх’ 57229ЋIЌ1,џ‰("&H"ЋBYTE$)Iы‹J6† 41,43,43,45,5 „ 44070-078А ‹8,21,8Д;  .   ’  15Ж  “ 2872В ‹8,21,8ДI  .  ™3026   …   … 3221Ж ‹8,21,8Д $И  Ž401    … … 3650З ‹8,21,8Д:  .. 78А. …  ˆ  ,2760З ‹9/23/8ГŽM  ’215      …’  ,2752Й…07/19/8ГŽA  …32    “   ,3540Д ‹07/23/8ГŽK . Ž  11З “ ,8331Д  (   Љ8/16/8Г ($10Љ? ’1211  … „ ,6753А…9/8/8ГŽ[ .   „  407 445    ’ …  ,2880Б ‹8/22/8ГŽR  , Ў204 .   Ќ   ™  ,7311А…07/29/8ГŽG  . —1708  … …,3721Е ‹07/27/8ГŽN    ,  “7594  … Ž ,4472Б ‹8/22/8ГŽO   .  ’    , .  ”™ ,3106Й…07/27/8ГŽE   “1215    …  … , 4372Е ‹ 10 198Д“H  Ž811      …Ž   ,2315А ‹08/06/8ГŽC  .  ‡615   …Ž  ,2120Д ‹3-2-8ДŽA   ’18642  .Ќ „  ,6043А…07/23/8ГŽI   2301   …    ,3521Ж…8/16/8Гˆ>  7073   ’ ,8003А…08/06/8ГŽC  . š630  ” ™   3290Е ‹4,6,8ДŽH  .  ‡11   … ‡  , 2 2Е ‹10,4,8ГŽO .  ”2000 .    , .‡     ,2925АП07/18/8ГŽJ    Ž1    ”   ,, 3 2 “ ‹10,5,8ГŽJ  4785     .  #20Д  „ ,4407А ‹07/18/8ГŽL .  „715 4   #3Б … ,9810Й…8/9/8ГŽ3  . …1737  ”,7605ГП08/01/8ГŽ8  ’..  275В  Ž ,6850В ‹9/11/8ГŽH.   ‚2420  236 ”…  ,9050Б ‹9/19/8ГŽ .  џB&& ž:‡"COOKING WITH COCO DOS PATCH"&4 ‡"PART 7"&t ‡"USE ON COCO'S WITHOUT THE PARALLEL PORT INSTALLED."&™ ‡:‡"IF YOU HAVE NOT YET DONE SO"&Е‡"PUT YOUR DOS1.1 DISK"&Ю‡"IN DRIVE ZERO AND"&ь‡"BOOT UP EXTENDED COLOR"'‡"BASIC (KEY IN E)."''‰"HAVE YOU DONE THIS(Y/N)";A$'[… A$ДВ"Y"Ї ‡"PLEASE DO SO NOW AND RERUN THIS":‘'~‡"PATCHING, PLEASE WAIT......"'€ I Г 1 Ѕ 1'› BYTE$'К’ 49552ЋIЌ1,џ‰("&H"ЋBYTE$)'Р‹'Ш† 0'й€ I Г 1 Ѕ 3'х BYTE$(’ 49196ЋIЌ1,џ‰("&H"ЋBYTE$)( ‹(† CC,D8,D0(*€ I Г 1 Ѕ 2(6  BYTE$(U!’ 49435ЋIЌ1,џ‰("&H"ЋBYTE$)(["‹(f#† DB,C(w$€ I Г 1 Ѕ 3(ƒ% BYTE$(Ђ&’ 49380ЋIЌ1,џ‰("&H"ЋBYTE$)(Ј'‹(З(† 7E,DA,60(Ш)€ I Г 1 Ѕ 2(д* BYTE$(ѓ+’ 49463ЋIЌ1,џ‰("&H"ЋBYTE$)(љ,‹)-† DD,C7).€ I Г 1 Ѕ 2)"/ BYTE$)A0’ 49451ЋIЌ1,џ‰("&H"ЋBYTE$))G1‹)S2† DC,6B)d3€ I Г 1 Ѕ 3)p4 BYTE$)5’ 52399ЋIЌ1,џ‰("&H"ЋBYTE$))•6‹)Є7† BD,D9,67)Е8€ I Г 1 Ѕ 3)С9 BYTE$)р:’ 52480ЋIЌ1,џ‰("&H"ЋBYTE$))ц;‹)ѕ<† BD,D9,27*=€ I Г 1 Ѕ 3*> BYTE$*1?’ 50589ЋIЌ1,џ‰("&H"ЋBYTE$)*7@‹*FA† 7E,D9,1A*WB€ I Г 1 Ѕ 2*cC BYTE$*‚D’ 54878ЋIЌ1,џ‰("&H"ЋBYTE$)*ˆE‹*”F† 91,80*ЅG€ I Г 1 Ѕ 2*БH BYTE$*аI’ 54913ЋIЌ1,џ‰("&H"ЋBYTE$)*жJ‹*тK† 91,80*ѓL€ I Г 1 Ѕ 1*џM BYTE$+N’ 54580ЋIЌ1,џ‰("&H"ЋBYTE$)+$O‹+-P† 27+>Q€ I Г 1 Ѕ 3+JR BYTE$+iS’ 54681ЋIЌ1,џ‰("&H"ЋBYTE$)+oT‹+}U† 16,3,D1+ŽV€ I Г 1 Ѕ 3+šW BYTE$+ЙX’ 53871ЋIЌ1,џ‰("&H"ЋBYTE$)+ПY‹+ЮZ† 7E,D9,8D+п[€ I Г 1 Ѕ 2+ы\ BYTE$, ]’ 53916ЋIЌ1,џ‰("&H"ЋBYTE$),^‹,_† 96,80,-`€ I Г 1 Ѕ 3,9a BYTE$,Xb’ 50936ЋIЌ1,џ‰("&H"ЋBYTE$),^c‹,md† 7E,D9,B5,~e€ I Г 1 Ѕ 1,Šf BYTE$,Љg’ 55232ЋIЌ1,џ‰("&H"ЋBYTE$),Џh‹,Зi† 2,Шj€ I Г 1 Ѕ 1,дk BYTE$,ѓl’ 55318ЋIЌ1,џ‰("&H"ЋBYTE$),љm‹-n† 16-o€ I Г 1 Ѕ 123-!p BYTE$-@q’ 55504ЋIЌ1,џ‰("&H"ЋBYTE$)-Fr‹-Ђs† 81,C0,10,26,F6,34,9D,9F,BD,B7,B,5D,27,39,C1,11,24,35,86,6,3D,DB,BC,1F,98,C6,1,1F,2,10-§t† 93,B7,25,25,93,19,1F,3,D3,1B,1F,1,C3,0,C8,93,21,24,16,8D,B,27,6,1F,30,D3,A6,DD,A6,7E.Yu† 96,B4,34,10,9E,68,30,1,35,10,39,7E,B4,4A,B7,9,76,A7,42,FC,1,4E,ED,45,7E,C5,A2,34,4,BD.Вv† BD,CC,BD,CD,1B,35,4,C1,9,22,3,BD,CD,1B,AE,62,EC,88,10,34,6,C6,8,BD,B5,F,35,6,BD,DC.Сw† DB,C6,F8.дx€ I Г 1 Ѕ 123.рy BYTE$.џz’ 55627ЋIЌ1,џ‰("&H"ЋBYTE$)/{‹/a|† A6,85,BD,A2,82,5C,26,F8,D,6F,26,15,7A,1,D5,26,10,BD,A1,B1,27,FB,81,3,26,2,32,64,C6,10/О}† F7,1,D5,39,10,27,CC,AE,BD,D2,56,C6,23,9D,A5,27,3,BD,B7,38,8D,3,7E,D5,A0,C1,23,25,91,C10~† 28,22,8D,D7,80,39,34,4,C6,23,D7,80,35,4,9D,A5,27,19,81,2C,27,8,C6,A5,BD,B2,6F,BD,D2,560w† 34,4,9D,A5,27,5,BD,B7,38,8D,D2,35,4,7E,D2,7B,BD,C6,8C,BD,C6,E5,34,16,BD,D9,E,26,38,C60…€† A,8E,D90˜€ I Г 1 Ѕ 1230Є‚ BYTE$0Уƒ’ 55750ЋIЌ1,џ‰("&H"ЋBYTE$)0Щ„‹1'…† DE,BD,B9,A2,BD,A1,B1,BD,A2,82,34,2,BD,B9,58,35,2,81,59,27,14,35,16,39,53,55,52,45,28,591††† 2F,4E,29,3F,44,45,4C,45,54,45,44,8E,D9,E8,C6,7,BD,B9,A2,BD,B9,58,35,16,7E,C6,FC,43,4F,4C1ц‡† C4,57,50,4F,4B,C5,46,41,53,D4,53,4C,4F,D7,58,45,D1,41,55,54,CF,53,57,41,D0,45,52,52,4F,522Dˆ† D3,42,41,55,C4,4C,44,49,D2,DC,8,DC,D,DC,1D,DC,21,DC,25,DC,36,DD,51,DD,7A,DD,1A,DD,4A,532S‰† 43,41,4E2fŠ€ I Г 1 Ѕ 1232r‹ BYTE$2‘Œ’ 55873ЋIЌ1,џ‰("&H"ЋBYTE$)2—‹2їŽ† A4,44,41,54,45,A4,45,4C,49,4E,C5,45,43,4F,44,C5,57,50,45,45,CB,DC,C2,DC,CE,DD,EF,DD,FC,DD3R† A,8E,DA,CD,BD,B9,9C,7F,1,49,7F,1,4A,8E,D9,FF,CE,1,3E,AF,41,86,A,A7,C4,8E,DA,E6,AF,433Б† 86,5,A7,45,8E,DA,3D,AF,46,8E,DA,F5,AF,48,6F,4A,8E,B2,77,AF,C8,12,AF,4D,6F,4F,9E,8A,AF,C84‘† 10,BD,DD,CC,CC,DD,99,FD,1,8F,8E,DA,C0,CE,2,DD,C6,E,34,44,BD,A5,9A,86,55,97,71,BD,B9,5C4’† 35,14,3040“€ I Г 1 Ѕ 1234<” BYTE$4[•’ 55996ЋIЌ1,џ‰("&H"ЋBYTE$)4a–‹4Р—† 1F,7E,AC,7F,52,55,4E,22,41,55,54,4F,45,58,45,43,22,0,52,45,56,28,43,29,31,39,38,34,20,435˜† 2E,53,54,45,41,52,4D,41,4E,D,D,0,81,EB,23,3,7E,B2,77,8E,DA,29,80,E2,7E,AD,D4,C1,58,225u™† F1,C0,50,C1,6,2F,7,34,4,BD,B2,62,35,4,8E,DA,56,7E,B2,CE,96,6F,27,C,81,FF,26,5,86,15Яš† B7,1,4A,7E,C5,BC,34,14,AE,67,8C,A3,9D,27,4,35,14,20,F0,F,70,7D,1,4A,27,A,2B,2B,7F,15훆 DA,7F,15№œ€ I Г 1 Ѕ 1235ќ BYTE$6ž’ 56119ЋIЌ1,џ‰("&H"ЋBYTE$)6!Ÿ‹6y † 4A,20,0,73,1,4A,7F,1,D7,7F,1,D8,7F,1,D9,BD,A1,B1,81,9,27,15,81,5D,26,5,73,1,D9,206бЁ† C,81,5F,26,1F,73,1,D8,7D,1,D9,27,E4,7F,1,D8,F6,1,D7,8E,1,DA,A6,85,26,5,7F,1,D9,207+Ђ† D2,7C,1,D7,20,4A,81,13,27,59,81,D,27,6E,81,8,27,9,81,A,26,17,BD,DB,C8,20,B8,7D,1,D87ƒЃ† 26,25,8D,2,20,21,7D,1,D7,27,3,7A,1,D7,39,81,15,27,11,81,C,27,D,81,3,27,9,81,5C,267‘Є† 8,BD,A17ЄЅ€ I Г 1 Ѕ 1237АІ BYTE$7ЯЇ’ 56242ЋIЌ1,џ‰("&H"ЋBYTE$)7еЈ‹8-Љ† B1,20,3,7F,1,D7,81,20,25,7,7D,1,D8,26,2,8D,5,35,14,32,62,39,8E,1,DA,F6,1,D7,6D,858‡Њ† 27,3,7C,1,D7,39,6F,F8,1,86,40,BD,A2,82,BD,B9,58,C6,1,E7,E4,8E,2,DD,AF,61,8D,E,7E,DB8сЋ† 3D,7F,1,4A,6F,F8,1,8D,3,7E,DB,C3,8E,2,DD,10,8E,1,DA,E6,80,E7,A0,26,FA,39,F,71,7E,A09?Ќ† 27,BD,B7,3D,9F,2B,BD,B2,6D,BD,B7,3D,AF,9F,0,2B,39,B7,FF,D7,39,B7,FF,D6,39,81,4D,27,3,7E9N­† AE,75,BD9aЎ€ I Г 1 Ѕ 1239mЏ BYTE$9ŒА’ 56365ЋIЌ1,џ‰("&H"ЋBYTE$)9’Б‹9ьВ† CF,C1,7F,FF,40,6E,9F,0,9D,BD,D9,E,26,68,CC,0,A,FD,1,D1,FD,1,D3,9D,A5,27,1D,BD,B7,3D:IГ† DC,52,FD,1,D1,9D,A5,27,11,BD,B2,6D,BD,B7,3D,DC,52,27,45,FD,1,D3,9D,A5,26,3E,86,FF,B7,1:ЁД† 49,39,7D,1,49,27,C,FC,1,D1,10,83,F9,FF,23,4,7F,1,49,39,F,87,F,70,ED,E4,F3,1,D3,FD:ќЕ† 1,D1,35,6,BD,BD,CC,86,20,BD,A2,82,CE,3,DA,8E,2,DD,5F,A6,C0,27,8,A7,80,5C,20,F7,7E,DA; Ж† EA,86,20;З€ I Г 1 Ѕ 123;*И BYTE$;IЙ’ 56488ЋIЌ1,џ‰("&H"ЋBYTE$);OК‹;ІЛ† A7,80,5C,BD,A1,71,81,D,27,4,81,3,26,9,7F,1,49,CC,D,1,8E,2,DD,7E,A3,9D,96,87,26,5<М† BD,A1,C1,27,FB,7E,A5,6B,C6,8,BD,B5,F,8D,3,7E,B6,9B,FC,1,4E,34,6,44,56,54,54,54,54,8D<]Н† 16,86,2F,A7,80,E6,61,C4,1F,8D,C,86,2F,A7,80,E6,E4,54,8D,3,32,62,39,4F,C0,A,25,3,4C,20<КО† F9,CB,3A,8B,30,ED,81,39,BD,B7,40,EC,84,DD,52,7E,88,E,BE,57,29,12,6,1,BD,B2,62,BD,B7,40<ЩП† 6F,E2,1F<мР€ I Г 1 Ѕ 123<шС BYTE$=Т’ 56611ЋIЌ1,џ‰("&H"ЋBYTE$)= У‹=jФ† 10,10,83,25,80,10,22,FB,EB,6C,E4,83,1,2C,10,2B,FB,E2,26,F5,35,2,5F,8E,DD,14,44,25,3,5C=ШХ† 20,FA,A6,85,97,96,F,95,39,C6,FE,D7,6F,7E,CC,A9,BD,B3,57,96,6,34,12,BD,B2,6D,BD,B3,57,35>#Ц† 2,91,6,10,26,D3,EB,35,40,C6,5,A6,84,34,2,A6,C4,A7,80,35,2,A7,C0,5A,26,F1,39,C6,81,BD>Ч† B2,6F,C6,A5,BD,B2,6F,BD,AF,67,DC,2B,DD,DC,27,4B,DC,A6,34,6,BD,AE,A9,35,6,DD,A6,39,BD,D9>Ш† E,27,24>ЂЩ€ I Г 1 Ѕ 104>ЎЪ BYTE$>ЭЫ’ 56734ЋIЌ1,џ‰("&H"ЋBYTE$)>гЬ‹?1Э† 9E,DC,27,20,C1,6,26,4,9E,2B,9F,A6,54,D7,5A,9E,68,9F,76,9E,DC,9F,2B,10,DE,21,CC,AD,C4,34?‹Ю† 6,F,6F,7E,AE,A9,8D,14,7E,AC,49,8D,F,7E,CA,3E,F,EA,C6,1,D7,EB,8D,14,A,EB,2A,FA,34,16?ъЯ† 9E,8A,9F,DC,CC,FF,FF,DD,76,97,5A,35,16,39,34,76,86,1,7E,D7,61,DC,76,10,83,FF,FF,10,26,FF@а† 16,7E,B4,F4,4F,D6,5A,10,2A,FF,C,1D,20,F3@)б’ &HC000,68@5в’&H71,0@AгЂ&HA027,A9,8D,14,7E,AC,49,8D,F,7E,CA,3E,F,EA,C6,1,D7,EB,8D,14,A,EB,2A,FA,34,16?ъЯ† 9E,8A,9F,DC,CC,FF,FF,DD,76,97,5A,35,16,39,34,76,86,1,7E,D7,61,DC,76,10,83,FF,FF,10,26,FF@а† 16,7E,B4,F4,4Fџ%]&& ž:‡"COOKING WITH COCO DOS PATCH"&4 ‡"PART 7"&k ‡"USE ON COCO'S WITH THE PARALLEL PORT INSTALLED."& ‡:‡"IF YOU HAVE NOT YET DONE SO"&Ќ‡"PUT YOUR DOS1.0 DISK"&Х‡"IN DRIVE ZERO AND"&у‡"BOOT UP EXTENDED COLOR"&ќ‡"BASIC (KEY IN E)."'‰"HAVE YOU DONE THIS(Y/N)";A$'R… A$ДВ"Y"Ї ‡"PLEASE DO SO NOW AND RERUN THIS":‘'u‡"PATCHING, PLEASE WAIT......"'†€ I Г 1 Ѕ 1'’ BYTE$'Б’ 49533ЋIЌ1,џ‰("&H"ЋBYTE$)'З‹'П† 0'а€ I Г 1 Ѕ 3'м BYTE$'ћ’ 49192ЋIЌ1,џ‰("&H"ЋBYTE$)(‹(† CC,D7,DD(!€ I Г 1 Ѕ 3(-  BYTE$(L!’ 53476ЋIЌ1,џ‰("&H"ЋBYTE$)(R"‹(a#† 7E,D8,24(r$€ I Г 1 Ѕ 2(~% BYTE$(&’ 49416ЋIЌ1,џ‰("&H"ЋBYTE$)(Ѓ'‹(Џ(† DA,5A(Р)€ I Г 1 Ѕ 3(Ь* BYTE$(ы+’ 49361ЋIЌ1,џ‰("&H"ЋBYTE$)(ё,‹)-† 7E,D9,94).€ I Г 1 Ѕ 2)/ BYTE$)<0’ 49444ЋIЌ1,џ‰("&H"ЋBYTE$))B1‹)N2† DD,6E)_3€ I Г 1 Ѕ 2)k4 BYTE$)Š5’ 49432ЋIЌ1,џ‰("&H"ЋBYTE$))6‹)œ7† DB,B9)­8€ I Г 1 Ѕ 3)Й9 BYTE$)и:’ 52181ЋIЌ1,џ‰("&H"ЋBYTE$))о;‹)э<† BD,D8,89)ў=€ I Г 1 Ѕ 3* > BYTE$*)?’ 52262ЋIЌ1,џ‰("&H"ЋBYTE$)*/@‹*>A† BD,D8,49*OB€ I Г 1 Ѕ 3*[C BYTE$*zD’ 50544ЋIЌ1,џ‰("&H"ЋBYTE$)*€E‹*F† 7E,D8,3C* G€ I Г 1 Ѕ 2*ЌH BYTE$*ЫI’ 54641ЋIЌ1,џ‰("&H"ЋBYTE$)*бJ‹*нK† 91,80*юL€ I Г 1 Ѕ 2*њM BYTE$+N’ 54676ЋIЌ1,џ‰("&H"ЋBYTE$)+O‹++P† 91,80+<Q€ I Г 1 Ѕ 1+HR BYTE$+gS’ 54342ЋIЌ1,џ‰("&H"ЋBYTE$)+mT‹+vU† 27+‡V€ I Г 1 Ѕ 3+“W BYTE$+ВX’ 54443ЋIЌ1,џ‰("&H"ЋBYTE$)+ИY‹+ЦZ† 16,3,E1+з[€ I Г 1 Ѕ 3+у\ BYTE$,]’ 53634ЋIЌ1,џ‰("&H"ЋBYTE$),^‹,_† 7E,D8,AF,(`€ I Г 1 Ѕ 2,4a BYTE$,Sb’ 53679ЋIЌ1,џ‰("&H"ЋBYTE$),Yc‹,ed† 96,80,ve€ I Г 1 Ѕ 3,‚f BYTE$,Ёg’ 50891ЋIЌ1,џ‰("&H"ЋBYTE$),Їh‹,Жi† 7E,D8,D7,Чj€ I Г 1 Ѕ 1,гk BYTE$,ђl’ 54989ЋIЌ1,џ‰("&H"ЋBYTE$),јm‹-n† 2-o€ I Г 1 Ѕ 1-p BYTE$-<q’ 55075ЋIЌ1,џ‰("&H"ЋBYTE$)-Br‹-Ks† 16-^t€ I Г 1 Ѕ 123-ju BYTE$-‰v’ 55261ЋIЌ1,џ‰("&H"ЋBYTE$)-w‹-ыx† 81,C0,10,26,F6,4B,9D,9F,BD,B7,B,5D,27,4E,C1,11,24,4A,86,6,3D,DB,BC,1F,98,C6,1,1F,2,10.Fy† 93,B7,25,3A,93,19,1F,3,D3,1B,1F,1,C3,0,C8,93,21,24,2B,8D,B,27,6,1F,30,D3,A6,DD,A6,7E.Ђz† 96,B4,34,10,9E,68,30,1,35,10,39,93,1B,34,6,8D,F1,27,6,EC,E4,D3,A6,DD,A6,35,6,D3,19,7E.§{† D0,E8,7E,B4,4A,B7,9,76,A7,42,FC,1,4E,ED,45,7E,C5,75,34,4,BD,BD,CC,BD,CC,41,35,4,C1,9/ |† 22,3,BD/}€ I Г 1 Ѕ 123/*~ BYTE$/I’ 55384ЋIЌ1,џ‰("&H"ЋBYTE$)/O€‹/Њ† CC,41,AE,62,EC,88,10,34,6,C6,8,BD,B5,F,35,6,BD,DC,29,C6,F8,A6,85,BD,A2,82,5C,26,F8,D0‚† 6F,26,15,7A,1,D5,26,10,BD,A1,B1,27,FB,81,3,26,2,32,64,C6,10,F7,1,D5,39,10,27,CD,8C,BD0cƒ† D1,69,C6,23,9D,A5,27,3,BD,B7,38,8D,3,7E,D4,B2,C1,23,25,91,C1,28,22,8D,D7,80,39,34,4,C60П„† 23,D7,80,35,4,9D,A5,27,19,81,2C,27,8,C6,A5,BD,B2,6F,BD,D1,69,34,4,9D,A5,27,5,BD,B7,380Ю…† 8D,D2,350с†€ I Г 1 Ѕ 1230э‡ BYTE$1 ˆ’ 55507ЋIЌ1,џ‰("&H"ЋBYTE$)1‰‹1oІ 4,7E,D1,8E,BD,C6,5F,BD,C6,B8,34,16,BD,D8,1B,26,38,C6,A,8E,D9,0,BD,B9,A2,BD,A1,B1,BD,A21Э‹† 82,34,2,BD,B9,58,35,2,81,59,27,14,35,16,39,53,55,52,45,28,59,2F,4E,29,3F,44,45,4C,45,542+Œ† 45,44,8E,D9,A,C6,7,BD,B9,A2,BD,B9,58,35,16,7E,C6,CF,43,4F,4C,C4,57,50,4F,4B,C5,46,41,532‹† D4,53,4C,4F,D7,58,45,D1,41,55,54,CF,53,57,41,D0,45,52,52,4F,52,D3,42,41,55,C4,4C,44,49,D22šŽ† 50,41,522­€ I Г 1 Ѕ 1232Й BYTE$2и‘’ 55630ЋIЌ1,џ‰("&H"ЋBYTE$)2о’‹3>“† 41,4C,4C,45,CC,DB,56,DB,5B,DB,6B,DB,6F,DB,73,DB,84,DC,D0,DC,F9,DC,68,DC,98,DC,9F,53,43,413ž”† 4E,A4,44,41,54,45,A4,45,4C,49,4E,C5,45,43,4F,44,C5,45,4E,41,4D,45,A4,57,50,45,45,CB,DC,103ћ•† DC,1C,DD,96,DD,A3,DD,AD,DC,58,8E,DA,1B,BD,B9,9C,7F,1,49,7F,1,4A,8E,D9,21,CE,1,3E,AF,414Y–† 86,B,A7,C4,8E,DA,34,AF,43,86,6,A7,45,8E,D9,69,AF,46,8E,DA,43,AF,48,6F,4A,8E,B2,77,AF,C84h—† 12,AF,4D4{˜€ I Г 1 Ѕ 1234‡™ BYTE$4Іš’ 55753ЋIЌ1,џ‰("&H"ЋBYTE$)4Ќ›‹5 œ† 6F,4F,9E,8A,AF,C8,10,BD,DD,73,CC,DD,18,FD,1,8F,CC,DC,A5,FD,1,68,8E,FF,26,86,FF,A7,84,865d† 2C,A7,1,86,4,A7,1F,CC,1,CA,DD,95,8E,DA,E,CE,2,DD,C6,E,34,44,BD,A5,9A,86,55,97,71,BD5Уž† B9,5C,35,14,30,1F,7E,AC,7F,52,55,4E,22,41,55,54,4F,45,58,45,43,22,0,52,45,56,28,43,29,316Ÿ† 39,38,34,20,43,2E,53,54,45,41,52,4D,41,4E,D,D,0,81,EB,23,3,7E,B2,77,8E,D9,53,80,E1,7E6. † AD,D4,C16AЁ€ I Г 1 Ѕ 1236MЂ BYTE$6lЃ’ 55876ЋIЌ1,џ‰("&H"ЋBYTE$)6rЄ‹6ЬЅ† 5A,22,F1,C0,50,C1,8,2F,7,34,4,BD,B2,62,35,4,8E,D9,88,7E,B2,CE,96,6F,27,C,81,FF,26,57&І† 86,1,B7,1,4A,7E,C5,8F,34,14,AE,67,8C,A3,9D,27,4,35,14,20,F0,F,70,7D,1,4A,27,A,2B,2B7~Ї† 7F,1,DA,7F,1,4A,20,0,73,1,4A,7F,1,D7,7F,1,D8,7F,1,D9,BD,A1,B1,81,9,27,15,81,5D,267жЈ† 5,73,1,D9,20,C,81,5F,26,1F,73,1,D8,7D,1,D9,27,E4,7F,1,D8,F6,1,D7,8E,1,DA,A6,85,267уЉ† 5,7F,17іЊ€ I Г 1 Ѕ 1238Ћ BYTE$8!Ќ’ 55999ЋIЌ1,џ‰("&H"ЋBYTE$)8'­‹8‚Ў† D9,20,D2,7C,1,D7,20,4A,81,13,27,59,81,D,27,6E,81,8,27,9,81,A,26,17,BD,DB,16,20,B8,7D8йЏ† 1,D8,26,25,8D,2,20,21,7D,1,D7,27,3,7A,1,D7,39,81,15,27,11,81,C,27,D,81,3,27,9,8191А† 5C,26,8,BD,A1,B1,20,3,7F,1,D7,81,20,25,7,7D,1,D8,26,2,8D,5,35,14,32,62,39,8E,1,DA9‹Б† F6,1,D7,6D,85,27,3,7C,1,D7,39,6F,F8,1,86,40,BD,A2,82,BD,B9,58,C6,1,E7,E4,8E,2,DD,AF9™В† 61,8D,E9ЌГ€ I Г 1 Ѕ 1239ИД BYTE$9зЕ’ 56122ЋIЌ1,џ‰("&H"ЋBYTE$)9нЖ‹:7З† 7E,DA,8B,7F,1,4A,6F,F8,1,8D,3,7E,DB,11,8E,2,DD,10,8E,1,DA,E6,80,E7,A0,26,FA,39,F,71:–И† 7E,A0,27,BD,B7,3D,9F,2B,BD,B2,6D,BD,B7,3D,AF,9F,0,2B,39,B7,FF,D7,39,B7,FF,D6,39,81,4D,27:№Й† 3,7E,AE,75,BD,CE,E5,7F,FF,40,6E,9F,0,9D,BD,D8,1B,26,68,CC,0,A,FD,1,D1,FD,1,D3,9D,A5;NК† 27,1D,BD,B7,3D,DC,52,FD,1,D1,9D,A5,27,11,BD,B2,6D,BD,B7,3D,DC,52,27,45,FD,1,D3,9D,A5,26;]Л† 3E,86,FF;pМ€ I Г 1 Ѕ 123;|Н BYTE$;›О’ 56245ЋIЌ1,џ‰("&H"ЋBYTE$);ЁП‹;јР† B7,1,49,39,7D,1,49,27,C,FC,1,D1,10,83,F9,FF,23,4,7F,1,49,39,F,87,F,70,ED,E4,F3,1