; 6502bench SourceGen v1.10.0 P8_QUIT .eq $65 {const} ;(4:Type/1,Path,zz/1,zz) P8_READ_BLOCK .eq $80 {const} ;(3:Unit/1,Buff,BlkNum) P8_CREATE .eq $c0 {const} ;(7:pn,acc/1,type/1,aux,stt/1,cD,cT) P8_DESTROY .eq $c1 {const} ;(1:pn) P8_GET_FILE_INFO .eq $c4 {const} ;(10:pn,a/1,t/1,x,s/1,b,mDTcDT) P8_ONLINE .eq $c5 {const} ;(2:UnitNum/1,Buff) P8_SET_PREFIX .eq $c6 {const} ;(1:pn) P8_OPEN .eq $c8 {const} ;(3:pn,ioBuff,Ref/1) P8_NEWLINE .eq $c9 {const} ;(3:Ref/1,Mask/1,Char/1) P8_READ .eq $ca {const} ;(4:Ref/1,Where,reqCount,xfrCount) P8_WRITE .eq $cb {const} ;(4:Ref/1,Where,reqCount,xfrCount) P8_CLOSE .eq $cc {const} ;(1:Ref/1) P8_GET_EOF .eq $d1 {const} ;(2:Ref/1,Position/3) MON_WNDTOP .eq $22 ;top of scroll window MON_WNDBTM .eq $23 ;bottom of scroll window MON_CH .eq $24 ;cursor horizontal displacement MON_CV .eq $25 ;cursor vertical displacement MON_PROMPT .eq $33 ;prompt character, used by GETLN MON_CSWL .eq $36 ;character output hook (lo) MON_CSWH .eq $37 ;character output hook (hi) MON_A1L .eq $3c ;general purpose MON_A1H .eq $3d ;general purpose MON_A2L .eq $3e ;general purpose MON_A2H .eq $3f ;general purpose MON_A4L .eq $42 ;general purpose MON_A4H .eq $43 ;general purpose KEY_LEFT_ARROW .eq $88 KEY_DOWN_ARROW .eq $8a KEY_UP_ARROW .eq $8b KEY_CR .eq $8d KEY_RIGHT_ARROW .eq $95 KEY_ESCAPE .eq $9b CODEPTR .eq $ee {addr/2} PTR .eq $fc {addr/2} PTR2 .eq $fe {addr/2} MON_SOFTEVEC .eq $03f2 {addr/2} ;address of RESET handler MON_PWREDUP .eq $03f4 ;power-up RESET checksum P8_MLI .eq $bf00 ;ProDOS MLI call entry point P8_DEVADR01 .eq $bf10 {addr/32} ;device driver vectors P8_DEVNUM .eq $bf30 ;most recent accessed device P8_DEVCNT .eq $bf31 ;number of on-line devices (-1) P8_DEVLST .eq $bf32 {addr/14} ;up to 14 units may be active P8_MEMTABL .eq $bf58 {addr/24} ;memory map of lower 48K P8_MACHID .eq $bf98 ;machine identification P8_IBAKVER .eq $bffc ;undefined; reserved for future use P8_IVERSION .eq $bffd ;version # of currently running Interpreter KBD .eq $c000 ;R last key pressed + 128 KBDSTRB .eq $c010 ;RW keyboard strobe SPKR .eq $c030 ;RW toggle speaker MON_PRNTAX .eq $f941 ;print Acc/X-reg as 4 hex digits MON_PRBLNK .eq $f948 ;print 3 spaces MON_PRBL2 .eq $f94a ;print multiple spaces, count in X-reg MON_TABV .eq $fb5b ;place cursor at line (A-reg) and column (CH) MON_ADVANCE .eq $fbf4 ;move cursor right MON_BS .eq $fc10 ;move cursor left MON_CLREOP .eq $fc42 ;clear screen from cursor to end of page MON_HOME .eq $fc58 ;clear screen and reset text output to top-left MON_CLREOL .eq $fc9c ;clear to end of line MON_RDKEY .eq $fd0c ;read key from input device via $38-39 MON_KEYIN .eq $fd1b ;get next key input from keyboard hardware MON_CROUT .eq $fd8e ;print a carriage return MON_PRBYTE .eq $fdda ;print Acc as two-digit hex number MON_COUT .eq $fded ;print Acc to output device via $36-37 MON_MOVE .eq $fe2c ;move bytes from A1 to A4 until A1=A2 MON_SETKBD .eq $fe89 ;reset char input handler to ROM MON_SETVID .eq $fe93 ;reset char output handler to ROM MON_RESTORE .eq $ff3f ;restore 6502 registers from $45-48 MON_SAVE .eq $ff4a ;save 6502 registers to $45-49 .addrs $2000 jmp PRG_COPY ; I think this is from the old security check. There was a writeup somewhere ; that the entirety of the check was to read the end of the disk, and it should ; fail because the track was never written (or some such). This appears to be ; setup to read the last block of the disk. Looks like the NOP's were part of ; the first round of deprotection and it finally just became a JMP at the start ; of the app. LEFTOVER_SECURITY_CHECK? .junk 157 .addrs $0e00 PGM_QUIT lda #$00 sta MON_WNDTOP lda #$18 sta MON_WNDBTM jsr MON_HOME dec MON_PWREDUP lda #$00 sta MON_A1L lda #$0f sta MON_A1H lda #$00 sta L0F00 lda #$01 sta MON_A4L lda #$0f sta MON_A4H lda #$6c sta MON_A2L lda #$50 sta MON_A2H ldy #$00 jsr MON_MOVE jsr P8_MLI .dd1 P8_QUIT .dd2 P8_QUIT_PARAMS .dd1 $00 .dd1 $00 .dd1 $00 P8_QUIT_PARAMS .dd1 4 .dd1 $00 .dd2 $0000 .dd1 $00 .dd2 $0000 .dd1 $00 .dd1 $00 .dd1 $00 .str ↑“C _ _ H 1 EOA R 0 ” .dd1 $ff .str ↑“_RP _ _ ” .dd1 $80 .str ↑“ShPC* s m” .dd1 $90 .str ↑“ . " __R___ _ 0 D R E n_0t * _ _ /” + “ Y H 0* G” .dd1 $80 .str ↑“" C _ _ 0 "” .dd1 $ff .dd1 $a0 .dd1 $df .dd1 $80 .str ↑“ _ 0 i” .dd1 $ff .str ↑“AiEC* ”,$8d,“ _ " ” .dd1 $97 .dd1 $a0 .dd1 $a0 .dd1 $a0 L0F00 .dd1 3 L0F01 .dd1 $60 L0F02 .dd2 $0a00 L0F04 .dd2 $0000 L0F06 .dd1 3 L0F07 .dd2 PATH_LEN L0F09 .dd2 $0000 L0F0B .dd1 0 CLOSE_PARAMS .dd1 1 PD_CC_REFNUM .dd1 0 L0F0E .dd1 2 L0F0F .dd1 $00 L0F10 .dd2 $0800 L0F12 .dd1 1 L0F13 .dd2 PATH_LEN L0F15 .dd1 2 L0F16 .dd1 $00 L0F17 .dd2 $0800 GET_FILE_INFO_PARAMS .dd1 $0a PD_C4_PATH_ADDR .dd2 PATH_LEN PD_C4_ACCESS .dd1 $00 PD_C4_FILETYPE .dd1 $00 PD_C4_AUX_FILETYPE .dd2 $0000 PD_C4_STORAGE .dd1 $00 PD_C4_BLOCKS .dd2 $0000 PD_C4_MOD_DATE .dd2 $0000 PD_C4_MOD_TIME .dd2 $0000 PD_C4_CREAT_DATE .dd2 $0000 PD_C4_CREAT_TIME .dd2 $0000 L0F2B .dd1 1 .dd2 L1C00 L0F2E .dd1 7 .dd2 L1C00 .dd1 $c3 .dd1 $06 .dd2 $0900 .dd1 $01 .dd2 $0000 .dd2 $0000 L0F3A .dd1 4 L0F3B .dd1 0 .dd2 $0800 L0F3E .dd2 $0000 .dd2 $0000 L0F42 .dd1 4 L0F43 .dd1 0 L0F44 .dd2 $0800 L0F46 .dd2 $0000 L0F48 .dd2 $0000 L0F4A .dd1 2 L0F4B .dd1 0 L0F4C .dd3 $000000 L0F4F .dd1 3 L0F50 .dd1 0 .dd1 $7f .dd1 $0d TENS_LOW .bulk $01,$0a,$64,$e8,$10 TENS_HIGH .bulk $00,$00,$00,$03,$27 L0F5D .dd1 $00 .dd1 $07 .dd1 $06 .dd1 $06 .dd1 $05 .dd1 $05 .dd1 $04 .dd1 $04 .dd1 $03 .dd1 $03 .dd1 $02 .dd1 $02 .dd1 $01 .dd1 $01 .dd1 $00 .dd1 $07 L0F6D .dd1 $01 .dd1 $01 .dd1 $02 .dd1 $01 .dd1 $02 .dd1 $01 .dd1 $02 .dd1 $01 .dd1 $02 .dd1 $01 .dd1 $02 .dd1 $01 .dd1 $02 .dd1 $01 .dd1 $02 .dd1 $02 DOS_FILETYPE_LOW .str ↑“TIA B S” DOS_FILETYPE_HIGH .str ↑“ RA B” L0F8B .dd1 $a2 L0F8C .dd1 $4f .dd1 $05 .dd1 $50 .dd1 $18 .dd1 $50 .dd1 $26 .dd1 $50 L0F93 .dd1 $ff L0F94 .dd1 $4e .dd1 $0d .dd1 $4f .dd1 $1b .dd1 $4f .dd1 $3f .dd1 $4f L0F9B .dd1 $bc L0F9C .dd1 $2c .dd1 $30 .dd1 $3b .dd1 $f4 .dd1 $28 .dd1 $cd .dd1 $3a .dd1 $90 .dd1 $33 .dd1 $ac .dd1 $45 .dd1 $68 .dd1 $36 .dd1 $0f .dd1 $3a PRODOS_FILE_TYPES1 .str ↑“$00 BAD PCD PTX TXT PDA BIN FNT FOT BA3 DA3 WPF SOS $0D $0E D” + “IR RPD RPI h 2 ” PRODOS_FILE_TYPES2 .str ↑“CMD $F1 $F2 $F3 $F4 $F5 $F6 $F7 $F8 $F9 INT IVR BAS VAR REL S” + “YS ” DEFAULT_VALUES .dd1 $b6 ;These defaults are copied to $1050 .dd1 $b1 .dd1 $00 .dd1 $b0 .dd1 $b1 .dd1 $c2 .dd1 $ff .dd1 $00 .dd1 $00 .dd1 $04 .dd1 $89 .dd1 $b8 .dd1 $b0 .dd1 $ce DEFAULTS_LENGTH .dd1 $0d LOWER_MASK? .dd1 $00 L1050 .dd1 $00 L1051 .dd1 $00 L1052 .dd1 $00 L1053 .dd1 $00 L1054 .dd1 $00 L1055 .dd1 $c2 KP_VER_FLAG .dd1 $ff ;$80+ = Both, 0=4.0, !0=5.0 L1057 .dd1 $00 PREVENT_DOUBLE? .dd1 $00 ;This appears to be to prevent double run at $3BBC L1059 .dd1 $00 L105A .dd1 $cf L105B .dd1 $a0 L105C .dd1 $a0 L105D .dd1 $d3 L105E .str ↑“ ”,$87,“ ” .dd1 $81 .str ↑“" _7_ _” .dd1 $80 .dd1 $a0 .dd1 $df .dd1 $80 .str ↑“ U ” L107D .dd1 $2d FLAG_SUBMIT .dd1 $00 L107F .dd1 $00 .dd1 $00 L1081 .dd1 $00 L1082 .dd1 $00 L1083 .dd1 $00 L1084 .dd1 $00 .dd1 $00 L1086 .dd1 $00 L1087 .dd1 $00 L1088 .dd1 $09 L1089 .str ↑“CON DOS DRI END FIL FOR P-C P-F P-S PRE QUI SLO ” L10B9 .dd1 $30 MONTHS .str ↑“JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ” L10EA .dd1 $00 L10EB .dd1 $c0 HIMEM1? .dd1 $00 HIMEM2? .dd1 $00 HIMEM3? .dd1 $00 HIMEM4? .dd1 $00 L10F0 .dd1 $00 L10F1 .dd1 $8c L10F2 .dstr $14,“ ” .dstr “_” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “P” .dstr “ ” .dstr “ ” .dstr $01 .dstr “ ” .dstr “e” .dstr “ ” .dstr “ ” MENU_GEN_CHKCODE .dstr “Generate checkcode.” MENU_SET_DEFAULTS .dstr “Set defaults.” MENU_FOOTER1 .dstr “Use arrow keys to position the pointer” MENU_FOOTER2 .dstr “arrow. Press to select.” TXT_VIEW_DEFAULTS .dstr “View defaults.” TXT_SET_OUT_LOC .dstr “Set output location.” TXT_SET_LP_DEFAULTS .dstr “Set printer defaults.” TXT_SET_DOS_SD .dstr “Set DOS 3.3 slot and drive.” TXT_SET_OUT_FMT .dstr “Set output format.” TXT_SAVE_DEFAULTS .dstr “Save defaults.” TXT_RESET_DEFAULTS .dstr “Reset defaults.” TXT_SLOT .dstr “Slot: ” ERR_INV_SLOT .dstr “Invalid slot.” .dstr “ ” .dstr “T” .dstr “ ” .dstr “ ” .dstr “ ” ERR_INV_DRIVE .dstr “Invalid drive.” TXT_KEY_PERFECT .dstr “KEY PERFECT” TXT_VERSION_50 .dstr “(Version 5.0)” TXT_BY .dstr “by” TXT_AUTHOR .dstr “Ken McCandless” TXT_COPYRIGHT .dstr “(C) Copyright 1985” TXT_LINE_NO .dstr “LINE#” TXT_MICROSPARC .dstr “MicroSPARC, Inc.” TXT_IS_THIS_CORR .dstr “Is this correct (y/n)?” TXT_ACCPT_LP_CTRL .dstr “Accept printer control (y/n)?” TXT_ALRDY_DISK_SLOT .dstr “Already identified as a disk slot.” TXT_OUTPUT_LP .dstr “Output to the printer (y/n)?” TXT_INP_LP_CTRL .dstr “Input printer control info, if any:” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “"” .dstr “_” .dstr “N” .dstr $7f .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” TXT_RET_CONTINUE .dstr “Press to continue.” TXT_RUN_ON .dstr “RUN ON” TXT_DOS33 .dstr “DOS 3.3” TXT_SPACE .dstr “ Space ” TXT_13_DASHES .dstr “-------------” TXT_CONTROL .dstr “ Control-” TXT_ON .dstr “On” TXT_EQUALS .dstr “=======================================” TXT_8_DASHES .dstr “--------” TXT_CODE_40 .dstr “CODE-4.0” TXT_ADDR_NO .dstr “ADDR#” TXT_DASH .dstr “ - ” TXT_ESCAPE .dstr “ Escape ” TXT_PRINTER .dstr “Printer: ” TXT_OFF .dstr “Off” TXT_LP_CONTROL .dstr “Printer control: ” TXT_RETURN .dstr “ Return ” ERR_INV_FILETYPE .dstr “File type not implemented.” TXT_ADD_PREFIX .dstr “Add more to prefix (y/n)?” TXT_BOTH .dstr “Both” TXT_FOR_DOS_ONLY .dstr “(For DOS 3.3 only)” .dstr “p” .dstr “ ” .dstr “ ” .dstr “ ” TXT_INSERT_DISK .dstr “Insert the disk containing the program.” TXT_FILENAME .dstr “Filename:” TXT_Q_FOR_CAT .dstr “Press ? for catalog.” ERR_SYSTEM_ERR .dstr “System error - restarting.” ERR_IO .dstr “I/O error.” TXT_NO_DEV_CONN .dstr “No device connected.” ERR_DISK_SWITCH .dstr “Disk switched - file open on other disk.” ERR_INV_PNAME .dstr “Invalid pathname.” ERR_DIR_NOT_FOUND .dstr “Directory not found.” ERR_FILE_NOT_FOUND .dstr “File not found.” ERR_UNSUPP_FILETYPE .dstr “Unsupported file type.” ERR_VOLUME_NOT_FOUND .dstr “Volume not found.” .dstr “l” ERR_CANNOT_READ .dstr “Access error - file not read enabled.” ERR_BAD_DIR .dstr “Directory structure damaged.” ERR_FILE_DAMAGED .dstr “File structure damaged.” TXT_PGM_TOTAL .dstr “ = PROGRAM TOTAL = ” TXT_CODE_50 .dstr “CODE-5.0” TXT_DRIVE .dstr “Drive: ” ERR_NOT_PRODOS_DISK .dstr “Not a ProDOS disk.” ERR_NOT_DOS33 .dstr “Not a DOS 3.3 disk.” TXT_DIR_FULL .dstr “Volume directory full.” TXT_VOL_FULL .dstr “Volume full.” ERR_VCB_FULL .dstr “Volume control block full.” ERR_BAD_BUFFER .dstr “Bad buffer address.” TXT_ABORTING .dstr “Aborting . . .” .dstr $7f .dstr “_” .dstr “ ” ERR_BAD_PARAM_COUNT .dstr “Bad system call parameter count.” ERR_INV_REF_NUM .dstr “Invalid reference number.” ERR_BAD_FILE_FMT .dstr “Bad file format.” ERR_EOF .dstr “End of file encountered.” ERR_POS_RANGE .dstr “Position out of range.” ERR_INV_CALL_PARAM .dstr “Invalid system call parameter.” L1695 .dstr “/” .dstr “K” .dstr “E” .dstr “Y” .dstr “P” .dstr “E” .dstr “R” .dstr “F” .dstr “E” .dstr “C” .dstr “T” .dstr “/” .dstr “D” .dstr “E” .dstr “F” .dstr “A” .dstr “U” .dstr “L” .dstr “T” .dstr “S” TXT_PRESS_RET .dstr “Press for more; anything else if done.” ERR_INSUFFMEM .dstr “Insufficient memory available.” TXT_FORMAT .dstr “Format: ” .dstr “ ” ERR_DSK_WR_PROT .dstr “Disk write protected.” TXT_V5 .dstr “Version 5.0” TXT_V4 .dstr “Version 4.0” TXT_SELECT_54B .dstr “Input 5, 4 OR B:” TXT_DASHES .dstr “--------” TXT_NO_DATE .dstr “” TXT_AND .dstr “ and ” TXT_ENTER_PATHNAME .dstr “Enter pathname or prefix:” MENU_QUIT .dstr “Quit.” TXT_KP_50 .dstr “KEY PERFECT 5.0” TXT_ESC_MAIN_MENU .dstr “ESC -> Main menu” .dstr “For the SUBMIT file input:” TXT_SUBMIT_CMDS .dstr “SUBMIT file commands:” TXT_ACT_SUBMIT .dstr “Activate SUBMIT (y/n)? ” ERR_UNK_SUBMIT .dstr “Unknown SUBMIT command.” TXT_MAIN_MENU .dstr “Main Menu” .dstr “0” .dstr “N” .dstr “i” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “_” .dstr “ ” .dstr “ ” ERR_SD_NOT_DEFINED .dstr “Both slot and drive not defined.” ERR_FATAL .dstr “Fatal error-Press to restart.” .dstr “Defaults Menu” TXT_GET_DFLTS_DISK .dstr “Get defaults from disk.” TXT_GET_SYS_DFLTS .dstr “Get system internal defaults.” TXT_EXACT_KEYS .dstr “Press the exact keystrokes required” TXT_EXACT_KEYS2 .dstr “by the printer (^ = end).” TXT_HAS_LOWERCASE .dstr “Is lower case available (y/n)? ” ERR_VOL_NOT_FOUND .dstr “Volume not found.” MENU_OS_DOS33 .dstr “DOS 3.3” .dstr “C” .dstr “*” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” TXT_ESC_PREV_MENU .dstr “ESC -> Prev. menu” TXT_DOS_SELECTION .dstr “DOS Selection Menu” MENU_OS_PRODOS .dstr “ProDOS” TXT_REINSERT_KP_DISK .dstr “Reinsert the KEY PERFECT disk.” TXT_LINES_CTRLCODES .dstr “Lines with control codes:” TXT_CNTRL_CODE_LIST .dstr “Control code list: ” TXT_ASOFT_CNTRL_LIST .dstr “Set APPLESOFT control code list.” TXT_LIST_CNTRL .dstr “Produce a list of control codes” TXT_ASOFT_PGMS .dstr “in APPLESOFT programs (y/n)? ” L19CF .dstr “Save defaults (y/n)? ” TXT_VOLS_ONLINE .dstr “Press ? for volumes on line.” TXT_CURRENT .dstr “<- Current” TXT_ESC_RETRY .dstr “ESC -> retry” ERR_PFX_TOO_LONG .dstr “Prefix too long ( > 64 characters).” ERR_NAME_TOO_LONG .dstr “Filename too long ( > 30 characters).” ERR_ENTRY_TOO_LONG .dstr “Filename entry too long ( > 64 chars).” TXT_ADD_DIR_TO_PFX .dstr “Add this directory to prefix (y/n)? ” ERR_CANNOT_ADD_PFX .dstr “Can not add to prefix ( > 64 chars).” .dstr “_” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “e” .dstr “M” .dstr “ ” .dstr “ ” .dstr “;” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “1” .dstr “r” .dstr “ ” .dstr “ ” .dstr “t” .dstr “_” .dstr “ ” .dstr “i” .dstr “_” .dstr “ ” .dstr “R” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “_” .dstr “ ” .dstr “ ” .dstr “ ” .dstr “S” .dstr “ ” .dstr “ ” .dstr “U” .dstr “ ” .dstr “ ” .dstr “1” .dstr “ ” .dstr “ ” .dstr “0” .dstr “ ” .dstr “$” OS_SELECTION .dd1 $00 ;0=ProDOS, 1=DOS 3.3 L1B01 .dd1 $00 L1B02 .dd1 $00 L1B03 .dd1 $00 L1B04 .dd1 $00 L1B05 .dd1 $00 L1B06 .dd1 $00 L1B07 .dd1 $00 L1B08 .dd1 $00 L1B09 .dd1 $00 L1B0A .dd1 $00 L1B0B .dd1 $00 L1B0C .dd1 $00 L1B0D .dd1 $00 L1B0E .dd1 $00 MENU_SELECTION .dd1 $00 PRDEC_PADDING .dd1 $00 PRDEC_NUMBER_HIGH .dd1 $00 PRDEC_NUMBER_LOW .dd1 $00 PRDEC_NUM_DIGITS .dd1 $00 PRDEC_CURR_DIGIT .dd1 $00 PATH_LEN .dd1 $00 PATH .dd1 $00 L1B17 .dd1 $80 .dd1 $df .dd1 $a0 .dd1 $80 .str ↑“ _ _ P ” .dd1 $80 .str ↑“Se U9 ” .dd1 $ff .dd1 $a0 .dd1 $ec .dd1 $ff .str ↑“ * B” .dd1 $80 .str ↑“ _ _0 _ ” .dd1 $80 .str ↑“ p a 0 i” .dd1 $ff .str ↑“ 0 * f " CD_ _ 2 _ 1RDI _ 0_"” .dd1 $ff .dd1 $a0 .dd1 $a0 .dd1 $80 .str ↑“ _ _” L1B96 .dd1 $00 L1B97 .dd1 $00 L1B98 .dd1 $00 CHAR_READ .dd1 $00 LINE_BYTES_READ .dd1 $00 LINE_COUNT .dd1 $00 PGM_END .dd2 $0000 L1B9E .dd1 $00 FLAG_BASIC_BINARY .dd1 $00 ;0=BASIC, 1=Binary (aka print line numbers vs addresses) CHKSUM_V4_PGM .bulk $00,$00,$00 L1BA3 .dd1 $00 CHKSUM_V4_LINE .bulk $00,$00,$00 NEXT_LINE_PTR .dd2 $0000 START_LINE_NBR .dd2 $0000 END_LINE_NBR .dd2 $0000 L1BAD .dd1 $00 SOME_BASIC_ADDR? .dd2 $0000 FLAG_ALLOW_ONLINE .dd1 $00 L1BB1 .dd1 $00 L1BB2 .dd1 $00 L1BB3 .dd1 $00 L1BB4 .dd1 $00 L1BB5 .dd1 $00 L1BB6 .dd1 $00 L1BB7 .dd1 $00 CSUM_V5_1 .dd1 $00 CSUM_V5_2 .dd1 $00 CSUM_V5_3 .dd1 $00 CSUM_V5_4 .dd1 $00 CSUM_V5_5 .dd1 $00 CSUM_V5_6 .dd1 $00 CSUM_V5_7 .dd1 $00 CSUM_V5_8 .dd1 $00 CSUM_V5_9 .dd1 $00 L1BC1 .dd1 $00 L1BC2 .dd1 $00 L1BC3 .dd1 $00 L1BC4 .dd1 $00 L1BC5 .dd1 $00 L1BC6 .dd1 $00 BASIC_START_ADDR .dd2 $0000 L1BC9 .dd1 $00 L1BCA .dd1 $00 L1BCB .dd1 $00 L1BCC .dd1 $00 SOME_COUNTER? .dd1 $00 L1BCE .dd1 $00 L1BCF .dd1 $00 .str ↑“ ”,$87,“_D” .dd1 $81 .str ↑“ 1 _ _ ” .dd1 $80 .dd1 $a0 .dd1 $ef .dd1 $80 .str ↑“ a e 0 M . o ” L1C00 .dd1 $00 L1C01 .str ↑“ ; 5r t i_ d _ _ U 1 F ”,$8d,“R _” + “ _ " / _ 2 ” .dd1 $80 .dd1 $ae .dd1 $ef .dd1 $ff .str ↑“O. U 0 0_ ” .dd1 $80 .str ↑“ CP _ _ ” .dd1 $80 .dd1 $a0 .dd1 $e8 .dd1 $82 .str ↑“ * m” TEMP_CHAR2 .dd1 $00 ALLOW_ESC .dd1 $00 L1C83 .dd1 $00 L1C84 .dd1 $00 L1C85 .dd1 $00 L1C86 .dd1 $00 L1C87 .dd1 $00 TOKEN_FLAG .dd1 $00 ;1=REM, 2=? L1C89 .dd1 $00 TEMP_YREG .dd1 $00 TEMP_XREG .dd1 $00 TEMP_DATA .dd1 $00 .str ↑“ _ _ s E 5 U d_ __ 0_ _ 1 S FA.ONA” + “ _ ”,$87,“_D0 2 _ ” .dd1 $80 .dd1 $a0 .dd1 $ef .dd1 $80 .str ↑“X. U 0 ” .dd1 $ff .str ↑“ 0 ” .dd1 $80 .dd1 $a0 .dd1 $d2 .dd1 $80 .dd1 $a0 .dd1 $a0 KEY_TABLE_1 .bulk $00,$96,$2c,$ba,$19,$8f,$35,$a3,$32,$a4,$1e,$88,$2b,$bd,$07,$91 + $64,$f2,$48,$de,$7d,$eb,$51,$c7,$56,$c0,$7a,$ec,$4f,$d9,$63,$f5 + $c8,$5e,$e4,$72,$d1,$47,$fd,$6b,$fa,$6c,$d6,$40,$e3,$75,$cf,$59 + $ac,$3a,$80,$16,$b5,$23,$99,$0f,$9e,$08,$b2,$24,$87,$11,$ab,$3d + $90,$06,$bc,$2a,$89,$1f,$a5,$33,$a2,$34,$8e,$18,$bb,$2d,$97,$01 + $f4,$62,$d8,$4e,$ed,$7b,$c1,$57,$c6,$50,$ea,$7c,$df,$49,$f3,$65 + $58,$ce,$74,$e2,$41,$d7,$6d,$fb,$6a,$fc,$46,$d0,$73,$e5,$5f,$c9 + $3c,$aa,$10,$86,$25,$b3,$09,$9f,$0e,$98,$22,$b4,$17,$81,$3b,$ad + $20,$b6,$0c,$9a,$39,$af,$15,$83,$12,$84,$3e,$a8,$0b,$9d,$27,$b1 + $44,$d2,$68,$fe,$5d,$cb,$71,$e7,$76,$e0,$5a,$cc,$6f,$f9,$43,$d5 + $e8,$7e,$c4,$52,$f1,$67,$dd,$4b,$da,$4c,$f6,$60,$c3,$55,$ef,$79 + $8c,$1a,$a0,$36,$95,$03,$b9,$2f,$be,$28,$92,$04,$a7,$31,$8b,$1d + $b0,$26,$9c,$0a,$a9,$3f,$85,$13,$82,$14,$ae,$38,$9b,$0d,$b7,$21 + $d4,$42,$f8,$6e,$cd,$5b,$e1,$77,$e6,$70,$ca,$5c,$ff,$69,$d3,$45 + $78,$ee,$54,$c2,$61,$f7,$4d,$db,$4a,$dc,$66,$f0,$53,$c5,$7f,$e9 + $1c,$8a,$30,$a6,$05,$93,$29,$bf,$2e,$b8,$02,$94,$37,$a1,$1b,$8d KEY_TABLE_2 .bulk $00,$30,$61,$51,$c4,$f4,$a5,$95,$88,$b8,$e9,$d9,$4c,$7c,$2d,$1d + $10,$20,$71,$41,$d4,$e4,$b5,$85,$98,$a8,$f9,$d9,$5c,$6c,$3d,$0d + $20,$10,$41,$71,$e4,$d4,$85,$b5,$a8,$98,$c9,$f9,$6c,$5c,$0d,$3d + $30,$00,$51,$61,$f4,$c4,$95,$a5,$b8,$88,$d9,$e9,$7c,$4c,$1d,$2d + $41,$71,$20,$10,$85,$b5,$e4,$d4,$c9,$f9,$a8,$98,$0d,$3d,$6c,$5c + $51,$61,$30,$00,$95,$a5,$f4,$c4,$d9,$e9,$b8,$88,$1d,$2d,$7c,$4c + $61,$51,$00,$30,$a5,$95,$c4,$f4,$e9,$d9,$88,$b8,$2d,$1d,$4c,$7c + $71,$41,$10,$20,$b5,$85,$d4,$e4,$f9,$c9,$98,$a8,$3d,$0d,$5c,$6c + $83,$b3,$e2,$d2,$47,$77,$26,$16,$0b,$3b,$6a,$5a,$cf,$ff,$ae,$9e + $93,$a3,$f2,$c2,$57,$67,$36,$06,$1b,$2b,$7a,$4a,$df,$ef,$be,$8e + $a3,$93,$c2,$f2,$67,$57,$06,$36,$2b,$1b,$4a,$7a,$ef,$df,$8e,$be + $b3,$83,$d2,$e2,$77,$47,$16,$26,$3b,$0b,$5a,$6a,$ff,$cf,$9e,$ae + $c2,$f2,$a3,$93,$06,$36,$67,$57,$4a,$7a,$2b,$1b,$8e,$be,$ef,$df + $d2,$e2,$b3,$83,$16,$26,$77,$47,$5a,$6a,$3b,$0b,$9e,$ae,$ff,$cf + $e2,$d2,$83,$b3,$26,$16,$47,$77,$6a,$5a,$0b,$3b,$ae,$9e,$cf,$ff + $f2,$c2,$93,$a3,$36,$06,$57,$67,$7a,$4a,$1b,$2b,$be,$8e,$df,$ef KEY_TABLE_3 .bulk $00,$07,$0e,$09,$6d,$6a,$63,$64,$db,$dc,$d5,$d2,$b6,$b1,$b8,$bf + $b7,$b0,$b9,$be,$da,$dd,$d4,$d3,$6c,$6b,$62,$65,$01,$06,$0f,$08 + $6e,$69,$60,$67,$03,$04,$0d,$0a,$b5,$b2,$bb,$bc,$d8,$df,$d6,$d1 + $d9,$de,$d7,$d0,$b4,$b3,$ba,$bd,$02,$05,$0c,$0b,$6f,$68,$61,$66 + $dc,$db,$d2,$d5,$b1,$b6,$bf,$b8,$07,$00,$09,$0e,$6a,$6d,$64,$63 + $6b,$6c,$65,$62,$06,$01,$08,$0f,$b0,$b7,$be,$b9,$dd,$da,$d3,$d4 + $b2,$b5,$bc,$bb,$df,$d8,$d1,$d6,$69,$6e,$67,$60,$04,$03,$0a,$0d + $05,$02,$0b,$0c,$68,$6f,$66,$61,$de,$d9,$d0,$d7,$b3,$b4,$bd,$ba + $b8,$bf,$b6,$b1,$d5,$d2,$db,$dc,$63,$64,$6d,$6a,$0e,$09,$00,$07 + $0f,$08,$01,$06,$62,$65,$6c,$6b,$d4,$d3,$da,$dd,$b9,$be,$b7,$b0 + $d6,$d1,$d8,$df,$bb,$bc,$b5,$b2,$0d,$0a,$03,$04,$60,$67,$6e,$69 + $61,$66,$6f,$68,$0c,$0b,$02,$05,$ba,$bd,$b4,$b3,$d7,$d0,$d9,$de + $64,$63,$6a,$6d,$09,$0e,$07,$00,$bf,$b8,$b1,$b6,$d2,$d5,$dc,$db + $d3,$d4,$dd,$da,$be,$b9,$b0,$b7,$08,$0f,$06,$01,$65,$62,$6b,$6c + $0a,$0d,$04,$03,$67,$60,$69,$6e,$d1,$d6,$df,$d8,$bc,$bb,$b2,$b5 + $bd,$ba,$b3,$b4,$d0,$d7,$de,$d9,$66,$61,$68,$6f,$0b,$0c,$05,$02 KEY_TABLE_4 .bulk $00,$77,$ee,$99,$07,$70,$e9,$9e,$0e,$79,$e0,$97,$09,$7e,$e7,$90 + $1d,$6a,$f3,$84,$1a,$6d,$f4,$83,$13,$64,$fd,$8a,$14,$63,$fa,$8d + $3b,$4c,$d5,$a2,$3c,$4b,$d2,$a5,$35,$42,$db,$ac,$32,$45,$dc,$ab + $26,$51,$c8,$bf,$21,$56,$cf,$b8,$28,$5f,$c6,$b1,$2f,$58,$c1,$b6 + $76,$01,$98,$ef,$71,$06,$9f,$e8,$78,$0f,$96,$e1,$7f,$08,$91,$e6 + $6b,$1c,$85,$f2,$6c,$1b,$82,$f5,$65,$12,$8b,$fc,$62,$15,$8c,$fb + $4d,$3a,$a3,$d4,$4a,$3d,$a4,$d3,$43,$34,$ad,$da,$44,$33,$aa,$dd + $50,$27,$be,$c9,$57,$20,$b9,$ce,$5e,$29,$b0,$c7,$59,$2e,$b7,$c0 + $ed,$9a,$03,$74,$ea,$9d,$04,$73,$e3,$94,$0d,$7a,$e4,$93,$0a,$7d + $f0,$87,$1e,$69,$f7,$80,$19,$6e,$fe,$89,$10,$67,$f9,$8e,$17,$60 + $d6,$a1,$38,$4f,$d1,$a6,$3f,$48,$d8,$af,$36,$41,$df,$a8,$31,$46 + $cb,$bc,$25,$52,$cc,$bb,$22,$55,$c5,$b2,$2b,$5c,$c2,$b5,$2c,$5b + $9b,$ec,$75,$02,$9c,$eb,$72,$05,$95,$e2,$7b,$0c,$92,$e5,$7c,$0b + $86,$f1,$68,$1f,$81,$f6,$6f,$18,$88,$ff,$66,$11,$8f,$f8,$61,$16 + $a0,$d7,$4e,$39,$a7,$d0,$49,$3e,$ae,$d9,$40,$37,$a9,$de,$47,$30 + $bd,$ca,$53,$24,$ba,$cd,$54,$23,$b3,$c4,$5d,$2a,$b4,$c3,$5a,$2d START cld ldx #$ff txs jsr SET_RESET_HOOK ldx #$ff lda P8_MACHID and #$c0 lsr A lsr A lsr A lsr A lsr A lsr A cmp #$02 ;IIe or IIc? bcs L211A ldx #$df L211A stx LOWER_MASK? lda P8_MACHID and #$02 ;Check for 80-column card beq L2129 lda #$15 ;Disable 80 columns jsr MON_COUT L2129 jsr MEMSCAN lda #‘?’ | $80 sta MON_PROMPT jsr COPY_DEFAULTS? jsr L35F6 L2136 jsr L34DA jsr CLEAR_BUFFERS? L213C lda L1053 sta L10F0 lda HIMEM4? sta HIMEM3? lda #$00 sta MON_WNDTOP lda #$18 sta MON_WNDBTM jsr PRINT_HEADER jsr CHECK_LOWERCASE jsr DO_MENU_SELECT ;If we RTS, we've selected "Generate checkcode" lda #$00 sta PD_CC_REFNUM jsr CLOSE_FILES jsr RESET_BUFFERS jsr RESET_VALUES? TRY_OS_AGAIN jsr GET_OS? ;MENU_OS_SELECTION set after this routine jsr CLEAR_PAGE ldx #$11 ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 TXT_INSERT_DISK ldx #$08 jsr CLEAR_LINE ldx #$08 ldy #$14 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ESC_RETRY inc ALLOW_ESC jsr PROMPT_CONTINUE bcs TRY_OS_AGAIN ;Carry set = go back lda #$01 sta L1C89 L2197 jsr GET_FILE? jsr CHK_VALID_FT L219D lda FLAG_SUBMIT beq L21A5 jmp HANDLE_SUBMIT L21A5 lda L10F0 cmp #$b0 bne L21B2 jsr L2AD3 jsr L2BB8 L21B2 jsr L43B9 lda #$01 sta ALLOW_ESC jsr L4827 lda L10F0 cmp #$b0 beq L21D0 jsr L3555 jsr L2891 jsr L2AD3 jsr L2BB8 L21D0 ldx PD_C4_FILETYPE lda OS_SELECTION bne L21E5 cpx #$fc ;BAS bne L21DF jmp CALC_CKSUM? ;Do BASIC checksum?! L21DF inc FLAG_BASIC_BINARY jmp L4BEF L21E5 cpx #$01 bne L21EC jmp L4EF4 L21EC cpx #$02 bne L21F3 jmp CALC_CKSUM? L21F3 cpx #$04 bne L21FD inc FLAG_BASIC_BINARY jmp L4BEF L21FD lda #$b0 sta L10F0 jsr L3555 jmp L3FF6 jsr PRINT_IND .dd2 ERR_INV_FILETYPE jmp L3FF7 SET_RESET_HOOK lda #START sta MON_SOFTEVEC+1 eor #$a5 sta MON_PWREDUP rts CLEAR_BUFFERS? lda #$00 ldx #$ff L2224 sta OS_SELECTION,x dex bne L2224 sta OS_SELECTION ldx #$ff L222F sta L1C00,x dex bne L222F sta L1C00 ldx #$0e L223A sta PD_C4_ACCESS,x dex bpl L223A rts RESET_BUFFERS lda #$00 ldx #$ff L2245 sta L1C00,x dex bne L2245 sta L1C00 ldx #$69 L2250 sta L1B96,x dex bne L2250 sta L1B96 ldx #$0f L225B sta L1B05,x dex bne L225B sta L1B05 sta L1B01 sta L1B02 sta L1B03 sta L1B04 jsr INIT_V5_2345 jsr INIT_V5_6789 rts ; Print Indirect. Format is JSR followed by 2 byte address that points to the ; DCI string to be printed. Convoluted logic included to toggle lowercase to ; uppercase. PRINT_IND pla sta PTR pla sta PTR+1 clc lda #$01 adc PTR sta PTR bcc @GETPTR2 inc PTR+1 @GETPTR2 ldy #$00 lda (PTR),y sta PTR2 iny lda (PTR),y sta PTR2+1 clc lda #$01 adc PTR sta PTR bcc @SETRTS inc PTR+1 @SETRTS lda PTR+1 pha lda PTR pha ldy #$00 beq @NEXT @PRINT_MORE ora #$80 jsr @PRINT_EXIT iny @NEXT lda (PTR2),y pha lda LOWER_MASK? eor #$df beq @LOWERCASE_HIGH pla bpl @PRINT_MORE bmi @PRINT_EXIT @LOWERCASE_HIGH pla bpl @LOWERCASE_LOW cmp #$e0 bcc @PRINT_EXIT sec sbc #$20 jmp @PRINT_EXIT @LOWERCASE_LOW cmp #$60 bcc @PRINT_MORE sec sbc #$20 jmp @PRINT_MORE @PRINT_EXIT ora #$80 jsr MON_COUT rts GOTOXY lda L1052 bne @PR_BLANKS txa jsr MON_TABV sty MON_CH rts @PR_BLANKS jsr MON_CROUT tya tax bmi @NO_BLANKS beq @NO_BLANKS jsr MON_PRBL2 @NO_BLANKS rts BUZZ_SOUND jsr MON_SAVE lda #$87 ldy #$80 @LOOP tya jsr CLICK_SPKR eor #$ff jsr CLICK_SPKR dey bne @LOOP jsr MON_RESTORE rts CLICK_SPKR tax @LOOP dex bne @LOOP bit SPKR rts CLEAR_LINE ldy #$00 txa jsr GOTOXY jsr MON_CLREOL rts GET_OS? lda #$15 sta PD_C4_PATH_ADDR lda #$1b sta PD_C4_PATH_ADDR+1 jmp MENU_OS_SELECTION SHOW_MENU_OS lda MENU_SELECTION bne @PRINT_PRODOS ldx #$0c ldy #$02 jsr GOTOXY jsr DRAW_ARROW @PRINT_PRODOS ldx #$0c ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 MENU_OS_PRODOS jsr MON_CLREOL lda OS_SELECTION bne @NOT_PRODOS ldx #$0c ldy #$0d jsr GOTOXY jsr PRINT_IND .dd2 TXT_CURRENT @NOT_PRODOS lda MENU_SELECTION cmp #$01 bne @PRINT_DOS33 ldx #$0d ldy #$02 jsr GOTOXY jsr DRAW_ARROW @PRINT_DOS33 ldx #$0d ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 MENU_OS_DOS33 jsr MON_CLREOL lda OS_SELECTION beq @NOT_DOS33 ldx #$0d ldy #$0d jsr GOTOXY jsr PRINT_IND .dd2 TXT_CURRENT @NOT_DOS33 ldx #$17 ldy #$26 jsr GOTOXY rts MENU_OS_SELECTION lda OS_SELECTION sta MENU_SELECTION jsr PRINT_MENU_FOOTER jsr MENU_CLEAR_PANE ldx #$08 ldy #$14 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ESC_MAIN_MENU ldx #$0a ldy #$0a jsr GOTOXY jsr PRINT_IND .dd2 TXT_DOS_SELECTION @AGAIN jsr SHOW_MENU_OS lda KBDSTRB lda #$a0 jsr MON_KEYIN cmp #KEY_UP_ARROW beq @UP cmp #KEY_LEFT_ARROW bne @CHK_DOWN @UP dec MENU_SELECTION bpl @AGAIN lda #$01 sta MENU_SELECTION jmp @AGAIN @CHK_DOWN cmp #KEY_DOWN_ARROW beq @DOWN cmp #KEY_RIGHT_ARROW bne @CHK_ESC @DOWN inc MENU_SELECTION lda MENU_SELECTION cmp #$02 bcc @AGAIN lda #$00 sta MENU_SELECTION jmp @AGAIN @CHK_ESC cmp #KEY_ESCAPE bne @CHK_CR jsr DO_MENU_SELECT jmp GET_OS? @CHK_CR cmp #KEY_CR bne @AGAIN lda MENU_SELECTION sta OS_SELECTION jsr SHOW_MENU_OS rts GET_FILE? lda OS_SELECTION bne HANDLE_DOS33 jmp HANDLE_PRODOS HANDLE_DOS33 lda #$00 sta PATH_LEN sta PATH lda L1050 sta L1B06 lda L1051 sta L1B07 jsr L259F bne L243B lda L1B17 cmp #$52 bne L2430 rts L2430 lda L1B17 L2433 jsr L46AD pla pla jmp TRY_OS_AGAIN L243B lda #$80 jmp L2433 HANDLE_PRODOS jsr MENU_CLEAR_PANE jsr CLEAR_PAGE ldx #$08 ldy #$14 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ESC_PREV_MENU L2452 ldx #$09 ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ENTER_PATHNAME jsr SHOW_VOLS_MSG lda PATH_LEN beq GET_PATH? ldx #$0a jsr CLEAR_LINE ldx #$0b jsr CLEAR_LINE ldx #$0a ldy #$00 jsr GOTOXY lda MON_PROMPT jsr MON_COUT ldx PATH_LEN jmp INPUT_FILENAME GET_PATH? ldx #$09 ldy #$00 jsr GOTOXY jsr INPUT_PATH ;$200 is buffer, X = length cpx #$51 bcc L2493 jmp L253F L2493 jsr MON_SAVE jsr CLEAR_PAGE jsr MON_RESTORE dec FLAG_ALLOW_ONLINE cmp #‘?’ | $80 ;Acc is last char entered - show ONLINE bne L24A6 jmp SHOW_ONLINE L24A6 jsr MON_RESTORE bne L24B6 L24AB jsr BUZZ_SOUND lda #$00 sta PATH_LEN jmp HANDLE_PRODOS L24B6 cmp #$02 bcc L24BD jmp HAVE_PATH L24BD lda $0200 cmp #KEY_ESCAPE beq @ESCAPE cmp #‘@’ | $80 ;Activate SUBMIT? (???) bne L24AB jsr ASK_ACT_SUBMIT jmp HANDLE_PRODOS @ESCAPE pla pla jmp TRY_OS_AGAIN INPUT_FILENAME ldy #$00 L24D5 lda PATH,y ora #$80 sta $0200,y jsr MON_COUT iny dex bne L24D5 ldy PATH_LEN iny ldx #$0a jsr GOTOXY ldx PATH_LEN lda #$a0 jsr NEXT_KEY cpx #$51 bcc L2493 jmp L253F L24FC dec PATH_LEN jmp L2516 HAVE_PATH stx PATH_LEN stx MON_A1L ldy #$00 ldx #$00 L250B lda $0200,x cmp #$a0 beq L24FC sta PATH,y iny L2516 inx dec MON_A1L bne L250B lda PATH_LEN bpl L2522 lda #$00 L2522 sta PATH_LEN jsr GET_FILE_INFO bcc @NOERROR jsr L46AD jmp GET_FILE? @NOERROR lda PD_C4_FILETYPE cmp #$0f ;Test if DIR beq @ISDIR rts @ISDIR ldx PATH_LEN cpx #$41 bcc L255F L253F jsr CLEAR_PAGE jsr BUZZ_SOUND ldx #$16 ldy #$02 jsr GOTOXY jsr PRINT_IND asl $1a,x inc ALLOW_ESC jsr PROMPT_CONTINUE bcs L255C jmp GET_FILE? L255C jmp @ESCAPE L255F jsr L4674 bcc L256A jsr L46AD jmp GET_FILE? L256A jsr CLEAR_PAGE ldx #$16 ldy #$08 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ADD_PREFIX L2579 lda #$a0 jsr MON_RDKEY cmp #$9b bne L2585 jmp @ESCAPE L2585 cmp #$ce beq L258D cmp #$ee bne L2591 L258D jsr CLEAR_PAGE rts L2591 cmp #$d9 beq L2599 cmp #$f9 bne L2579 L2599 jsr CLEAR_PAGE jmp HANDLE_PRODOS L259F lda #$00 sta L0F0F lda L1050 and #$07 asl A asl A asl A asl A asl A sta L0F0F lda L1051 sec sbc #$01 lsr A ror L0F0F lda L0F0F clc jsr L4666 bne L25DB L25C4 ldx #$10 ldy #$00 L25C8 lda $0800,y sta PATH,y iny dex bne L25C8 lda PATH and #$0f sta PATH rts L25DB lda OS_SELECTION beq L25E3 jmp L25C4 L25E3 jsr L46AD jmp GET_FILE? SHOW_ONLINE ldx #$0a jsr CLEAR_LINE ldx #$0b jsr CLEAR_LINE lda #$00 sta PATH_LEN jsr MENU_CLEAR_PANE ldx #$08 ldy #$14 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ESC_PREV_MENU ldx #$09 ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ENTER_PATHNAME jsr MON_CROUT lda MON_PROMPT jsr MON_COUT lda #$00 sta L1B03 jsr L466D bne L25DB lda $0800 and #$0f bne L2632 lda $0801 jmp L25DB L2632 ldx #$0e ldy #$00 jsr GOTOXY ldx #$00 ldy #$00 L263D sty CHAR_READ lda $0800,y beq L267A and #$0f beq L2670 tax iny lda #$af jsr MON_COUT L2650 lda $0800,y ora #$80 jsr MON_COUT iny dex bne L2650 lda L1B03 eor #$01 sta L1B03 bne L266C jsr MON_CROUT jmp L2670 L266C ldy #$14 sty MON_CH L2670 lda CHAR_READ clc adc #$10 tay jmp L263D L267A lda MON_CV cmp #$14 bcc L2683 jsr MON_CROUT L2683 inc ALLOW_ESC jsr PROMPT_CONTINUE bcc L2690 pla pla jmp TRY_OS_AGAIN L2690 jmp L2452 L2693 ldx #$0c ldy #$0f jsr GOTOXY jsr PRINT_IND .dd2 TXT_SLOT lda L1B0D jsr MON_COUT ldx #$0c ldy #$15 jsr GOTOXY jsr MON_RDKEY cmp #$9b beq L26C7 cmp #$8d beq L26C5 jsr MON_COUT cmp #$b1 bcc L26C9 cmp #$b8 bcs L26C9 sta L1B0D L26C5 clc rts L26C7 sec rts L26C9 jsr CLEAR_PAGE ldx #$16 ldy #$0c jsr GOTOXY jsr PRINT_IND .dd2 ERR_INV_SLOT jsr PROMPT_CONTINUE jsr CLEAR_PAGE jmp L2693 L26E1 ldx #$0d ldy #$0e jsr GOTOXY jsr PRINT_IND .dd2 TXT_DRIVE lda L1B0E jsr MON_COUT ldx #$0d ldy #$15 jsr GOTOXY jsr MON_RDKEY cmp #$9b beq L2715 cmp #$8d beq L2713 jsr MON_COUT cmp #$b1 bcc L2717 cmp #$b3 bcs L2717 sta L1B0E L2713 clc rts L2715 sec rts L2717 jsr CLEAR_PAGE ldx #$16 ldy #$0c jsr GOTOXY jsr PRINT_IND .dd2 ERR_INV_DRIVE jsr PROMPT_CONTINUE jsr CLEAR_PAGE jmp L26E1 SHOW_VOLS_MSG jsr CLEAR_PAGE ldx #$16 ldy #$06 jsr GOTOXY jsr PRINT_IND .dd2 TXT_VOLS_ONLINE lda #$01 sta FLAG_ALLOW_ONLINE rts L2744 jsr CLEAR_PAGE ldx #$16 ldy #$0b jsr GOTOXY jsr PRINT_IND .dd2 TXT_Q_FOR_CAT lda #$01 sta FLAG_ALLOW_ONLINE rts L2759 sty L1B02 jsr CLEAR_PAGE ldx #$16 ldy L1B02 jsr GOTOXY jsr BUZZ_SOUND rts L276B jsr PROMPT_CONTINUE jsr CLEAR_PAGE rts L2772 cmp #$9b bne L277C ldx #$ff txs jmp L213C L277C rts PRINT_HEADER jsr MON_HOME ldx #$00 ldy #$0f jsr GOTOXY jsr PRINT_IND .dd2 TXT_KEY_PERFECT ldx #$01 ldy #$0e jsr GOTOXY jsr PRINT_IND .dd2 TXT_VERSION_50 ldx #$02 ldy #$13 jsr GOTOXY jsr PRINT_IND .dd2 TXT_BY ldx #$03 ldy #$0d jsr GOTOXY jsr PRINT_IND .dd2 TXT_AUTHOR ldx #$04 ldy #$0b jsr GOTOXY jsr PRINT_IND .dd2 TXT_COPYRIGHT ldx #$05 ldy #$0c jsr GOTOXY jsr PRINT_IND .dd2 TXT_MICROSPARC jsr MON_CROUT jsr PRINT_DASH_LINE ldx #$15 ldy #$00 jsr GOTOXY jsr PRINT_DASH_LINE lda #$07 sta MON_WNDTOP rts PRINT_DASH_LINE lda #‘-’ | $80 ldx #38 @LOOP jsr MON_COUT dex bpl @LOOP rts INPUT_PATH jsr MON_CROUT lda MON_PROMPT jsr MON_COUT SET_FIRST_CHAR ldx #$00 NEXT_KEY jsr MON_RDKEY sta CHAR_READ lda FLAG_ALLOW_ONLINE beq @SKIP_ONLINE lda CHAR_READ cmp #‘?’ | $80 bne @CHECK_CR cpx #$00 bne @CHECK_CR rts @SKIP_ONLINE lda CHAR_READ @CHECK_CR cmp #KEY_CR bne @CHECK_ESCAPE jmp ACCEPT_FILENAME @CHECK_ESCAPE cmp #KEY_ESCAPE bne @CHECK_CASE jmp TRY_OS_AGAIN @CHECK_CASE cmp #$a0 bcc @CHECK_LEFT cmp #$e0 bcc @ADD_BUFFER and #$df jmp @ADD_BUFFER @CHECK_LEFT cmp #$ff ;Delete key? beq @ERASE cmp #KEY_LEFT_ARROW bne @CHECK_RIGHT @ERASE dex bpl @AGAIN jmp SET_FIRST_CHAR @AGAIN jsr MON_SAVE jsr MON_BS jsr MON_RESTORE L283E jmp NEXT_KEY @CHECK_RIGHT cmp #$89 ;Ctrl+I beq L2849 cmp #KEY_RIGHT_ARROW bne L285E L2849 inx cpx #$46 bcc L2852 ldx #$45 bne L283E L2852 jsr MON_SAVE jsr MON_ADVANCE jsr MON_RESTORE jmp NEXT_KEY L285E cmp #$98 ;Ctrl+X bne L287F ldx MON_CV stx L1B04 ldy #$01 jsr GOTOXY jsr MON_CLREOP ldx L1B04 ldy #$01 jsr GOTOXY jmp NEXT_KEY @ADD_BUFFER jsr MON_COUT ora #$80 L287F sta $0200,x inx jmp NEXT_KEY ACCEPT_FILENAME jsr MON_SAVE jsr MON_CLREOL jsr MON_RESTORE txa rts L2891 ldx #$00 ldy #$0d jsr GOTOXY jsr PRINT_IND .dd2 TXT_KP_50 rts L289E sta $0300 stx $0301 sty $0302 ldx #$0c ldy #$00 jsr GOTOXY ldx #$08 L28B0 jsr MON_CLREOL jsr MON_CROUT dex bpl L28B0 ldx #$0c ldy #$00 jsr GOTOXY ldy #$00 ldx $0301 beq L28E7 L28C7 lda L105A,y sta CHAR_READ cmp #$a1 bcs L28D7 jsr L2DCF jmp L28DA L28D7 jsr MON_COUT L28DA lda MON_CH cmp #$1e bcc L28E3 jsr MON_CROUT L28E3 iny dex bne L28C7 L28E7 lda $0300 ldx $0301 ldy $0302 rts L28F1 jmp L2A44 L28F4 jsr MENU_CLEAR_PANE jsr CLEAR_PAGE ldx #$08 ldy #$14 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ESC_PREV_MENU ldx #$0a ldy #$09 jsr GOTOXY jsr PRINT_IND .dd2 TXT_SET_LP_DEFAULTS ldx L1054 bne L2919 ldx #$b1 L2919 stx L1B0D jsr L2693 bcc L2924 jmp L3910 L2924 lda L1B0D and #$0f asl A asl A asl A asl A sta CHAR_READ ldx P8_DEVCNT L2933 lda P8_DEVLST,x and #$f0 cmp CHAR_READ beq L28F1 dex bpl L2933 ldx P8_DEVCNT lda CHAR_READ ora #$80 sta CHAR_READ L294B lda P8_DEVLST,x and #$f0 cmp CHAR_READ beq L28F1 dex bpl L294B lda L1050 cmp #$b3 bne L2966 lda P8_DEVADR01+23 cmp #$ff beq L28F1 L2966 ldx #$08 ldy #$00 jsr GOTOXY jsr MON_CLREOL ldx #$0c ldy #$02 jsr GOTOXY jsr PRINT_IND .dd2 TXT_INP_LP_CTRL jsr MON_CROUT ldx L1059 beq L29B5 jsr L289E L2987 jsr CLEAR_PAGE ldx #$16 ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ACCPT_LP_CTRL jsr MON_RDKEY jsr MON_COUT ldx L1059 cmp #$ce beq L29B5 cmp #$ee beq L29B5 cmp #$d9 beq L29B2 cmp #$f9 beq L29B2 jmp L2987 L29B2 jmp L2A56 L29B5 ldx #$0c ldy #$00 jsr GOTOXY jsr MON_CLREOP jsr CLEAR_PAGE ldx #$16 ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 TXT_EXACT_KEYS jsr MON_CROUT jsr PRINT_IND .dd2 TXT_EXACT_KEYS2 ldx #$0c ldy #$00 jsr GOTOXY ldx #$00 L29DF jsr MON_RDKEY cmp #$de beq L2A56 cmp #$a1 bcs L2A2F cmp #$88 bne L2A04 dex bpl L29F5 ldx #$00 beq L29DF L29F5 jsr MON_SAVE jsr MON_RESTORE jsr L289E jsr MON_RESTORE L2A01 jmp L29DF L2A04 cmp #$95 bne L2A20 inx cpx #$1e bcc L2A11 ldx #$1d bne L2A01 L2A11 jsr MON_SAVE jsr MON_RESTORE jsr L289E jsr MON_RESTORE jmp L29DF L2A20 sta CHAR_READ jsr MON_SAVE jsr L2DCF jsr MON_RESTORE jmp L2A32 L2A2F jsr MON_COUT L2A32 ora #$80 sta L105A,x inx lda MON_CH cmp #$1e bcc L2A41 jsr MON_CROUT L2A41 jmp L29DF L2A44 ldx #$10 ldy #$02 jsr L2759 jsr PRINT_IND .dd2 TXT_ALRDY_DISK_SLOT jsr L276B jmp L28F4 L2A56 stx L1059 jsr CLEAR_PAGE lda L1B0D sta L1054 lda L10F0 and #$0f beq L2A72 lda L1054 sta L10F0 sta L1053 L2A72 ldx #$08 ldy #$14 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ESC_RETRY inc ALLOW_ESC jsr PROMPT_CONTINUE bcs L2A89 jmp L3910 L2A89 jmp L28F4 PROMPT_CONTINUE ldx #$17 jsr CLEAR_LINE ldx #$17 ldy #$06 jsr GOTOXY jsr PRINT_IND .dd2 TXT_RET_CONTINUE L2A9D lda KBDSTRB lda #$a0 jsr MON_KEYIN sta TEMP_CHAR2 lda ALLOW_ESC beq L2AB4 lda TEMP_CHAR2 cmp #KEY_ESCAPE beq L2AC7 L2AB4 lda TEMP_CHAR2 cmp #KEY_CR bne L2A9D ldx #$17 jsr CLEAR_LINE ldx #$00 stx ALLOW_ESC clc ;Continue rts L2AC7 ldx #$17 jsr CLEAR_LINE ldx #$00 stx ALLOW_ESC sec ;Go back rts L2AD3 lda L10F0 cmp #$b0 bne L2AE5 lda #$01 sta MON_WNDTOP lda #$18 sta MON_WNDBTM jsr MON_HOME L2AE5 ldx #$01 ldy #$11 jsr GOTOXY jsr PRINT_IND .dd2 TXT_RUN_ON lda #$00 sta L1BC1 sta L1BC2 lda OS_SELECTION bne L2B57 lda L1C00 beq L2B33 tax ldy #$ff L2B06 dex bmi L2B1E iny lda L1C01,x cmp #$af bne L2B06 sty L1BC2 inx stx L1BC1 sty L1B05 jmp L2B65 L2B1E lda #$00 sta L1BC1 lda L1C00 cmp #$10 bcs L2B52 sta L1BC2 sta L1B05 jmp L2B65 L2B33 ldx PATH_LEN beq L2B52 ldy #$ff L2B3A dex bmi L2B52 iny lda PATH,x cmp #$af bne L2B3A sty L1BC2 inx stx L1BC1 sty L1B05 jmp L2B65 L2B52 lda #$ff jmp L46AD L2B57 lda #$00 sta L1BC1 lda L1C00 sta L1BC2 sta L1B05 L2B65 inc L1B05 lsr L1B05 sec lda #$14 sbc L1B05 tay bpl L2B76 ldy #$00 L2B76 ldx #$02 jsr GOTOXY ldy L1BC2 ldx L1BC1 lda L1C00 beq L2B94 L2B86 lda L1C01,x ora #$80 jsr MON_COUT inx dey bne L2B86 beq L2BA0 L2B94 lda PATH,x ora #$80 jsr MON_COUT inx dey bne L2B94 L2BA0 ldx #$03 ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 TXT_EQUALS lda L10F0 cmp #$b0 bne L2BB7 lda #$04 sta MON_WNDTOP L2BB7 rts L2BB8 lda KP_VER_FLAG bmi L2BCE beq L2BD1 ldx #$04 ldy #$06 jsr GOTOXY jsr PRINT_IND .dd2 TXT_CODE_50 jmp L2BDD L2BCE jmp L2C46 L2BD1 ldx #$04 ldy #$06 jsr GOTOXY jsr PRINT_IND .dd2 TXT_CODE_40 L2BDD ldx #$05 jsr MON_PRBL2 jsr L2CA2 bcs L2BF9 jsr PRINT_IND .dd2 TXT_LINE_NO jsr PRINT_IND .dd2 TXT_DASH jsr PRINT_IND .dd2 TXT_LINE_NO jmp L2C08 L2BF9 jsr PRINT_IND .dd2 TXT_ADDR_NO jsr PRINT_IND .dd2 TXT_DASH jsr PRINT_IND .dd2 TXT_ADDR_NO L2C08 lda KP_VER_FLAG beq L2C1C ldx #$05 ldy #$06 jsr GOTOXY jsr PRINT_IND .dd2 TXT_DASHES jmp L2C2D L2C1C ldx #$05 ldy #$06 jsr GOTOXY jsr PRINT_IND .dd2 TXT_8_DASHES lda #$a0 jsr MON_COUT L2C2D ldx #$05 jsr MON_PRBL2 jsr PRINT_IND .dd2 TXT_13_DASHES L2C37 jsr MON_CROUT lda L10F0 cmp #$b0 bne L2C45 lda #$06 sta MON_WNDTOP L2C45 rts L2C46 ldx #$04 ldy #$03 jsr GOTOXY jsr PRINT_IND .dd2 TXT_CODE_50 jsr MON_PRBLNK jsr L2CA2 bcs L2C6C jsr PRINT_IND .dd2 TXT_LINE_NO jsr PRINT_IND .dd2 TXT_DASH jsr PRINT_IND .dd2 TXT_LINE_NO jmp L2C7B L2C6C jsr PRINT_IND .dd2 TXT_ADDR_NO jsr PRINT_IND .dd2 TXT_DASH jsr PRINT_IND .dd2 TXT_ADDR_NO L2C7B jsr MON_PRBLNK jsr PRINT_IND .dd2 TXT_CODE_40 ldx #$05 ldy #$03 jsr GOTOXY jsr PRINT_IND .dd2 TXT_DASHES jsr MON_PRBLNK jsr PRINT_IND .dd2 TXT_13_DASHES jsr MON_PRBLNK jsr PRINT_IND .dd2 TXT_8_DASHES jmp L2C37 L2CA2 lda OS_SELECTION bne L2CB2 lda PD_C4_FILETYPE cmp #$fc bne L2CB0 L2CAE clc rts L2CB0 sec rts L2CB2 ldx PD_C4_FILETYPE dex dex dex bpl L2CB0 bmi L2CAE jsr MENU_CLEAR_PANE ldx #$08 ldy #$0c jsr GOTOXY jsr PRINT_IND .dd2 TXT_VIEW_DEFAULTS ldx #$0a ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 TXT_SLOT lda L1050 ora #$b0 jsr MON_COUT jsr MON_PRBLNK jsr PRINT_IND .dd2 TXT_DRIVE lda L1051 ora #$b0 jsr MON_COUT jsr MON_PRBLNK jsr PRINT_IND .dd2 TXT_FOR_DOS_ONLY ldx #$0b ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 TXT_FORMAT lda KP_VER_FLAG bmi L2D1A beq L2D12 jsr PRINT_IND .dd2 TXT_V5 jmp L2D33 L2D12 jsr PRINT_IND .dd2 TXT_V4 jmp L2D33 L2D1A jsr PRINT_IND .dd2 TXT_BOTH lda #$a0 jsr MON_COUT jsr PRINT_IND .dd2 TXT_V4 jsr PRINT_IND .dd2 TXT_AND jsr PRINT_IND .dd2 TXT_V5 L2D33 ldx #$0c ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 TXT_CNTRL_CODE_LIST lda L1057 beq L2D4C jsr PRINT_IND .dd2 TXT_ON jmp L2D51 L2D4C jsr PRINT_IND .dd2 TXT_OFF L2D51 ldx #$0d ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 TXT_PRINTER lda L10F0 and #$0f beq L2D6C jsr PRINT_IND .dd2 TXT_ON jmp L2D71 L2D6C jsr PRINT_IND .dd2 TXT_OFF L2D71 ldx #$0d ldy #$0f jsr GOTOXY jsr PRINT_IND .dd2 TXT_SLOT lda L1054 ora #$b0 jsr MON_COUT ldx #$0e ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 TXT_LP_CONTROL jsr MON_CROUT ldx L1059 bne L2D9C jmp L2DC4 L2D9C ldy #$00 L2D9E lda L105A,y sta CHAR_READ cmp #$a1 bcc L2DBE and LOWER_MASK? jsr MON_COUT L2DAE lda MON_CH cmp #$1e bcc L2DB7 jsr MON_CROUT L2DB7 iny dex bne L2D9E jmp L2DC4 L2DBE jsr L2DCF jmp L2DAE L2DC4 ldx #$16 jsr CLEAR_LINE jsr PROMPT_CONTINUE jmp L3910 L2DCF lda CHAR_READ cmp #$a0 bne L2DEA stx L1B04 sty L1B03 jsr PRINT_IND .dd2 TXT_SPACE ldx L1B04 ldy L1B03 jmp L2E38 L2DEA cmp #$9b bne L2E02 stx L1B04 sty L1B03 jsr PRINT_IND .dd2 TXT_ESCAPE ldx L1B04 ldy L1B03 jmp L2E38 L2E02 cmp #$8d bne L2E1A stx L1B04 sty L1B03 jsr PRINT_IND .dd2 TXT_RETURN ldx L1B04 ldy L1B03 jmp L2E38 L2E1A stx L1B04 sty L1B03 jsr PRINT_IND .dd2 TXT_CONTROL lda CHAR_READ ora #$c0 jsr MON_COUT lda #$a0 jsr MON_COUT ldx L1B04 ldy L1B03 L2E38 rts CHK_VALID_FT ldx #$0c ldy #$00 jsr GOTOXY jsr MON_CLREOP jsr CLEAR_PAGE lda OS_SELECTION beq CHK_PRODOS_FT ;ProDOS jmp CHK_DOS_FT ;DOS 3.3 CHK_PRODOS_FT lda PD_C4_FILETYPE cmp #$0f ;DIR beq GET_FILENAME? jsr CHK_PD_FILETYPES ;Carry clear=OK, set=error bcc GOT_GOOD_FT pla pla jmp TRY_OS_AGAIN GOT_GOOD_FT pla pla jmp L219D GET_FILENAME? jsr L2744 ldx #$0c ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 TXT_FILENAME lda #$a0 jsr SET_FIRST_CHAR cpx #$41 bcc L2E7F jmp L2EC2 L2E7F jsr MON_SAVE jsr CLEAR_PAGE jsr MON_RESTORE dec FLAG_ALLOW_ONLINE cmp #$bf bne L2EA2 ldx #$0c ldy #$0a jsr GOTOXY jsr MON_CLREOP jsr CLEAR_PAGE jsr L41E7 jmp GET_FILENAME? L2EA2 cmp #$00 beq L2EB6 cmp #$02 bcs L2EDF lda $0200 cmp #$9b bne L2EDF pla pla jmp TRY_OS_AGAIN L2EB6 jsr BUZZ_SOUND jmp CHK_PRODOS_FT L2EBC dec L1C00 jmp L2EF3 L2EC2 jsr CLEAR_PAGE jsr BUZZ_SOUND ldx #$16 ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 ERR_ENTRY_TOO_LONG inc ALLOW_ESC jsr PROMPT_CONTINUE bcc L2EDF jmp CHK_VALID_FT L2EDF stx L1C00 stx MON_A1L ldy #$00 ldx #$00 L2EE8 lda $0200,x cmp #$a0 beq L2EBC sta L1C01,y iny L2EF3 inx dec MON_A1L bne L2EE8 lda L1C00 bpl L2EFF lda #$00 L2EFF sta L1C00 lda #$00 sta PD_C4_PATH_ADDR lda #$1c sta PD_C4_PATH_ADDR+1 jsr GET_FILE_INFO bcc L2F21 jsr L46AD L2F14 lda #$15 sta PD_C4_PATH_ADDR lda #$1b sta PD_C4_PATH_ADDR+1 jmp GET_FILENAME? L2F21 lda PD_C4_FILETYPE jsr CHK_PD_FILETYPES bcs L2F14 rts CHK_DOS_FT jsr L2744 ldx #$0c ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 TXT_FILENAME lda #$a0 jsr SET_FIRST_CHAR cpx #$1f bcc L2F45 jmp L2F96 L2F45 jsr MON_SAVE jsr CLEAR_PAGE jsr MON_RESTORE dec FLAG_ALLOW_ONLINE cmp #$bf bne L2F6D lda #$00 sta L1BC4 ldx #$0c ldy #$0a jsr GOTOXY jsr MON_CLREOP jsr CLEAR_PAGE jsr L4013 jmp CHK_DOS_FT L2F6D cmp #$00 beq L2F81 cmp #$02 bcs L2FB0 lda $0200 cmp #$9b bne L2FB0 L2F7C pla pla jmp TRY_OS_AGAIN L2F81 jsr BUZZ_SOUND jmp CHK_DOS_FT L2F87 cpy #$01 bcc L2F90 lda #$a0 jmp L2FC0 L2F90 dec L1C00 jmp L2FC4 L2F96 jsr CLEAR_PAGE ldx #$16 ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 ERR_NAME_TOO_LONG inc ALLOW_ESC jsr PROMPT_CONTINUE bcs L2F7C jmp CHK_VALID_FT L2FB0 stx L1C00 stx MON_A1L ldy #$00 ldx #$00 L2FB9 lda $0200,x cmp #$a0 beq L2F87 L2FC0 sta L1C01,y iny L2FC4 inx dec MON_A1L bne L2FB9 lda L1C00 bpl L2FD0 lda #$00 L2FD0 sta L1C00 lda #$01 sta L1BC4 jsr L4013 bcc L2FE0 jmp CHK_DOS_FT L2FE0 rts CHK_PD_FILETYPES cmp #$06 ;BIN beq @FT_OK cmp #$f0 ;CMD beq @FT_OK cmp #$f1 ;User $F1 beq @FT_OK cmp #$f2 ;User $F2 beq @FT_OK cmp #$f3 ;User $F3 beq @FT_OK cmp #$f4 ;User $F4 beq @FT_OK cmp #$f5 ;User $F5 beq @FT_OK cmp #$f6 ;User $F6 beq @FT_OK cmp #$f7 ;User $F7 beq @FT_OK cmp #$f8 ;User $F8 beq @FT_OK cmp #$fc ;BAS beq @FT_OK cmp #$fd ;VAR beq @FT_OK cmp #$ff ;SYS beq @FT_OK sta CHAR_READ lda FLAG_SUBMIT beq L3049 lda L1081 bne L3038 lda CHAR_READ cmp #$04 beq @GOOD_RET bne L3038 @FT_OK sta CHAR_READ lda FLAG_SUBMIT bne L3038 lda CHAR_READ @GOOD_RET clc rts L3038 ldx #$17 ldy #$07 jsr L2759 jsr PRINT_IND .dd2 ERR_INV_FILETYPE jsr L276B sec rts L3049 lda CHAR_READ cmp #$0f bne L3038 jsr CLEAR_PAGE jsr BUZZ_SOUND ldx #$16 ldy #$00 jsr GOTOXY jsr PRINT_IND sty $1a L3062 lda #$a0 jsr MON_RDKEY cmp #$9b bne L3072 pla pla pla pla jmp TRY_OS_AGAIN L3072 cmp #$ce beq L3038 cmp #$ee beq L3038 cmp #$d9 beq L3082 cmp #$f9 bne L3062 L3082 clc lda PATH_LEN adc L1C00 sta MON_A1H cmp #$65 bcc L30A0 ldx #$16 ldy #$01 jsr L2759 jsr PRINT_IND .dd2 ERR_CANNOT_ADD_PFX jsr L276B sec rts L30A0 ldx PATH_LEN lda PATH_LEN,x cmp #$af beq L30B1 inc MON_A1H lda #$af sta PATH,x L30B1 lda L1C00 sta MON_A2L ldy #$00 inx L30B9 lda L1C01,y sta PATH,x iny inx dec MON_A2L bne L30B9 lda MON_A1H sta PATH_LEN ldx #$0a ldy #$00 jsr GOTOXY jsr MON_CLREOP jsr CLEAR_PAGE ldx #$0a ldy #$00 jsr GOTOXY lda #$bf jsr MON_COUT ldy #$00 ldx PATH_LEN L30E8 lda PATH,y jsr MON_COUT iny dex bne L30E8 jsr L4674 bcc L3101 jsr L46AD pla pla pla pla jmp L2197 L3101 pla pla jmp CHK_VALID_FT L3106 cmp #$04 beq L3115 cmp #$02 beq L3115 cmp #$01 beq L3115 jmp L3038 L3115 jmp @GOOD_RET L3118 lda #$00 sta L0F02 lda #$0a sta L0F02+1 lda P8_DEVNUM sta L0F01 lda #$11 ldx #$00 jsr L3166 jsr L4643 beq L313C L3134 jsr L46AD pla pla jmp L2136 L313C lda $0a01 ldx $0a02 beq L3156 jsr L3166 jsr L4643 bne L3134 lda L1BC3 beq L3154 jsr L3158 L3154 clc rts L3156 sec rts L3158 ldy #$ff L315A lda (PTR),y sta (PTR2),y dey bne L315A lda (PTR),y sta (PTR2),y rts L3166 clc ldy #$00 sty L0F04 sty L0F04+1 sta L0F04 rol L0F04 rol L0F04+1 rol L0F04 rol L0F04+1 rol L0F04 rol L0F04+1 lda L0F5D,x clc adc L0F04 sta L0F04 lda L0F04+1 adc #$00 sta L0F04+1 ldy L0F6D,x dey sty L1BC3 lda L0F02 sta PTR sta PTR2 lda L0F02+1 sta PTR+1 sta PTR2+1 inc PTR+1 rts PRDEC_AX ldy #‘ ’ | $80 sty PRDEC_PADDING sta PRDEC_NUMBER_HIGH stx PRDEC_NUMBER_LOW ldx #$04 jmp PRINT_DECIMAL INIT_V5_2345 pha tya pha ldy #$03 lda #$ff L31C5 sta CSUM_V5_2,y dey bpl L31C5 pla tay pla rts INIT_V5_6789 pha tya pha ldy #$03 lda #$ff L31D6 sta CSUM_V5_6,y dey bpl L31D6 pla tay pla rts RUN_V5_CHECKSUM pha txa pha tya pha lda CHAR_READ ldy PD_C4_FILETYPE ldx OS_SELECTION beq @PRODOS ;0=ProDOS? cpy #$02 ;DOS and Applesoft=2 beq @APPLESOFT bne @DO_CHKSUM ;Binary?! @PRODOS cpy #$fc ;Applesoft bne @DO_CHKSUM @APPLESOFT ldx LINE_BYTES_READ beq @DO_CHKSUM cmp #$60 ;Make all text uppercase ($60='a' and end is $7F) bcc @DO_CHKSUM cmp #$80 bcs @DO_CHKSUM sec sbc #$20 ;Uppercase char @DO_CHKSUM sta TEMP_DATA lda CSUM_V5_2 sta CSUM_V5_1 lda CSUM_V5_3 sta CSUM_V5_2 lda CSUM_V5_4 sta CSUM_V5_3 lda CSUM_V5_5 sta CSUM_V5_4 lda #$00 sta CSUM_V5_5 lda CSUM_V5_1 eor TEMP_DATA tay lda CSUM_V5_2 eor KEY_TABLE_1,y sta CSUM_V5_2 lda CSUM_V5_3 eor KEY_TABLE_2,y sta CSUM_V5_3 lda CSUM_V5_4 eor KEY_TABLE_3,y sta CSUM_V5_4 lda CSUM_V5_5 eor KEY_TABLE_4,y sta CSUM_V5_5 lda CSUM_V5_6 sta CSUM_V5_1 lda CSUM_V5_7 sta CSUM_V5_6 lda CSUM_V5_8 sta CSUM_V5_7 lda CSUM_V5_9 sta CSUM_V5_8 lda #$00 sta CSUM_V5_9 lda CSUM_V5_1 eor TEMP_DATA tay lda CSUM_V5_6 eor KEY_TABLE_1,y sta CSUM_V5_6 lda CSUM_V5_7 eor KEY_TABLE_2,y sta CSUM_V5_7 lda CSUM_V5_8 eor KEY_TABLE_3,y sta CSUM_V5_8 lda CSUM_V5_9 eor KEY_TABLE_4,y sta CSUM_V5_9 pla tay pla tax pla rts MEMSCAN ldy #$07 @CHECK lda P8_MEMTABL+16,y ;Find highest address in$8000-$BFFF that is free beq CALC_HIMEM dey bpl @CHECK jsr L2759 jsr PRINT_IND .dd2 ERR_INSUFFMEM jsr PRINT_IND .dd2 TXT_ABORTING jsr L276B jmp PGM_QUIT CALC_HIMEM lda #$78 L32C2 clc adc #$08 dey bpl L32C2 sta HIMEM2? sta HIMEM3? clc adc #$04 sta HIMEM1? lda #$51 lsr A bcc L32E5 lda HIMEM3? lsr A bcs L32EE dec HIMEM3? jmp L32EE L32E5 lda HIMEM3? lsr A bcc L32EE dec HIMEM3? L32EE lda HIMEM3? sta HIMEM4? rts L32F5 lda MENU_SELECTION bne L3304 ldx #$0c ldy #$02 jsr GOTOXY jsr DRAW_ARROW L3304 ldx #$0c ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 TXT_V5 jsr MON_CLREOL lda KP_VER_FLAG cmp #$02 bne L3326 ldx #$0c ldy #$11 jsr GOTOXY jsr PRINT_IND .dd2 TXT_CURRENT L3326 lda MENU_SELECTION cmp #$01 bne L3337 ldx #$0d ldy #$02 jsr GOTOXY jsr DRAW_ARROW L3337 ldx #$0d ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 TXT_V4 jsr MON_CLREOL lda KP_VER_FLAG bne L3357 ldx #$0d ldy #$11 jsr GOTOXY jsr PRINT_IND .dd2 TXT_CURRENT L3357 lda MENU_SELECTION cmp #$02 bne L3368 ldx #$0e ldy #$02 jsr GOTOXY jsr DRAW_ARROW L3368 ldx #$0e ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 TXT_BOTH jsr MON_CLREOL lda KP_VER_FLAG bpl L3388 ldx #$0e ldy #$11 jsr GOTOXY jsr PRINT_IND .dd2 TXT_CURRENT L3388 ldx #$17 ldy #$26 jsr GOTOXY rts L3390 lda #$00 sta MENU_SELECTION lda KP_VER_FLAG beq L33A2 bmi L339F jmp L33A5 L339F inc MENU_SELECTION L33A2 inc MENU_SELECTION L33A5 jsr PRINT_MENU_FOOTER jsr MENU_CLEAR_PANE ldx #$08 ldy #$14 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ESC_PREV_MENU ldx #$0a ldy #$0a jsr GOTOXY jsr PRINT_IND .dd2 TXT_SET_OUT_FMT L33C3 jsr L32F5 lda KBDSTRB lda #$a0 jsr MON_KEYIN cmp #$8b beq L33D6 cmp #$88 bne L33E3 L33D6 dec MENU_SELECTION bpl L33C3 lda #$02 sta MENU_SELECTION jmp L33C3 L33E3 cmp #$8a beq L33EB cmp #$95 bne L33FD L33EB inc MENU_SELECTION lda MENU_SELECTION cmp #$03 bcc L33C3 lda #$00 sta MENU_SELECTION jmp L33C3 L33FD cmp #$9b bne L3404 jmp L3910 L3404 cmp #$8d bne L33C3 lda MENU_SELECTION cmp #$01 beq L3415 bcs L3419 lda #$b6 bne L341B L3415 lda #$b4 bne L341B L3419 lda #$c2 L341B sta L1055 and #$0f sec sbc #$04 sta KP_VER_FLAG jsr L32F5 ldx #$08 ldy #$01 jsr GOTOXY jsr MON_CLREOL ldx #$08 ldy #$14 jsr GOTOXY jsr PRINT_IND asl A inc A ldx #$16 ldy #$00 jsr GOTOXY jsr MON_CLREOP inc ALLOW_ESC jsr PROMPT_CONTINUE bcs L3454 jmp L3910 L3454 jmp L3390 RESET_VALUES? lda #$00 sta L0F02 lda #$0a sta L0F02+1 lda #$15 sta L0F07 lda #$1b sta L0F07+1 lda #$00 sta L0F10 lda #$08 sta L0F10+1 lda #$15 sta L0F13 lda #$1b sta L0F13+1 lda #$00 sta L0F17 lda #$08 sta L0F17+1 lda #$15 sta PD_C4_PATH_ADDR lda #$1b sta PD_C4_PATH_ADDR+1 lda #$00 sta L0F44 lda #$08 sta L0F44+1 lda #$60 sta L0F01 lda #$00 sta L0F04 sta L0F09 sta L0F09+1 sta L0F0B sta PD_CC_REFNUM sta L0F0F sta L0F16 sta L0F43 sta L0F46 sta L0F46+1 sta L0F48 sta L0F48+1 sta L0F4C sta L0F4C+1 sta L0F4C+2 sta L10EA lda #$c0 sta L10EB rts L34DA ldx L1088 lda #$00 L34DF sta FLAG_SUBMIT,x dex bpl L34DF rts ASK_ACT_SUBMIT lda #$00 sta FLAG_SUBMIT jsr CLEAR_PAGE ldx #$16 ldy #$07 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ACT_SUBMIT L34FA jsr MON_RDKEY cmp #‘Y’ | $80 beq L3511 cmp #‘y’ | $80 beq L3511 cmp #‘N’ | $80 beq L350D cmp #‘n’ | $80 bne L34FA L350D jsr CLEAR_PAGE rts L3511 lda #$01 sta FLAG_SUBMIT jsr L351A rts L351A lda #$b1 sta L10F0 sta L1083 lda #$00 sta L1082 lda #$89 sta L105A lda #$b8 sta L105B lda #$b0 sta L105C lda #$ce sta L105D lda #$a0 sta L105E lda #$04 sta L1059 lda #$8c sta L10F1 lda #$01 sta KP_VER_FLAG lda #$00 sta L1057 rts L3555 lda L10F0 and #$0f beq L3580 ora L10EB sta MON_CSWH lda L10EA sta MON_CSWL inc L1052 lda L1059 beq L357F tax dex ldy #$00 L3572 lda L105A,y jsr MON_COUT iny dex bpl L3572 jsr MON_CROUT L357F rts L3580 jsr MON_SETVID jsr MON_SETKBD lda #$00 sta L1052 rts PRDEC_BYTE lda #$00 ldy #‘0’ | $80 sty PRDEC_PADDING sta PRDEC_NUMBER_HIGH stx PRDEC_NUMBER_LOW ldx #$01 PRINT_DECIMAL stx PRDEC_NUM_DIGITS @NEXTDIGIT lda #‘0’ | $80 sta PRDEC_CURR_DIGIT @SUBLOOP lda PRDEC_NUMBER_LOW cmp TENS_LOW,x lda PRDEC_NUMBER_HIGH sbc TENS_HIGH,x bcc @SUBDONE sta PRDEC_NUMBER_HIGH lda PRDEC_NUMBER_LOW sbc TENS_LOW,x sta PRDEC_NUMBER_LOW inc PRDEC_CURR_DIGIT bne @SUBLOOP @SUBDONE lda PRDEC_CURR_DIGIT inx dex beq @LASTDIGIT cmp #‘0’ | $80 beq @SKIPLEADING0 sta PRDEC_NUM_DIGITS @SKIPLEADING0 bit PRDEC_NUM_DIGITS bmi @LASTDIGIT lda PRDEC_PADDING cmp #‘@’ | $80 beq @DONTPRINT @LASTDIGIT jsr MON_COUT @DONTPRINT dex bpl @NEXTDIGIT rts L35E3 jsr CLEAR_PAGE ldx #$16 ldy #$04 jsr GOTOXY jsr PRINT_IND .dd2 TXT_REINSERT_KP_DISK jsr PROMPT_CONTINUE rts L35F6 lda L1C89 beq L3601 jsr L35E3 jsr PRINT_MENU_FOOTER L3601 ldx L10F2 stx L1C00 ldy #$00 L3609 lda L1695,y sta L1C01,y iny dex bne L3609 lda #$00 sta L0F07 lda #$1c sta L0F07+1 lda HIMEM2? sta L0F09+1 jsr L4658 beq L362A sec rts L362A lda L0F0B sta L0F43 lda #$00 sta L0F44 lda #$08 sta L0F44+1 lda #$00 sta L0F46 lda #$01 sta L0F46+1 jsr L464A beq L3653 lda #$00 sta PD_CC_REFNUM jsr CLOSE_FILES sec rts L3653 lda #$00 sta PD_CC_REFNUM jsr CLOSE_FILES ldx L107D L365E lda $0800,x sta LOWER_MASK?,x dex bpl L365E rts L3668 jsr MENU_CLEAR_PANE jsr CLEAR_PAGE ldx #$08 ldy #$14 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ESC_PREV_MENU ldx #$0a ldy #$0c jsr GOTOXY jsr PRINT_IND .dd2 TXT_SAVE_DEFAULTS ldx #$0c ldy #$09 jsr GOTOXY jsr PRINT_IND .dd2 L19CF lda #$a0 jsr MON_RDKEY cmp #$9b bne L369E L369B jmp L3910 L369E cmp #$ce beq L369B cmp #$ee beq L369B cmp #$d9 beq L36AE cmp #$f9 bne L3668 L36AE lda L1C89 beq L36B6 jsr L35E3 L36B6 ldx L10F2 stx L1C00 ldy #$00 L36BE lda L1695,y sta L1C01,y iny dex bne L36BE jsr L4635 beq L36D7 cmp #$46 beq L36D7 jsr L46AD jmp L3910 L36D7 jsr L463C beq L36E2 jsr L46AD jmp L3910 L36E2 lda #$00 sta L0F07 lda #$1c sta L0F07+1 lda HIMEM2? sta L0F09+1 jsr L4658 beq L36FD jsr L46AD jmp L3910 L36FD lda L0F0B sta L0F3B lda L107D sta L0F3E inc L0F3E ldx L107D L370F lda LOWER_MASK?,x sta $0800,x dex bpl L370F jsr L462E beq L3720 jsr L46AD L3720 lda #$00 sta PD_CC_REFNUM jsr CLOSE_FILES jmp L3910 SHOW_MENU lda MENU_SELECTION bne L373A ldx #$0c ldy #$02 jsr GOTOXY jsr DRAW_ARROW L373A ldx #$0c ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 MENU_GEN_CHKCODE lda MENU_SELECTION cmp #$01 bne L3757 ldx #$0d ldy #$02 jsr GOTOXY jsr DRAW_ARROW L3757 ldx #$0d ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 MENU_SET_DEFAULTS lda MENU_SELECTION cmp #$02 bne L3774 ldx #$0e ldy #$02 jsr GOTOXY jsr DRAW_ARROW L3774 ldx #$0e ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 MENU_QUIT ldx #$17 ldy #$26 jsr GOTOXY rts DO_MENU_SELECT lda #$00 sta MENU_SELECTION jsr PRINT_MENU_FOOTER jsr MENU_CLEAR_PANE ldx #$0a ldy #$0e jsr GOTOXY jsr PRINT_IND .dd2 TXT_MAIN_MENU @GETSELECT jsr SHOW_MENU lda KBDSTRB lda #‘ ’ | $80 jsr MON_KEYIN cmp #KEY_UP_ARROW ;Up arrow beq @ISUP cmp #KEY_LEFT_ARROW ;Left arrow bne @CHKDOWN @ISUP dec MENU_SELECTION bpl @GETSELECT lda #$02 sta MENU_SELECTION jmp @GETSELECT @CHKDOWN cmp #KEY_DOWN_ARROW ;Down arrow beq ISDOWN cmp #KEY_RIGHT_ARROW ;Right arrow bne @CHKSELECT ISDOWN inc MENU_SELECTION lda MENU_SELECTION cmp #$03 bcc @GETSELECT lda #$00 sta MENU_SELECTION jmp @GETSELECT @CHKSELECT cmp #KEY_CR ;CR bne @GETSELECT lda MENU_SELECTION beq @RETURN ;=Generate checkcode cmp #$01 bne @QUIT ;=Quit jsr L3910 ;=Set defaults jmp DO_MENU_SELECT @QUIT jmp PGM_QUIT @RETURN rts DRAW_ARROW lda MON_CV sta TEMP_XREG lda MON_CH sta TEMP_YREG ldx #$14 @ERASE ldy #$02 jsr GOTOXY lda #$a0 jsr MON_COUT jsr MON_COUT dex cpx #$09 bne @ERASE ldx TEMP_XREG ldy TEMP_YREG jsr GOTOXY lda #‘-’ | $80 jsr MON_COUT lda #‘>’ | $80 jsr MON_COUT rts L3822 lda MENU_SELECTION bne L3831 ldx #$0c ldy #$02 jsr GOTOXY jsr DRAW_ARROW L3831 ldx #$0c ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 TXT_VIEW_DEFAULTS lda MENU_SELECTION cmp #$01 bne L384E ldx #$0d ldy #$02 jsr GOTOXY jsr DRAW_ARROW L384E ldx #$0d ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 TXT_SET_OUT_LOC lda MENU_SELECTION cmp #$02 bne L386B ldx #$0e ldy #$02 jsr GOTOXY jsr DRAW_ARROW L386B ldx #$0e ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 TXT_SET_LP_DEFAULTS lda MENU_SELECTION cmp #$03 bne L3888 ldx #$0f ldy #$02 jsr GOTOXY jsr DRAW_ARROW L3888 ldx #$0f ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 TXT_SET_DOS_SD lda MENU_SELECTION cmp #$04 bne L38A5 ldx #$10 ldy #$02 jsr GOTOXY jsr DRAW_ARROW L38A5 ldx #$10 ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 TXT_SET_OUT_FMT lda MENU_SELECTION cmp #$05 bne L38C2 ldx #$11 ldy #$02 jsr GOTOXY jsr DRAW_ARROW L38C2 ldx #$11 ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ASOFT_CNTRL_LIST lda MENU_SELECTION cmp #$06 bne L38DF ldx #$12 ldy #$02 jsr GOTOXY jsr DRAW_ARROW L38DF ldx #$12 ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 TXT_SAVE_DEFAULTS lda MENU_SELECTION cmp #$07 bne L38FC ldx #$13 ldy #$02 jsr GOTOXY jsr DRAW_ARROW L38FC ldx #$13 ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 TXT_RESET_DEFAULTS ldx #$17 ldy #$26 jsr GOTOXY rts L3910 jsr MENU_CLEAR_PANE jsr PRINT_MENU_FOOTER ldx #$08 ldy #$14 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ESC_MAIN_MENU ldx #$0a ldy #$0c jsr GOTOXY jsr PRINT_IND lsr $18 lda #$00 sta MENU_SELECTION L3933 jsr L3822 lda KBDSTRB lda #$a0 jsr MON_KEYIN cmp #$8b beq L3946 cmp #$88 bne L3953 L3946 dec MENU_SELECTION bpl L3933 lda #$07 sta MENU_SELECTION jmp L3933 L3953 cmp #$8a beq L395B cmp #$95 bne L396D L395B inc MENU_SELECTION lda MENU_SELECTION cmp #$08 bcc L3933 lda #$00 sta MENU_SELECTION jmp L3933 L396D cmp #$8d beq L3976 cmp #$9b bne L3933 rts L3976 lda MENU_SELECTION asl A tax lda L0F9B,x sta MON_A1L lda L0F9C,x sta MON_A1H jmp (MON_A1L) PRINT_MENU_FOOTER ldx #$16 ldy #$00 jsr GOTOXY jsr MON_CLREOP ldx #$16 ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 MENU_FOOTER1 jsr MON_CROUT jsr PRINT_IND .dd2 MENU_FOOTER2 rts MENU_CLEAR_PANE ldx #$07 ldy #$00 jsr GOTOXY ldx #$0d @LOOP jsr MON_CLREOL jsr MON_CROUT dex bpl @LOOP rts CLEAR_PAGE ldx #$15 ldy #$00 jsr GOTOXY jsr PRINT_DASH_LINE ldx #$16 ldy #$00 jsr GOTOXY jsr MON_CLREOP rts L39CF lda MENU_SELECTION bne L39DE ldx #$0c ldy #$02 jsr GOTOXY jsr DRAW_ARROW L39DE ldx #$0c ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 TXT_GET_DFLTS_DISK lda MENU_SELECTION cmp #$01 bne L39FB ldx #$0d ldy #$02 jsr GOTOXY jsr DRAW_ARROW L39FB ldx #$0d ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 TXT_GET_SYS_DFLTS ldx #$17 ldy #$26 jsr GOTOXY rts L3A0F lda #$00 sta MENU_SELECTION jsr PRINT_MENU_FOOTER jsr MENU_CLEAR_PANE ldx #$08 ldy #$14 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ESC_PREV_MENU ldx #$0a ldy #$0c jsr GOTOXY jsr PRINT_IND .dd2 TXT_RESET_DEFAULTS L3A32 jsr L39CF lda KBDSTRB lda #$a0 jsr MON_KEYIN cmp #$8b beq L3A45 cmp #$88 bne L3A52 L3A45 dec MENU_SELECTION bpl L3A32 lda #$01 sta MENU_SELECTION jmp L3A32 L3A52 cmp #$8a beq L3A5A cmp #$95 bne L3A6C L3A5A inc MENU_SELECTION lda MENU_SELECTION cmp #$02 bcc L3A32 lda #$00 sta MENU_SELECTION jmp L3A32 L3A6C cmp #$9b bne L3A73 jmp L3910 L3A73 cmp #$8d bne L3A32 ldx #$08 jsr CLEAR_LINE lda MENU_SELECTION bne L3ABA jsr L35F6 bcc L3A8C jsr L46AD jmp L3A0F L3A8C ldx #$08 ldy #$01 jsr GOTOXY jsr MON_CLREOL ldx #$08 ldy #$14 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ESC_RETRY inc ALLOW_ESC ldx #$16 ldy #$00 jsr GOTOXY jsr MON_CLREOP jsr PROMPT_CONTINUE bcs L3AB7 jmp L3910 L3AB7 jmp L3A0F L3ABA jsr COPY_DEFAULTS? jmp L3A8C COPY_DEFAULTS? ldx DEFAULTS_LENGTH @COPY lda DEFAULT_VALUES,x sta L1050,x dex bpl @COPY rts L3ACD jsr MENU_CLEAR_PANE jsr CLEAR_PAGE ldx #$08 ldy #$14 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ESC_PREV_MENU ldx #$0a ldy #$06 jsr GOTOXY jsr PRINT_IND .dd2 TXT_SET_DOS_SD lda L1050 sta L1B0D lda L1051 sta L1B0E jsr L2693 bcc L3AFE bcs L3B2D L3AFE jsr L26E1 bcs L3B2D lda L1B0D sta L1050 lda L1B0E sta L1051 ldx #$08 ldy #$01 jsr GOTOXY jsr MON_CLREOL ldx #$08 ldy #$14 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ESC_RETRY inc ALLOW_ESC jsr PROMPT_CONTINUE bcs L3ACD L3B2D jmp L3910 L3B30 jsr MENU_CLEAR_PANE jsr CLEAR_PAGE ldx #$08 ldy #$14 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ESC_PREV_MENU ldx #$0a ldy #$09 jsr GOTOXY jsr PRINT_IND .dd2 TXT_SET_OUT_LOC ldx #$0c ldy #$05 jsr GOTOXY jsr PRINT_IND .dd2 TXT_OUTPUT_LP jsr MON_RDKEY pha jsr MON_COUT pla cmp #$9b beq L3BA6 cmp #$d9 beq L3BAC cmp #$f9 beq L3BAC cmp #$ce beq L3B76 cmp #$ee bne L3B30 L3B76 lda #$b0 L3B78 sta L1053 sta L10F0 ldx #$08 ldy #$01 jsr GOTOXY jsr MON_CLREOL ldx #$08 ldy #$14 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ESC_RETRY inc ALLOW_ESC ldx #$16 ldy #$00 jsr GOTOXY jsr MON_CLREOP jsr PROMPT_CONTINUE bcs L3BA9 L3BA6 jmp L3910 L3BA9 jmp L3B30 L3BAC lda L1054 and #$0f beq L3BB8 lda L1054 bne L3B78 L3BB8 lda #$b1 bne L3B78 CHECK_LOWERCASE lda PREVENT_DOUBLE? bne @EXIT lda #$01 sta PREVENT_DOUBLE? lda LOWER_MASK? cmp #$df bne @EXIT ldx #$0a ldy #$01 jsr GOTOXY jsr PRINT_IND .dd2 TXT_HAS_LOWERCASE @AGAIN jsr MON_RDKEY cmp #‘N’ | $80 beq @EXIT cmp #‘n’ | $80 beq @EXIT cmp #‘Y’ | $80 beq @ENABLE cmp #‘y’ | $80 bne @AGAIN @ENABLE lda #$ff sta LOWER_MASK? lda #$00 sta MON_WNDTOP jsr PRINT_HEADER @EXIT rts L3BF9 asl A asl A asl A lsr A lsr A lsr A sta L1B08 lda L1B0C ror A lda L1B0B ror A lsr A lsr A lsr A lsr A sta L1B09 lda L1B0C lsr A sta L1B0A rts L3C19 ldx L1B08 beq L3C38 jsr PRDEC_BYTE lda #$ad jsr MON_COUT lda L1B09 jsr L3C3E lda #$ad jsr MON_COUT ldx L1B0A jsr PRDEC_BYTE rts L3C38 jsr PRINT_IND .dd2 TXT_NO_DATE rts L3C3E sec sbc #$01 asl A asl A tay ldx #$02 L3C46 lda MONTHS,y jsr MON_COUT iny dex bpl L3C46 rts HANDLE_SUBMIT lda L1081 bne L3CBC jsr CLEAR_PAGE jsr MENU_CLEAR_PANE lda #$15 sta MON_WNDBTM ldx #$07 ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 TXT_SUBMIT_CMDS jsr MON_CROUT lda #$08 sta MON_WNDTOP lda #$15 sta L0F07 lda #$1b sta L0F07+1 lda L1C00 beq L3C8C lda #$00 sta L0F07 lda #$1c sta L0F07+1 L3C8C lda HIMEM2? sta L0F09+1 jsr L4658 beq L3CA9 L3C97 sta CHAR_READ jsr L34DA lda CHAR_READ jsr L46AD ldx #$ff txs jmp L2136 L3CA9 lda #$01 sta L1081 lda L0F0B sta L107F sta L0F50 jsr L4651 bne L3C97 L3CBC lda L107F sta L0F43 lda #$00 sta L0F44 lda #$0c sta L0F44+1 lda #$00 sta L0F46 lda #$01 sta L0F46+1 L3CD6 jsr L464A beq L3CDE jsr L46AD L3CDE ldx L0F48 ldy #$00 L3CE3 lda $0c00,y ora #$80 jsr MON_COUT iny dex bne L3CE3 ldx #$00 L3CF1 ldy #$00 lda $0c00,y ora #$80 cmp L1089,x beq L3D13 bcc L3D08 L3CFF inx inx inx inx cpx L10B9 bcc L3CF1 L3D08 jsr L3FF6 jsr PRINT_IND .dd2 ERR_UNK_SUBMIT jmp L3FF7 L3D13 stx L1086 iny inx lda $0c00,y ora #$80 cmp L1089,x beq L3D28 L3D22 ldx L1086 jmp L3CFF L3D28 iny inx lda $0c00,y ora #$80 cmp L1089,x bne L3D22 txa lsr A lsr A sta L1086 L3D3A iny lda $0c00,y ora #$80 cmp #$ba beq L3D4A cmp #$bb beq L3D4A bne L3D3A L3D4A iny lda $0c00,y ora #$80 cmp #$a0 beq L3D4A sty L1084 lda L1086 beq L3D84 cmp #$02 bcc L3D87 beq L3D8A cmp #$04 bcc L3D8D beq L3D90 cmp #$06 bcc L3D93 beq L3D96 cmp #$08 bcc L3D99 beq L3D9C cmp #$0a bcc L3D9F beq L3DA5 cmp #$0b beq L3DA2 jsr L3FF6 jmp L3FF7 L3D84 jmp L3DA8 L3D87 jmp L3DD5 L3D8A jmp L3E0F L3D8D jmp L3E30 L3D90 jmp L3E43 L3D93 jmp L3EEA L3D96 jmp L3F1A L3D99 jmp L3F4F L3D9C jmp L3F8E L3D9F jmp L3FA7 L3DA2 jmp L3FD2 L3DA5 jmp L3FF3 L3DA8 lda $0c00,y ora #$80 cmp #$cf beq L3DB4 jmp L3D08 L3DB4 iny lda $0c00,y ora #$80 cmp #$ce beq L3DC5 cmp #$c6 beq L3DCD jmp L3D08 L3DC5 lda #$01 sta L1057 jmp L3CD6 L3DCD lda #$00 sta L1057 jmp L3CD6 L3DD5 lda $0c00,y ora #$80 cmp #$b3 beq L3DE9 cmp #$d0 beq L3DFC cmp #$f0 beq L3DFC jmp L3D08 L3DE9 lda #$01 sta OS_SELECTION sta L1082 lda L1087 ora #$01 sta L1087 jmp L3CD6 L3DFC lda #$00 sta OS_SELECTION sta L1082 lda L1087 and #$fe sta L1087 jmp L3CD6 L3E0F lda $0c00,y ora #$80 cmp #$b1 beq L3E1F cmp #$b2 beq L3E1F jmp L3D08 L3E1F sta L1B07 sta L1051 lda L1087 ora #$02 sta L1087 jmp L3CD6 L3E30 lda #$18 sta MON_WNDBTM jsr CLEAR_PAGE jsr PROMPT_CONTINUE jsr L34DA ldx #$ff txs jmp L2136 L3E43 ldx #$00 L3E45 lda $0c00,y ora #$80 cmp #$8d beq L3E60 cmp #$e0 bcc L3E54 and #$de L3E54 sta L1C01,x iny inx cpx #$65 bcc L3E45 jmp L3D08 L3E60 stx L1C00 lda OS_SELECTION beq L3E9D lda L1087 cmp #$07 beq L3E7A jsr L3FF6 jsr PRINT_IND .dd2 ERR_SD_NOT_DEFINED jmp L3FF7 L3E7A jsr L259F lda #$01 sta L1BC4 jsr L4013 bcc L3EB5 jsr L3FF6 jsr PRINT_IND .dd2 ERR_FILE_NOT_FOUND jsr MON_CROUT jsr PRINT_IND .dd2 TXT_RET_CONTINUE jsr MON_RDKEY jmp L3CD6 L3E9D lda #$00 sta PD_C4_PATH_ADDR lda #$1c sta PD_C4_PATH_ADDR+1 jsr GET_FILE_INFO beq L3EB5 jsr L46AD ldx #$ff txs jmp L2136 L3EB5 jsr L43B9 jsr L4827 lda L1083 sta L10F0 jsr L3555 jsr L2891 jsr L2AD3 jsr L2BB8 jmp L21D0 L3ED0 lda L10F1 jsr MON_COUT lda #$00 sta L10F0 jsr L3555 jsr RESET_BUFFERS lda HIMEM4? sta HIMEM3? jmp L3CBC L3EEA lda $0c00,y ora #$80 cmp #$b4 beq L3F02 cmp #$b5 beq L3F0A cmp #$c2 beq L3F12 cmp #$e2 beq L3F12 jmp L3D08 L3F02 lda #$00 sta KP_VER_FLAG jmp L3CD6 L3F0A lda #$01 sta KP_VER_FLAG jmp L3CD6 L3F12 lda #$ff sta KP_VER_FLAG jmp L3CD6 L3F1A ldx #$00 L3F1C lda $0c00,y ora #$80 cmp #$8d beq L3F49 cmp #$de beq L3F3B cmp #$e0 bcc L3F2F and #$de L3F2F sta L105A,x L3F32 iny inx cpx #$1e bcc L3F1C jmp L3D08 L3F3B iny lda $0c00,y and #$1f ora #$80 sta L105A,x jmp L3F32 L3F49 stx L1059 jmp L3CD6 L3F4F lda $0c00,y ora #$80 cmp #$de beq L3F5F cmp #$a4 beq L3F6D jmp L3D08 L3F5F iny lda $0c00,y and #$1f ora #$80 sta L10F1 jmp L3CD6 L3F6D iny lda $0c00,y asl A asl A asl A asl A sta L10F1 iny lda $0c00,y and #$0f ora L10F1 lda L10F1 cmp #$20 bcc L3F8B jmp L3D08 L3F8B jmp L3CD6 L3F8E lda $0c00,y ora #$80 cmp #$b1 bcc L3FA4 cmp #$b8 bcs L3FA4 sta L10F0 sta L1083 jmp L3CD6 L3FA4 jmp L3D08 L3FA7 ldx #$00 L3FA9 lda $0c00,y ora #$80 cmp #$8d beq L3FC4 cmp #$e0 bcc L3FB8 and #$de L3FB8 sta PATH,x iny inx cpx #$65 bcc L3FA9 jmp L3D08 L3FC4 stx PATH_LEN jsr L4674 beq L3FCF jsr L46AD L3FCF jmp L3CBC L3FD2 lda $0c00,y ora #$80 cmp #$b1 bcc L3FF0 cmp #$b8 bcs L3FF0 sta L1B06 sta L1050 lda L1087 ora #$04 sta L1087 jmp L3CD6 L3FF0 jmp L3D08 L3FF3 jmp PGM_QUIT L3FF6 rts L3FF7 ldx #$16 ldy #$00 jsr GOTOXY jsr MON_CLREOP ldx #$16 ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 ERR_FATAL jsr L2A9D jmp START L4013 jsr L3118 bcc L401B jmp L412D L401B lda #$00 sta $ec lda #$0a sta $ed lda $ec sta $ea lda $ed sta $eb lda #$06 sta L1BC5 sta L1BC6 lda #$0b sta $ea lda L1BC4 beq L403F jmp L412E L403F ldx #$0e ldy #$00 jsr GOTOXY jsr MON_CLREOP jsr CLEAR_PAGE ldx #$0e ldy #$00 jsr GOTOXY L4053 ldy #$00 lda ($ea),y bne L405C jmp L412D L405C cmp #$ff bne L4063 jmp L40F5 L4063 ldy #$02 lda ($ea),y tax and #$80 bne L4070 lda #$a0 bne L4072 L4070 lda #$aa L4072 jsr MON_COUT txa and #$7f tax and #$f0 bne L4083 lda DOS_FILETYPE_LOW,x jmp L408B L4083 lsr A lsr A lsr A lsr A tax lda DOS_FILETYPE_HIGH,x L408B jsr MON_COUT lda #$a0 jsr MON_COUT ldy #$21 lda ($ea),y sta PRDEC_NUMBER_LOW lda #$00 sta PRDEC_NUMBER_HIGH lda #$a0 sta PRDEC_PADDING ldx #$02 jsr PRINT_DECIMAL lda #$a0 jsr MON_COUT ldx #$1e ldy #$03 L40B2 lda ($ea),y ora #$80 jsr MON_COUT iny dex bne L40B2 jsr MON_CROUT dec L1BC6 bpl L40F5 ldx #$16 ldy #$00 jsr GOTOXY jsr PRINT_IND lda #$16 lda #$06 sta L1BC6 lda #$a0 jsr MON_RDKEY cmp #$8d beq L40E1 bne L412D L40E1 ldx #$0e ldy #$00 jsr GOTOXY jsr MON_CLREOP jsr CLEAR_PAGE ldx #$0e ldy #$00 jsr GOTOXY L40F5 dec L1BC5 bpl L4102 lda $0a02 bne L410C jmp L412D L4102 clc lda $ea adc #$23 sta $ea jmp L4053 L410C jsr L313C bcs L412D lda #$00 sta $ec lda #$0a sta $ed lda $ec sta $ea lda $ed sta $eb lda #$0b sta $ea lda #$06 sta L1BC5 jmp L4053 L412D rts L412E ldy #$1e ldx L1C00 lda #$a0 L4135 sta L1C01,x inx dey bpl L4135 L413C ldy #$00 lda ($ea),y bne L4145 jmp L41D6 L4145 ldx #$00 ldy #$03 L4149 lda ($ea),y cmp L1C01,x beq L4153 jmp L419E L4153 iny inx cpx #$1e bne L4149 ldy #$02 lda ($ea),y and #$7f sta PD_C4_FILETYPE jsr L3106 bcc L4168 rts L4168 ldy #$21 lda ($ea),y sta L1BCA iny lda ($ea),y sta L1BCB lda #$00 sta L0F02 lda #$08 sta L0F02+1 ldy #$00 lda ($ea),y iny pha lda ($ea),y tax pla jsr L3166 jsr L4643 beq L4194 jmp L3134 L4194 lda L1BC3 beq L419C jsr L3158 L419C clc rts L419E dec L1BC5 bpl L41AB lda $0a02 bne L41B5 jmp L41D6 L41AB clc lda $ea adc #$23 sta $ea jmp L413C L41B5 jsr L313C bcs L41D6 lda #$00 sta $ec lda #$0a sta $ed lda $ec sta $ea lda $ed sta $eb lda #$0b sta $ea lda #$06 sta L1BC5 jmp L413C L41D6 ldx #$10 ldy #$0d jsr L2759 jsr PRINT_IND cmp #$14 jsr L276B sec rts L41E7 lda HIMEM1? sta L0F09+1 jsr L4658 beq L41FC L41F2 jsr L46AD pla pla pla pla jmp L2136 L41FC lda L0F0B sta L0F43 lda #$00 sta L0F46 lda #$02 sta L0F46+1 jsr L464A bne L41F2 ldy #$23 lda $0800,y sta L1BB1 iny lda $0800,y sta L1BB2 iny lda $0800,y sta L1BB3 iny lda $0800,y sta L1BB4 lda #$02 sta L1BB5 lda #$00 sta L1BB6 sta L1BB7 lda #$04 clc adc L1BB1 sta $ea lda #$08 sta $eb lda #$06 sta L1BC6 ldx #$0e ldy #$00 jsr GOTOXY jsr MON_CLREOP jsr CLEAR_PAGE ldx #$0e ldy #$00 jsr GOTOXY L4260 lda L1BB7 cmp L1BB4 beq L426A bcs L4272 L426A lda L1BB6 cmp L1BB3 bcc L427C L4272 lda L0F0B sta PD_CC_REFNUM jsr CLOSE_FILES rts L427C ldy #$00 lda ($ea),y bne L4285 jmp L4369 L4285 ldy #$1e lda ($ea),y and #$c3 eor #$c3 bne L4293 lda #$a0 bne L4295 L4293 lda #$aa L4295 jsr MON_COUT ldy #$00 lda ($ea),y and #$0f tax ldy #$01 L42A1 lda ($ea),y ora #$80 jsr MON_COUT iny dex bne L42A1 lda #$11 sta MON_CH ldy #$10 lda ($ea),y cmp #$12 bcs L42CA asl A asl A tay ldx #$03 L42BD lda PRODOS_FILE_TYPES1,y jsr MON_COUT iny dex bpl L42BD jmp L42ED L42CA cmp #$f0 bcc L42E3 sec sbc #$f0 asl A asl A tay ldx #$03 L42D6 lda PRODOS_FILE_TYPES2,y jsr MON_COUT iny dex bpl L42D6 jmp L42ED L42E3 tay lda #$a4 jsr MON_COUT tya jsr MON_PRBYTE L42ED lda #$16 sta MON_CH ldy #$13 lda ($ea),y sta PRDEC_NUMBER_LOW iny lda ($ea),y sta PRDEC_NUMBER_HIGH lda #$a0 sta PRDEC_PADDING ldx #$05 jsr PRINT_DECIMAL lda #$1e sta MON_CH ldy #$22 lda ($ea),y sta L1B0C dey lda ($ea),y sta L1B0B jsr L3BF9 jsr L3C19 jsr MON_CROUT dec L1BC6 bpl L4358 ldx #$16 ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 TXT_PRESS_RET lda #$06 sta L1BC6 lda #$a0 jsr MON_RDKEY cmp #$8d beq L4344 jmp L4272 L4344 ldx #$0e ldy #$00 jsr GOTOXY jsr MON_CLREOP jsr CLEAR_PAGE ldx #$0e ldy #$00 jsr GOTOXY L4358 sec lda L1BB6 adc #$00 sta L1BB6 lda L1BB7 adc #$00 sta L1BB7 L4369 lda L1BB7 cmp L1BB4 beq L4373 bcs L437B L4373 lda L1BB6 cmp L1BB3 bcc L437E L437B jmp L4272 L437E lda L1BB2 cmp L1BB5 beq L439A inc L1BB5 clc lda $ea adc L1BB1 sta $ea lda $eb adc #$00 sta $eb jmp L4260 L439A jsr L464A beq L43A9 jsr L46AD pla pla pla pla jmp L2136 L43A9 lda #$01 sta L1BB5 lda #$04 sta $ea lda #$08 sta $eb jmp L4260 L43B9 lda L1057 beq L43E1 lda HIMEM3? sec sbc #$20 sta HIMEM3? sta MON_A1H lda #$00 sta MON_A1L L43CD ldy #$ff lda #$00 L43D1 sta (MON_A1L),y dey bne L43D1 sta (MON_A1L),y inc MON_A1H lda MON_A1H cmp HIMEM4? bne L43CD L43E1 rts L43E2 jsr MON_SAVE lda L1057 beq @EXIT lda OS_SELECTION bne @IS_DOS lda PD_C4_FILETYPE cmp #$fc ;Applesoft filetype (ProDOS) bne @EXIT jsr L440A jmp @EXIT @IS_DOS lda PD_C4_FILETYPE cmp #$02 ;Applesoft filetype bne @EXIT jsr L440A @EXIT jsr MON_RESTORE rts L440A lda CHAR_READ bne @NOT_EOS rts @NOT_EOS lda #$01 sta L1C87 ldx #$02 lda END_LINE_NBR sta MON_A1L lda END_LINE_NBR+1 sta MON_A1H @LOOP lda MON_A1H lsr A sta MON_A1H lda MON_A1L ror A sta MON_A1L dex bpl @LOOP clc lda HIMEM3? adc MON_A1H sta MON_A1H lda END_LINE_NBR and #$07 eor #$07 tax lda #$00 sec @LOOP2 rol A dex bpl @LOOP2 ldy #$00 ora (MON_A1L),y sta (MON_A1L),y rts L444C lda L1057 bne L4452 rts L4452 lda OS_SELECTION bne L445F lda PD_C4_FILETYPE cmp #$fc beq L4467 rts L445F lda PD_C4_FILETYPE cmp #$02 beq L4467 rts L4467 lda L1C87 bne L446D rts L446D lda L10F0 cmp #$b0 bne L447E lda #$04 sta MON_WNDTOP jsr MON_HOME jsr CLEAR_PAGE L447E ldx #$04 ldy #$01 jsr GOTOXY jsr PRINT_IND .dd2 TXT_LINES_CTRLCODES jsr MON_CROUT lda L10F0 cmp #$b0 bne L4497 jsr MON_CROUT L4497 lda #$00 sta L1C83 sta L1C84 sta MON_A1L sta L1C85 sta L1C86 lda HIMEM3? sta MON_A1H L44AC ldy #$00 lda (MON_A1L),y beq L451F clc rol A bcc L44B9 jsr L454B L44B9 jsr L4533 clc rol A bcc L44C3 jsr L454B L44C3 jsr L4533 clc rol A bcc L44CD jsr L454B L44CD jsr L4533 clc rol A bcc L44D7 jsr L454B L44D7 jsr L4533 clc rol A bcc L44E1 jsr L454B L44E1 jsr L4533 clc rol A bcc L44EB jsr L454B L44EB jsr L4533 clc rol A bcc L44F5 jsr L454B L44F5 jsr L4533 clc rol A bcc L44FF jsr L454B L44FF jsr L4533 L4502 clc lda MON_A1L adc #$01 sta MON_A1L lda MON_A1H adc #$00 sta MON_A1H cmp HIMEM4? bne L44AC lda L10F0 cmp #$b0 beq L451E jsr MON_CROUT L451E rts L451F clc lda L1C83 adc #$08 sta L1C83 lda L1C84 adc #$00 sta L1C84 jmp L4502 L4533 jsr MON_SAVE clc lda L1C83 adc #$01 sta L1C83 lda L1C84 adc #$00 sta L1C84 jsr MON_RESTORE rts L454B jsr MON_SAVE lda L1C85 cmp #$06 bcc L458A lda #$00 sta L1C85 jsr MON_CROUT lda L10F0 cmp #$b0 bne L458A inc L1C86 lda L1C86 cmp #$0e bne L458A lda #$00 sta L1C86 jsr PROMPT_CONTINUE ldx #$06 ldy #$00 jsr GOTOXY jsr MON_CLREOP jsr CLEAR_PAGE ldx #$06 ldy #$00 jsr GOTOXY L458A lda L1C84 ldx L1C83 ldy #$a0 sty PRDEC_PADDING sta PRDEC_NUMBER_HIGH stx PRDEC_NUMBER_LOW ldx #$04 jsr PRINT_DECIMAL inc L1C85 lda #$a0 jsr MON_COUT jsr MON_RESTORE rts L45AC jsr MENU_CLEAR_PANE jsr CLEAR_PAGE ldx #$08 ldy #$14 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ESC_PREV_MENU ldx #$0a ldy #$03 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ASOFT_CNTRL_LIST ldx #$0d ldy #$03 jsr GOTOXY jsr PRINT_IND .dd2 TXT_LIST_CNTRL ldx #$0e ldy #$03 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ASOFT_PGMS L45E2 jsr MON_RDKEY pha jsr MON_COUT pla cmp #$9b beq L4628 cmp #$ce beq L4605 cmp #$ee beq L4605 cmp #$d9 beq L45FE cmp #$f9 bne L45E2 L45FE lda #$01 sta L1057 bne L460A L4605 lda #$00 sta L1057 L460A ldx #$08 ldy #$01 jsr GOTOXY jsr MON_CLREOL ldx #$08 ldy #$14 jsr GOTOXY jsr PRINT_IND .dd2 TXT_ESC_RETRY inc ALLOW_ESC jsr PROMPT_CONTINUE bcs L462B L4628 jmp L3910 L462B jmp L45AC L462E jsr P8_MLI .dd1 P8_WRITE .dd2 L0F3A rts L4635 jsr P8_MLI .dd1 P8_DESTROY .dd2 L0F2B rts L463C jsr P8_MLI .dd1 P8_CREATE .dd2 L0F2E rts L4643 jsr P8_MLI .dd1 P8_READ_BLOCK .dd2 L0F00 rts L464A jsr P8_MLI .dd1 P8_READ .dd2 L0F42 rts L4651 jsr P8_MLI .dd1 P8_NEWLINE .dd2 L0F4F rts L4658 jsr P8_MLI .dd1 P8_OPEN .dd2 L0F06 rts CLOSE_FILES jsr P8_MLI .dd1 P8_CLOSE .dd2 CLOSE_PARAMS rts L4666 jsr P8_MLI .dd1 P8_ONLINE .dd2 L0F0E rts L466D jsr P8_MLI .dd1 P8_ONLINE .dd2 L0F15 rts L4674 jsr P8_MLI .dd1 P8_SET_PREFIX .dd2 L0F12 rts L467B jsr P8_MLI .dd1 P8_GET_EOF .dd2 L0F4A rts GET_FILE_INFO ldx #$12 ldy #$00 @COPYTO lda GET_FILE_INFO_PARAMS,y sta $0a00,y iny dex bpl @COPYTO jsr P8_MLI .dd1 P8_GET_FILE_INFO .dd2 $0a00 sta CHAR_READ php ldx #$12 ldy #$00 @COPYFROM lda $0a00,y sta GET_FILE_INFO_PARAMS,y iny dex bpl @COPYFROM lda CHAR_READ plp rts L46AD sta L1B97 lda L1081 bne L46D3 ldx #$10 ldy #$00 jsr L2759 jmp L46DC L46BF lda L1081 bne L46D9 jsr L276B lda L1B96 bne L46CD rts L46CD ldx #$ff txs jmp L213C L46D3 jsr MON_CROUT jmp L46DC L46D9 jmp L3FF7 L46DC lda L1B97 cmp #$27 bne L46EB jsr PRINT_IND .dd2 ERR_IO jmp L46BF L46EB cmp #$28 bne L46F7 jsr PRINT_IND .dd2 TXT_NO_DEV_CONN jmp L46BF L46F7 cmp #$2b bne L4703 jsr PRINT_IND .dd2 ERR_DSK_WR_PROT jmp L46BF L4703 cmp #$2e bne L470F jsr PRINT_IND .dd2 ERR_DISK_SWITCH jmp L46BF L470F cmp #$40 bne L471B jsr PRINT_IND .dd2 ERR_INV_PNAME jmp L46BF L471B cmp #$44 bne L4727 jsr PRINT_IND .dd2 ERR_DIR_NOT_FOUND jmp L46BF L4727 cmp #$45 bne L4733 jsr PRINT_IND .dd2 ERR_VOL_NOT_FOUND jmp L46BF L4733 cmp #$46 bne L473F jsr PRINT_IND .dd2 ERR_FILE_NOT_FOUND jmp L46BF L473F cmp #$48 bne L474B jsr PRINT_IND .dd2 TXT_VOL_FULL jmp L46BF L474B cmp #$49 bne L4757 jsr PRINT_IND .dd2 TXT_DIR_FULL jmp L46BF L4757 cmp #$4b bne L4763 jsr PRINT_IND .dd2 ERR_UNSUPP_FILETYPE jmp L46BF L4763 cmp #$4e bne L476F jsr PRINT_IND .dd2 ERR_CANNOT_READ jmp L46BF L476F cmp #$51 bne L477B jsr PRINT_IND .dd2 ERR_BAD_DIR jmp L46BF L477B cmp #$52 bne L4787 jsr PRINT_IND .dd2 ERR_NOT_PRODOS_DISK jmp L46BF L4787 cmp #$5a bne L4793 jsr PRINT_IND .dd2 ERR_FILE_DAMAGED jmp L46BF L4793 cmp #$45 bne L479F jsr PRINT_IND .dd2 ERR_VOLUME_NOT_FOUND jmp L46BF L479F cmp #$80 bne L47AB jsr PRINT_IND .dd2 ERR_NOT_DOS33 jmp L46BF L47AB cmp #$55 bne L47B7 jsr PRINT_IND .dd2 ERR_VCB_FULL jmp L480B L47B7 cmp #$56 bne L47C3 jsr PRINT_IND .dd2 ERR_BAD_BUFFER jmp L480B L47C3 cmp #$04 bne L47CF jsr PRINT_IND .dd2 ERR_BAD_PARAM_COUNT jmp L480B L47CF cmp #$43 bne L47DB jsr PRINT_IND .dd2 ERR_INV_REF_NUM jmp L480B L47DB cmp #$4a bne L47E7 jsr PRINT_IND .dd2 ERR_BAD_FILE_FMT jmp L46BF L47E7 cmp #$4c bne L47F3 jsr PRINT_IND .dd2 ERR_EOF jmp L46BF L47F3 cmp #$4d bne L47FF jsr PRINT_IND .dd2 ERR_POS_RANGE jmp L480B L47FF cmp #$53 bne L480B jsr PRINT_IND .dd2 ERR_INV_CALL_PARAM jmp L480B L480B ldx #$12 ldy #$00 jsr GOTOXY jsr MON_CLREOP ldx #$13 ldy #$00 jsr GOTOXY jsr PRINT_IND .dd2 ERR_SYSTEM_ERR inc L1B96 jmp L46BF L4827 lda OS_SELECTION beq L482F jmp L49A5 L482F lda #$15 sta L0F07 lda #$1b sta L0F07+1 lda L1C00 beq L4848 lda #$00 sta L0F07 lda #$1c sta L0F07+1 L4848 lda HIMEM1? sta L0F09+1 jsr L4658 beq L485C L4853 jsr L46AD ldx #$ff txs jmp L2136 L485C lda L0F0B sta L0F4B jsr L467B beq L486A jmp L4853 L486A lda #$00 sta L1BC4 sec lda HIMEM3? sbc #$51 lsr A sta L1BCC clc lda L0F4C+2 ror A sta L1BCB lda L0F4C+1 ror A sta L1BCA bcc L489E L488A clc lda L1BCA adc #$01 sta L1BCA lda L1BCB adc #$00 sta L1BCB jmp L48A3 L489E lda L0F4C bne L488A L48A3 lda L0F0B sta L0F43 lda #$00 sta L0F46 lda #$02 sta L0F46+1 lda #$00 sta L0F44 lda #$51 sta L0F44+1 L48BD jsr L464A beq L48C5 jmp L4853 L48C5 inc L0F44+1 inc L0F44+1 sec lda L1BCA sbc #$01 sta L1BCA lda L1BCB sbc #$00 sta L1BCB lda L1BCB bne L48E6 lda L1BCA beq L48F4 L48E6 lda L0F44+1 cmp HIMEM3? bne L48BD inc L1BC9 jmp L4902 L48F4 lda L0F0B sta PD_CC_REFNUM jsr CLOSE_FILES beq L4902 jmp L4853 L4902 lda PD_C4_FILETYPE cmp #$fc bne L490C jmp L4968 L490C lda L1BAD bne L4934 lda #$ff sta CODEPTR lda #$50 sta CODEPTR+1 inc LINE_COUNT lda PD_C4_AUX_FILETYPE sta BASIC_START_ADDR lda PD_C4_AUX_FILETYPE+1 sta BASIC_START_ADDR+1 lda BASIC_START_ADDR sta END_LINE_NBR lda BASIC_START_ADDR+1 sta END_LINE_NBR+1 L4934 lda L1BC9 beq L4947 lda #$00 sta PGM_END lda HIMEM3? sta PGM_END+1 jmp L4956 L4947 clc lda L0F4C sta PGM_END lda L0F4C+1 adc #$51 sta PGM_END+1 L4956 sec lda PGM_END sbc #$01 sta PGM_END lda PGM_END+1 sbc #$00 sta PGM_END+1 rts L4968 lda L1BAD bne L4981 lda #$ff sta CODEPTR lda #$50 sta CODEPTR+1 lda PD_C4_AUX_FILETYPE sta SOME_BASIC_ADDR? lda PD_C4_AUX_FILETYPE+1 sta SOME_BASIC_ADDR?+1 L4981 lda L1BC9 beq L4995 lda #$ff sta PGM_END lda HIMEM3? sta PGM_END+1 dec PGM_END+1 rts L4995 lda L0F4C sta PGM_END clc lda L0F4C+1 adc #$51 sta PGM_END+1 rts L49A5 lda #$00 sta $ec lda #$51 sta $ed L49AD lda $0801 sta L1BCE lda $0802 sta L1BCF lda #$00 sta L0F02 lda #$0a sta L0F02+1 lda #$08 sta $eb lda #$0c sta $ea L49CB ldy #$00 lda ($ea),y iny pha lda ($ea),y tax pla bne L49DA jmp L4A4A L49DA jsr L3166 jsr L4643 beq L49EA jsr L46AD pla pla jmp L2136 L49EA lda L1BC3 beq L49FF ldy #$ff L49F1 lda (PTR),y sta ($ec),y dey bne L49F1 lda (PTR),y sta ($ec),y jmp L4A0C L49FF ldy #$ff L4A01 lda (PTR2),y sta ($ec),y dey bne L4A01 lda (PTR2),y sta ($ec),y L4A0C inc $ed lda $ed cmp HIMEM3? bne L4A1B inc L1BC9 jmp L4A4A L4A1B inc $ea inc $ea beq L4A24 jmp L49CB L4A24 lda #$00 sta L0F02 lda #$08 sta L0F02+1 ldx L1BCF lda L1BCE jsr L3166 jsr L4643 beq L4A3F jmp L3134 L4A3F lda L1BC3 beq L4A47 jsr L3158 L4A47 jmp L49AD L4A4A lda PD_C4_FILETYPE cmp #$04 beq L4A5C cmp #$02 beq L4A59 jmp L4ABB .dd1 $60 L4A59 jmp L4AF5 L4A5C lda L1BAD bne L4A95 lda #$03 sta CODEPTR lda #$51 sta CODEPTR+1 inc LINE_COUNT lda L5100 sta BASIC_START_ADDR lda L5101 sta BASIC_START_ADDR+1 lda BASIC_START_ADDR sta END_LINE_NBR lda BASIC_START_ADDR+1 sta END_LINE_NBR+1 clc lda L5102 adc #$03 sta L0F4C lda L5103 adc #$00 sta L0F4C+1 L4A95 lda L1BC9 beq L4AAB lda #$ff sta PGM_END lda HIMEM3? sta PGM_END+1 dec PGM_END+1 jmp L4ABA L4AAB clc lda L0F4C sta PGM_END lda L0F4C+1 adc #$51 sta PGM_END+1 L4ABA rts L4ABB lda L1BAD bne L4AD1 clc lda L5100 adc #$01 sta L0F4C lda L5101 adc #$00 sta L0F4C+1 L4AD1 lda L1BC9 beq L4AE5 lda #$ff sta PGM_END lda HIMEM3? sta PGM_END+1 dec PGM_END+1 rts L4AE5 lda L0F4C sta PGM_END clc lda L0F4C+1 adc #$51 sta PGM_END+1 rts L4AF5 lda L1BAD bne L4B1D lda #$01 sta CODEPTR lda #$51 sta CODEPTR+1 lda #$01 sta SOME_BASIC_ADDR? lda #$08 sta SOME_BASIC_ADDR?+1 clc lda L5100 adc #$01 sta L0F4C lda L5101 adc #$00 sta L0F4C+1 L4B1D lda L1BC9 beq L4B31 lda #$ff sta PGM_END lda HIMEM3? sta PGM_END+1 dec PGM_END+1 rts L4B31 lda L0F4C sta PGM_END clc lda L0F4C+1 adc #$51 sta PGM_END+1 rts L4B41 lda #$00 sta L1BC9 sec lda HIMEM3? sbc #$51 sta L1B03 sec lda L0F4C+1 sbc L1B03 sta L0F4C+1 lda L0F4C+2 sbc #$00 sta L0F4C+2 lda #$ff sta CODEPTR lda #$50 sta CODEPTR+1 lda OS_SELECTION beq L4B71 jmp L4B9F L4B71 jsr L48A3 lda PD_C4_FILETYPE cmp #$fc bne L4B7D beq L4B85 L4B7D lda #$00 sta L1BAD jmp L4C03 L4B85 dec L1BAD lda L1BAD asl A tax lda #$00 sta L1BAD lda L0F8B,x sta MON_A1L lda L0F8C,x sta MON_A1H jmp (MON_A1L) L4B9F lda #$00 sta L0F02 lda #$0a sta L0F02+1 lda #$00 sta $ec lda #$51 sta $ed jsr L4A1B lda PD_C4_FILETYPE cmp #$04 bne L4BBE jmp L4C03 L4BBE cmp #$02 beq L4BC5 jmp L4BDA L4BC5 dec L1BAD lda L1BAD asl A tax lda L0F8B,x sta MON_A1L lda L0F8C,x sta MON_A1H jmp (MON_A1L) L4BDA dec L1BAD lda L1BAD asl A tax lda L0F93,x sta MON_A1L lda L0F94,x sta MON_A1H jmp (MON_A1L) L4BEF lda #$50 sta L1B9E jsr INIT_V4_B lda END_LINE_NBR sta START_LINE_NBR lda END_LINE_NBR+1 sta START_LINE_NBR+1 L4C03 jsr READ_CODEPTR bcs L4C11 jsr DO_CHKSUM_V4 jsr L4C17 jmp L4C03 L4C11 inc L1BAD jmp L4D28 L4C17 lda LINE_COUNT bne L4C1F jsr INC_END_LINE_NBR L4C1F lda #$00 sta LINE_COUNT dec L1B9E lda L1B9E beq L4C2D rts L4C2D jsr L4C47 pla pla jsr INC_END_LINE_NBR jmp L4BEF INC_END_LINE_NBR clc lda END_LINE_NBR adc #$01 sta END_LINE_NBR bcc @EXIT inc END_LINE_NBR+1 @EXIT rts L4C47 jsr L4C85 lda L10F0 and #$0f bne L4C6B inc L1B98 lda L1B98 cmp #$11 bcc L4C6B jsr PROMPT_CONTINUE bcc L4C63 jmp L213C L4C63 jsr MON_HOME lda #$00 sta L1B98 L4C6B lda KBD and #$80 beq L4C84 ora #$80 jsr L2772 lda KBDSTRB L4C7A lda KBD and #$80 beq L4C7A lda KBDSTRB L4C84 rts L4C85 lda KP_VER_FLAG beq L4C91 bmi L4C8E bne L4CC3 L4C8E jmp L4CE5 L4C91 ldx #$07 jsr MON_PRBL2 ldx #$02 ldy #$00 L4C9A lda CHKSUM_V4_LINE,y bne L4CAD txa beq L4CAD lda #$a0 jsr MON_COUT jsr MON_COUT jmp L4CB0 L4CAD jsr MON_PRBYTE L4CB0 iny dex bpl L4C9A jsr INIT_V4_B ldx #$06 jsr MON_PRBL2 jsr PRINT_RANGE jsr MON_CROUT rts L4CC3 ldx #$06 jsr MON_PRBL2 ldx #$03 ldy #$00 L4CCC lda CSUM_V5_2,y jsr MON_PRBYTE iny dex bpl L4CCC jsr INIT_V4_B ldx #$05 jsr MON_PRBL2 jsr PRINT_RANGE jsr MON_CROUT rts L4CE5 jsr MON_PRBLNK ldx #$03 ldy #$00 L4CEC lda CSUM_V5_2,y jsr MON_PRBYTE iny dex bpl L4CEC ldx #$03 jsr MON_PRBL2 jsr PRINT_RANGE ldx #$04 jsr MON_PRBL2 ldx #$02 ldy #$00 L4D07 lda CHKSUM_V4_LINE,y bne L4D1A txa beq L4D1A lda #$a0 jsr MON_COUT jsr MON_COUT jmp L4D1D L4D1A jsr MON_PRBYTE L4D1D iny dex bpl L4D07 jsr INIT_V4_B jsr MON_CROUT rts L4D28 lda L1BC9 beq L4D30 jmp L4B41 L4D30 lda LINE_COUNT bne L4D38 jsr L4C47 L4D38 lda KP_VER_FLAG beq SHOW_V4_ONLY bmi L4D41 bne L4D72 L4D41 jmp L4D95 SHOW_V4_ONLY ldx #$07 jsr MON_PRBL2 ldx #$02 ldy #$00 @LOOP lda CHKSUM_V4_PGM,y bne @PRBYTE txa beq @PRBYTE lda #‘ ’ | $80 jsr MON_COUT jsr MON_COUT jmp @NOBYTE @PRBYTE jsr MON_PRBYTE @NOBYTE iny dex bpl @LOOP jsr MON_PRBLNK jsr PRINT_IND .dd2 TXT_PGM_TOTAL jmp L4DC9 L4D72 ldx #$06 jsr MON_PRBL2 ldx #$03 ldy #$00 L4D7B lda CSUM_V5_6,y jsr MON_PRBYTE iny dex bpl L4D7B lda #$a0 jsr MON_COUT jsr MON_COUT jsr PRINT_IND cli ora $4c,x cmp #$4d L4D95 jsr MON_PRBLNK ldx #$03 ldy #$00 L4D9C lda CSUM_V5_6,y jsr MON_PRBYTE iny dex bpl L4D9C jsr PRINT_IND .dd2 TXT_PGM_TOTAL ldx #$02 ldy #$00 L4DAF lda CHKSUM_V4_PGM,y bne L4DC2 txa beq L4DC2 lda #$a0 jsr MON_COUT jsr MON_COUT jmp L4DC5 L4DC2 jsr MON_PRBYTE L4DC5 iny dex bpl L4DAF L4DC9 jsr MON_CROUT lda L10F0 cmp #$b0 bne L4DD6 jsr PROMPT_CONTINUE L4DD6 jsr L444C lda FLAG_SUBMIT beq L4DE1 jmp L3ED0 L4DE1 lda L10F0 cmp #$b0 beq L4DF0 lda #$b0 sta L10F0 jsr L3555 L4DF0 lda L1057 beq L4DFD lda L1C87 beq L4DFD jsr PROMPT_CONTINUE L4DFD jmp L213C INIT_V4_B lda #$00 ldx #$03 @CLEAR sta L1BA3,x dex bpl @CLEAR jsr INIT_V5_2345 rts READ_CODEPTR clc lda CODEPTR adc #$01 sta CODEPTR bcc @SKIP inc CODEPTR+1 @SKIP lda CODEPTR+1 cmp PGM_END+1 bcc @READ_NEXT bne @AT_END lda CODEPTR cmp PGM_END bcc @READ_NEXT beq @READ_NEXT @AT_END sec rts @READ_NEXT ldy #$00 lda (CODEPTR),y sta CHAR_READ clc rts DO_CHKSUM_V4 lda LINE_BYTES_READ beq @CALC_V4_CHKSUM lda OS_SELECTION beq @PRODOS lda PD_C4_FILETYPE cmp #$01 ;Integer BASIC? beq @INT_BASIC @PRODOS lda CHAR_READ cmp #$21 ;'!' or higher (printable char/token) bcs @CALC_V4_CHKSUM cmp #$04 ;Embedded CTRL+D? beq @CALC_V4_CHKSUM rts @INT_BASIC lda CHAR_READ cmp #$80 ;Int BASIC tokens have high bit OFF bcc @CALC_V4_CHKSUM cmp #$a1 ;'!' or higher (high bit set) bcs @CALC_V4_CHKSUM cmp #$84 ;Embedded CTRL+D beq @CALC_V4_CHKSUM rts @CALC_V4_CHKSUM jsr CALC_CKSUM_V4_PGM lda TOKEN_FLAG cmp #$02 ;2=REM has been recorded beq @NOT_REM lda CHAR_READ jsr RUN_V5_CHECKSUM ;Non-REM contents. lda TOKEN_FLAG cmp #$01 bne @NOT_REM lda #$02 sta TOKEN_FLAG @NOT_REM lda CHAR_READ clc eor CHKSUM_V4_LINE+2 rol A ldx #$02 @LOOP adc CHKSUM_V4_LINE,x sta CHKSUM_V4_LINE,x bcc @DONE lda #$00 dex bpl @LOOP @DONE rts CALC_CKSUM_V4_PGM ldx #$02 @LOOP clc lda #$01 adc CHKSUM_V4_PGM,x sta CHKSUM_V4_PGM,x bcc @DONE dex bpl @LOOP @DONE rts PRINT_RANGE lda START_LINE_NBR+1 ldx START_LINE_NBR ldy FLAG_BASIC_BINARY beq @PR_LINE_START tay lda #‘ ’ | $80 jsr MON_COUT tya jsr MON_PRNTAX jmp @PR_MORE @PR_LINE_START jsr PRDEC_AX @PR_MORE jsr PRINT_IND .dd2 TXT_DASH lda END_LINE_NBR+1 ldx END_LINE_NBR ldy FLAG_BASIC_BINARY beq @PR_LINE_END jsr MON_PRNTAX lda #$a0 jsr MON_COUT jmp @FINISH @PR_LINE_END jsr PRDEC_AX @FINISH inc LINE_COUNT rts L4EE5 inc L1BAD L4EE8 inc L1BAD L4EEB inc L1BAD L4EEE inc L1BAD jmp L4D28 L4EF4 inc LINE_COUNT lda #$01 sta CODEPTR lda #$51 sta CODEPTR+1 L4EFF jsr READ_CODEPTR bcs L4EEE sta SOME_COUNTER? jsr L4F67 jsr CALC_CKSUM_V4_PGM jsr READ_CODEPTR bcs L4EEB sta END_LINE_NBR jsr DO_CHKSUM_V4 jsr L4F67 jsr READ_CODEPTR bcs L4EE8 sta END_LINE_NBR+1 jsr DO_CHKSUM_V4 jsr L4F67 lda LINE_COUNT beq @LOOP lda END_LINE_NBR sta START_LINE_NBR lda END_LINE_NBR+1 sta START_LINE_NBR+1 lda #$00 sta LINE_COUNT @LOOP jsr READ_CODEPTR bcs L4F6D inc LINE_BYTES_READ jsr DO_CHKSUM_V4 jsr L4F67 jmp @LOOP L4F50 pla pla lda #$00 sta LINE_BYTES_READ inc L1BA3 lda L1BA3 cmp #$0a bne L4EFF jsr L4C47 jmp L4EFF L4F67 dec SOME_COUNTER? beq L4F50 rts L4F6D jmp L4EE5 CALC_CKSUM? jsr READ_CODEPTR sta NEXT_LINE_PTR jsr READ_CODEPTR sta NEXT_LINE_PTR+1 jsr L504D lda #$00 sta LINE_COUNT jsr READ_CODEPTR sta START_LINE_NBR sta END_LINE_NBR jsr L4FD8 jsr DO_CHKSUM_V4 jsr READ_CODEPTR sta START_LINE_NBR+1 sta END_LINE_NBR+1 jsr L4FD8 jsr DO_CHKSUM_V4 CONTINUE_LINE jsr READ_CODEPTR bcs AT_PGM_END jsr L4FD8 lda CHAR_READ cmp #‘ ’ bcs @NOT_CONTROL jsr L43E2 @NOT_CONTROL cmp #$b2 ;REM token?! bne @NOT_REM lda #$01 sta TOKEN_FLAG @NOT_REM lda CHAR_READ inc LINE_BYTES_READ jsr DO_CHKSUM_V4 jmp CONTINUE_LINE L4FC9 inc L1BAD L4FCC inc L1BAD L4FCF inc L1BAD AT_PGM_END inc L1BAD jmp L4D28 L4FD8 dec SOME_COUNTER? beq L4FDE rts L4FDE inc L1BA3 lda #$00 sta LINE_BYTES_READ sta TOKEN_FLAG lda L1BA3 cmp #$0a bne L4FF3 jsr L4C47 L4FF3 lda NEXT_LINE_PTR sta SOME_BASIC_ADDR? lda NEXT_LINE_PTR+1 sta SOME_BASIC_ADDR?+1 lda CHAR_READ sta NEXT_LINE_PTR jsr READ_CODEPTR bcs L4FCF sta NEXT_LINE_PTR+1 jsr L504D lda NEXT_LINE_PTR+1 bne L5018 jmp L4D28 L5018 jsr READ_CODEPTR bcs L4FCC sta END_LINE_NBR jsr L4FD8 jsr DO_CHKSUM_V4 jsr READ_CODEPTR bcs L4FC9 sta END_LINE_NBR+1 jsr L4FD8 jsr DO_CHKSUM_V4 lda LINE_COUNT beq L5045 lda END_LINE_NBR sta START_LINE_NBR lda END_LINE_NBR+1 sta START_LINE_NBR+1 L5045 lda #$00 sta LINE_COUNT jmp CONTINUE_LINE L504D sec lda NEXT_LINE_PTR sbc SOME_BASIC_ADDR? sta SOME_COUNTER? lda SOME_COUNTER? bne L5061 lda #$ff sta SOME_COUNTER? L5061 clc jsr L4FD8 jsr CALC_CKSUM_V4_PGM jsr CALC_CKSUM_V4_PGM rts .dd1 $00 .str ↑“1 E B CC K_ >_ L 0 "” .dd1 $80 .str ↑“A_PC_ ” .dd1 $90 .str ↑“ ”,$87,“._” .dd1 $81 .str ↑“_ S ” .dd1 $80 .dd1 $a0 .dd1 $d2 .dd1 $80 .str ↑“ _ _ _ F O1O S R 0 _. _/ Y H .E T” + “ UC K > LE R/S ” L5100 .dd1 $c7 L5101 .dd1 $ba L5102 .dd1 $8d L5103 .dd1 $00 .zstr ↑“YOU ARE ABOUT TO FORMAT A LARGE DISK”,$8d .zstr ↑“DIRECTORY STRUCTURE IS DAMAGED”,$8d .zstr ↑“BAD BLOCK NUMBER:”,$8d .zstr ↑“FILES ENDANGERED:”,$8d .zstr ↑“0 BAD BLOCKS”,$8d .zstr ↑“BLOCK NUMBERS DO NOT MATCH:”,$8d .zstr ↑“FOR SOURCE SLOT:”,$8d .zstr ↑“DESTINATION SLOT:”,$8d .zstr ↑“SELECT AN OUTPUT DEVICE:” .zstr ↑“M - MONITOR ONLY”,$8d .zstr ↑“P - PRINTER AND MONITOR”,$8d .zstr ↑“PRINTER SLOT:” .zstr ↑“FORMAT” .zstr ↑“COPY” .zstr ↑“RENAME” .zstr ↑“BLOCK ALLOCATION” .zstr ↑“COMPARE” .zstr ↑“RESTORE DEFAULTS” .zstr ↑“DELETE” .zstr ↑“CATALOG” .dd1 $d1 .dd1 $d5 .adrend ↑ ~$0e00 .addrs $6500 PRG_COPY lda #$01 sta P8_IBAKVER lda #$06 sta P8_IVERSION lda #$02 sta P8_MEMTABL+1 ;Reserve $E00 (but not $F00?) ldy #$06 lda #$ff @RESERVE sta P8_MEMTABL+2,y dey bpl @RESERVE lda #$f8 sta P8_MEMTABL+9 ;Reserve memory through $5F00 lda #$a0 sta PTR lda #$20 sta PTR+1 lda #$00 sta PTR2 lda #$0e sta PTR2+1 lda #$00 sta $fa sta $fb ldy #$00 @COPY lda (PTR),y ;Copy $20A0 to $E00 sta (PTR2),y lda PTR2 clc adc #$01 sta PTR2 lda PTR2+1 adc #$00 sta PTR2+1 lda PTR clc adc #$01 sta PTR lda PTR+1 adc #$00 sta PTR+1 lda $fa clc adc #$01 sta $fa lda $fb adc #$00 sta $fb cmp #$42 bne @COPY lda $fa cmp #$6d bne @COPY jmp START .dd1 $00 .dd1 $d0 .dd1 $cc .adrend ↑ ~$6500 .adrend ↑ $2000