Files
bastools/reference/KEYPERF.SYSTEM.txt

6592 lines
194 KiB
Plaintext
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
; 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 <RETURN> 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 <RETURN> 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 <RETURN> 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 “<NO DATE>”
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 <RETURN> 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
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