; 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
