changeset 2172:2801ef7aff80

Corrections to BAM routines to incorporate DD.BIT. Selection of cluster/sector mode. Removal of unused previous version tacked onto end of source code.
author robertgault
date Sun, 01 Jun 2008 10:40:08 +0000
parents a7ab256f65b9
children 5daef7cf8a1b
files level1/cmds/ded.asm
diffstat 1 files changed, 2113 insertions(+), 4237 deletions(-) [+]
line wrap: on
line diff
--- a/level1/cmds/ded.asm	Thu May 29 12:12:16 2008 +0000
+++ b/level1/cmds/ded.asm	Sun Jun 01 10:40:08 2008 +0000
@@ -1,5 +1,4 @@
-         IFNE  1
-         nam   dEd OS-9 Disk Editor Version ???
+         nam   dEd OS-9 Disk Editor Version 2.06
          ttl   Copyright 1987 Doug DeMartinis
 *******************************************************
 * Copyright 1987 Doug DeMartinis; All Rights Reserved *
@@ -41,8 +40,16 @@
 * 06/01/11  Robert Gault                              *
 *        Corrected BAM to sector calculation.         *
 *        No attempt has been made to comment code.    *
+*******************************************************
+* 08/05/27  Robert Gault                              *
+*        Corrected BAM presentation with drives having*
+*        more than $##0000 sectors and/or DD.BIT >1.  *
+*        Converted all u and L addressing to normal   *
+*        lables.                                      *
+*        Added cluster/sector toggle.
+*******************************************************
+* Disassembled 2006/01/10 00:57:52 by Disasm v1.5 (C) 1988 by RML and RG
 
-* Disassembled 2006/01/10 00:57:52 by Disasm v1.5 (C) 1988 by RML and RG
 
          ifp1
          use   defsfile
@@ -51,133 +58,119 @@
 atrv     set   ReEnt+rev
 rev      set   $02
 top      mod   eom,name,tylg,atrv,start,size
-u0000    rmb   1
-u0001    rmb   1
-u0002    rmb   1
-u0003    rmb   1
-u0004    rmb   1
-u0005    rmb   1
-u0006    rmb   1
-u0007    rmb   1
-u0008    rmb   2
-u000A    rmb   4
-u000E    rmb   1
-u000F    rmb   1
-u0010    rmb   1
-u0011    rmb   1
-u0012    rmb   2
-u0014    rmb   2
-u0016    rmb   1
-u0017    rmb   1
-u0018    rmb   1
-u0019    rmb   1
-u001A    rmb   1
-u001B    rmb   2
-u001D    rmb   2
-u001F    rmb   1
-u0020    rmb   1
-u0021    rmb   2
-u0023    rmb   2
-u0025    rmb   2
-u0027    rmb   2
-u0029    rmb   1
-u002A    rmb   1
-u002B    rmb   1
-u002C    rmb   1
-u002D    rmb   1
-u002E    rmb   1
-u002F    rmb   1   
-u0030    rmb   1   find hex/ascii flag
-u0031    rmb   17  string to find
-u0042    rmb   2
-u0044    rmb   1
-u0045    rmb   1
-u0046    rmb   1
-u0047    rmb   2
-u0049    rmb   1
-u004A    rmb   1
-u004B    rmb   1
-u004C    rmb   1
-u004D    rmb   30  linked module name
-u006B    rmb   30  output filename
-u0089    rmb   1
-u008A    rmb   1
-u008B    rmb   1
-u008C    rmb   1
-u008D    rmb   2
-u008F    rmb   2
-u0091    rmb   1
-u0092    rmb   1
-u0093    rmb   1
-u0094    rmb   1
-u0095    rmb   1
-u0096    rmb   1
-u0097    rmb   1
-u0098    rmb   1
-u0099    rmb   1
-u009A    rmb   1
-u009B    rmb   1
-u009C    rmb   1
+inpath   rmb   1
+outpath  rmb   1
+lsn      rmb   3
+oldlsn   rmb   3
+offset   rmb   2
+cursor   rmb   4
+hexcol   rmb   1
+rownum   rmb   1
+asciicol rmb   1
+lastflag rmb   1
+buffptr  rmb   2
+edbufptr rmb   2
+edpos    rmb   1
+hexascii rmb   1
+zeroflag rmb   1
+oldecho  rmb   1
+echobyte rmb   1
+Usave    rmb   2
+Ssave    rmb   2
+seclen   rmb   2
+vmodlen  rmb   2
+lmodlen  rmb   2
+fileln   rmb   2
+bytsread rmb   2
+crc      rmb   3
+modnmlen rmb   1
+wrtflag  rmb   1
+xprtflag rmb   1
+FHexAsc  rmb   1   
+TargLen  rmb   1 
+findstr  rmb   17 
+findptr  rmb   2
+FBytes   rmb   1
+HexBuff  rmb   4
+FileLen  rmb   4
+infile   rmb   30  linked module name
+outfile  rmb   30  output filename
+CrsrCnt  rmb   1
+CrsrFlg  rmb   1
+SgnlCode rmb   1
+rawflg   rmb   1
+clustflg rmb   1   flag for cluster/sector
+ddmap    rmb   2
+mappags  rmb   2   sectors per Allocation Map
+ddbit    rmb   2   copy of DD.BIT
+ddbitcalc rmb  2   calculation of sectors per map page
+newBAM   rmb   3
+nBAMstp  rmb   3
+BAMstart rmb   3
+BAMstop  rmb   3
 u009D    rmb   8
-u00A5    rmb   1
-u00A6    rmb   48
-u00D6    rmb   256
-u01D6    rmb   320
+StackCnt rmb   1
+Stack    rmb   48
+inbuff   rmb   256
+i.o.buff rmb   320
 size     equ   .
-L000D    fcb   $0C    clear screen
-L000E    fcb   $1F,$20,0    reverse video on
-L0011    fcb   $1F,$21,0    reverse video off
-L0014    fcb   $04    erase from current character to end of line
-L0015    fcb   $0B    erase from current character to end of screen
-L0016    fcb   $05,$21,0    turns on cursor
-L0019    fcb   $05,$20,0    turns off cursor
+cls      fcb   $0C    clear screen
+revvid   fcb   $1F,$20,0    reverse video on
+normvid  fcb   $1F,$21,0    reverse video off
+eraselin fcb   $04    erase from current character to end of line
+erasescr fcb   $0B    erase from current character to end of screen
+curon    fcb   $05,$21,0    turns on cursor
+curoff   fcb   $05,$20,0    turns off cursor
 name     equ   *
          fcs   /dEd/
-         fcb   $05 
+         fcb   $06
          fcc   /Copyright 1987 Doug DeMartinis/
-L003E    fcs   /LSN=$/
-L0043    fcs   /SECTOR = $/
-L004D    fcc   /      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F/
+lsntitle fcs   /LSN=$/
+sect     fcs   /SECTOR = $/
+header   fcc   /      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F/
          fcc   /    0 2 4 6 8 A C E /
          fcb   $0D 
-L0096    fcs   /CMD: /
-L009B    fcc   "<BREAK> toggles HEX/ASCII edit modes     "
+command  fcs   /CMD: /
+edprompt fcc   "<BREAK> toggles HEX/ASCII edit modes     "
          fcs   /<ENTER> exits edit mode/
-L00DB    fcs   /Zap / 
-L00DF    fcs   /byte: / 
-L00E5    fcs   /char: / 
-L00EB    fcs   "Are you sure? (Y/N) " 
-L00FF    fcs   /Writing sector.../
-L0110    fcs   /OUTFILE: / 
-L0119    fcs   /Verifying.../
-L0125    fcs   /Verify aborted.../
-L0136    fcs   /shell/
-L013B    fcs   /Link to which module? / 
-L0151    fcc   /Off  Len  Name/
+zaprompt fcs   /Zap / 
+byte     fcs   /byte: / 
+char     fcs   /char: / 
+sure     fcs   "Are you sure? (Y/N) " 
+writing  fcs   /Writing sector.../
+out$     fcs   /OUTFILE: / 
+vrfymess fcs   /Verifying.../
+verrmess fcs   /Verify aborted.../
+shell$   fcs   /shell/
+linkmess fcs   /Link to which module? / 
+linkhdr  fcc   /Off  Len  Name/
          fcb   $0A
          fcc   /---- ---- ----/
          fcb   $0D 
-L016F    fcs   /MODULE:  / 
-L0178    fcs   /OFFSET: $/
-L0181    fcb   $1F,$24      blink on
+modnmhdr fcs   /MODULE:  / 
+offmess  fcs   /OFFSET: $/
+xprtmess fcb   $1F,$24      blink on
          fcc   /- Expert Mode -/
          fcb   $1F,$25+$80      blink off
-L0194    fcs   /Find byte string $/
-L01A6    fcs   /Find char string: / 
-L01B8    fcs   /Searching.../
-L01C4    fcs   /Current File Length $/
-L01D9    fcs   /New Length? $/
-L01E6    fcs   /** RESTART, Enter pathname: / 
-L0202    fcs   /BAM: From Sector:$       to $       / 
-L0226    fcs   /Bits:/
-L022B    fcb   $07
-         fcs   /Sector Stack Full /  
-L023E    fcc   "   Up/Down Arrows  Read & display Next/Previous sector"
+findbyte fcs   /Find byte string $/
+findchar fcs   /Find char string: / 
+srchmess fcs   /Searching.../
+lenmess  fcs   /Current File Length $/
+newmess  fcs   /New Length? $/
+bootmess fcs   /** RESTART, Enter pathname: /
+BAMmess1 fcs   /BAM: From Sector:$       to $       /
+BAMmess2 fcs   /BAM: From Cluster:$       to $       /
+BITmess  fcs   /Bits:/
+bell     fcb   $07
+fullmess fcs   /Sector Stack Full /  
+helper   fcc   "   Up/Down Arrows  Read & display Next/Previous sector"
          fcb   $0A
          fcc   / <CR> Clean up the screen display/
          fcb   $0A
          fcc   /   *  Restart/
          fcb   $0A
+         fcc   "   !  Toggle BAM Cluster/Sector"
+         fcb   $0A
          fcc   /   $  Fork a SHELL (Ctrl-BREAK to return)/
          fcb   $0A
          fcc   /   A  Append displayed sector to output file/
@@ -218,9 +211,10 @@
          fcb   $0A 
          fcb   $0A
          fcc   /      (Press any key to return to command prompt):/
-L05AC    fcc   /Use:  dEd <pathlist>/
+helpchrs equ   *-helper
+usemess  fcc   /Use:  dEd <pathlist>/
          fcb   $0D 
-L05C1    fcb   $98,$96,$80 decimal 10,000,000 
+decimals fcb   $98,$96,$80 decimal 10,000,000 
          fcb   $0F,$42,$40 decimal  1,000,000 
          fcb   $01,$86,$A0 decimal    100,000 
          fcb   $00,$27,$10 decimal     10,000
@@ -229,3340 +223,1182 @@
          fcb   $00,$00,$0A decimal         10
          fcb   $00,$00,$01 decimal          1
 * Command jump table
-L05D9    fcb   $0C       up arrow
-         fdb   L0A40
+commands fcb   $0C       up arrow
+         fdb   nxtsec
          fcb   $0A       down arrow
-         fdb   L0A4E
-         fcb   '*        ?????       
-         fdb   L0627     ?????
+         fdb   prevsec
+         fcb   '*       
+         fdb   restart   Restart program with new file/disk
+         fcb   '!
+         fdb   togCS     Toggle cluster/sector
          fcb   '$        shell
-         fdb   L10BD
+         fdb   goshell
          fcb   $0D       CR
-         fdb   L10EF 
+         fdb   cReturn 
          fcb   's        LSN change
-         fdb   L0A67 
+         fdb   changLSN 
          fcb   'z        Zap
-         fdb   L0B23 
+         fdb   zap 
          fcb   'w        Write sector
-         fdb   L0BD4 
+         fdb   writesec 
          fcb   'o        Open output file
-         fdb   L0C26 
+         fdb   openout 
          fcb   'a        Append to file
-         fdb   L0CAD 
+         fdb   append 
          fcb   'c        Close output file
-         fdb   L0C97
+         fdb   closeout
          fcb   'e        Edit sector
-         fdb   L0D37 
+         fdb   edit 
          fcb   'q        Quit
-         fdb   L0D22 
+         fdb   quit 
          fcb   'v        Verify
-         fdb   L1116
+         fdb   verify
          fcb   'l        Link
-         fdb   L1223 
+         fdb   linker 
          fcb   'u        Unlink
-         fdb   L13CA 
+         fdb   unlinker 
          fcb   'x        eXpert mode
-         fdb   L13EB
+         fdb   expert
          fcb   'h        help
-         fdb   L1413 
+         fdb   help 
          fcb   '?        help
-         fdb   L1413
+         fdb   help
          fcb   'f        Find
-         fdb   L142B
+         fdb   find     
          fcb   'n        Next find
-         fdb   L15F9 
+         fdb   next 
          fcb   'd        Diddle length
-         fdb   L1612
+         fdb   diddle
          fcb   'p        Push
-         fdb   L16A9 
+         fdb   push 
          fcb   'r        Restore (Pop)
-         fdb   L16E2
-         fcb   $00 
-L0622    stb   u008B,u
+         fdb   restore
+         fcb   $00
+
+* Intercept signals
+* modification by BRI 
+icept    stb   SgnlCode,u
          rti
-L0627    lds   <u001D
-         ldu   <u001B
-         com   <u001A
-         lbsr  L10F5
-         lbsr  L078F
-         leax  L01E6,pcr
-         lbsr  L0759
-         lbsr  L07B0
-         leax  u01D6,u
-         stx   <u00D6
+* end modification
+
+restart  lds   <Ssave
+         ldu   <Usave
+         com   <echobyte
+         lbsr  echo
+         lbsr  movecmd
+         leax  bootmess,pcr
+         lbsr  pstring
+         lbsr  clrline
+         leax  i.o.buff,u
+         stx   <inbuff
          ldy   #$50
          clra
          os9   I$ReadLn
-         lbcs  L0CB6
+         lbcs  error
          cmpy  #1
-         bne   L065E
-         clr   <u001A
-         lbsr  L10F5
-         lbra  L070B
-L065E    lda   <u0000
+         bne   newdata
+         clr   <echobyte
+         lbsr  echo
+         lbra  getcmd
+newdata  lda   <inpath
          os9   I$Close
-         bra   L0672
+         bra   softstrt
 
 start    equ   *
-         stx   <u00D6
-         leax  >L0622,pcr
+         stx   <inbuff        pointer to param
+         leax  >icept,pcr     intercept routine addr
          os9   F$Icpt   
-         lbcs  L0CB6
-L0672    clra  
-         ldb   #$D6
-         leax  ,u
-L0677    sta   ,x+
+         lbcs  error
+* Initialize data area
+softstrt clra  
+         ldb   #inbuff
+         leax  ,u             point to data area
+init     sta   ,x+            clear memory
          decb  
-         bne   L0677
-         stu   <u001B
-         sts   <u001D
-         ldd   #$0002
-         std   <u000A
-         leas  <-$20,s
-         leax  ,s
-         clra  
-         clrb  
+         bne   init
+         com   clustflg       set default to show clusters
+         stu   <Usave
+         sts   <Ssave
+         ldd   #$0002          cursor move code
+         std   <cursor         store it for output
+         leas  <-$20,s         make room for terminal options
+         leax  ,s              point regX to temp buffer
+         clra                  stdin path# 
+         clrb                  SS.OPT
          os9   I$GetStt 
-         lbcs  L0CB6
-         lda   $04,x
-         sta   <u0019
-         leas  <$20,s
-         ldx   <u00D6
+         lbcs  error
+         lda   $04,x           get echo status byte
+         sta   <oldecho
+         leas  <$20,s          reset stack
+* Open file
+         ldx   <inbuff         point to file name
          pshs  x
-         clr   <u008C
-L06A1    lda   ,x+
+         clr   <rawflg         raw disk edit open flag
+opfLoop  lda   ,x+             find CR
          cmpa  #$0D
-         beq   L06AD
-         cmpa  #$40
-         bne   L06A1
-         com   <u008C
-L06AD    puls  x
-         lda   #$03
+         beq   noraw           @ not found
+         cmpa  #'@             open raw option
+         bne   opfLoop
+         com   <rawflg         flag the option
+noraw    puls  x
+         lda   #$03            update mode
          os9   I$Open   
-         bcc   L06C7
-         cmpb  #$D6
-         lbne  L0D34
-         ldx   <u00D6
-         lda   #$83
+         bcc   openOK
+         cmpb  #$D7         bad pathname
+         lbeq  hints
+         cmpb  #$D6         no permission
+         lbne  bye          exit with error
+         ldx   <inbuff      point to file name
+         lda   #$83         mode=Dir + Update
          os9   I$Open   
-         lbcs  L0D34
-L06C7    sta   <u0000
-         ldb   #$02
+         lbcs  bye          exit with error
+openOK   sta   <inpath      path#
+         ldb   #$02         ss.size
          os9   I$GetStt 
-         stx   <u0049
-         stu   <u004B
-         ldu   <u001B
-         clr   <u001A
-         lbsr  L10F5
-         lbsr  L07BA
-         tst   <u008C
-         beq   L06F5
-         lbsr  L07C4
-         ldx   <u0012
-         ldd   $04,x
-         std   <u008D
+         stx   <FileLen     msw of file size (in bytes?)
+         stu   <FileLen+2   lsw
+         ldu   <Usave
+         clr   <echobyte
+         lbsr  echo         set no echo
+         lbsr  clrscr       clear the screen
+         tst   <rawflg
+         beq   readloop      go if not raw
+         lbsr  seeksec       read LSN0 of disk
+         ldx   <buffptr      point regX to sector image
+* Get DD.BIT RG
+         ldd   6,x           get DD.BIT
+         std   <ddbit        save new data
+         ldd   4,x           get DD.MAP
+         std   <ddmap        save copy
 * Next line converts DD.MAP to base0 numbering.
 * (DD.MAP-1)/$100+1=sectors in map. Original was DD.MAP/$100+1  RG
-         subd  #1          needed to correctly convert DD.MAP to sectors, RG
+         subd  #1            needed to correctly convert DD.MAP to sectors in allocation, RG
          tfr   d,x
-         ldd   #$0100
-         lbsr  L1728
-         leax  $01,x
-         stx   <u008F
-L06F5    lbsr  L07C4
-         sty   <u001F
-         ldd   <u0002
-         std   <u0005
-         lda   <u0004
-         sta   <u0007
-         ldd   #$0000
-         std   <u0042
-L0708    lbsr  L081F
-L070B    lbsr  L078F
-         leax  >L0096,pcr
-         bsr   L0759
-         leax  >L0015,pcr
-         ldy   #$0001
+         ldd   #$100         bytes per sector of map
+         lbsr  mul16B
+         leax  1,x
+         stx   <mappags      pages in allocation map
+readloop lbsr  seeksec
+         sty   <seclen       either $100 or number of bytes left in file
+         ldd   <lsn          get lsn just read
+         std   <oldlsn       
+         lda   <lsn+2
+         sta   <oldlsn+2
+         ldd   #0            signal Next
+         std   <findptr
+disploop lbsr  display       display the sector
+getcmd   lbsr  movecmd       move cursor to
+         leax  >command,pcr  CMD:
+         bsr   pstring
+         leax  >erasescr,pcr erase to end of string
+         ldy   #$0001        era2chrs
          os9   I$Write  
-         lbcs  L0CB6
-         leax  >u01D6,u
-         lbsr  L07E8
+         lbcs  error
+         leax  >i.o.buff,u   
+         lbsr  read1         read one char
          lda   ,x
-         cmpa  #$41
-         bcs   L0732
-         ora   #$20
-L0732    leax  >L05D9,pcr
-L0736    cmpa  ,x+
-         beq   L0742
-         leax  $02,x
-         tst   ,x
-         bne   L0736
-         bra   L070B
-L0742    tst   <u002E
-         beq   L0751
-         tst   <u002D
-         beq   L0751
+         cmpa  #'A           is it ascii?
+         bcs   srchtabl      if not skip
+         ora   #$20          upper -> lower
+srchtabl leax  >commands,pcr point to command table
+findcmd  cmpa  ,x+           found it?
+         beq   gotcmd        go if yes
+         leax  $02,x         else
+         tst   ,x            end of table?
+         bne   findcmd       loop
+         bra   getcmd        invalid key
+gotcmd   tst   <xprtflag     using expert mode?
+         beq   jmpcmd        no, then go
+         tst   <wrtflag      are we writing?
+         beq   jmpcmd        n, then go
          pshs  x,a
-         lbsr  L0BF0
+         lbsr  xprtwrt       write sector
          puls  x,a
-L0751    ldd   ,x
-         leax  top,pcr
-         jmp   d,x
-L0759    leay  >u01D6,u
-         clrb  
-L075E    incb  
-         lda   ,x+
-         bmi   L0767
-         sta   ,y+
-         bra   L075E
-L0767    anda  #$7F
-         sta   ,y
-         leax  >u01D6,u
+jmpcmd   ldd   ,x             get address offset
+         leax  top,pcr        start of module
+         jmp   d,x            jump to address
+* Print string of characters in fcs mode
+pstring  leay  >i.o.buff,u
+         clrb                 counter
+xfer     incb  
+         lda   ,x+           get shar
+         bmi   lstchar       if bit7 set,go
+         sta   ,y+           put in buffer
+         bra   xfer
+lstchar  anda  #$7F          clear bit7
+         sta   ,y            put in buffer
+         leax  >i.o.buff,u   point to string
          clra  
-         tfr   d,y
-         bra   L0778
-L0774    ldy   #$0078
-L0778    lda   #$01
-L077A    os9   I$WritLn 
-         lbcs  L0CB6
+         tfr   d,y           length of string to print
+         bra   writeout
+wrtlin1  ldy   #$78          #bufsiz 120 chars max
+writeout lda   #$01          stdout
+wrtlin2  os9   I$WritLn
+         lbcs  error
          rts   
-         ldy   #$0003
-L0786    clra  
-         os9   I$ReadLn 
-         lbcs  L0CB6
+readlin3 ldy   #3            chars to read
+readlin  clra                stdin
+         os9   I$ReadLn      get 2 chars + CR
+         lbcs  error
          rts   
-L078F    ldd   #$2036           move command
-L0792    leax  u000A,u
-         std   $02,x
-         ldy   #$0004
-         bra   L0778
-L079C    leax  >L000E,pcr
-         ldy   #$0002
-         bra   L0778
-L07A6    leax  >L0011,pcr
-         ldy   #$0002
-         bra   L0778
-L07B0    leax  >L0014,pcr
-         ldy   #$0001
-         bra   L0778
-L07BA    leax  >L000D,pcr
-         ldy   #$0001
-         bra   L0778
-L07C4    bsr   L07F1
-         leax  >u00D6,u
-         stx   <u0012
-         tst   <u004D
-         beq   L07DA
-         ldd   <u0023
-         suba  <u0004
-         bne   L07DA
-         tfr   d,y
-         bra   L07DE
-L07DA    ldy   #$0100
-L07DE    lda   <u0000
-         os9   I$Read   
-         lbcs  L0CB6
+movecmd  ldd   #$2036        #cmdpos
+movecurs leax  cursor,u      cursor move code
+         std   2,x           row/col
+         ldy   #4            # chars
+         bra   writeout
+
+* Set reverse video code
+revdisp  leax  >revvid,pcr 
+         ldy   #2            chars to write
+         bra   writeout
+
+* Set normal video code
+normdisp leax  >normvid,pcr
+         ldy   #2            normchrs
+         bra   writeout
+
+clrline  leax  >eraselin,pcr
+         ldy   #1               
+         bra   writeout     
+  
+clrscr   leax  >cls,pcr
+         ldy   #1            eraschrs
+         bra   writeout
+
+seeksec  bsr   lsnseek       seek to sector
+         leax  >inbuff,u
+         stx   <buffptr
+         tst   <infile       is module linked?
+         beq   read256       on not linked
+         ldd   <lmodlen      get module length
+         suba  <lsn+2        are more than $100 bytes left?
+         bne   read256       yes, then go
+         tfr   d,y           no so setup smaller read
+         bra   readsome
+read256  ldy   #$100         256 bytes
+readsome lda   <inpath
+         os9   I$Read
+         lbcs  error
          rts   
-L07E8    clra  
-         ldy   #$0001
-         os9   I$Read   
-         rts   
-L07F1    tst   <u004D
-         bne   L0808
-         ldx   <u0002
-         lda   <u0004
+
+******************************
+* changed to ignore errors 01/09/90 (RAK)
+*
+read1    clra                stdin
+         ldy   #1
+         os9   I$Read
+         rts
+*********************** End of mod   
+lsnseek  tst   <infile       is module linked?
+         bne   offchk        yes so go
+         ldx   <lsn
+         lda   <lsn+2
          clrb  
-L07FA    tfr   d,u
-         lda   <u0000
+lsnseek1 tfr   d,u 
+         lda   <inpath
          os9   I$Seek   
-         lbcs  L0CB6
-         ldu   <u001B
-L0807    rts   
-L0808    ldd   <u0023
-         subd  #$0001
-         cmpa  <u0004
-         bcc   L0816
-         ldb   #$D3
-         lbra  L0CB6
-L0816    ldd   <u0008
-         adda  <u0004
-         ldx   #$0000
-         bra   L07FA
-L081F    ldd   #$2020
-         lbsr  L0792
-         leax  >L003E,pcr
-         lbsr  L0759
-         bsr   L07B0
-         lbsr  L08E6
-         leax  >u01D6,u
-         lbsr  L0774
-         tst   <u004D
-         beq   L083F
-         lbsr  L139A
-L083F    tst   <u0001
-         beq   L0846
-         lbsr  L0C77
-L0846    ldd   #$2022
-         lbsr  L0792
-         leax  >L000E,pcr
-         ldy   #$0002
-         lbsr  L077A
-         leax  >L004D,pcr
-         lbsr  L0774
-         leax  >L0011,pcr
-         ldy   #$0002
-         lbsr  L077A
-L0869    lbsr  L098C
-         lda   <u000F
-         adda  #$10
-         sta   <u000F
-         bne   L0869
-         leax  >u00D6,u
-         stx   <u0012
-         tst   <u008C
-         beq   L08CA
-         ldd   <u0003
-         cmpd  #$0001
-         bcs   L08CA
-         cmpd  <u008F
-         bhi   L08CA
-         ldd   <u0003      might this be map size in bytes?
-         subd  #$0001      assumes allocation map starts at LSN1
-         ldx   #$0800      8 bits/byte x $100 to convert to position
-         lbsr  L16FE
-         tfr   y,d
-         stb   <u0091      result of conversion.
-         stu   <u0092
-         leau  >$07FF,u
-         cmpu  <u004A
-         bls   L08AF
-         cmpb  <u0049
-         bcs   L08AF
-         ldb   <u0049
-         ldu   <u004A
-         leau  -u0001,u
-L08AF    stb   <u0094
-         stu   <u0095
-         ldu   <u001B
-         ldx   <u0091
-         ldb   <u0093
-         stx   <u0097
-         stb   <u0099
-         ldx   <u0094
-         ldb   <u0096
-         stx   <u009A
-         stb   <u009C
-         lbsr  L1748
-         bra   L08D3
-L08CA    ldd   #$2034
-         lbsr  L0792
-         lbsr  L07B0
-L08D3    tst   <u002E
-         lbeq  L0807
-         ldd   #$5933
-         lbsr  L0792
-         leax  >L0181,pcr
-         lbra  L0759
-L08E6    ldd   <u0002
-         com   <u0018
-         leay  >u01D6,u
-         bsr   L095D
-         tfr   b,a
-         bsr   L095D
-         clr   <u0018
-         lda   <u0004
-         bsr   L095D
-         ldd   #$2020
-         std   ,y++
-         ldd   #$0008
+         lbcs  error
+         ldu   <Usave
+lsnrts   rts  
+            
+offchk   ldd   <lmodlen     linked module length
+         subd  #1           base0 on sector
+         cmpa  <lsn+2       reading past last sector?
+         bcc   offseek      no then go
+         ldb   #$D3         e$eof
+         lbra  error
+* If module is 'linked' add offset for good seek
+offseek  ldd   <offset
+         adda  <lsn+2
+         ldx   #0
+         bra   lsnseek1
+
+display  ldd   #$2020
+         lbsr  movecurs
+         leax  >lsntitle,pcr  
+         lbsr  pstring
+         bsr   clrline
+         lbsr  convert3      hex to ascii for lsn
+         leax  >i.o.buff,u
+         lbsr  wrtlin1
+         tst   <infile       link test
+         beq   nolink
+         lbsr  prntmod
+nolink   tst   <outpath      is an output path open
+         beq   noout         no, then go
+         lbsr  prntout       display name
+noout    ldd   #$2022        hedrpos
+         lbsr  movecurs
+         leax  >revvid,pcr   reverse video code
+         ldy   #2            # of revchrs
+         lbsr  wrtlin2
+         leax  >header,pcr
+         lbsr  wrtlin1
+         leax  >normvid,pcr  normal video code
+         ldy   #2            normchrs
+         lbsr  wrtlin2
+disp     lbsr  dsplylin
+         lda   <rownum       get row #
+         adda  #$10          next row
+         sta   <rownum
+         bne   disp          do 16 rows
+         leax  >inbuff,u
+         stx   <buffptr      reset buffer pointer
+         tst   <rawflg       edit flag
+         beq   contin        if not raw
+* New lines handle disks with $xx0000 sectors where xx>00. RG
+         tst   <lsn         look at LSN msb
+         bne   contin       we're not looking at the map if not $00
+         ldd   <lsn+1       get LSN lsw
+         cmpd  #1           first page of map?
+         bcs   contin       go if lsn0
+         cmpd  <mappags
+         bhi   contin       lsnrts, go if not map
+*        ldd   <lsn+1       we don't need this as it already is loaded. RG
+         subd  #1           setup to calc first sector
+* Big error as it ignores DD.BIT  New lines added. RG
+         ldx   #$800        8 bits/byte x $100 bytes per page if DD.BIT=1
+
+         tst   clustflg
+         bne   csf1         no calc if in cluster mode
+         pshs  d            save LSN
+         ldd   <ddbit       sectors per bit
+         lbsr  mulDbyX      mul regD * regX
+         stu   <ddbitcalc   sectors per page of allocation map, hope for no overflow
+         puls  d            recover LSN
+
+csf1     lbsr  mulDbyX      mul regD*regX = value first sector on this page allocation map
+         tfr   y,d              
+         stb   <newBAM      msb
+         stu   <newBAM+1    lsw
+*        leau  >$7FF,u  this assumes DD.BIT = 1
+
+         tst   clustflg
+         bne   csf2         no calc if in cluster mode
+         pshs  d
+         bsr   ddbitfix     calculate -sectors per map byte
+         addd  <ddbitcalc   regD = value of last bit on first allocation map page
+         leau  d,u          add starting value of page
+         puls  d
+         bra   csf3
+csf2     leau  $7ff,u      this is fixed in cluster mode
+csf3     cmpu  <FileLen+1  file length times $100
+         bls   notshort
+         cmpb  <FileLen    file length times $100
+         bcs   notshort
+         ldu   <FileLen+1
+         tst   clustflg
+         bne   csf4        no calc in cluster mode
+         bsr   ddbitfix      calc -sectors per map byte
+         leau  d,u
+         bra   csf5
+csf4     leau  -1,u        fixed in cluster mode
+
+csf5     ldb   <FileLen
+notshort stb   <nBAMstp
+         stu   <nBAMstp+1
+         ldu   <Usave
+         ldx   <newBAM
+         ldb   <newBAM+2
+         stx   <BAMstart
+         stb   <BAMstart+2
+         ldx   <nBAMstp
+         ldb   <nBAMstp+2
+         stx   <BAMstop
+         stb   <BAMstop+2
+         lbsr  prntBAM
+         bra   moredisp
+
+ddbitfix clra             does a   neg(ddbit)
+         clrb
+         subd  <ddbit
+         rts
+* End of BAM mod
+
+* Continue the normal display.
+contin   ldd   #$2034    clear BAM line
+         lbsr  movecurs
+         lbsr  clrline
+moredisp tst   <xprtflag
+         lbeq  lsnrts     go if not expert
+         ldd   #$5933     xprtpos
+         lbsr  movecurs
+         leax  >xprtmess,pcr
+         lbra  pstring
+convert3 ldd   <lsn
+         com   <zeroflag  to suppress leading zeros
+         leay  >i.o.buff,u
+         bsr   convert1
+         tfr   b,a       
+         bsr   convert1
+         clr   <zeroflag  print leading zeros
+         lda   <lsn+2
+         bsr   convert1
+         ldd   #$2020     space space
+         std   ,y++       move to buffer
+         ldd   #8         8 decimal digits
          pshs  b,a
-         com   <u0018
-         leax  >L05C1,pcr
-L090A    clr   ,s
-L090C    ldd   <u0003
-         subd  $01,x
-         pshs  cc
-         std   <u0003
-         lda   <u0002
-         clrb  
-         suba  ,x
-         bcc   L091C
-         incb  
-L091C    puls  cc
-         bcc   L0922
-         suba  #$01
-L0922    sta   <u0002
-         bcc   L0927
+         com   <zeroflag  suppress leading zeros
+         leax  >decimals,pcr  conversion table pointer
+initsub1 clr   ,s
+subdec1  ldd   <lsn+1
+         subd  $01,x      lsb from table
+         pshs  cc         save carry
+         std   <lsn+1
+         lda   <lsn
+         clrb             flag
+         suba  ,x         -msb of lsn
+         bcc   LSBorrow
          incb  
-L0927    tstb  
-         bne   L092E
-         inc   ,s
-         bra   L090C
-L092E    ldd   <u0003
-         addd  $01,x
-         std   <u0003
-         lda   <u0002
-         bcc   L0939
-         inca  
-L0939    adda  ,x
-         sta   <u0002
-         leax  $03,x
-         bsr   L0984
-         dec   $01,s
-         beq   L094F
-         lda   $01,s
-         cmpa  #$02
-         bne   L090A
-         clr   <u0018
-         bra   L090A
-L094F    lda   #$0D
-         sta   ,y
-         ldd   <u0006
-         std   <u0003
-         lda   <u0005
-         sta   <u0002
-         puls  pc,b,a
-L095D    pshs  a             convert hex to ascii
+LSBorrow puls  cc
+         bcc   savemsb
+         suba  #$01
+savemsb  sta   <lsn
+         bcc   chekenuf
+         incb            set flag
+chekenuf tstb            enough?
+         bne   enufsub1  go if yes
+         inc   ,s        
+         bra   subdec1
+enufsub1 ldd   <lsn+1    get lsw
+         addd  1,x       make it positive
+         std   <lsn+1    lsn+1
+         lda   <lsn
+         bcc   addmsb
+         inca            get the carry
+addmsb   adda  ,x        make rest of remainder positive
+         sta   <lsn
+         leax  3,x       point to next table entry
+         bsr   decascii
+         dec   $01,s     8 digits?
+         beq   getCR     go if 8
+         lda   1,s       get last two digits?
+         cmpa  #2      
+         bne   initsub1  if no then loop
+         clr   <zeroflag enable leading zeros
+         bra   initsub1
+
+getCR    lda   #$0D
+         sta   ,y        put into out string
+         ldd   <oldlsn+1
+         std   <lsn+1
+         lda   <oldlsn
+         sta   <lsn
+         puls  d,pc
+
+* Convert hex byte in regA to ascii and put in buffer
+convert1 pshs  a          hex to ascii
+         lsra             shift msn to lsnibble
          lsra  
          lsra  
          lsra  
-         lsra  
-         bsr   L096C
-         puls  a
-         anda  #$0F
-         bsr   L096C
+         bsr   objasc
+         puls  a          recover byte
+         anda  #$0F       mask off msnibble
+         bsr   objasc
          rts   
-L096C    cmpa  #$09
-         ble   L0972
-         adda  #$07
-L0972    adda  #$30
-         sta   ,y+
-         tst   <u0018
-         beq   L0980
-         cmpa  #$30
-         beq   L0981
-         clr   <u0018
-L0980    rts   
-L0981    leay  -$01,y
+objasc   cmpa  #$09       is a digit?
+         ble   asciify
+         adda  #$07       
+asciify  adda  #$30       add '0
+         sta   ,y+        put it into buffer
+         tst   <zeroflag
+         beq   convdone   go if not
+         cmpa  #'0              
+         beq   suppres0   erase if yes
+         clr   <zeroflag  stop suppression
+convdone rts
+suppres0 leay  -$01,y
          rts   
-L0984    pshs  a
-         lda   $03,s
-         bsr   L0972
+
+* Convert decimal# on stack to ascii and add to buffer
+decascii pshs  a
+         lda   $03,s      get decimal counter
+         bsr   asciify
          puls  pc,a
-L098C    leay  >u01D6,u
-         leax  >L000E,pcr
-         lbsr  L0A31
-         lda   <u0020
-         beq   L09A5
-         anda  #$F0
-         cmpa  <u000F
-         bne   L09A5
+
+dsplylin leay  >i.o.buff,u
+         leax  >revvid,pcr
+         lbsr  transfer   reverse video code
+         lda   <seclen+1
+         beq   notlast
+         anda  #$F0       mask off lsn
+         cmpa  <rownum
+         bne   notlast
          lda   #$FF
-         sta   <u0011
-L09A5    lda   <u000F
-         bsr   L095D
-         lda   #$3A
+         sta   <lastflag
+notlast  lda   <rownum
+         bsr   convert1   make it hex
+         lda   #':
          sta   ,y+
-         leax  >L0011,pcr
-         bsr   L0A31
-         ldd   #$2020
+         leax  >normvid,pcr
+         bsr   transfer
+         ldd   #$2020     2 spaces
          std   ,y++
-         ldx   <u0012
-         ldb   #$10
-         tst   <u0011
-         beq   L09C8
-         ldb   <u0020
-         andb  #$0F
-         beq   L0A3A
+         ldx   <buffptr
+         ldb   #$10       16 bytes
+         tst   <lastflag
+         beq   cnvtbyt    go if not
+         ldb   <seclen+1
+         andb  #$0F       regB= bytes for last line
+         beq   noline
          pshs  b
-L09C8    lda   ,x+
-         bsr   L095D
-         lda   #$20
+cnvtbyt  lda   ,x+
+         bsr   convert1
+         lda   #$20       space
          sta   ,y+
          decb  
-         bne   L09C8
-         tst   <u0011
-         beq   L09E4
-         ldd   #$0310
-         subb  ,s
-         mul   
-         lda   #$20
-L09DF    sta   ,y+
+         bne   cnvtbyt
+         tst   <lastflag
+         beq   addspc2
+         ldd   #$310      regB=max bytes per line
+         subb  ,s         regB=bytes to null out
+         mul              3 spaces per byte
+         lda   #$20       space
+addspc1  sta   ,y+
          decb  
-         bne   L09DF
-L09E4    ldb   #$20
+         bne   addspc1
+addspc2  ldb   #$20
          std   ,y++
          sta   ,y+
-         ldx   <u0012
-         asrb  
-         tst   <u0011
-         beq   L09F3
+         ldx   <buffptr
+         asrb             regB=15
+         tst   <lastflag
+         beq   ascichar
          ldb   ,s
-L09F3    lda   ,x+
-         anda  #$7F
-         cmpa  #$20
-         bcc   L09FD
-         lda   #$2E
-L09FD    sta   ,y+
+ascichar lda   ,x+
+         anda  #$7F       clear bit7
+         cmpa  #$20       32
+         bcc   printabl
+notascii lda   #$2E       notascii '.
+printabl sta   ,y+
          decb  
-         bne   L09F3
-         stx   <u0012
-         tst   <u0011
-         beq   L0A26
-         ldb   #$10
-         subb  ,s+
-         lda   #$20
-L0A0E    sta   ,y+
+         bne   ascichar
+         stx   <buffptr
+         tst   <lastflag
+         beq   addCR
+         ldb   #$10       max bytes per line
+         subb  ,s+        regB=bytes to null
+         lda   #$20       space
+addspc3  sta   ,y+        put in buffer
          decb  
-         bne   L0A0E
-         lda   #$F0
-         sta   <u000F
-         bsr   L0A26
-L0A19    clr   <u0011
-         leax  >L0015,pcr
-         ldy   #$0001
-         lbra  L0778
-L0A26    lda   #$0D
+         bne   addspc3
+         lda   #$F0       last row
+         sta   <rownum
+         bsr   addCR      display line
+resetlst clr   <lastflag
+         leax  >erasescr,pcr   erase to end of screen code
+         ldy   #1         era2chrs
+         lbra  writeout
+addCR    lda   #$0D       CR
          sta   ,y
-         leax  >u01D6,u
-         lbra  L0774
-L0A31    lda   ,x+
-         beq   L0A39
+         leax  >i.o.buff,u
+         lbra  wrtlin1
+
+transfer lda   ,x+
+         beq   trandone
          sta   ,y+
-         bra   L0A31
-L0A39    rts   
-L0A3A    lda   #$F0
-         sta   <u000F
-         bra   L0A19
-L0A40    ldd   <u0003
-         addd  #$0001
-         std   <u0003
-         bne   L0A4B
-         inc   <u0002
-L0A4B    lbra  L06F5
-L0A4E    ldd   <u0003
-         bne   L0A58
-         tst   <u0002
-         lbeq  L070B
-L0A58    subd  #$0001
-         std   <u0003
-         cmpd  #$FFFF
-         bne   L0A4B
-         dec   <u0002
-         bra   L0A4B
-L0A67    lbsr  L078F
-         leax  >L0043,pcr
-         lbsr  L0759
-         ldy   #$0007
-         bsr   L0A89
-         bcs   L0A84
-         ldd   <u0047
-         std   <u0003
-         lda   <u0046
-         sta   <u0002
-         lbra  L06F5
-L0A84    lbsr  L1535
-         bra   L0A67
-L0A89    pshs  y
-         clr   <u001A
-         com   <u001A
-         lbsr  L10F5
+         bra   transfer
+trandone rts
+
+noline   lda   #$F0      signal last row
+         sta   <rownum
+         bra   resetlst
+
+* Point to net LSN in file
+nxtsec  ldd   <lsn+1     nxtsec
+         addd  #1
+         std   <lsn+1
+         bne   readsec
+         inc   <lsn
+readsec  lbra  readloop
+
+* Point to previous LSN unless at LSN0
+prevsec  ldd   <lsn+1
+         bne   notfirst
+         tst   <lsn
+         lbeq  getcmd
+notfirst subd  #1
+         std   <lsn+1
+         cmpd  #$FFFF       borrow if LSN was $xx0000
+         bne   readsec
+         dec   <lsn
+         bra   readsec
+
+* Change LSN
+changLSN lbsr  movecmd
+         leax  sect,pcr
+         lbsr  pstring
+         ldy   #7
+         bsr   MakeHex
+         bcs   BadLSN
+         ldd   <HexBuff+2
+         std   <lsn+1
+         lda   <HexBuff+1
+         sta   <lsn
+         lbra  readloop
+
+BadLSN   lbsr  beep
+         bra   changLSN
+
+MakeHex  pshs  y           save # of bytes to read
+         clr   <echobyte
+         com   <echobyte
+         lbsr  echo
          puls  y
-         leax  >u01D6,u
-         lbsr  L0786
-         clr   <u001A
-         lbsr  L10F5
-         leay  -$01,y
-         beq   L0AEE
-         tfr   y,d
-L0AA6    lda   ,x+
-         bsr   L0AF3
-         bcs   L0AEB
-         decb  
-         bne   L0AA6
-         sty   <u0045
-L0AB2    lda   #$30
-         ldb   ,-x
-         leay  -$01,y
-         beq   L0ABE
-         lda   ,-x
+         leax  >i.o.buff,u
+         lbsr  readlin
+         clr   <echobyte
+         lbsr  echo
          leay  -$01,y
-L0ABE    bsr   L0B09
+         beq   ExitHex
+         tfr   y,d
+CheckHex lda   ,x+
+         bsr   hexdigit
+         bcs   invalid
+         decb  
+         bne   CheckHex
+         sty   <HexBuff
+getascii lda   #'0
+         ldb   ,-x
+         leay  -1,y
+         beq   convrt2
+         lda   ,-x
+         leay  -1,y
+convrt2  bsr   asciihex
          pshs  b
-         cmpy  #$0000
-         bne   L0AB2
-         ldb   <u0046
-         incb  
-         lsrb  
-         clra  
-         leax  <u0045,u
-         cmpb  #$04
-         beq   L0AE2
+         cmpy  #0
+         bne   getascii
+         ldb   <HexBuff+1
+         incb              prep for badfind
+         lsrb              # of hex bytes
+         clra              leading 0
+         leax  <HexBuff,u
+         cmpb  #4        four bytes on stack?
+         beq   hexstack
          sta   ,x+
-         cmpb  #$03
-         beq   L0AE2
+         cmpb  #3
+         beq   hexstack
          sta   ,x+
-         cmpb  #$02
-         beq   L0AE2
+         cmpb  #2
+         beq   hexstack
          sta   ,x+
-L0AE2    puls  a
+hexstack puls  a
          sta   ,x+
          decb  
-         bne   L0AE2
+         bne   hexstack
          clrb  
          rts   
-L0AEB    lbsr  L1535
-L0AEE    leas  $02,s
-         lbra  L06F5
-L0AF3    cmpa  #$30
-         bcs   L0B07
-         cmpa  #$39
-         bls   L0B05
-         anda  #$5F
-         cmpa  #$46
-         bhi   L0B07
-         cmpa  #$41
-         bcs   L0B07
-L0B05    clra  
+
+invalid  lbsr  beep
+ExitHex  leas  2,s
+         lbra  readloop
+
+hexdigit cmpa  #'0
+         bcs   nothex
+         cmpa  #'9
+         bls   ishex
+         anda  #$5F     lower to upper
+         cmpa  #'F
+         bhi   nothex
+         cmpa  #'A
+         bcs   nothex
+ishex    clra  
          rts   
-L0B07    coma  
-         rts   
-L0B09    bsr   L0B18
+nothex   coma  
+         rts  
+ 
+asciihex bsr   hexnib
          pshs  b
          tfr   a,b
-         bsr   L0B18
+         bsr   hexnib
          lslb  
          lslb  
          lslb  
          lslb  
          orb   ,s+
          rts   
-L0B18    subb  #$30
-         cmpb  #$09
-         bls   L0B22
+
+hexnib   subb  #$30
+         cmpb  #9
+         bls   nowhex
          andb  #$5F
          subb  #$07
-L0B22    rts   
-L0B23    clr   <u001A
-         com   <u001A
-         lbsr  L10F5
-         lbsr  L078F
-         lbsr  L07B0
-         leax  >L00DB,pcr
-         lbsr  L0759
-         tst   <u0017
-         bne   L0B81
-         leax  >L00DF,pcr
-         lbsr  L0759
-         ldy   #$0003
-         bsr   L0B62
-         bsr   L0B96
-         bcs   L0B79
-L0B4C    leax  >u00D6,u
-         stx   <u0012
-         clrb  
-L0B53    sta   ,x+
+nowhex   rts  
+ 
+* Zap sector
+zap      clr   <echobyte
+         com   <echobyte
+         lbsr  echo
+         lbsr  movecmd
+         lbsr  clrline
+         leax  >zaprompt,pcr
+         lbsr  pstring
+         tst   <hexascii
+         bne   zapascii
+         leax  >byte,pcr
+         lbsr  pstring
+         ldy   #3
+         bsr   zapread
+         bsr   hexobjct
+         bcs   exitzap
+zapstart leax  >inbuff,u
+         stx   <buffptr
+         clrb              counter
+zapbuff  sta   ,x+
          decb  
-         bne   L0B53
-         clr   <u001A
-         lbsr  L10F5
-         inc   <u002D
-         lbra  L0708
-L0B62    clra  
-         leax  >u01D6,u
+         bne   zapbuff
+         clr   <echobyte
+         lbsr  echo
+         inc   <wrtflag
+         lbra  disploop
+
+zapread  clra  
+         leax  >i.o.buff,u
          os9   I$ReadLn 
-         bcs   L0B6D
+         bcs   cheksig1
          rts   
-L0B6D    cmpb  #$02
-         lbne  L0CB6
-         com   <u0017
-         leas  $02,s
-         bra   L0B23
-L0B79    clr   <u001A
-         lbsr  L10F5
-         lbra  L070B
-L0B81    leax  >L00E5,pcr
-         lbsr  L0759
-         ldy   #$0002
-         bsr   L0B62
+cheksig1 cmpb  #2           break key signal
+         lbne  error
+         com   <hexascii
+         leas  2,s
+         bra   zap
+
+exitzap  clr   <echobyte
+         lbsr  echo
+         lbra  getcmd
+
+zapascii leax  >char,pcr
+         lbsr  pstring
+         ldy   #2
+         bsr   zapread
          lda   ,x
          cmpa  #$20
-         bcs   L0B79
-         bra   L0B4C
-L0B96    bsr   L0BAA
-         bcs   L0BC9
+         bcs   exitzap
+         bra   zapstart
+
+* Convert 2 hex chars in buffer (x) to object byte
+hexobjct bsr   cnvrtnib
+         bcs   badrts
          tfr   a,b
-         bsr   L0BAA
-         bcs   L0BC9
+         bsr   cnvrtnib
+         bcs   badrts
          lslb  
          lslb  
          lslb  
          lslb  
          pshs  b
          ora   ,s+
-         bra   L0BC4
-L0BAA    bsr   L0BB0
-         bcs   L0BC9
-         bra   L0BCA
-L0BB0    lda   ,x+
-         cmpa  #$30
-         bcs   L0BC7
-         cmpa  #$39
-         bls   L0BC4
-         anda  #$5F
-         cmpa  #$41
-         bcs   L0BC7
-         cmpa  #$46
-         bhi   L0BC7
-L0BC4    andcc #$FE
+         bra   goodhex
+
+cnvrtnib  bsr  isithex
+         bcs   badrts
+         bra   cnvrthex
+
+isithex  lda   ,x+
+         cmpa  #'0
+         bcs   badhex
+         cmpa  #'9
+         bls   goodhex
+         anda  #$5F        lower to upper
+         cmpa  #'A
+         bcs   badhex
+         cmpa  #'F
+         bhi   badhex
+goodhex  andcc #$FE
          rts   
-L0BC7    orcc  #$01
-L0BC9    rts   
-L0BCA    suba  #$30
-         cmpa  #$09
-         bls   L0BD2
-         suba  #$07
-L0BD2    bra   L0BC4
-L0BD4    tst   <u002E
-         lbne  L070B
-         bsr   L0BFF
-         lbne  L070B
-         lbsr  L078F
-         lbsr  L07B0
-         lbsr  L078F
-         leax  >L00FF,pcr
-         lbsr  L0759
-L0BF0    lbsr  L07F1
-         lda   <u0000
-         lbsr  L0C8A
-         tst   <u002E
-         beq   L0C74
-         clr   <u002D
+badhex   orcc  #1
+badrts   rts   
+
+cnvrthex suba  #$30
+         cmpa  #9
+         bls   nowobjct
+         suba  #7
+nowobjct bra   goodhex
+
+* Write current sector back to disk
+writesec tst   <xprtflag    is expert mode on
+         lbne  getcmd       yes, then go
+         bsr   rusure       no, are you sure
+         lbne  getcmd       Y or N
+         lbsr  movecmd
+         lbsr  clrline
+         lbsr  movecmd
+         leax  >writing,pcr
+         lbsr  pstring
+xprtwrt  lbsr  lsnseek      seek to start of sector
+         lda   <inpath      path#
+         lbsr  write100     write 256 bytes
+         tst   <xprtflag
+         beq   opendone
+         clr   <wrtflag     clear auto-write
          rts   
-L0BFF    lbsr  L078F
-L0C02    clr   <u001A
-         com   <u001A
-         lbsr  L10F5
-         leax  >L00EB,pcr
-         lbsr  L0759
-         lbsr  L07B0
-         leax  >u01D6,u
-         lbsr  L07E8
-         clr   <u001A
-         lbsr  L10F5
+
+* Ask  Are you sure?  And get response
+rusure   lbsr  movecmd
+rusure10 clr   <echobyte
+         com   <echobyte
+         lbsr  echo
+         leax  >sure,pcr
+         lbsr  pstring
+         lbsr  clrline
+         leax  >i.o.buff,u
+         lbsr  read1
+         clr   <echobyte
+         lbsr  echo
          lda   ,x
-         anda  #$5F
-         cmpa  #$59
+         anda  #$5F          lower to upper
+         cmpa  #'Y
          rts   
-L0C26    tst   <u0001
-         bne   L0C74
-         clr   <u001A
-         com   <u001A
-         lbsr  L10F5
-         lbsr  L078F
-         leax  >L0110,pcr
-         lbsr  L0759
-         lbsr  L07B0
-         leax  >u01D6,u
-         ldy   #$001E
-         lbsr  L0786
-         clr   <u001A
-         lbsr  L10F5
-         cmpy  #$0001
-         beq   L0C74
+
+* Open output file
+openout  tst   <outpath
+         bne   opendone
+         clr   <echobyte
+         com   <echobyte
+         lbsr  echo
+         lbsr  movecmd
+         leax  >out$,pcr
+         lbsr  pstring
+         lbsr  clrline
+         leax  >i.o.buff,u
+         ldy   #30            29 char + CR
+         lbsr  readlin
+         clr   <echobyte
+         lbsr  echo
+***********************************************
+* Return to command prompt if no filename given
+* Added 01/09/90 (RAK)
+*
+         cmpy  #1
+         beq   opendone
+********************************** END modification
          pshs  x
-         leay  <u006B,u
-L0C59    lda   ,x+
+         leay  <outfile,u
+savname  lda   ,x+          get name
          sta   ,y+
-         cmpa  #$20
-         bhi   L0C59
-         lda   #$0D
-         sta   -$01,y
+         cmpa  #$20         space
+         bhi   savname
+         lda   #$0D         CR
+         sta   -1,y         delimit
          puls  x
-         lda   #$02
-         ldb   #$0B
+         lda   #2           write
+         ldb   #$0B         attributes read+write
          os9   I$Create 
-         bcs   L0CB6
-         sta   <u0001
-         bsr   L0C77
-L0C74    lbra  L070B
-L0C77    ldd   #$3021
-         lbsr  L0792
-         leax  >L0110,pcr
-         lbsr  L0759
-         leax  <u006B,u
-         lbra  L0774
-L0C8A    leax  >u00D6,u
-         ldy   <u001F
+         bcs   error
+         sta   <outpath
+         bsr   prntout
+opendone lbra  getcmd
+
+* move cursor & print 'Outout pathlist'
+prntout  ldd   #$3021       out position
+         lbsr  movecurs
+         leax  >out$,pcr
+         lbsr  pstring
+         leax  <outfile,u
+         lbra  wrtlin1
+
+* Write out a sector
+write100 leax  >inbuff,u
+         ldy   <seclen
          os9   I$Write  
-         bcs   L0CB6
+         bcs   error
          rts   
-L0C97    lda   <u0001
-         beq   L0C74
+
+* Close output file
+closeout lda   <outpath
+         beq   opendone
          os9   I$Close  
-         bcs   L0CB6
+         bcs   error
          ldd   #$3021
-         lbsr  L0792
-         lbsr  L07B0
-         clr   <u0001
-L0CAB    bra   L0C74
-L0CAD    lda   <u0001
-         beq   L0CAB
-         bsr   L0C8A
-         lbra  L0A40
-L0CB6    pshs  b
-         clr   <u008B
-         ldd   <u0005
-         std   <u0002
-         lda   <u0007
-         sta   <u0004
+         lbsr  movecurs
+         lbsr  clrline
+         clr   <outpath
+closed   bra   opendone
+
+* Append sector to output file
+append   lda   <outpath
+         beq   closed
+         bsr   write100
+         lbra  nxtsec
+
+* main error routine
+error    pshs  b
+* modification by BRI
+         clr   <SgnlCode
+* end modification
+         ldd   <oldlsn
+         std   <lsn
+         lda   <oldlsn+2
+         sta   <lsn+2
          puls  b
-         lds   <u001D
-         cmpb  #$02
-         beq   L0CD7
-         cmpb  #$03
-         bne   L0CD3
-         clr   <u002D
-         bra   L0CD7
-L0CD3    cmpb  #$D3
-         bne   L0CDA
-L0CD7    lbra  L0B79
-L0CDA    cmpb  #$CD
-         bne   L0CF2
-         tst   <u004D
-         bne   L0CF2
-         bsr   L0D01
-         leax  >L000D,pcr
-         ldy   #$0001
-         lbsr  L0778
-         lbra  L0708
-L0CF2    pshs  b
-         lbsr  L078F
-         lbsr  L07B0
+         lds   <Ssave
+         cmpb  #2             break
+         beq   error2
+         cmpb  #3             shift break
+         bne   eofchk
+         clr   <wrtflag
+         bra   error2
+eofchk   cmpb  #$D3
+         bne   truerr
+error2   lbra  exitzap
+
+truerr   cmpb  #$CD          bad module ID
+         bne   othererr
+* If module is linked, BMID error must come from trying to Verify modules
+* use standard error reporting routine. Otherwise BMID error occurs when
+* trying to link (or list names of) modules; need to clear screen after these.
+         tst   <infile       module linked?
+         bne   othererr      yes, use standard error
+         bsr   prterr        display error #
+         leax  >cls,pcr
+         ldy   #1
+         lbsr  writeout
+         lbra  disploop
+othererr pshs  b
+         lbsr  movecmd
+         lbsr  clrline
          puls  b
-         bsr   L0D01
-         lbra  L070B
-L0D01    lda   #$02
+         bsr   prterr
+         lbra  getcmd
+
+* display error #
+prterr   lda   #$02            error path
          os9   F$PErr   
-         clr   <u001A
-         lbsr  L10F5
-         leax  >u01D6,u
-         lbra  L07E8
-         lda   #$02
-         leax  >L05AC,pcr
-         ldy   #$0078
-         lbsr  L077A
+         clr   <echobyte
+         lbsr  echo
+         leax  >i.o.buff,u
+         lbra  read1
+
+* use with   ded   and no path list
+hints    lda   #2              Now this is used
+         leax  >usemess,pcr
+         ldy   #$78
+         lbsr  wrtlin2
          clrb  
-         bra   L0D34
-L0D22    lbsr  L0BFF
-         lbne  L070B
-         lbsr  L07BA
-         lda   <u0019
-         sta   <u001A
-         lbsr  L10F5
+         bra   bye
+
+* Exit to OS-9
+quit     lbsr  rusure
+         lbne  getcmd
+         lbsr  clrscr
+         lda   <oldecho
+         sta   <echobyte
+         lbsr  echo
          clrb  
-L0D34    os9   F$Exit   
-L0D37    lbsr  L078F
-         leax  >L009B,pcr
-         lbsr  L0759
-L0D41    leax  >u00D6,u
-         stx   <u0014
-         lda   #$01
-         sta   <u0016
-         lda   #$23
-         sta   <u000F
-         lda   #$25
-         sta   <u000E
-         lda   #$58
-         sta   <u0010
-L0D57    lbsr  L079C
-         lbsr  L0E47
-L0D5D    lda   <u000E
-         ldb   <u000F
-         tst   <u0017
-         beq   L0D67
-         lda   <u0010
-L0D67    tst   <u008C
-         lbeq  L0E37
-         ldx   <u0003
+bye      os9   F$Exit   
+
+* Edit sector
+edit     lbsr  movecmd
+         leax  >edprompt,pcr
+         lbsr  pstring
+topleft  leax  >inbuff,u
+         stx   <edbufptr
+         lda   #1
+         sta   <edpos
+         lda   #$23            top row code
+         sta   <rownum
+         lda   #$25            hex dump col#
+         sta   <hexcol
+         lda   #$58            ascii dump col#
+         sta   <asciicol
+revbyte  lbsr  revdisp
+         lbsr  eddisply
+edinput  lda   <hexcol
+         ldb   <rownum
+         tst   <hexascii
+         beq   hexin
+         lda   <asciicol
+hexin    tst   <rawflg   
+         lbeq  edcont
+         ldx   <lsn+1
          cmpx  #$0001
-         lbcs  L0E37
-         cmpx  <u008F
-         lbhi  L0E37 
+         lbcs  edcont         not BAM
+         cmpx  <mappags
+         lbhi  edcont         not BAM
          pshs  b,a
-         ldx   <u0091
-         ldb   <u0093
-         stx   <u0097
-         stb   <u0099
-         ldx   <u0094
-         ldb   <u0096
-         stx   <u009A
-         stb   <u009C
-         clra  
-         ldb   <u000F
+         ldx   <newBAM
+         ldb   <newBAM+2
+         stx   <BAMstart
+         stb   <BAMstart+2
+         ldx   <nBAMstp
+         ldb   <nBAMstp+2
+         stx   <BAMstop
+         stb   <BAMstop+2
+         clra                calc byte to cluster
+         ldb   <rownum
          subb  #$23
          lda   #$10
          mul   
          pshs  b,a
          clra  
-         ldb   <u000E
+         ldb   <hexcol
          subb  #$25
-         beq   L0DA9
+         beq   hexin2
          tfr   d,x
          ldd   #$0003
-         lbsr  L1728
+         lbsr  mul16B
          tfr   x,d
-L0DA9    addd  ,s++
-         ldx   <u0003
-         cmpx  <u008F
-         bcs   L0DC3
+hexin2   addd  ,s++
+         ldx   <lsn+1
+         cmpx  <mappags
+         bcs   hexin3        edit inside of BAM range
          pshs  b,a
-         ldd   <u008D
+         ldd   <ddmap
          clra  
          tfr   d,x
          puls  b,a
          leax  -$01,x
          pshs  x
          cmpd  ,s++
-         bhi   L0DDD
-L0DC3    ldx   #$0008
-         lbsr  L16FE
+         bhi   hexin4       edit outside of BAM range
+hexin3   ldx   #$0008
+         tst   clustflg     using clusters or sectors
+         bne   csf6         go if clusters
+         pshs  d
+         ldd   ddbit
+         lbsr  mulDbyX
+         tfr   u,x
+         puls  d
+csf6     lbsr  mulDbyX
+         tfr   u,d
+         addd  <BAMstart+1
+         std   <BAMstart+1
+         tst   clustflg
+         bne   csf7        go if cluster mode
+         pshs  d
+         ldx   #7
+         ldd   ddbit
+         lbsr  mulDbyX
          tfr   u,d
-         addd  <u0098
-         std   <u0098
-         addd  #$0007
-         cmpd  <u0095
-         bls   L0DD9
-         ldd   <u0095
-L0DD9    std   <u009B
-         bra   L0DE3
-L0DDD    clr   <u009A
-         clr   <u009B
-         clr   <u009C
-L0DE3    ldu   <u001B
-         lbsr  L07A6
-         tst   <u009C
-         bne   L0DFF
-         tst   <u009B
-         bne   L0DFF
-         tst   <u009A
-         bne   L0DFF
+         addd  ,s++
+         bra   csf8
+csf7     addd  #$0007      fixed if clusters
+csf8     cmpd  <nBAMstp+1
+         bls   hexin5
+         ldd   <nBAMstp+1
+hexin5   std   <BAMstop+1
+         bra   hexin6
+hexin4   clr   <BAMstop
+         clr   <BAMstop+1
+         clr   <BAMstop+2
+hexin6   ldu   <Usave
+         lbsr  normdisp
+         tst   <BAMstop+2
+         bne   prtbmess
+         tst   <BAMstop+1
+         bne   prtbmess
+         tst   <BAMstop
+         bne   prtbmess
          ldd   #$2034
-         lbsr  L0792
-         lbsr  L07B0
-         bra   L0E32
-L0DFF    lbsr  L1748
+         lbsr  movecurs
+         lbsr  clrline
+         bra   hexin7
+prtbmess lbsr  prntBAM
          ldd   #$4934
-         lbsr  L0792
-         leax  >L0226,pcr
-         lbsr  L0759
+         lbsr  movecurs
+         leax  >BITmess,pcr  Bits:
+         lbsr  pstring
          leax  >u009D,u
-         lda   [<u0014,u]
-         ldb   #$08
+         lda   [<edbufptr,u]
+         ldb   #8
          pshs  x,a
-L0E1A    lsl   ,s
-         bcs   L0E22
-         lda   #$30
-         bra   L0E24
-L0E22    lda   #$31
-L0E24    sta   ,x+
+bmess2   lsl   ,s
+         bcs   bmess3
+         lda   #'0
+         bra   bmess4
+bmess3   lda   #'1
+bmess4   sta   ,x+
          decb  
-         bne   L0E1A
+         bne   bmess2
          puls  x,a
-         ldy   #$0008
-         lbsr  L0778
-L0E32    lbsr  L079C
+         ldy   #8
+         lbsr  writeout
+hexin7   lbsr  revdisp
          puls  b,a
-L0E37    lbsr  L0792
-         leax  >u01D6,u
-         tst   <u0017
-         lbne  L0F38
-         lbra  L0EFE
-L0E47    lda   <u000E
-         ldb   <u000F
-         lbsr  L0792
-         leay  >u01D6,u
-         lda   [<u0014,u]
+************ End of BAM mod
+edcont   lbsr  movecurs
+         leax  >i.o.buff,u
+         tst   <hexascii     test for hex/ascii mode
+         lbne  inputchr
+* modification by BRI
+* bra inputbyt
+         lbra  inputbyt
+* end mod
+eddisply lda   <hexcol
+         ldb   <rownum
+         lbsr  movecurs
+         leay  >i.o.buff,u
+         lda   [<edbufptr,u]
          pshs  a
-         lbsr  L095D
-         leax  -$02,y
-         ldy   #$0002
-         lda   #$01
-         lbsr  L077A
-         lda   <u0010
-         ldb   <u000F
-         lbsr  L0792
+         lbsr  convert1
+         leax  -2,y
+         ldy   #2
+         lda   #1
+         lbsr  wrtlin2
+         lda   <asciicol
+         ldb   <rownum
+         lbsr  movecurs
          puls  a
          anda  #$7F
          cmpa  #$20
-         bcc   L0E76
+         bcc   prntabl1
          lda   #$2E
-L0E76    leax  >u01D6,u
+prntabl1 leax  >i.o.buff,u
          sta   ,x
-         ldy   #$0001
-         lbra  L0778
-L0E83    pshs  x,b
-L0E85    clra  
-         ldb   #$01
+         ldy   #1
+         lbra  writeout
+
+* read in char, check for break key
+* modification by BRI
+* toggles cursor on/off if enabled, checks for character
+*readit ldy #1 1 char
+readit   pshs  x,b
+CFlash1  clra  
+         ldb   #1
          os9   I$GetStt 
-         bcc   L0ED6
-         cmpb  #$F6
-         bne   L0EBF
-         ldx   #$0001
+         bcc   CFExit
+         cmpb  #$F6           not ready
+         bne   CrsrErr
+         ldx   #1
          os9   F$Sleep  
-         bcs   L0EBF
-         dec   <u0089
-         lda   <u0089
-         eora  <u008A
-         anda  #$40
-         beq   L0EB5
-         com   <u008A
-         beq   L0EAB
-         bsr   L0EC7
-         bra   L0EB5
-L0EAB    leax  >L0019,pcr
-         ldy   #$0002
-         bsr   L0ECF
-L0EB5    ldb   <u008B
-         cmpb  #$02
-         beq   L0EBF
-         cmpb  #$03
-         bne   L0E85
-L0EBF    stb   ,s
-         bsr   L0EC7
+         bcs   CrsrErr
+         dec   <CrsrCnt
+         lda   <CrsrCnt
+         eora  <CrsrFlg
+         anda  #$40           keep active counter bit
+         beq   SigChk
+         com   <CrsrFlg
+         beq   CrsrOff
+         bsr   CrsrOn
+         bra   SigChk
+CrsrOff  leax  >curoff,pcr
+         ldy   #2
+         bsr   WritCrsr
+SigChk   ldb   <SgnlCode
+         cmpb  #2               abort code
+         beq   CrsrErr
+         cmpb  #$03             shift break
+         bne   CFlash1
+CrsrErr  stb   ,s
+         bsr   CrsrOn
          puls  x,b
-         bra   L0EE5
-L0EC7    leax  >L0016,pcr
-         ldy   #$0002
-L0ECF    lda   #$01
+         bra   cheksig2
+CrsrOn   leax  >curon,pcr
+         ldy   #2           cursor on number of bytes
+WritCrsr lda   #1
          os9   I$Write  
          clrb  
          rts   
-L0ED6    bsr   L0EC7
+CFExit   bsr   CrsrOn
          puls  x,b
-         ldy   #$0001
+         ldy   #1
+* end of mod
          clra  
          os9   I$Read   
-         bcs   L0EE5
-         rts   
-L0EE5    leas  $02,s
-         clr   <u008B
-         cmpb  #$02
-         beq   L0EF9
-         pshs  b
-         lbsr  L101A
-         clr   <u000F
-         puls  b
-         lbra  L0CB6
-L0EF9    com   <u0017
-         lbra  L0D5D
-L0EFE    bsr   L0E83
-         bsr   L0F1E
-         bcs   L0F4A
-         lbsr  L0778
-         ldb   ,x
-         lbsr  L0E83
-         bsr   L0F1E
-         bcs   L0F4A
-         exg   a,b
-         lbsr  L0B09
-         stb   [<u0014,u]
-         lda   #$01
-         sta   <u002D
-         bra   L0F75
-L0F1E    lda   ,x
-         cmpa  #$30
-         bcs   L0F35
-         cmpa  #$39
-         bls   L0F32
-         anda  #$5F
-         cmpa  #$46
-         bhi   L0F35
-         cmpa  #$41
-         bcs   L0F35
-L0F32    andcc #$FE
-         rts   
-L0F35    orcc  #$01
-         rts   
-L0F38    lbsr  L0E83
-         lda   ,x
-         cmpa  #$20
-         bcs   L0F4A
-         sta   [<u0014,u]
-         lda   #$01
-         sta   <u002D
-         bra   L0F75
-L0F4A    cmpa  #$09
-         beq   L0F75
-         cmpa  #$08
-         beq   L0FB3
-         cmpa  #$0C
-         lbeq  L1020
-         cmpa  #$0A
-         lbeq  L1076
-         cmpa  #$0D
-         lbne  L0D5D
-         lbsr  L101A
-         ldd   #$4934
-         lbsr  L0792
-         lbsr  L07B0
-         clr   <u000F
-         lbra  L070B
-L0F75    lbsr  L101A
-         tst   <u0020
-         beq   L0F84
-         lda   <u0016
-         cmpa  <u0020
-         lbeq  L0D41
-L0F84    ldd   <u0014
-         addd  #$0001
-         std   <u0014
-         inc   <u0016
-         inc   <u0010
-         lda   <u0010
-         cmpa  #$68
-         bcc   L0F9E
-         lda   <u000E
-         adda  #$03
-         sta   <u000E
-         lbra  L0D57
-L0F9E    inc   <u000F
-         lda   <u000F
-         cmpa  #$32
-         lbhi  L0D41
-         lda   #$25
-         sta   <u000E
-         lda   #$58
-         sta   <u0010
-         lbra  L0D57
-L0FB3    bsr   L101A
-         ldd   <u0014
-         subd  #$0001
-         std   <u0014
-         dec   <u0016
-         dec   <u0010
-         lda   <u0010
-         cmpa  #$58
-         bcs   L0FCF
-         lda   <u000E
-         suba  #$03
-         sta   <u000E
-         lbra  L0D57
-L0FCF    dec   <u000F
-         lda   #$52
-         sta   <u000E
-         lda   #$67
-         sta   <u0010
-         lda   <u000F
-         cmpa  #$23
-         bcs   L0FE2
-         lbra  L0D57
-L0FE2    ldx   <u0014
-         ldb   <u0020
-         beq   L100D
-         stb   <u0016
-         clra  
-         leax  d,x
-         decb  
-         pshs  b
-         lsrb  
-         lsrb  
-         lsrb  
-         lsrb  
-         addb  #$23
-         stb   <u000F
-         lda   ,s+
-         anda  #$0F
-         pshs  a
-         adda  #$58
-         sta   <u0010
-         puls  a
-         ldb   #$03
-         mul   
-         addb  #$25
-         stb   <u000E
-         bra   L1015
-L100D    lda   #$32
-         sta   <u000F
-         leax  >$0100,x
-L1015    stx   <u0014
-         lbra  L0D57
-L101A    lbsr  L07A6
-         lbra  L0E47
-L1020    bsr   L101A
-         ldb   <u0020
-         beq   L102C
-         lda   <u000F
-         cmpa  #$23
-         beq   L104F
-L102C    ldd   <u0014
-         subd  #$0010
-         std   <u0014
-         ldb   <u0016
-         subb  #$10
-         stb   <u0016
-         dec   <u000F
-         lda   <u000F
-         cmpa  #$23
-         bcc   L104C
-         lda   #$32
-         sta   <u000F
-         ldd   <u0014
-         addd  #$0100
-         std   <u0014
-L104C    lbra  L0D57
-L104F    andb  #$F0
-         lda   <u0020
-         anda  #$0F
-         cmpa  <u0016
-         bcc   L105B
-         subb  #$10
-L105B    clra  
-         pshs  b,a
-         ldd   <u0014
-         addd  ,s+
-         std   <u0014
-         ldb   <u0016
-         addb  ,s
-         stb   <u0016
-         puls  b
-         lsrb  
-         lsrb  
-         lsrb  
-         lsrb  
-         addb  #$23
-         stb   <u000F
-         bra   L104C
-L1076    bsr   L101A
-         ldb   <u0020
-         beq   L1082
-         subb  <u0016
-         cmpb  #$10
-         bcs   L10A7
-L1082    ldd   <u0014
-         addd  #$0010
-         std   <u0014
-         lda   <u0016
-         adda  #$10
-         sta   <u0016
-         inc   <u000F
-         lda   <u000F
-         cmpa  #$32
-         lbls  L0D57
-         ldd   <u0014
-         subd  #$0100
-         std   <u0014
-L10A0    lda   #$23
-         sta   <u000F
-         lbra  L0D57
-L10A7    clra  
-         ldb   <u0016
-         decb  
-         andb  #$F0
-         pshs  b,a
-         ldd   <u0014
-         subd  ,s+
-         std   <u0014
-         ldb   <u0016
-         subb  ,s+
-         stb   <u0016
-         bra   L10A0
-L10BD    lbsr  L07BA
-         lda   <u0019
-         sta   <u001A
-         bsr   L10F5
-         leax  >L0136,pcr
-         ldy   #$0010
-         leau  >u01D6,u
-         lda   #$0D
-         sta   ,u
-         ldd   #$0000
-         os9   F$Fork   
-         lbcs  L0CB6
-         os9   F$Wait   
-         ldu   <u001B
-         leax  >u00D6,u
-         stx   <u0012
-         clr   <u001A
-         bsr   L10F5
-L10EF    lbsr  L07BA
-         lbra  L0708
-L10F5    pshs  x
-         leas  <-$20,s
-         leax  ,s
-         clra  
-         clrb  
-         os9   I$GetStt 
-         lbcs  L0CB6
-         lda   <u001A
-         sta   $04,x
-         clra  
-         os9   I$SetStt 
-         lbcs  L0CB6
-         leas  <$20,s
-         puls  pc,x
-L1116    lbsr  L078F
-         leax  >L0119,pcr
-         lbsr  L0759
-         ldu   #$0000
-         ldx   #$0000
-         stx   <u0025
-         lda   <u0000
-         os9   I$Seek   
-         lbcs  L0CB6
-         ldu   <u001B
-L1133    ldd   #$FFFF
-         std   <u0029
-         stb   <u002B
-         leax  >u01D6,u
-         ldy   #$0008
-         lda   <u0000
-         os9   I$Read   
-         lbcs  L0CB6
-         cmpy  #$0008
-         lbne  L120E
-         ldd   ,x
-         cmpa  #$87
-         lbne  L120E
-         cmpb  #$CD
-         lbne  L120E
-         ldd   $02,x
-         cmpd  #$000F
-         lbls  L120E
-         subd  #$0003
-         std   <u0021
-         addd  <u0025
-         std   <u0025
-         clra  
-         ldb   #$08
-L1177    eora  ,x+
-         decb  
-         bne   L1177
-         coma  
-         sta   ,x
-         ldy   #$0001
-         lda   <u0000
-         os9   I$Write  
-         lbcs  L0CB6
-         ldd   <u0021
-         subd  #$0009
-         std   <u0021
-         leax  >u01D6,u
-         ldy   #$0009
-         bsr   L1201
-L119D    lda   <u0000
-         ldy   #$0078
-         cmpy  <u0021
-         bls   L11AB
-         ldy   <u0021
-L11AB    os9   I$Read   
-         bcs   L120E
-         sty   <u0027
-         bsr   L1201
-         ldd   <u0021
-         subd  <u0027
-         std   <u0021
-         bne   L119D
-         lda   <u0000
-         ldb   #$05
-         os9   I$GetStt 
-         tfr   u,d
-         ldu   <u001B
-         cmpd  <u0025
-         bne   L120E
-         com   <u0029
-         com   <u002A
-         com   <u002B
-         leax  <u0029,u
-         ldy   #$0003
-         lda   <u0000
-         os9   I$Write  
-         lbcs  L0CB6
-         ldd   #$0003
-         addd  <u0025
-         std   <u0025
-         ldb   #$06
-         lda   <u0000
-         os9   I$GetStt 
-         lbcc  L1133
-         cmpb  #$D3
-         lbne  L0CB6
-         lbsr  L07C4
-         lbra  L0708
-L1201    leau  <u0029,u
-         os9   F$CRC    
-         lbcs  L0CB6
-         ldu   <u001B
-         rts   
-L120E    ldd   #$2036
-         lbsr  L0792
-         leax  >L0125,pcr
-         lbsr  L0759
-         ldb   #$CD
-         lbsr  L0D01
-         lbra  L070B
-L1223    tst   <u004D
-         lbne  L070B
-         ldd   #$0000
-         std   <u0025
-         std   <u0023
-         clr   <u001A
-         com   <u001A
-         lbsr  L10F5
-         lbsr  L078F
-         lbsr  L07B0
-         leax  >L013B,pcr
-         lbsr  L0759
-         leax  <u004D,u
-         ldy   #$001E
-         lbsr  L0786
-         clr   <u001A
-         lbsr  L10F5
-         cmpy  #$0001
-         lbne  L130C
-         lbsr  L07BA
-         clr   <u004D
-         leax  >L0151,pcr
-         lbsr  L0774
-L1267    ldd   <u0023
-         addd  <u0025
-         std   <u0025
-         tfr   d,u
-         ldx   #$0000
-         lda   <u0000
-         os9   I$Seek   
-         bcs   L12F8
-         ldu   <u001B
-         leax  >u01D6,u
-         ldy   #$0006
-         os9   I$Read   
-         bcs   L12F8
-         ldd   ,x++
-         cmpa  #$87
-         bne   L12F6
-         cmpb  #$CD
-         bne   L12F6
-         leay  >u01D6,u
-         ldd   ,x++
-         std   <u0023
-         ldd   ,x++
-         pshs  b,a
-         ldd   <u0025
-         bsr   L12E6
-         lda   #$20
-         sta   ,y+
-         ldd   <u0023
-         bsr   L12E6
-         lda   #$20
-         sta   ,y+
-         ldd   <u0025
-         addd  ,s++
-         tfr   d,u
-         ldx   #$0000
-         lda   <u0000
-         os9   I$Seek   
-         lbcs  L0CB6
-         ldu   <u001B
-         tfr   y,x
-         ldy   #$001D
-         lda   <u0000
-         os9   I$Read   
-         lbcs  L0CB6
-L12D1    lda   ,x+
-         bpl   L12D1
-         anda  #$7F
-         sta   -$01,x
-         lda   #$0D
-         sta   ,x
-         leax  >u01D6,u
-         lbsr  L0774
-         bra   L1267
-L12E6    lbsr  L095D
-         tfr   b,a
-         lbra  L095D
-L12EE    cmpb  #$D3
-         bne   L12F8
-         ldb   #$DD
-         bra   L12F8
-L12F6    ldb   #$CD
-L12F8    clr   <u004D
-         cmpb  #$D3
-         lbne  L0CB6
-         lbsr  L07E8
-         leax  >u00D6,u
-         stx   <u0012
-         lbra  L10EF
-L130C    os9   F$PrsNam 
-         lbcs  L0CB6
-         stb   <u002C
-         decb  
-         lda   b,x
-         ora   #$80
-         sta   b,x
-         stx   <u0029
-         ldu   #$0000
-L1321    ldx   #$0000
-         lda   <u0000
-         os9   I$Seek   
-         lbcs  L0CB6
-         ldu   <u001B
-         leax  >u01D6,u
-         ldy   #$0006
-         os9   I$Read   
-         bcs   L12EE
-         ldd   ,x++
-         cmpa  #$87
-         bne   L12F6
-         cmpb  #$CD
-         bne   L12F6
-         ldd   ,x++
-         std   <u0023
-         ldd   ,x
-         addd  <u0025
-         tfr   d,u
-         ldx   #$0000
-         lda   <u0000
-         os9   I$Seek   
-         bcs   L12EE
-         ldu   <u001B
-         leax  >u01D6,u
-         ldy   #$001D
-         os9   I$Read   
-         bcs   L12EE
-         tfr   x,y
-         ldx   <u0029
-         ldb   <u002C
-         os9   F$CmpNam 
-         bcc   L137E
-         ldd   <u0023
-         addd  <u0025
-         std   <u0025
-         tfr   d,u
-         bra   L1321
-L137E    lda   #$0D
-         sta   b,x
-         decb  
-         lda   b,x
-         anda  #$7F
-         sta   b,x
-         ldd   <u0025
-         std   <u0008
-         ldd   #$0006
-         leax  u0002,u
-L1392    sta   ,x+
-         decb  
-         bne   L1392
-         lbra  L06F5
-L139A    ldd   #$3020
-         lbsr  L0792
-         leax  >L016F,pcr
-         lbsr  L0759
-         leax  <u004D,u
-         lbsr  L0774
-         ldd   #$5820
-         lbsr  L0792
-         leax  >L0178,pcr
-         lbsr  L0759
-         leay  >u01D6,u
-         ldd   <u0008
-         lbsr  L12E6
-         lda   #$0D
-         sta   ,y
-         lbra  L0778
-L13CA    tst   <u004D
-         lbeq  L070B
-         ldd   #$0008
-         leax  u0002,u
-L13D5    sta   ,x+
-         decb  
-         bne   L13D5
-         ldd   #$3020
-         lbsr  L0792
-         lbsr  L07B0
-         lbsr  L07B0
-         clr   <u004D
-         lbra  L06F5
-L13EB    tst   <u002E
-         beq   L13FD
-         clr   <u002E
-         ldd   #$5933
-         lbsr  L0792
-         lbsr  L07B0
-L13FA    lbra  L070B
-L13FD    lbsr  L0BFF
-         bne   L13FA
-         com   <u002E
-         ldd   #$5933
-         lbsr  L0792
-         leax  >L0181,pcr
-         lbsr  L0759
-         bra   L13FA
-L1413    lbsr  L07BA
-         leax  >L023E,pcr
-         ldy   #$036E
-         lbsr  L077A
-         leax  >u01D6,u
-         lbsr  L07E8
-         lbra  L10EF
-L142B    clr   <u001A
-         com   <u001A
-         lbsr  L10F5
-         lbsr  L078F
-         lbsr  L07B0
-         tst   <u002F
-         bne   L1471
-         leax  >L0194,pcr
-         lbsr  L0759
-         ldy   #$0021
-         lbsr  L1514
-         cmpy  #$0001
-         lbeq  L1559
-         leay  -$01,y
-         tfr   y,d
-         lsrb  
-         lbcs  L152E
-         stb   <u0030
-         leau  <u0031,u
-L1460    lbsr  L0B96
-         lbcs  L152E
-         sta   ,u+
-         leay  -$02,y
-         bne   L1460
-         ldu   <u001B
-         bra   L1496
-L1471    leax  >L01A6,pcr
-         lbsr  L0759
-         ldy   #$0011
-         lbsr  L1514
-         cmpy  #$0001
-         lbeq  L1559
-         tfr   y,d
-         decb  
-         stb   <u0030
-         leay  <u0031,u
-L148F    lda   ,x+
-         sta   ,y+
-         decb  
-         bne   L148F
-L1496    clr   <u001A
-         lbsr  L10F5
-         leax  >u00D6,u
-L149F    ldb   <u0020
-         leay  <u0031,u
-L14A4    lda   ,y
-         eora  ,x+
-         lbeq  L155C
-         tst   <u002F
-         beq   L14B6
-         bita  #$5F
-         lbeq  L155C
-L14B6    decb  
-L14B7    bne   L14A4
-         pshs  y,x,b,a
-         clra  
-         ldb   #$01
-         os9   I$GetStt 
-         bcs   L14D0
-         leax  >u01D6,u
-         lbsr  L07E8
-         lda   ,x
-         cmpa  #$05
-         beq   L1546
-L14D0    puls  y,x,b,a
-         bsr   L14D6
-         bra   L149F
-L14D6    tst   <u004D
-         beq   L14E3
-         ldd   <u0023
-         subd  #$0001
-         cmpa  <u0004
-         beq   L1546
-L14E3    ldd   <u0003
-         addd  #$0001
-         std   <u0003
-         bne   L14EE
-         inc   <u0002
-L14EE    lbsr  L07F1
-         leax  >u00D6,u
-         stx   <u0012
-         tst   <u004D
-         beq   L1505
-         ldd   <u0023
-         suba  <u0004
-         bne   L1505
-         tfr   d,y
-         bra   L1509
-L1505    ldy   #$0100
-L1509    lda   <u0000
-         os9   I$Read   
-         bcs   L1540
-         sty   <u001F
-         rts   
-L1514    leax  >u01D6,u
-         clra  
-         os9   I$ReadLn 
-         bcs   L151F
-         rts   
-L151F    leas  $02,s
-         clr   <u008B
-         cmpb  #$02
-         lbne  L0CB6
-         com   <u002F
-         lbra  L142B
-L152E    ldu   <u001B
-         bsr   L1535
-         lbra  L142B
-L1535    leax  >L022B,pcr
-         ldy   #$0001
-         lbra  L0778
-L1540    cmpb  #$D3
-         lbne  L0CB6
-L1546    lds   <u001D
-         ldd   <u0005
-         std   <u0002
-         lda   <u0007
-         sta   <u0004
-         lbsr  L07C4
-         sty   <u001F
-         bsr   L1535
-L1559    lbra  L0B79
-L155C    pshs  b
-         decb  
-         stb   <u0044
-         stx   <u0042
-         ldb   <u0030
-L1565    decb  
-         beq   L1597
-         dec   ,s
-         beq   L1588
-L156C    leay  $01,y
-         lda   ,y
-         eora  ,x+
-         beq   L1565
-         tst   <u002F
-         beq   L157C
-         bita  #$5F
-         beq   L1565
-L157C    leas  $01,s
-         ldx   <u0042
-L1580    leay  <u0031,u
-         ldb   <u0044
-         lbra  L14B7
-L1588    leas  $01,s
-         pshs  y,b
-         lbsr  L14D6
-         puls  y,b
-         lda   <u0020
-         pshs  a
-         bra   L156C
-L1597    leas  $01,s
-         lda   <u0004
-         cmpa  <u0007
-         beq   L15C0
-         cmpx  <u0042
-         bcc   L15B8
-         ldd   <u0003
-         subd  #$0001
-         std   <u0003
-         cmpd  #$FFFF
-         bne   L15B2
-         dec   <u0002
-L15B2    lbsr  L07C4
-         sty   <u001F
-L15B8    ldd   <u0002
-         std   <u0005
-         lda   <u0004
-         sta   <u0007
-L15C0    lbsr  L081F
-         ldd   <u0042
-         subd  #$0001
-         std   <u0014
-         subd  <u0012
-         pshs  b
-         andb  #$0F
-         pshs  b
-         addb  #$58
-         stb   <u0010
-         puls  b
-         lda   #$03
-         mul   
-         addb  #$25
-         stb   <u000E
-         puls  b
-         andb  #$F0
-         lsrb  
-         lsrb  
-         lsrb  
-         lsrb  
-         addb  #$23
-         stb   <u000F
-         lbsr  L079C
-         lbsr  L0E47
-         lbsr  L07A6
-         clr   <u000F
-         lbra  L1559
-L15F9    tst   <u0030
-         lbeq  L070B
-         lbsr  L078F
-         leax  >L01B8,pcr
-         lbsr  L0759
-         ldx   <u0042
-         lbeq  L1496
-         lbra  L1580
-L1612    lbsr  L078F
-         leax  >L01C4,pcr
-         lbsr  L0759
-         com   <u0018
-         leay  >u01D6,u
-         ldd   <u0049
-         lbsr  L095D
-         tfr   b,a
-         lbsr  L095D
-         ldd   <u004B
-         lbsr  L095D
-         clr   <u0018
-         tfr   b,a
-         lbsr  L095D
-         ldd   #$2020
-         std   ,y++
-         std   ,y++
-         leax  >u01D6,u
-         stx   <u0027
-         tfr   y,d
-         subd  <u0027
-         tfr   d,y
-         lbsr  L0778
-         leax  >L01D9,pcr
-         lbsr  L0759
-         ldy   #$0009
-         lbsr  L0A89
-         bcs   L1612
-         ldd   #$2037
-         lbsr  L0792
-         lbsr  L0C02
-         lbne  L070B
-         ldx   <u0045
-         ldu   <u0047
-         ldb   #$02
-         lda   <u0000
-         os9   I$SetStt 
-         lbcs  L0CB6
-         stx   <u0049
-         stu   <u004B
-         ldu   <u001B
-         lda   <u0049
-         cmpa  <u0002
-         bcs   L1692
-         bne   L168F
-         ldd   <u004A
-         cmpd  <u0003
-         bls   L1696
-L168F    lbra  L06F5
-L1692    sta   <u0002
-         ldd   <u004A
-L1696    tst   <u004C
-         bne   L169D
-         subd  #$0001
-L169D    std   <u0003
-         cmpd  #$FFFF
-         bne   L168F
-         dec   <u0002
-         bra   L168F
-L16A9    lda   <u00A5
-         cmpa  #$10
-         bcc   L16D3
-         ldb   #$03
-         mul   
-         leax  >u00A6,u
-         leax  b,x
-         ldd   <u0002
-         std   ,x++
-         lda   <u0004
-         sta   ,x
-         tst   <u00A5
-         beq   L16CE
-         cmpa  -$03,x
-         bne   L16CE
-         ldd   <u0002
-         cmpa  -$05,x
-         beq   L16D0
-L16CE    inc   <u00A5
-L16D0    lbra  L070B
-L16D3    lbsr  L078F
-         leax  >L022B,pcr
-         lbsr  L0759
-         lbsr  L07E8
-         bra   L16D0
-L16E2    lda   <u00A5
-         beq   L16D0
-         ldb   #$03
-         mul   
-         subb  #$03
-         leax  >u00A6,u
-         leax  b,x
-         ldd   ,x++
-         std   <u0002
-         lda   ,x
-         sta   <u0004
-         dec   <u00A5
-         lbra  L06F5
-* I think this is a general purpose 16x16 bit multiplication.
-* regD is first number, regX is second number.
-* Returns answer in regY and regU.
-L16FE    pshs  u,y,x,b,a
-         clr   $04,s
-         lda   $03,s     lower word of regX times regB
-         mul   
-         std   $06,s
-         ldd   $01,s     upper word of regX times regB
-         mul   
-         addb  $06,s
-         adca  #$00
-         std   $05,s
-         ldb   ,s        original regA
-         lda   $03,s     upper word regX
-         mul   
-         addd  $05,s
-         std   $05,s
-         bcc   L171D
-         inc   $04,s
-L171D    lda   ,s
-         ldb   $02,s
-         mul   
-         addd  $04,s
-         std   $04,s
-         puls  pc,u,y,x,b,a
-L1728    pshs  x,b,a
-         lda   #$10
-         pshs  a
-         clra  
-         clrb  
-L1730    lsl   $04,s
-         rol   $03,s
-         rolb  
-         rola  
-         cmpd  $01,s
-         bcs   L173F
-         subd  $01,s
-         inc   $04,s
-L173F    dec   ,s
-         bne   L1730
-         ldx   $03,s
-         leas  $05,s
-         rts   
-L1748    ldd   #$2034
-         lbsr  L0792
-         leax  >L0202,pcr  BAM message
-         lbsr  L0759
-         leay  >u01D6,u
-         pshs  y
-         ldd   <u0097      get 3 byte address and display it
-         lbsr  L095D       convert hex to ascii
-         tfr   b,a
-         lbsr  L095D       convert hex to ascii
-         lda   <u0099
-         lbsr  L095D       convert hex to ascii
-         lda   ,-y
-         ora   #$80
-         sta   ,y
-         ldd   #$3234
-         lbsr  L0792
-         ldx   ,s
-         lbsr  L0759
-         ldy   ,s
-         ldd   <u009A
-         lbsr  L095D
-         tfr   b,a
-         lbsr  L095D
-         lda   <u009C
-         lbsr  L095D
-         lda   ,-y
-         ora   #$80
-         sta   ,y
-         ldd   #$3D34
-         lbsr  L0792
-         puls  x
-         lbsr  L0759
-         rts   
-         emod
-eom      equ   *
-
-         ELSE
-
-         nam   dEd OS-9 Disk Editor Version 2.01
-         ttl   Copyright 1987 Doug DeMartinis
-
-*******************************************************
-* Copyright 1987 Doug DeMartinis; All Rights Reserved *
-*                CIS:    72245,1400                   *
-*                Delphi: DOUGLASD                     *
-* Personal use and uploading of code, source and docs *
-* to BBS's, as well as customization of the terminal  *
-* display codes, is permitted only if the copyright   *
-* notice and docs remain intact.                      *
-*                                                     *
-* 10/87 Various mods & fixes by Bruce Isted (BRI)     *
-* 11/87 Added Diddle, Find, Push, Remove routines.    *
-*       Fixed bug throwing stack off by going in and  *
-*        out of various error routines.               *
-*                                                     *
-*******************************************************
-*                                                     *
-* Mods by Roger A. Krupski (HARDWAREHACK)             *
-*                                                     *
-* 02/88 -Added "enter" command which cleans up the    *
-*        screen by running the REDO subroutine. (RAK) *
-*                                                     *
-* 01/90 -Added a check for the break key which allows *
-*        aborting the <F>ind function. (RAK)          *
-*       -Added a check for null filename in OUTFILE:  *
-*        and bypass I$Create if so.                   *
-*       -Other minor bugs fixed / errors trapped.     *
-*******************************************************
-
-         ifp1            
-         use   defsfile
-         endc            
-
-type     set   prgrm+objct
-revs     set   reent+1   
-
-top      mod   dEdend,dEdnam,type,revs,start,size
-
-**************************************************************************
-* To customize dEd for another driver, change the value of 'xyflipr',    *
-*    change co380 to FALSE and OTHER to TRUE, and make the appropriate   *
-*    changes to the display codes in the block that begins 'ifne OTHER'. *
-*    WordPak users only need to change co380 to FALSE and WPAK to TRUE.  *
-**************************************************************************
-
-* Set xyflipr to 1 if XY cursor move code has form: row,col
-* Set    "    to 0 "   "   "     "    "    "   "    col,row
-xyflipr  set   0          co380 uses $2,Col,Row to position cursor
-
-* Change one of the following lines to TRUE and others to FALSE,
-*  depending on which 80 column display you're using.
-
-co380    set   FALSE      Set to TRUE if using Mike Dziedzic's co380 driver
-WPAK     set   FALSE      Set to TRUE if using WordPak
-OTHER    set   TRUE       Set to TRUE for another driver and change codes below
-
-* Conditional assembly of terminal commands depending on previous choices:
-
-         ifne  OTHER     
-* e.g. CoCo 3, OS-9 Level II
-* Change the appropriate byte strings below for another driver
-
-xyflipr  set   0          Change to 1 if XY Cursor move code wants form Row,Col
-curscode set   $2         XY Cursor move code (max length=2 bytes)
-cls      fcb   $c         Clear Screen byte string
-clschrs  equ   *-cls      Don't change this.
-revvid   fcb   $1F,$20,0  Reverse Video byte string. Must end with a 0.
-revchrs  equ   *-revvid-1 Don't change this.
-normvid  fcb   $1F,$21,0  Normal Video byte string. MUST end with a 0.
-normchrs equ   *-normvid-1 Don't change this.
-eraselin fcb   4          Erase to End of Line byte string.
-eraschrs equ   *-eraselin Don't change this.
-erasescr fcb   $b         Erase to End of Screen byte string.
-era2chrs equ   *-erasescr Don't change this.
-
-* modification by BRI
-* adds cursor on/off strings & string lengths
-CursrOn  fcb   $05,$21,0  Cursor on string.  MUST end with a 0.
-CursOn   equ   *-CursrOn-1 Don't change this.
-CursrOff fcb   $05,$20,0  Cursor off string.  MUST end with a 0.
-CursOff  equ   *-CursrOff-1 Don't change this.
-* end modification
-
-         endc            
-
-         ifne  WPAK      
-* This is for WordPak driver
-
-xyflipr  set   1          cursor move wants row,col
-curscode set   $2         XY cursor move code
-cls      fcb   $c         clear screen code
-clschrs  equ   *-cls     
-revvid   fcb   $1b,$53,$21,0 reverse video toggle
-revchrs  equ   *-revvid-1 # chars in code string
-normvid  fcb   $1b,$53,$20,0 normal video toggle
-normchrs equ   *-normvid-1
-eraselin fcb   $1b,$41    erase to end of line
-eraschrs equ   *-eraselin
-erasescr fcb   $1b,$42    erase to end of screen
-era2chrs equ   *-erasescr
-
-* modification by BRI
-* adds cursor on/off strings & string lengths
-CursrOn  fcb   0          Cursor on string.  MUST end with a 0.
-CursOn   equ   *-CursrOn-1 Don't change this.
-CursrOff fcb   0          Cursor off string.  MUST end with a 0.
-CursOff  equ   *-CursrOff-1 Don't change this.
-* end modification
-
-         endc            
-
-         ifne  co380     
-* This is for co380 driver for CoCo3
-xyflipr  set   0          cursor move wants col,row
-curscode set   $2         1st byte of move cursor code
-cls      fcb   $c         clear screen code
-clschrs  equ   *-cls     
-revvid   fcb   0          reverse video not supported by co380
-revchrs  equ   *-revvid-1 # chars in code string
-normvid  fcb   0          Reverse video off not supported by co380
-normchrs equ   *-normvid-1
-eraselin fcb   4          erase to end of line
-eraschrs equ   *-eraselin
-erasescr fcb   $b         erase to end of screen
-era2chrs equ   *-erasescr
-
-* modification by BRI
-* adds cursor on/off strings & string lengths
-CursrOn  fcb   0          Cursor on string.  MUST end with a 0.
-CursOn   equ   *-CursrOn-1 Don't change this.
-CursrOff fcb   0          Cursor off string.  MUST end with a 0.
-CursOff  equ   *-CursrOff-1 Don't change this.
-* end modification
-
-         endc            
-
-***********************************************************************
-* All the changes for customizing dEd should be done above this line. *
-***********************************************************************
-
-
-* Don't change the following 2 blocks.
-* X,Y coordinates of various screen prompts
-         ifne  xyflipr   
-hedrpos  set   $2220      Header position (row/col)
-cmdpos   set   $3620      Command position
-cmd1pos  set   $3720      Command position + 1 row
-outpos   set   $2130      Output pathlist position
-modpos   set   $2030      Module name position
-offpos   set   $2058      Offset position
-xprtpos  set   $3435      EXPERT position
-
-         else            
-
-hedrpos  set   $2022     
-cmdpos   set   $2036      Command position
-cmd1pos  set   $2037      Command position + 1 row
-outpos   set   $3021      Output pathlist position
-modpos   set   $3020      Module name position
-offpos   set   $5820      Offset position
-xprtpos  set   $3534      EXPERT position
-         endc            
-
-****************************
-* Variable Storage
-****************************
-
-bufsiz   equ   120       
-MaxStack equ   16         maximum # sectors that can be 'pushed' onto stack
-
-inpath   rmb   1          input path #
-outpath  rmb   1          output path #
-lsn      rmb   3          Logical Sector number
-oldlsn   rmb   3          LSN backup
-offset   rmb   2          'Linked' module offset
-cursor   rmb   4          Move cursor code
-hexcol   rmb   1          Hex dump column #
-rownum   rmb   1          Row number (Hex 0-f)
-asciicol rmb   1          ASCII dump col #
-lastflag rmb   1          Flag for last line display
-buffptr  rmb   2          Pointer for input buffer
-edbufptr rmb   2          Edit buffer pointer
-edpos    rmb   1          Edit position counter for partial sector reads
-hexascii rmb   1          hex/ascii edit mode flag; 0=>Hex, FF=>ASCII
-zeroflag rmb   1          leading zero suppression flag, $FF=>Suppress
-oldecho  rmb   1          original echo status
-echobyte rmb   1          current echo status
-Usave    rmb   2          U register storage
-Ssave    rmb   2          S register storage
-seclen   rmb   2          sector length ($100 unless last LSN in file)
-vmodlen  rmb   2          Verify module length
-lmodlen  rmb   2          'Linked' module length
-fileln   rmb   2          cumulative file length
-bytsread rmb   2          bytes read during verify
-CRC      rmb   3          CRC accumulator for verify
-modnmlen rmb   1          'Link' module name length
-wrtflag  rmb   1          Flag to auto-write sector
-xprtflag rmb   1          Expert mode flag
-FHexAsc  rmb   1          'Find' Hex/Ascii mode flag
-targlen  rmb   1          length of string to find
-findstr  rmb   17         string to 'Find'
-FindPtr  rmb   2          pointer to byte to start next search at
-FBytes   rmb   1          # bytes left in target string
-HexBuff  rmb   4          scratch area for ASCII to Hex conversions
-FileLen  rmb   4          File length
-infile   rmb   30         linked module name
-outfile  rmb   30         Output filename
-
-* modification by BRI
-CrsrCnt  rmb   1          8-bit cursor toggle counter (bit 3 active)
-CrsrFlg  rmb   1          cursor toggle (initialized to 0)
-SgnlCode rmb   1          intercept routine signal code
-* end modification
-
-StackCnt rmb   1          # sectors on stack
-Stack    rmb   3*MaxStack room for 16 LSN's
-
-inbuff   rmb   256        input buffer
-i.o.buff rmb   bufsiz     input/output buffer
-         rmb   200        stack storage 
-size     equ   .          end of data area
-
-dEdnam   fcs   /dEd/     
-         fcb   3          version
-         fcc   /Copyright 1987 Doug DeMartinis/
-
-* Display messages
-
-lsntitle fcs   /LSN=$/   
-sect     fcs   /SECTOR = $/
-header   fcc   /      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F    0 2 4 6 8 A C E /
-         fcb   $d        
-command  fcs   /CMD: /   
-edprompt fcs   "<BREAK> toggles HEX/ASCII edit modes     <ENTER> exits edit mode"
-zaprompt fcs   /Zap /    
-byte     fcs   /byte: /  
-char     fcs   /char: /  
-sure     fcs   "Are you sure? (Y/N) "
-writing  fcs   /Writing sector.../
-out$     fcs   /OUTFILE: /
-vrfymess fcs   /Verifying.../
-verrmess fcs   /Verify aborted.../
-shell$   fcs   /shell/   
-linkmess fcs   /Link to which module? /
-linkhdr  fcc   /Off  Len  Name/
-         fcb   $a        
-         fcc   /---- ---- ----/
-         fcb   $d        
-modnmhdr fcs   /MODULE:  /
-offmess  fcs   /OFFSET: $/
-xprtmess fcb   $1f,$24    cc3 blink on
-         fcc   /- Expert Mode -/
-         fcb   $1f,$25+$80 blink off
-findbyte fcs   /Find byte string $/
-findchar fcs   /Find char string: /
-srchmess fcs   /Searching.../
-lenmess  fcs   /Current File Length $/
-newmess  fcs   /New Length? $/
-fullmess equ   *         
-bell     fcb   7         
-         fcs   /Sector Stack Full /
-
-* modification by BRI
-* alphabetized help list,
-* removed redundant 'Close' message,
-* added prompt at end
-helper   fcc   "   Up/Down Arrows  Read & display Next/Previous sector"
-         fcb   $a,$a     
-         fcc   / <CR> Clean up the screen display/
-         fcb   $a        
-         fcc   /   $  Fork a SHELL (Ctrl-BREAK to return)/
-         fcb   $a        
-         fcc   /   A  Append displayed sector to output file/
-         fcb   $a        
-         fcc   /   C  Close output file/
-         fcb   $a        
-         fcc   /   D  Diddle (adjust) file length/
-         fcb   $a        
-         fcc   /   E  Edit the displayed sector/
-         fcb   $a        
-         fcc   /   F  Find a byte or text string (BREAK aborts)/
-         fcb   $a        
-         fcc   /   H  Help screen (also use '?')/
-         fcb   $a        
-         fcc   /   L  Link to a module - List all modules/
-         fcb   $a        
-         fcc   /   N  Next occurrence of byte(s) or string (Find)/
-         fcb   $a        
-         fcc   /   O  Open a file for output (use with Append)/
-         fcb   $a        
-         fcc   /   P  Push current sector onto stack/
-         fcb   $a        
-         fcc   /   Q  Quit dEd - Exit to OS9/
-         fcb   $a        
-         fcc   /   R  Remove and display a sector from stack/
-         fcb   $a        
-         fcc   /   S  Skip to given sector (sector # in hex)/
-         fcb   $a        
-         fcc   /   U  Unlink from module/
-         fcb   $a        
-         fcc   /   V  Verify all modules in file/
-         fcb   $a        
-         fcc   /   W  Write the sector back to the disk/
-         fcb   $a        
-         fcc   "   X  eXpert mode toggle on/off"
-         fcb   $a        
-         fcc   /   Z  Zap (fill in) the sector displayed/
-         fcb   $a,$a     
-         fcc   /      (Press any key to return to command prompt):/
-*fcb $a
-helpchrs equ   *-helper  
-* end modifications
-
-hints    fcc   /Use:  dEd <pathlist>/
-         fcb   $0d       
-
-* Table for converting Hex to Decimal
-
-decimals fcb   $98,$96,$80 Decimal 10,000,000
-         fcb   $0f,$42,$40 Decimal 1,000,000
-         fcb   $01,$86,$A0 Decimal 100,000
-         fcb   $00,$27,$10 Decinal 10,000
-         fcb   $00,$03,$E8 Decimal 1,000
-         fcb   $00,$00,$64 Decimal 100
-         fcb   $00,$00,$0A Decimal 10
-         fcb   $00,$00,$01 etc.
-
-commands fcb   $c         up arrow
-         fdb   nxtsec    
-         fcb   $a         down arrow
-         fdb   prevsec   
-         fcb   '$         shell
-         fdb   goshell   
-         fcb   $d         c/r clean up screen
-         fdb   redo      
-         fcb   's         LSN change
-         fdb   changLSN  
-         fcb   'z         zap
-         fdb   zap       
-         fcb   'w         write sector
-         fdb   writesec  
-         fcb   'o         open output file
-         fdb   openout   
-         fcb   'a         append to out file
-         fdb   append    
-         fcb   'c         close out file
-         fdb   closeout  
-         fcb   'e         edit sector
-         fdb   edit      
-         fcb   'q         quit
-         fdb   quit      
-         fcb   'v         verify
-         fdb   verify    
-         fcb   'l         'link' to module
-         fdb   linker    
-         fcb   'u         'unlink' module
-         fdb   unlinker  
-         fcb   'x         Expert mode
-         fdb   expert    
-         fcb   'h         Help
-         fdb   help      
-         fcb   '?        
-         fdb   help      
-         fcb   'f        
-         fdb   find      
-         fcb   'n        
-         fdb   next      
-         fcb   'd        
-         fdb   diddle    
-         fcb   'p        
-         fdb   push      
-         fcb   'r        
-         fdb   remove    
-         fcb   0          end of table
-
-* Intercept signals
-* modification by BRI
-*icept  rti
-icept    stb   SgnlCode,u save signal code
-         rti             
-* end modification
-
-
-start    equ   *          entry point
-
-         stx   inbuff     save pointer to param
-         leax  icept,pcr  intercept routine addr
-         os9   f$icpt     set up intercept
-         lbcs  error     
-
-* Initialize data area
-
-         clra            
-         ldb   #inbuff    # bytes to clear
-         leax  ,u         point X to start of data area
-init     sta   ,x+        zero memory
-         decb             dec counter
-         bne   init       loop if not done
-         stu   Usave      save U register
-         sts   Ssave      save Stack pointer
-
-setcurs  ldd   #curscode  cursor move code
-         std   cursor     save it for output
-         leas  -32,s      make room for terminal options
-         leax  ,s         point x to 32 byte buffer
-         clra             path = 0 (stdin)
-         clrb             (SS.OPT - option status)
-         os9   i$getstt   read in option table
-         lbcs  error     
-         lda   4,x        get echo status byte
-         sta   oldecho    save it
-         leas  32,s       reset stack
-
-* Open file
-
-         ldx   inbuff     pointer to file name
-         lda   #updat.    mode=update
-         os9   i$open     open file
-
-* modification by BRI
-* lbcs bye exit if error
-         bcc   OpenOK    
-         cmpb  #E$FNA     no permission?
-         lbne  bye        no, go exit with error
-         ldx   inbuff     pointer to file name
-         lda   #DIR.+UPDAT. mode=directory+update
-         os9   I$Open     open file
-         lbcs  bye        exit if error
-OpenOK   equ   *         
-* end modification
-
-         sta   inpath     save input path #
-         ldb   #ss.size  
-         os9   i$getstt   get file size
-         stx   FileLen    save
-         stu   FileLen+2 
-         ldu   Usave      restore U
-         clr   echobyte   no echo flag
-         lbsr  echo       set echo status
-         lbsr  clrscr     go clear screen
-
-* Main Read/Display loop
-
-readloop lbsr  seeksec    find sector & read it
-         sty   seclen     bytes read ($100 unless last LSN in file)
-         ldd   lsn        get lsn just read
-         std   oldlsn     & save it
-         lda   lsn+2      for retrieval
-         sta   oldlsn+2   after read errors
-         ldd   #0         Signal 'Next' command to start
-         std   findptr    search at start of LSN
-disploop lbsr  display    go display sector
-getcmd   lbsr  movecmd    move cursor
-         leax  command,pcr point to 'CMD: '
-         bsr   pstring    display line
-         leax  erasescr,pcr erase to end of screen
-         ldy   #era2chrs 
-         os9   i$write   
-         lbcs  error     
-         leax  i.o.buff,u point to buffer to read into
-         lbsr  read1      read a char from stdin
-         lda   ,x         get char read
-         cmpa  #'A        alpha char?
-         blo   srchtabl   no, leave it alone
-         ora   #$20       else UPPER -> lower case
-srchtabl leax  commands,pcr point to command table
-findcmd  cmpa  ,x+        got command?
-         beq   gotcmd     yes, bra
-         leax  2,x        else, skip address
-         tst   ,x         end of table?
-         bne   findcmd    no, loop back
-         bra   getcmd     key invalid, exit
-gotcmd   tst   xprtflag   expert mode?
-         beq   jmpcmd     no, bra
-         tst   wrtflag    need to write buffer out
-         beq   jmpcmd     no, bra
-         pshs  x,a       
-         lbsr  xprtwrt    write sector
-         puls  a,x       
-jmpcmd   ldd   ,x         get address offset
-         leax  top,pcr    start of module
-         jmp   d,x        jump to offset addr
-
-
-* Print string of characters having bit 7 of last char set
-
-pstring  leay  i.o.buff,u output buffer
-         clrb             counter
-xfer     incb            
-         lda   ,x+        get char
-         bmi   lstchar    bra if bit 7 set
-         sta   ,y+        put in buffer
-         bra   xfer       get more
-lstchar  anda  #$7f       clr bit 7
-         sta   ,y         put in buffer
-         leax  i.o.buff,u point to char string
-         clra            
-         tfr   d,y        y= length of string
-         bra   writeout  
-
-wrtlin1  ldy   #bufsiz    write 200 chars max
-writeout lda   #1         stdout
-wrtlin2  os9   i$writln   write line
-         lbcs  error     
-         rts             
-
-readlin3 ldy   #3         # chars to read
-readlin  clra             stdin
-         os9   i$readln   read in Y-1 chars + CR
-         lbcs  error     
-         rts             
-
-movecmd  ldd   #cmdpos   
-movecurs leax  cursor,u   point to cursor move code
-         std   2,x        save row/col
-         ldy   #4         4 chars
-         bra   writeout  
-
-* Set display to reverse video
-
-revdisp  leax  revvid,pcr point to code
-         ldy   #revchrs   # chars
-         bra   writeout   write to stdout
-
-* Set display to normal video
-
-normdisp leax  normvid,pcr point to code
-         ldy   #normchrs  # chars
-         bra   writeout   write to stdout
-
-
-clrline  leax  eraselin,pcr point to erase line code
-         ldy   #eraschrs  # chars
-         bra   wrtlin2    go erase rest of line & return
-
-clrscr   leax  cls,pcr    point to clear screen code
-         ldy   #clschrs   #chars
-         bra   writeout   clear screen & return
-
-seeksec  bsr   lsnseek    seek to sector
-         leax  inbuff,u   point to buffer
-         stx   buffptr    save pointer
-         tst   infile     module linked?
-         beq   read256    no, bra
-         ldd   lmodlen    linked mod length
-         suba  lsn+2      >$100 bytes left?
-         bne   read256    yes, bra
-         tfr   d,y        no, set up for smaller read
-         bra   readsome  
-read256  ldy   #$100      read 256 bytes
-readsome lda   inpath     path #
-read     os9   i$read     read them in
-         lbcs  error     
-         rts             
-
-******************************
-* changed to ignore errors 01/09/90 (RAK)
-*
-read1                    
-         clra             stdin
-         ldy   #1         get 1 byte
-         os9   I$Read     get 1 byte
-         rts              ignore any errors
-* bra read
-****************************** END of modification
-
-lsnseek  tst   infile     module linked?
-         bne   offchk     yes, bra
-         ldx   lsn        x=lsn MS 16 bits
-         lda   lsn+2      get 3rd byte of lsn
-         clrb            
-lsnseek1 tfr   d,u        u=LS 16 bits
-         lda   inpath     get input path #
-         os9   i$seek     seek lsn
-         lbcs  error     
-         ldu   usave      restore U
-lsnrts   rts             
-
-offchk   ldd   lmodlen    linked mod length
-         subd  #1         now A=LSN of last sector
-         cmpa  LSN+2      trying to read past last sector?
-         bhs   offseek    no, bra
-         ldb   #e$eof     yes, set EOF error
-         lbra  error     
-* If module is 'linked' must add offset to functional LSN ->true seek count
-offseek  ldd   offset    
-         adda  lsn+2      offset + 'LSN'
-         ldx   #0        
-         bra   lsnseek1   seek to 'LSN'
-
-display  ldd   #$2020    
-         lbsr  movecurs  
-         leax  lsntitle,pcr point to "lsn..."
-         lbsr  pstring   
-         bsr   clrline    clear rest of line
-         bsr   convert3   convert lsn to ascii/dec
-         leax  i.o.buff,u
-         lbsr  wrtlin1   
-
-         tst   infile     is a module 'linked'?
-         beq   nolink     no, bra
-         lbsr  prntmod    yes, display name
-
-nolink   tst   outpath    is an output file open?
-         beq   noout      no, bra
-         lbsr  prntout    yes, print name
-
-noout    ldd   #hedrpos   get header row/col
-         lbsr  movecurs   move cursor
-         leax  revvid,pcr point to reverse video code
-         ldy   #revchrs   # chars
-         lbsr  wrtlin2   
-         leax  header,pcr point to header
-         lbsr  wrtlin1    display it
-         leax  normvid,pcr point to normal vid code
-         ldy   #normchrs  # chars
-         lbsr  wrtlin2    write code out
-disp     lbsr  dsplylin  
-         lda   rownum     get row #
-         adda  #$10       next row
-         sta   rownum     save it
-         bne   disp       do 16 rows
-         leax  inbuff,u  
-         stx   buffptr    reset buffer pointer
-         tst   xprtflag   Expert mode?
-         beq   lsnrts     no, return
-         ldd   #xprtpos  
-         lbsr  movecurs  
-         leax  xprtmess,pcr
-         lbra  pstring    display 'EXPERT' & return
-
-* Convert 3 HEX bytes to ASCII
-
-convert3 ldd   lsn        get 2 MSB's of LSN
-         com   zeroflag   suppresw leading zeroes
-         leay  i.o.buff,u point to output buffer
-         bsr   convert1   convert byte in A to ascii
-         tfr   b,a       
-         bsr   convert1   and convert 2nd byte
-         clr   zeroflag   stop suppressing leading 0's
-         lda   lsn+2      get LSB of LSN
-         bsr   convert1   and convert it
-         ldd   #$2020     2 space
-         std   ,y++       put in out buffer
-
-*   Output LSN as decimal number
-
-         ldd   #$0008     8 dec digits max, 0=counter
-         pshs  d          save them
-         com   zeroflag   suppress leading zeroes
-         leax  decimals,pcr point to conversion table
-initsub1 clr   ,s         set counter = 0
-subdec1  ldd   lsn+1      get LSB's of LSN
-         subd  1,x        subtract LSB's of table entry
-         pshs  cc         save 'carry'
-         std   lsn+1      save result
-         lda   lsn        get MSB
-         clrb             flag for enough subtractions
-         suba  ,x         subtract MSB of LSN
-         bcc   LSBborow   if no 'borrow', see if LSB sub needed borrow
-         incb             else, enough subs done
-LSBborow puls  cc         restore LSB 'borrow' flag
-         bcc   savemsb    save byte if borrow not needed
-         suba  #1         else do borrow, setting flags
-savemsb  sta   lsn        save MSB
-         bcc   chekenuf   bra if no borrow needed by last dec
-         incb             else set flag ->enuf subs done
-chekenuf tstb             enuf subs done?
-         bne   enufsub1   Yes, bra
-         inc   ,s         else, inc decimal counter
-         bra   subdec1    and do more subtractions
-enufsub1 ldd   lsn+1      get value
-         addd  1,x        make it positive again
-         std   lsn+1      and save
-         lda   lsn        get MSB
-         bcc   addmsb     'Carry' bit still valid from 'addd 1,x'
-         inca             do carry from LSB's
-addmsb   adda  ,x         make rest of remainder positive
-         sta   lsn        and save it for next round of sub
-         leax  3,x        point X to next table entry
-         bsr   decascii   go convert decimal counter to ascii
-         dec   1,s        dec counter (8 digits)
-         beq   getCR      Yes, exit
-         lda   1,s        down to last 2 digits?
-         cmpa  #2        
-         bne   initsub1   no, loop back
-         clr   zeroflag   else stop suppressing leading 0's
-         bra   initsub1  
-
-getCR    lda   #$d        <CR>
-         sta   ,y         put in out string
-         ldd   oldlsn+1   restore LSN
-         std   lsn+1     
-         lda   oldlsn    
-         sta   lsn       
-         puls  d,pc      
-
-* Convert HEX byte in A to ASCII and put in buffer (Y)
-
-convert1 pshs  a          save byte
-         lsra             shift msn to lsnibble
-         lsra            
-         lsra            
-         lsra            
-         bsr   objasc    
-         puls  a          get byte back
-         anda  #$0f       mask off msb
-         bsr   objasc     convert if to ascii
-         rts             
-objasc   cmpa  #9         digit?
-         ble   asciify    yes, make it ascii
-         adda  #7        
-asciify  adda  #$30       makes it ascii
-         sta   ,y+        and put it in buffer
-         tst   zeroflag   suppressing leading zeroes?
-         beq   convdone   no, exit
-         cmpa  #'0        was it a zero?
-         beq   suppres0   Yes, go 'erase' it
-         clr   zeroflag   No, so stop suppressing 0's
-convdone rts             
-suppres0 leay  -1,y       reset pointer back over zero
-         rts             
-
-* Convert object decimal # on stack to ASCII & put in buffer (Y)
-
-decascii pshs  a          save this
-         lda   3,s        get decimal counter
-         bsr   asciify    make it ascii
-         puls  a,pc       get byte back & return
-
-
-dsplylin leay  i.o.buff,u point to output buffer
-         leax  revvid,pcr
-         lbsr  transfer   put in reverse video code
-         lda   seclen+1   LSB of # bytes read
-         beq   notlast    skip ahead if 0 (seclen=$100)
-         anda  #$f0       mask off LSB
-         cmpa  rownum     current display row = last?
-         bne   notlast    no, go on
-         lda   #$ff      
-         sta   lastflag   signal last line
-notlast  lda   rownum     get row number
-         bsr   convert1   convert it to hex byte
-         lda   #':       
-         sta   ,y+       
-         leax  normvid,pcr point to code
-         bsr   transfer   move code to buffer
-         ldd   #$2020     spaces
-         std   ,y++      
-         ldx   buffptr    get buffer pointer
-         ldb   #$10       16 bytes
-         tst   lastflag   last line?
-         beq   cnvrtbyt   no, bra
-         ldb   seclen+1   bytes read
-         andb  #$0f       now B=bytes for lst line
-         beq   noline     bra if no bytes left
-         pshs  b          save this
-cnvrtbyt lda   ,x+        get byte from buffer
-         bsr   convert1   convert it to hex
-         lda   #$20       space
-         sta   ,y+        put in output buffer
-         decb             done?
-         bne   cnvrtbyt   No, do more
-         tst   lastflag   lst line?
-         beq   addspc2    no, bra
-         ldd   #$0310     B=max bytes on line
-         subb  ,s         b=# bytes to null out
-         mul              3 spaces per byte
-         lda   #$20       space
-addspc1  sta   ,y+        put in buffer
-         decb             done?
-         bne   addspc1   
-addspc2  ldb   #$20       space
-         std   ,y++      
-         sta   ,y+        output spaces
-         ldx   buffptr    get buff pointer again
-         asrb             b=$10 (16 bytes)
-         tst   lastflag   lst line?
-         beq   ascichar   no, bra
-         ldb   ,s         yes, get # bytes from prior calc
-ascichar lda   ,x+        get byte
-         anda  #$7f       clear bit 7
-         cmpa  #$20       <32?
-         bhs   printabl   yes, print as is
-notascii lda   #'.        Non-ascii char
-printabl sta   ,y+        put in buff
-         decb             done?
-         bne   ascichar  
-         stx   buffptr    save new buffer pointer
-         tst   lastflag   last line?
-         beq   addCR      no, bra
-         ldb   #$10       max bytes per line
-         subb  ,s+        b=bytes to null out
-         lda   #$20       space
-addspc3  sta   ,y+        put in buffer
-         decb            
-         bne   addspc3   
-         lda   #$f0       last row num
-         sta   rownum     -> displays no more rows
-         bsr   addCR      display line
-resetlst clr   lastflag   reset flag
-         leax  erasescr,pcr point to erase to end of screen code
-         ldy   #era2chrs  length of string
-         lbra  writeout   erase end of screen & return
-addCR    lda   #$d        <CR>
-         sta   ,y        
-         leax  i.o.buff,u
-         lbra  wrtlin1    go display this line & return
-
-transfer lda   ,x+        get byte
-         beq   trandone   exit if done
-         sta   ,y+        move it
-         bra   transfer   do more
-trandone rts              return
-
-noline   lda   #$f0      
-         sta   rownum     signal last row
-         bra   resetlst   go erase rest of screen
-
-
-* Point to next LSN in file
-
-nxtsec   ldd   lsn+1      get 2 lower bytes of lsn
-         addd  #1         next lsn
-         std   lsn+1      save it
-         bne   readsec    d<>0 => carry not needed
-         inc   lsn        else add carry to MSB of LSN
-readsec  lbra  readloop   go read next sector
-
-* Point to previous LSN unless at LSN 0 now
-
-prevsec  ldd   lsn+1      get lsn
-         bne   notfirst   <>0 => not LSN 0
-         tst   lsn        LSN 0?
-         lbeq  getcmd     yes, exit
-notfirst subd  #1         else dec LSN
-         std   lsn+1      save it
-         cmpd  #$ffff     borrow needed if LSN was $xx0000
-         bne   readsec    if not, go read
-         dec   lsn        do 'borrow'
-         bra   readsec    go read previous sector
-
-
-* Change LSN sub
-
-changLSN lbsr  movecmd   
-         leax  sect,pcr   display message
-         lbsr  pstring   
-         ldy   #7         max # chars to read
-         bsr   MakeHex    read & convert them
-         bcs   BadLSN    
-         ldd   HexBuff+2  get new LSN from buffer
-         std   lsn+1     
-         lda   HexBuff+1 
-         sta   lsn       
-         lbra  readloop   go read/display new LSN
-
-BadLSN   lbsr  beep      
-         bra   changLSN  
-
-MakeHex  pshs  y          save # bytes to read
-         clr   echobyte  
-         com   echobyte   echo on
-         lbsr  echo       set echo
-         puls  y         
-         leax  i.o.buff,u point to buffer
-         lbsr  readlin    read chars from keyboard
-         clr   echobyte  
-         lbsr  echo       echo off
-         leay  -1,y       strip off CR
-         beq   ExitHex    exit if no chars input
-         tfr   y,d        # of bytes read -> B
-CheckHex lda   ,x+        get char
-         bsr   hexdigit   see if it's valid char
-         bcs   invalid    if not, beep & redo
-         decb             done?
-         bne   CheckHex  
-         sty   HexBuff    save counter for now
-getascii lda   #'0        leading zero, if needed
-         ldb   ,-x        get a char
-         leay  -1,y       last one?
-         beq   cnvrt2     yes, bra
-         lda   ,-x        else, get next char in A
-         leay  -1,y       dec counter
-cnvrt2   bsr   asciihex   convert ascii chars in A/B to hex byte
-         pshs  b          save hex byte
-         cmpy  #0         all done?
-         bne   getascii   no, do more
-         ldb   HexBuff+1  else, get # ascii chars 1st read
-         incb             get ready for divide
-         lsrb             divide by 2 -># of HEX bytes
-         clra             leading 0
-         leax  HexBuff,u  point to storage
-         cmpb  #4         4 hex bytes on stack?
-         beq   hexstack   yes, no leading zeroes needed
-         sta   ,x+        else, put in leading 0
-         cmpb  #3         3 hex bytes on stack?
-         beq   hexstack   yes, no more 0's needed
-         sta   ,x+        else, put in 0
-         cmpb  #2         2 hex bytes?
-         beq   hexstack   yes, bra
-         sta   ,x+        else, put in another 0
-hexstack puls  a          get a hex byte off stack
-         sta   ,x+        and put in templsn
-         decb             done?
-         bne   hexstack   no, bra
-         clrb             clear carry bit
-         rts             
-
-invalid  lbsr  beep      
-coma     set   carry      bit
-rts                      
-
-ExitHex  leas  2,s        strip off return address
-         lbra  readloop   exit
-
-hexdigit cmpa  #'0        char <0?
-         blo   nothex     yes, bra
-         cmpa  #'9        char <9 (digit)?
-         bls   ishex      yes, bra
-         anda  #$5f       lower->UPPER case
-         cmpa  #'F        char >F?
-         bhi   nothex     yes, bra
-         cmpa  #'A        char <A?
-         blo   nothex     yes, bra
-ishex    clra             clear carry bit if char is hex
-         rts             
-nothex   coma             set carry bit if not hex char
-         rts             
-
-asciihex bsr   hexnib     convert B to LSNibble
-         pshs  b          save LSNib
-         tfr   a,b        get ready for MSN
-         bsr   hexnib     convert it
-         aslb             shift LSNib to MSN
-         aslb            
-         aslb            
-         aslb            
-         orb   ,s+        add in LSNib from stack
-         rts             
-
-hexnib   subb  #$30       convert asci # to hex
-         cmpb  #$9        <=9?
-         bls   nowhex     yes, bra
-         andb  #$5f       lower->UPPER case
-         subb  #7         else sub 7 or $A$F
-nowhex   rts             
-
-* Zap sector sub
-
-zap                      
-         clr   echobyte  
-         com   echobyte   echo on
-         lbsr  echo       set echo
-         lbsr  movecmd   
-         lbsr  clrline    clear line
-         leax  zaprompt,pcr point to 'Zap '
-         lbsr  pstring    print it
-         tst   hexascii   ascii mode?
-         bne   zapascii   yes, bra
-         leax  byte,pcr   point to 'byte: '
-         lbsr  pstring    print it
-         ldy   #3         2 chars + CR
-         bsr   zapread    read in chars
-         bsr   hexobjct   convert to object
-         bcs   exitzap    exit if invalid chars
-zapstart leax  inbuff,u   point to data buffer
-         stx   buffptr    new pointer
-         clrb             counter
-zapbuff  sta   ,x+        do zap
-         decb             done?
-         bne   zapbuff    no, loop
-         clr   echobyte   echo off
-         lbsr  echo       set echo
-         inc   wrtflag    signal for auto-write if expert mode
-         lbra  disploop   display zapped buffer
-
-zapread  clra             stdin
-         leax  i.o.buff,u point to buffer
-         os9   i$readln   read in line
-         bcs   cheksig1   check for break key if error
-         rts              else return
-cheksig1 cmpb  #2         break key signal?
-         lbne  error      no, process error
-         com   hexascii   yes, toggle hex/ascii flag
-         leas  2,s        pull return addr off stack
-         bra   zap        redo routine
-
-exitzap  clr   echobyte   echo off
-         lbsr  echo      
-         lbra  getcmd     get new command
-
-zapascii leax  char,pcr   point to 'char: '
-         lbsr  pstring    print it
-         ldy   #2         1 char + CR
-         bsr   zapread    read in char
-         lda   ,x         get char
-         cmpa  #$20       valid ascii char?
-         blo   exitzap    no, exit
-         bra   zapstart   go do zap
-
-* Convert 2 hex chars in buffer (X) to object byte
-
-hexobjct bsr   cnvrtnib   convert 1st nibble
-         bcs   badrts     exit if bad char
-         tfr   a,b        save 1st byte (MS nibble)
-         bsr   cnvrtnib   convert 2nd nibble
-         bcs   badrts     exit if bad char
-         aslb             shift LS nib to MS nib
-         aslb            
-         aslb            
-         aslb            
-         pshs  b          save
-         ora   ,s+        add MS nib to LS nib
-         bra   goodhex    exit
-
-cnvrtnib bsr   isithex    is it valid char?
-         bcs   badrts     no, exit
-         bra   cnvrthex   yes, convert it to object
-
-isithex  lda   ,x+       
-         cmpa  #'0        <0?
-         blo   badhex     yes, bra
-         cmpa  #'9        <9?
-         bls   goodhex    yes, bra
-         anda  #$5F       lower->UPPER case
-         cmpa  #'A        <A?
-         blo   badhex     yes, bra
-         cmpa  #'F        >F?
-         bhi   badhex     yes, bra
-goodhex  andcc  #$FE       clear carry bit if valid
-         rts             
-badhex   orcc  #1         set carry bit if invalid
-badrts   rts             
-
-cnvrthex suba  #$30       convert char to object
-         cmpa  #9         decimal digit?
-         bls   nowobjct   yes, done
-         suba  #7         else, A-F
-nowobjct bra   goodhex    clear carry & return
-
-* Write current sector back to disk
-
-writesec tst   xprtflag   expert mode on?
-         lbne  getcmd     yes, exit
-         bsr   rusure     Sure?
-         lbne  getcmd     no, exit
-         lbsr  movecmd   
-         lbsr  clrline    clear line
-         lbsr  movecmd   
-         leax  writing,pcr point to message
-         lbsr  pstring    display it
-xprtwrt  lbsr  lsnseek    seek to start of sector
-         lda   inpath     get path #
-         lbsr  write100   write out sector
-         tst   xprtflag   doing auto-write
-         beq   opendone   no, go to getcmd
-         clr   wrtflag    signal no more auto-write
-         rts              else & return to caller
-
-* Ask 'Are you sure?' and get response
-
-rusure   lbsr  movecmd   
-rusure10                 
-         clr   echobyte  
-         com   echobyte   echo on
-         lbsr  echo       set echo
-         leax  sure,pcr   point to 'Sure? '
-         lbsr  pstring    print it
-         lbsr  clrline    blank rest of line
-         leax  i.o.buff,u input buffer
-         lbsr  read1      read answer
-         clr   echobyte   echo off
-         lbsr  echo       set echo
-         lda   ,x         get response
-         anda  #$5f       lower->UPPER case
-         cmpa  #'Y        set flags
-         rts             
-
-* Open output file sub
-
-openout  tst   outpath    is a file open already?
-         bne   opendone   yes, exit
-         clr   echobyte  
-         com   echobyte   echo on
-         lbsr  echo       set echo
-         lbsr  movecmd    position cursor
-         leax  out$,pcr   point to prompt
-         lbsr  pstring    print it
-         lbsr  clrline    clear rest of line
-         leax  i.o.buff,u point to input buffer
-         ldy   #30        29 chars + CR
-         lbsr  readlin    read in a line (pathlist)
-         clr   echobyte   echo off
-         lbsr  echo       set echo
-
-***********************************************
-* Return to command prompt if no filename given
-* Added 01/09/90 (RAK)
-*
-         cmpy  #1         <enter> only pressed?
-         beq   opendone   yes, abort
-*
-********************************** END modification
-
-         pshs  x          save pointer to pathlist
-         leay  outfile,u  point to storage area
-savname  lda   ,x+        get a char from name
-         sta   ,y+        save it
-         cmpa  #$20       space or CR?
-         bhi   savname   
-         lda   #$0d       CR
-         sta   -1,y       delimit filename
-         puls  x          restore pointer to name
-         lda   #write.    Access mode = Write
-         ldb   #%00001011 attr ----R-wr
-         os9   I$Create   create & open file
-         bcs   error      exit if error
-         sta   outpath    save output path #
-         bsr   prntout   
-opendone lbra  getcmd     exit
-
-* move cursor & print 'Output pathlist'
-
-prntout  ldd   #outpos   
-         lbsr  movecurs  
-         leax  out$,pcr   point to 'OUTFILE:'
-         lbsr  pstring    print it
-         leax  outfile,u  point to name
-         lbra  wrtlin1    write name & return
-
-
-* Write out a sector
-
-write100 leax  inbuff,u   point to data
-         ldy   seclen     # chars in sector
-         os9   i$write    write sector
-         bcs   error     
-         rts             
-
-* Close output file sub
-
-closeout lda   outpath    get output path #
-         beq   opendone   exit if none open
-         os9   i$close    close it
-         bcs   error     
-         ldd   #outpos   
-         lbsr  movecurs  
-         lbsr  clrline   
-         clr   outpath    flag no output file open
-closed   bra   opendone   exit
-
-* Append sector to output file sub
-
-append   lda   outpath    get output path #
-         beq   closed     exit if no file open
-         bsr   write100   write sector out
-         lbra  nxtsec     read in next sector & display it
-
-
-* ERROR handling routine
-
-error    pshs  b          save error code
-
-* modification by BRI
-         clr   <SgnlCode  clear intercept routine signal code
-* end modification
-
-         ldd   oldlsn     MSBs of last LSN read
-         std   lsn        make it current LSN
-         lda   oldlsn+2   LSB of last LSN
-         sta   lsn+2      move it
-         puls  b          error code
-         lds   Ssave      restore Stack pointer
-         cmpb  #2         break?
-         beq   endexit    yes, don't worry
-         cmpb  #3         shift break?
-         bne   eofchk     no check if EOF
-         clr   wrtflag    cancel auto-write
-         bra   endexit   
-eofchk   cmpb  #e$eof     EOF error?
-         bne   true.err   exit
-endexit  lbra  exitzap   
-true.err cmpb  #e$bmid    bad module ID error?
-         bne   othererr   no, bra
-* If module is linked, BMID error must come from trying to Verify modules
-* use standard error reporting routine. Otherwise BMID error occurs when
-* trying to link (or list names of) modules; need to clear screen after these.
-         tst   infile     module linked?
-         bne   othererr   yes, use std error routine
-         bsr   prterr     else display error #
-         leax  cls,pcr   
-         ldy   #clschrs  
-         lbsr  writeout   clear screen
-         lbra  disploop   & redisplay sector
-othererr pshs  b          save error code
-         lbsr  movecmd    position cursor
-         lbsr  clrline   
-         puls  b          pull error code
-         bsr   prterr     print error # on cmd line
-         lbra  getcmd    
-
-* Display error #
-
-prterr   lda   #2         error out path
-         os9   f$perr     print error #
-         clr   echobyte   echo off
-         lbsr  echo      
-
-         leax  i.o.buff,u point to input buffer
-         lbra  read1      wait for keypress & return
-
-* Exit with usage prompt if no pathname called
-
-badcall                  
-         lda   #2         errout
-         leax  hints,pcr 
-         ldy   #bufsiz   
-         lbsr  wrtlin2   
-         ldb   #e$bpnam   set bad path error
-         bra   bye       
-
-* Exit to OS9
-
-quit     lda   oldecho    get original echo status
-         sta   echobyte   reset echo
-         lbsr  echo       to original status
-         clrb             no error
-bye      os9   f$exit     exit program
-
-* Edit sector sub
-
-edit     lbsr  movecmd   
-         leax  edprompt,pcr point to prompt
-         lbsr  pstring   
-topleft  leax  inbuff,u   point to data buffer
-         stx   edbufptr   save pointer
-         lda   #1         init position counter
-         sta   edpos     
-         lda   #$23       top row code
-         sta   rownum     save
-         lda   #$25       1st hex dump col #
-         sta   hexcol     save
-         lda   #$58       1st ascii dump col
-         sta   asciicol  
-
-revbyte  lbsr  revdisp    set reverse video
-         bsr   eddisply   display byte
-
-         ifne  xyflipr   
-edinput  lda   rownum     A=row
-         ldb   hexcol     B=col
-         else            
-
-edinput  lda   hexcol     A=col
-         ldb   rownum     B=row
-         endc            
-
-         tst   hexascii   Hex mode?
-         beq   hexin      yes, bra
-
-         ifne  xyflipr   
-         ldb   asciicol   else B= ASCII col
-         else            
-
-         lda   asciicol   A= ASCII col
-         endc            
-
-hexin    lbsr  movecurs   position cursor
-         leax  i.o.buff,u
-         tst   hexascii   ascii mode?
-         lbne  inputchr   yes, bra
-
-* modification by BRI
-* bra inputbyt
-         lbra  inputbyt  
-* end modification
-
-* Sub to do Hex and ASCII dump for byte to be editted
-
-         ifne  xyflipr   
-eddisply lda   rownum     A=row
-         ldb   hexcol     b= hex column
-         else            
-
-eddisply lda   hexcol     A=Hex column
-         ldb   rownum     B=row
-         endc            
-
-         lbsr  movecurs   position cursor
-         leay  i.o.buff,u point to output buff
-         lda   [edbufptr,u] get byte
-         pshs  a          save it
-         lbsr  convert1   convert to hex, put in buff
-         leax  -2,y       reset pointer to hex chars
-         ldy   #2         2chars
-         lda   #1         stdout
-         lbsr  wrtlin2    display chars
-
-         ifne  xyflipr   
-         lda   rownum     same row
-         ldb   asciicol   get ascii dump col #
-         else            
-
-         lda   asciicol   ascii dump col #
-         ldb   rownum     same row
-         endc            
-
-         lbsr  movecurs   position cursor
-         puls  a          get byte again
-         anda  #$7F       clear bit 7 for ascii dump
-         cmpa  #$20       printable?
-
-         bhs   prntabl1   yes, bra
-         lda   #'.        else print as '.'
-prntabl1 leax  i.o.buff,u ouput buffer
-         sta   ,x         put char in buff
-         ldy   #1         1 char
-         lbra  writeout   display char & return
-
-* Read in a character; check for BREAK key
-
-* modification by BRI
-* toggles cursor on/off if enabled, checks for character
-*readit ldy #1 1 char
-readit   pshs  b,x        save previous char, input buffer pointer
-CFlsh01  clra             std. input
-         ldb   #SS.Ready 
-         os9   I$GetStt  
-         bcc   CFExit     character ready, go get it
-         cmpb  #E$NotRdy  no character ready?
-         bne   CrsrErr    no, go check other errors
-         ldx   #$0001     give up remainder of tick
-         os9   F$Sleep   
-         bcs   CrsrErr    go clean up & check error
-         dec   <CrsrCnt   decrement cursor toggle counter
-         lda   <CrsrCnt   get new counter value
-         eora  <CrsrFlg   cursor toggle required?
-         anda  #%01000000 clear all but active counter bit
-         beq   SigChk     no, go check for signal
-         com   <CrsrFlg   toggle cursor on or off?
-         beq   CrsrOff    go toggle cursor off
-         bsr   CrsrOn     go toggle cursor on
-         bra   SigChk     go check intercept routine signal code
-CrsrOff  leax  CursrOff,pc point [X] to cursor off string
-         ldy   #CursOff   number of bytes in string
-         bsr   WritCrsr   go write cursor off string
-SigChk   ldb   <SgnlCode  get intercept routine signal code
-         cmpb  #S$Abort   keyboard abort signal? (error #2)
-         beq   CrsrErr    yes, go report it
-         cmpb  #S$Intrpt  keyboard interrupt signal? (error #3)
-         bne   CFlsh01    no, go check for data again
-CrsrErr  stb   ,s         save error code for sigchek2
-         bsr   CrsrOn     go make sure cursor is on
-         puls  b,x        recover error code, input buffer pointer
-         bra   cheksig2  
-CrsrOn   leax  CursrOn,pc point [X] to cursor on string
-         ldy   #CursOn    number of bytes in string
-WritCrsr lda   #1         std. output
-         os9   I$Write   
-         clrb             ignore any/all errors
-         rts             
-CFExit   bsr   CrsrOn     go make sure cursor is on
-         puls  b,x        recover previous char, input buffer pointer
-         ldy   #1         1 char
-* end modification
-
-         clra             stdin
-         os9   i$read     read in char
-         bcs   cheksig2   chek for BREAK if error
-         rts              else return
-
+         bcs   cheksig2
+         rts  
+ 
 * modification by BRI
 * clears old signal, traps BREAK,
 * cleans up before reporting other errors
@@ -3573,1032 +1409,1072 @@
 * com hexascii yes, toggle hex/ascii flag
 * leas 2,s pull return addr off stack
 * bra edinput loop back
-cheksig2 leas  2,s        dump return address
-         clr   <SgnlCode  clear old signal
-         cmpb  #2         keyboard abort? (BREAK)
-         beq   TrapSgnl   yes, trap it & toggle hex/ascii
-         pshs  b          save error code
-         lbsr  reset      reset reversed chars
-         clr   <rownum    reset row #
-         puls  b          recover error code
-         lbra  error      go process error
-TrapSgnl com   <hexascii  yes, toggle hex/ascii flag
-         lbra  edinput    loop back
-* end modification
+cheksig2 leas  $02,s
+         clr   <SgnlCode
+         cmpb  #2              break key
+         beq   TrapSgnl
+         pshs  b
+         lbsr  reset
+         clr   <rownum
+         puls  b
+         lbra  error
+TrapSgnl com   <hexascii
+         lbra  edinput
+* end of mod
 
-
-* Input a hex byte
-
-inputbyt bsr   readit     read in a char
-         bsr   digit      is it valid hex digit?
-         bcs   edcurs     no, see if it's arrow key
-         lbsr  writeout   yes, display char
-         ldb   ,x         save char
-
+* input a hex byte
+inputbyt bsr   readit
+         bsr   digit
+         bcs   edcurs
+         lbsr  writeout
+         ldb   ,x
 * modification by BRI
 * bsr readit read another char
-         lbsr  readit     read another char
+         lbsr  readit
 * end modification
-
-         bsr   digit      is it valid?
-         bcs   edcurs     no, check for arrows
-         exg   a,b        A= 1st char
-         lbsr  asciihex   change 2 ascii chars to hex byte
-         stb   [edbufptr,u] put new byte in buffer
-         lda   #1        
-         sta   wrtflag    signal auto-write
-         bra   movert     move to next byte
+         bsr   digit
+         bcs   edcurs
+         exg   a,b
+         lbsr  asciihex
+         stb   [<edbufptr,u]
+         lda   #1
+         sta   <wrtflag
+         bra   movert
 
 * Check to see if char is valid hex digit.
 * Exit with Carry set if not valid.
-
-digit    lda   ,x         get char from buffer
-         cmpa  #'0        < 0?
-         blo   notdig     YES, set carry
-         cmpa  #'9        Between 0 & 9?
-         bls   gotnib     Yes, return
-         anda  #$5F       Lowercase -> Upper
-         cmpa  #'F        > F?
-         bhi   notdig     Yes, set carry
-         cmpa  #'A        Between A & F?
-         blo   notdig     No, set carry
-gotnib   andcc  #$fe       clear carry bit
-         rts             
-notdig   orcc  #1         set carry bit
-         rts             
+digit    lda   ,x
+         cmpa  #'0
+         bcs   notdig
+         cmpa  #'9
+         bls   gotdig
+         anda  #$5F        lower to upper
+         cmpa  #'F
+         bhi   notdig
+         cmpa  #'A
+         bcs   notdig
+gotdig   andcc #$FE
+         rts   
+notdig   orcc  #1
+         rts   
 
 * Input single ASCII character
 
 * modification by BRI
 *inputchr bsr readit read char
-inputchr lbsr  readit     read char
-* end modification
-
-         lda   ,x         get char
-         cmpa  #$20       valid ascii char?
-         blo   edcurs     no, check for arrows
-         sta   [edbufptr,u] yes, put in buffer
-         lda   #1        
-         sta   wrtflag    signal auto-write
-         bra   movert     go do next byte
-
-* Check if char is arrow (for cursor moves)
+inputchr lbsr  readit
+* end of mod
+         lda   ,x
+         cmpa  #$20
+         bcs   edcurs
+         sta   [<edbufptr,u]
+         lda   #1
+         sta   <wrtflag
+         bra   movert
 
-edcurs   cmpa  #9         Right arrow?
-         beq   movert    
-         cmpa  #8         Left arrow?
-         beq   movelt    
-         cmpa  #$c        Up arrow?
-         lbeq  moveup    
-         cmpa  #$a        Down arrow?
-         lbeq  movedn    
-         cmpa  #$d        CR?
-         lbne  edinput    no, get another key
-
-* Exit edit routine
-         lbsr  reset      reset reversed chars
-         clr   rownum     reset row #
-         lbra  getcmd     return to command level
+* check if char is an arrow
+edcurs   cmpa  #9              right arrow
+         beq   movert
+         cmpa  #8              left arrow
+         beq   movelt
+         cmpa  #$0C            up arrow
+         lbeq  moveup
+         cmpa  #$0A            down arrow
+         lbeq  movedn
+         cmpa  #$0D            CR
+         lbne  edinput
+* exit edit routine
+         lbsr  reset
+         ldd   #$4934
+         lbsr  movecurs
+         lbsr  clrline
+         clr   <rownum
+         lbra  getcmd
 
-* Move to next byte on screen
-
-movert   lbsr  reset      reset display byte
-         tst   seclen+1   editting partial (last) sec?
-         beq   rtptr      no, bra
-         lda   edpos      position # in sector
-         cmpa  seclen+1   last byte?
-         lbeq  topleft    yes, bra
-rtptr    ldd   edbufptr   get pointer
-         addd  #1         set to next byte
-         std   edbufptr   save
-         inc   edpos     
-
-displyrt inc   asciicol   inc display counter
-         lda   asciicol   get counter
-         cmpa  #$68       at end of screen row?
-         bhs   rowdn      yes, move down a row
-         lda   hexcol     no, inc hex display counter
-         adda  #3         3 screen columns per byte
-         sta   hexcol     save
-         lbra  revbyte    go do next byte
-rowdn    inc   rownum     next row
-         lda   rownum     get row #
-         cmpa  #$32       past bottom row?
-         lbhi  topleft    yes, go to top row
-         lda   #$25       1st hex column #
-         sta   hexcol     reset counter
-         lda   #$58       1st ascii col #
-         sta   asciicol   reset counter
-         lbra  revbyte    go do display
+* move to next screen byte
+movert   lbsr  reset
+         tst   <seclen+1
+         beq   rtptr
+         lda   <edpos
+         cmpa  <seclen+1
+         lbeq  topleft
+rtptr    ldd   <edbufptr
+         addd  #1
+         std   <edbufptr
+         inc   <edpos
+displyrt inc   <asciicol     
+         lda   <asciicol
+         cmpa  #$68          end of row
+         bcc   rowdn
+         lda   <hexcol
+         adda  #3            3 columns used per byte
+         sta   <hexcol
+         lbra  revbyte
+rowdn    inc   <rownum
+         lda   <rownum
+         cmpa  #$32
+         lbhi  topleft
+         lda   #$25
+         sta   <hexcol
+         lda   #$58
+         sta   <asciicol
+         lbra  revbyte
 
-* Move to previous byte on screen
+* move to previous byte
+movelt   bsr   reset
+         ldd   <edbufptr
+         subd  #1
+         std   <edbufptr
+         dec   <edpos
+         dec   <asciicol
+         lda   <asciicol
+         cmpa  #$58
+         bcs   rowup
+         lda   <hexcol
+         suba  #3
+         sta   <hexcol
+         lbra  revbyte
+rowup    dec   <rownum
+         lda   #$52
+         sta   <hexcol
+         lda   #$67
+         sta   <asciicol
+         lda   <rownum
+         cmpa  #$23
+         bcs   gobot
+         lbra  revbyte
+gobot    ldx   <edbufptr
+         ldb   <seclen+1
+         beq   botptr
+         stb   <edpos
+         clra  
+         leax  d,x
+         decb  
+         pshs  b
+         lsrb  
+         lsrb  
+         lsrb  
+         lsrb  
+         addb  #$23
+         stb   <rownum
+         lda   ,s+
+         anda  #$0F
+         pshs  a
+         adda  #$58
+         sta   <asciicol
+         puls  a
+         ldb   #3
+         mul   
+         addb  #$25
+         stb   <hexcol
+         bra   savebot
+botptr   lda   #$32         bottom row
+         sta   <rownum
+         leax  $100,x
+savebot  stx   <edbufptr
+         lbra  revbyte
 
-movelt   bsr   reset      reset displayed byte
-         ldd   edbufptr   get data pointer
-         subd  #1         dec it
-         std   edbufptr  
-         dec   edpos      & position counter
-         dec   asciicol   dec display counter
-         lda   asciicol   get col #
-         cmpa  #$58       past left end of row?
-         blo   rowup      yes, move up a row
-         lda   hexcol     get hex col #
-         suba  #3         move left 3 columns
-         sta   hexcol     save
-         lbra  revbyte   
-rowup    dec   rownum     move up a row
-         lda   #$52       col # of right end of hex dump
-         sta   hexcol     save
-         lda   #$67       col # of right end of ascii dump
-         sta   asciicol   save
-         lda   rownum     get row #
-         cmpa  #$23       past top row?
-         blo   gobot      yes, go to bottom row
-         lbra  revbyte    no, display next byte
-gobot    ldx   edbufptr   old pointer
-         ldb   seclen+1   partial (last) sec?
-         beq   botptr     no, bra
-         stb   edpos      new last position
-         clra            
-         leax  d,x        new pointer with partial sector
-         decb             offset to byte in buffer
-         pshs  b         
-* MSN of B is last row-1 with partial sector
-         lsrb            
-         lsrb            
-         lsrb            
-         lsrb             Now B is last row-1
-         addb  #$23      
-         stb   rownum    
-         lda   ,s+        offset
-         anda  #$0f       A=last col
-         pshs  a         
-         adda  #$58       left most ASCII column
-         sta   asciicol   new ASCII col
-         puls  a         
-         ldb   #3         3 columns per hex byte
-         mul             
-         addb  #$25       1st hex col
-         stb   hexcol    
-         bra   savebot   
-botptr   lda   #$32       bottom row #
-         sta   rownum     save
-         leax  $100,x     new pointer
-savebot  stx   edbufptr   save new pointer
-         lbra  revbyte    do next byte
-
-* Reset byte displayed in reverse video to normal video
-
-reset    lbsr  normdisp   set normal video
-         lbra  eddisply   go display byte
-
-* Move up a row on screen
+* reset from reverse video to normal
+reset    lbsr  normdisp
+         lbra  eddisply
 
-moveup   bsr   reset      reset reversed byte
-         ldb   seclen+1   partial sector?
-         beq   moveup1    no, bra
-         lda   rownum    
-         cmpa  #$23       at top row now?
-         beq   moveup2    yes, bra
-moveup1  ldd   edbufptr   get data pointer
-         subd  #$10       move back 16 bytes
-         std   edbufptr   save new pointer
-         ldb   edpos     
-         subb  #$10       dec position counter by $10
-         stb   edpos     
-         dec   rownum     move up a row
-         lda   rownum     get new row #
-         cmpa  #$23       above top row
-         bhs   updone     no, go display next byte
-         lda   #$32       set to bottom row
-         sta   rownum    
-         ldd   edbufptr   get data pointer
-         addd  #$100      point to new byte
-         std   edbufptr   and save
-updone   lbra  revbyte    display next byte
+* move up a row
+moveup   bsr   reset
+         ldb   <seclen+1
+         beq   moveup1
+         lda   <rownum
+         cmpa  #$23
+         beq   moveup2
+moveup1  ldd   <edbufptr
+         subd  #$10
+         std   <edbufptr
+         ldb   <edpos
+         subb  #$10
+         stb   <edpos
+         dec   <rownum
+         lda   <rownum
+         cmpa  #$23
+         bcc   updone
+         lda   #$32
+         sta   <rownum
+         ldd   <edbufptr
+         addd  #$100
+         std   <edbufptr
+updone   lbra  revbyte
 
-moveup2  andb  #$f0       MSN=row offset
-         lda   seclen+1   bytes read
-         anda  #$0f       last col in last row
-         cmpa  edpos      to left of current position?
-         bhs   moveup3    yes, bra
-         subb  #$10       else correct row offset
-moveup3  clra            
-         pshs  b,a       
-         ldd   edbufptr  
-         addd  ,s+        add offset
-         std   edbufptr  
-         ldb   edpos     
-         addb  ,s        
-         stb   edpos      new position
-         puls  b         
-         lsrb            
-         lsrb            
-         lsrb            
-         lsrb             row offset in LSNib
-         addb  #$23       calc new rownum
-         stb   rownum    
-         bra   updone    
-
-* Move down a row on screen
-
-movedn   bsr   reset      reset reversed byte
-         ldb   seclen+1   partial sector?
-         beq   movedn1   
-         subb  edpos     
-         cmpb  #$10      
-         blo   movedn2   
-movedn1  ldd   edbufptr   get data pointer
-         addd  #$10       point 16 bytes ahead
-         std   edbufptr   and save
-         lda   edpos     
-         adda  #$10      
-         sta   edpos     
-         inc   rownum     move down a row
-         lda   rownum     check to see if below
-         cmpa  #$32       bottom row?
-         lbls  revbyte    no, display next byte
-         ldd   edbufptr   get data pointer
-         subd  #$100      reset to new byte
-         std   edbufptr   save
-topptr   lda   #$23       yes, set for top row
-         sta   rownum     save
-         lbra  revbyte    display next byte
+moveup2  andb  #$F0
+         lda   <seclen+1
+         anda  #$0F
+         cmpa  <edpos
+         bcc   moveup3
+         subb  #$10
+moveup3  clra  
+         pshs  b,a
+         ldd   <edbufptr
+         addd  ,s+
+         std   <edbufptr
+         ldb   <edpos
+         addb  ,s
+         stb   <edpos
+         puls  b
+         lsrb  
+         lsrb  
+         lsrb  
+         lsrb  
+         addb  #$23
+         stb   <rownum
+         bra   updone
 
-movedn2  clra            
-         ldb   edpos     
-         decb            
-         andb  #$f0       B = offset to first row
-         pshs  b,a       
-         ldd   edbufptr  
-         subd  ,s+        reset pointer
-         std   edbufptr  
-         ldb   edpos     
-         subb  ,s+        reset position counter
-         stb   edpos     
-         bra   topptr    
-
-
-* Start new SHELL
-
-goshell  lda   oldecho    get original echo status
-         sta   echobyte   set up for change
-         bsr   echo       set echo
-         leax  shell$,pcr point to 'SHELL' text
-         ldy   #$10       # pages in new param area
-         leau  i.o.buff,u new param area
-         lda   #$0d       CR to
-         sta   ,u         init param area
-         ldd   #$0000     language/type
-         os9   f$fork     fork to new shell
-         lbcs  error     
-         os9   f$wait     wait for shell to die
-         ldu   usave      pull data pointer
-         leax  inbuff,u  
-         stx   buffptr    reset buffer pointer
-         clr   echobyte   echo off
-         bsr   echo       set echo
-redo     lbsr  clrscr     clear screen
-         lbra  disploop   redo display
-
-* Read in option section (32 bytes) of stdin path descriptor & turn echo on/off
+movedn   bsr   reset
+         ldb   <seclen+1
+         beq   movedn1
+         subb  <edpos
+         cmpb  #$10
+         bcs   movedn2
+movedn1  ldd   <edbufptr
+         addd  #$0010
+         std   <edbufptr
+         lda   <edpos
+         adda  #$10
+         sta   <edpos
+         inc   <rownum
+         lda   <rownum
+         cmpa  #$32
+         lbls  revbyte
+         ldd   <edbufptr
+         subd  #$100
+         std   <edbufptr
+topptr   lda   #$23
+         sta   <rownum
+         lbra  revbyte
+movedn2  clra  
+         ldb   <edpos
+         decb  
+         andb  #$F0
+         pshs  b,a
+         ldd   <edbufptr
+         subd  ,s+
+         std   <edbufptr
+         ldb   <edpos
+         subb  ,s+
+         stb   <edpos
+         bra   topptr
 
-echo     pshs  x          save
-         leas  -32,s      make room for data
-         leax  ,s         point to buffer
-         clra             path = 0
-         clrb             SS.OPT
-         os9   i$getstt   read in 32 bytes
-         lbcs  error     
-         lda   echobyte   new echo status byte
-         sta   4,x        set echo
-         clra             path =0
-         os9   i$setstt   set new status
-         lbcs  error     
-         leas  32,s       reset stack
-         puls  x,pc       pull x & return
-
-* Verify CRC on file, if it's a valid module.
+* start a temporary shell
+goshell  lbsr  clrscr
+         lda   <oldecho
+         sta   <echobyte
+         bsr   echo
+         leax  >shell$,pcr
+         ldy   #$10
+         leau  >i.o.buff,u
+         lda   #$0D
+         sta   ,u
+         ldd   #0
+         os9   F$Fork   
+         lbcs  error
+         os9   F$Wait   
+         ldu   <Usave
+         leax  >inbuff,u
+         stx   <buffptr
+         clr   <echobyte
+         bsr   echo
+cReturn  lbsr  clrscr
+         lbra  disploop
 
-verify   lbsr  movecmd    position cursor
-         leax  vrfymess,pcr display message
-         lbsr  pstring   
-         ldu   #$0000    
-         ldx   #$0000    
-         stx   fileln     init file length
-         lda   inpath     path #
-         os9   i$seek     rewind to LSN 0
-         lbcs  error     
-         ldu   Usave      restore U
-initCRC  ldd   #$FFFF     initialize CRC bytes
-         std   crc       
-         stb   crc+2     
-         leax  i.o.buff,u input buffer
-         ldy   #8         8 bytes to read
-         lda   inpath     path #
-         os9   i$read     read in 8 header bytes
-         lbcs  error      exit on error
-         cmpy  #8         all read in ok?
-         lbne  verr       no, error
-         ldd   ,x         get 1st 2 bytes read in
-         cmpa  #$87       module sync byte?
-         lbne  verr       no, error
-         cmpb  #$CD       module sync byte?
-         lbne  verr       no, error
-         ldd   2,x        get module length
-         cmpd  #$f        minimum module length
-         lbls  verr       exit if less
-         subd  #3         omit old CRC bytes
-         std   vmodlen    module length less CRC
-         addd  fileln     update file length
-         std   fileln     read so far
-
-* Check header parity by EOR'ing 1st 8 bytes to themselves, then taking
-* the one's complement. This is the 9th header byte, the parity check.
+* read in option section of path and toggle echo
+echo     pshs  x
+         leas  <-$20,s
+         leax  ,s
+         clra  
+         clrb  
+         os9   I$GetStt 
+         lbcs  error
+         lda   <echobyte
+         sta   $04,x
+         clra  
+         os9   I$SetStt 
+         lbcs  error
+         leas  <$20,s
+         puls  pc,x
 
-         clra             prepare for EORs
-         ldb   #8         # header bytes to EOR
-hedpar   eora  ,x+        EOR bytes read in
-         decb             done?
-         bne   hedpar     no, bra
-         coma             A now is header parity
-         sta   ,x         put in buffer
-         ldy   #1         1 char to write
-         lda   inpath     path #
-         os9   i$write    write parity byte out
-         lbcs  error     
-         ldd   vmodlen    get # byte in module
-         subd  #9         9 bytes already read
-         std   vmodlen    save
-         leax  i.o.buff,u start of header bytes
-         ldy   #9        
-         bsr   CRCcal     calculate CRC on 1st 9 bytes
-bytsleft lda   inpath     path #
-         ldy   #bufsiz    # chars to read
-         cmpy  vmodlen    buffer <= # bytes left to read?
-         bls   readmod    yes, bra
-         ldy   vmodlen    else, get exact # chars left to read
-readmod  os9   i$read     read in Y chars
-         bcs   verr       exit on error
-         sty   bytsread   save # bytes read in
-         bsr   CRCcal     calc CRC on bytes just read in
-         ldd   vmodlen    # bytes
-         subd  bytsread   minus # bytes just read in
-         std   vmodlen    save # byte left
-         bne   bytsleft   do more if some left
-* Compare current position in file with # of bytes in module header
-* to prevent overwriting next module, in case module length changed.
-         lda   inpath     path number
-         ldb   #ss.pos    file position code
-         os9   i$getstt   get position in file
-         tfr   u,d        D = position
-         ldu   Usave      restore U
-         cmpd  fileln     same as bytes read so far?
-         bne   verr       no, exit
-         com   crc        do one's
-         com   crc+1      complement on
-         com   crc+2      CRC accumulator
-         leax  crc,u      point to accumulator
-         ldy   #3         3 bytes to write
-         lda   inpath     path #
-         os9   i$write    write out 3 CRC bytes
-         lbcs  error     
-         ldd   #3         update # bytes read/written
-         addd  fileln    
-         std   fileln    
-         ldb   #ss.eof    test for EOF
-         lda   inpath    
-         os9   i$getstt  
-         lbcc  initCRC    bra if not EOF
-         cmpb  #e$eof     EOF?
-         lbne  error      no, exit
-* Redisplay LSN (may have changed with verify)
-         lbsr  seeksec    read in sector again
-         lbra  disploop   redo display
-
-* Calculate CRC sub. Enter with Y = # of bytes to calculate CRC over.
-*                               X = address of 1st byte
-
-CRCcal   leau  crc,u      point to CRC bytes
-         os9   f$crc      calc CRC
-         lbcs  error     
-         ldu   Usave      restore U
-         rts             
-
-* Verify error display sub
-
-verr     ldd   #cmdpos    position cursor
-         lbsr  movecurs   at cmd position
-         leax  verrmess,pcr point to message
-         lbsr  pstring    display it
-         ldb   #e$bmid    bad module ID
-         lbsr  prterr     display error #
-         lbra  getcmd     exit
-
-* 'Link' to a given module or display all modules if no name is input
+* verify CRC if valid module
+verify   lbsr  movecmd
+         leax  >vrfymess,pcr
+         lbsr  pstring
+         ldu   #0
+         ldx   #0
+         stx   <fileln
+         lda   <inpath
+         os9   I$Seek   
+         lbcs  error
+         ldu   <Usave
+initCRC  ldd   #$FFFF
+         std   <crc
+         stb   <crc+2
+         leax  >i.o.buff,u
+         ldy   #8
+         lda   <inpath
+         os9   I$Read   
+         lbcs  error
+         cmpy  #8
+         lbne  verr
+         ldd   ,x
+         cmpa  #$87         module sync byte
+         lbne  verr
+         cmpb  #$CD         ""
+         lbne  verr
+         ldd   2,x
+         cmpd  #$0F         minimum module length
+         lbls  verr
+         subd  #3           omit old CRC
+         std   <vmodlen
+         addd  <fileln
+         std   <fileln
+* check header parity
+         clra  
+         ldb   #8
+hedpar   eora  ,x+
+         decb  
+         bne   hedpar
+         coma  
+         sta   ,x
+         ldy   #1
+         lda   <inpath
+         os9   I$Write  
+         lbcs  error
+         ldd   <vmodlen
+         subd  #9
+         std   <vmodlen
+         leax  >i.o.buff,u
+         ldy   #9
+         bsr   CRCcal
+bytsleft lda   <inpath
+         ldy   #$78
+         cmpy  <vmodlen
+         bls   readmod
+         ldy   <vmodlen
+readmod  os9   I$Read   
+         bcs   verr
+         sty   <bytsread
+         bsr   CRCcal
+         ldd   <vmodlen
+         subd  <bytsread
+         std   <vmodlen
+         bne   bytsleft
+* compare current position with header to 
+* prevent overwriting next module
+         lda   <inpath
+         ldb   #5
+         os9   I$GetStt 
+         tfr   u,d
+         ldu   <Usave
+         cmpd  <fileln
+         bne   verr
+         com   <crc
+         com   <crc+1
+         com   <crc+2
+         leax  <crc,u
+         ldy   #3
+         lda   <inpath
+         os9   I$Write  
+         lbcs  error
+         ldd   #3
+         addd  <fileln
+         std   <fileln
+         ldb   #6             test for EOF
+         lda   <inpath
+         os9   I$GetStt 
+         lbcc  initCRC
+         cmpb  #$D3           EOF
+         lbne  error
+* redisplay LSN
+         lbsr  seeksec
+         lbra  disploop
 
-linker   tst   infile     linked already?
-         lbne  getcmd     yes, exit
-         ldd   #0        
-         std   fileln     init vars
-         std   lmodlen    "
-         clr   echobyte  
-         com   echobyte  
-         lbsr  echo       echo on
-         lbsr  movecmd   
-         lbsr  clrline   
-         leax  linkmess,pcr prompt
-         lbsr  pstring    print it
-         leax  infile,u   point to buffer for module name
-         ldy   #30        max name length+1
-         lbsr  readlin    read in module name
-         clr   echobyte  
-         lbsr  echo       echo off
-         cmpy  #1         any name entered?
-         lbne  parsmod    yes, go find it
-* else list all module names
-         clr   infile     flag => no modules linked
-         leax  linkhdr,pcr point to header
-         lbsr  wrtlin1    write it
-nxtmod   ldd   lmodlen    current mod length
-         addd  fileln     + cummulative lengths
-         std   fileln     save
-         tfr   d,u        point u to next module
-         ldx   #0        
-         lda   inpath    
-         os9   i$seek    
-         bcs   moderr    
-         ldu   Usave      restore U
-         leax  i.o.buff,u
-         ldy   #6         bytes to read
-         os9   i$read    
-         bcs   moderr    
-         ldd   ,x++       get sync bytes
-         cmpa  #$87       OK?
-         bne   moderr1    no, exit
-         cmpb  #$CD       OK?
-         bne   moderr1    no, exit
-         leay  i.o.buff,u
-         ldd   ,x++       get module length
-         std   lmodlen    save
-         ldd   ,x++       offset to module name
-         pshs  d          save
-         ldd   fileln     current offset
-         bsr   convert2   convert D to ASCII
-         lda   #$20       space
-         sta   ,y+        put in buffer
-         ldd   lmodlen    current module length
-         bsr   convert2   convert to ASCII
-         lda   #$20      
-         sta   ,y+        insert space
-         ldd   fileln     offset to mod start
-         addd  ,s++       add mod name offset
-         tfr   d,u        U = offset to name
-         ldx   #0        
-         lda   inpath    
-         os9   i$seek     seek to module name
-         lbcs  error     
-         ldu   Usave      restore U
-         tfr   y,x        point x to buffer
-         ldy   #29        max chars in name
-         lda   inpath    
-         os9   i$read    
-         lbcs  error     
-namend   lda   ,x+        find char w/ bit 7 set
-         bpl   namend    
-         anda  #$7f       clear bit 7
-         sta   -1,x      
-         lda   #$0d       CR
-         sta   ,x         end output line
-         leax  i.o.buff,u buffer start
-         lbsr  wrtlin1   
-         bra   nxtmod    
+* calculate CRC, regY=# of bytes to use for CRC
+CRCcal   leau  <crc,u
+         os9   F$CRC    
+         lbcs  error
+         ldu   <Usave
+         rts   
 
-convert2 lbsr  convert1   put ASCII val of A in Y
-         tfr   b,a        repeat for B
-         lbra  convert1   and return
+* error with verify
+verr     ldd   #$2036         cmd position
+         lbsr  movecurs
+         leax  >verrmess,pcr
+         lbsr  pstring
+         ldb   #$CD
+         lbsr  prterr
+         lbra  getcmd
 
-moderr2  cmpb  #e$eof    
-         bne   moderr    
-         ldb   #e$MNF     module not found error
-         bra   moderr    
-moderr1  ldb   #E$BMID    bad module ID error
-moderr   clr   infile     flag => not linked
-         cmpb  #e$eof     end of file?
-         lbne  error      no, print error
-         lbsr  read1      wait for keypress
-         leax  inbuff,u  
-         stx   buffptr    reset buffer pointer for display
-         lbra  redo       redo display
+* Link to a module or display all in merged file
+linker    tst   <infile
+         lbne  getcmd
+         ldd   #0
+         std   <fileln
+         std   <lmodlen
+         clr   <echobyte
+         com   <echobyte
+         lbsr  echo
+         lbsr  movecmd
+         lbsr  clrline
+         leax  >linkmess,pcr
+         lbsr  pstring
+         leax  <infile,u
+         ldy   #$1E
+         lbsr  readlin
+         clr   <echobyte
+         lbsr  echo
+         cmpy  #1
+         lbne  parsmod
+         lbsr  clrscr
+         clr   <infile            list all module names
+         leax  >linkhdr,pcr
+         lbsr  wrtlin1
+nxtmod   ldd   <lmodlen
+         addd  <fileln
+         std   <fileln
+         tfr   d,u
+         ldx   #0
+         lda   <inpath
+         os9   I$Seek   
+         bcs   moderr
+         ldu   <Usave
+         leax  >i.o.buff,u
+         ldy   #6
+         os9   I$Read   
+         bcs   moderr
+         ldd   ,x++
+         cmpa  #$87
+         bne   moderr1
+         cmpb  #$CD
+         bne   moderr1
+         leay  >i.o.buff,u
+         ldd   ,x++
+         std   <lmodlen
+         ldd   ,x++
+         pshs  d
+         ldd   <fileln
+         bsr   convert2
+         lda   #$20
+         sta   ,y+
+         ldd   <lmodlen
+         bsr   convert2
+         lda   #$20
+         sta   ,y+
+         ldd   <fileln
+         addd  ,s++
+         tfr   d,u
+         ldx   #0
+         lda   <inpath
+         os9   I$Seek   
+         lbcs  error
+         ldu   <Usave
+         tfr   y,x
+         ldy   #$1D
+         lda   <inpath
+         os9   I$Read   
+         lbcs  error
+namend   lda   ,x+
+         bpl   namend
+         anda  #$7F            look for fcs delimiter
+         sta   -1,x
+         lda   #$0D            CR
+         sta   ,x
+         leax  >i.o.buff,u
+         lbsr  wrtlin1
+         bra   nxtmod
 
-parsmod  os9   f$prsnam  
-         lbcs  error     
-         stb   modnmlen   save length of name
-         decb             name len -1
-         lda   b,x        last char of name
-         ora   #$80       set bit 7
-         sta   b,x       
-         stx   CRC        save pointer
-         ldu   #0        
-modloop  ldx   #0        
-         lda   inpath    
-         os9   i$seek     go to start of file
-         lbcs  error     
-         ldu   Usave      restore U
-         leax  i.o.buff,u buffer
-         ldy   #6         bytes to read in
-         os9   i$read    
-         bcs   moderr2   
-         ldd   ,x++       sync bytes
-         cmpa  #$87       OK?
-         bne   moderr1   
-         cmpb  #$CD       OK?
-         bne   moderr1   
-         ldd   ,x++       module length
-         std   lmodlen    save
-         ldd   ,x         mod name offset
-         addd  fileln     d=true offset to name
-         tfr   d,u       
-         ldx   #0        
-         lda   inpath    
-         os9   i$seek     seek to mod name
-         bcs   moderr2   
-         ldu   Usave      restore U
-         leax  i.o.buff,u buffer
-         ldy   #29        max chars in name
-         os9   i$read     read in name
-         bcs   moderr2   
-         tfr   x,y       
-         ldx   CRC        point to desired name
-         ldb   modnmlen   get len of name
-         os9   f$cmpnam   do they match?
-         bcc   newbase    yes, bra
-         ldd   lmodlen    no, check next
-         addd  fileln     new offset
-         std   fileln    
-         tfr   d,u       
-         bra   modloop   
+convert2 lbsr  convert1
+         tfr   b,a
+         lbra  convert1
 
-* Set Offset to module. LSN is functionally set to 0.
-
-newbase  lda   #$0d       CR
-         sta   b,x        delimit name
-         decb            
-         lda   b,x        last char
-         anda  #$7f       clr bit 7
-         sta   b,x       
-         ldd   fileln     get offset
-         std   offset    
-         ldd   #0006     
-         leax  LSN,u     
-nbloop   sta   ,x+       
-         decb            
-         bne   nbloop    
-         lbra  readloop   go read 1st 'LSN'
-
-* Display module name and offset
+moderr2  cmpb  #$D3           e$e0f
+         bne   moderr
+         ldb   #$DD           module not found
+         bra   moderr
+moderr1  ldb   #$CD           bad module ID
+moderr   clr   <infile
+         cmpb  #$D3           end of file
+         lbne  error
+         lbsr  read1
+         leax  >inbuff,u
+         stx   <buffptr
+         lbra  cReturn
 
-prntmod  ldd   #modpos   
-         lbsr  movecurs   point to screen position
-         leax  modnmhdr,pcr mod name header
-         lbsr  pstring    print it
-         leax  infile,u   point to name
-         lbsr  wrtlin1    print it
-         ldd   #offpos    'offset' screen postion
-         lbsr  movecurs  
-         leax  offmess,pcr
-         lbsr  pstring    print 'Offset' label
-         leay  i.o.buff,u
-         ldd   offset    
-         lbsr  convert2   convert offset to ASCII
-         lda   #$0d      
-         sta   ,y         delimit offset
-         lbra  writeout   display it & return
-
-* 'Unlink' named module and restore LSN to original file's LSN
+parsmod  os9   F$PrsNam 
+         lbcs  error
+         stb   <modnmlen
+         decb  
+         lda   b,x
+         ora   #$80           fcs format
+         sta   b,x
+         stx   <crc
+         ldu   #0
+modloop  ldx   #0
+         lda   <inpath
+         os9   I$Seek   
+         lbcs  error
+         ldu   <Usave
+         leax  >i.o.buff,u
+         ldy   #6
+         os9   I$Read   
+         bcs   moderr2
+         ldd   ,x++
+         cmpa  #$87           module sync code
+         bne   moderr1
+         cmpb  #$CD           ""
+         bne   moderr1
+         ldd   ,x++
+         std   <lmodlen
+         ldd   ,x
+         addd  <fileln
+         tfr   d,u
+         ldx   #0
+         lda   <inpath
+         os9   I$Seek   
+         bcs   moderr2
+         ldu   <Usave
+         leax  >i.o.buff,u
+         ldy   #$1D
+         os9   I$Read   
+         bcs   moderr2
+         tfr   x,y
+         ldx   <crc
+         ldb   <modnmlen
+         os9   F$CmpNam 
+         bcc   newbase
+         ldd   <lmodlen
+         addd  <fileln
+         std   <fileln
+         tfr   d,u
+         bra   modloop
 
-unlinker tst   infile     linked?
-         lbeq  getcmd     no, exit
-         ldd   #0008     
-         leax  LSN,u     
-unloop   sta   ,x+       
-         decb            
-         bne   unloop    
-         ldd   #modpos    position cursor
-         lbsr  movecurs  
-         lbsr  clrline    erase module name
-         lbsr  clrline    erase offset
-         clr   infile     flag => no modules linked
-         lbra  readloop  
-
-* Toggle expert mode - edits and zaps of buffer are automatically written
+* set offset to module so effective LSN is $00
+newbase  lda   #$0D           CR
+         sta   b,x            delimit name
+         decb  
+         lda   b,x            last character
+         anda  #$7F           clear marker
+         sta   b,x
+         ldd   <fileln
+         std   <offset
+         ldd   #6
+         leax  lsn,u
+nbloop   sta   ,x+
+         decb  
+         bne   nbloop
+         lbra  readloop
 
-expert   tst   xprtflag   in expert mode now?
-         beq   xprton     no, go turn it on
-         clr   xprtflag   signal mode off
-         ldd   #xprtpos  
-         lbsr  movecurs  
-         lbsr  clrline    erase label
-xprtout  lbra  getcmd    
-xprton   lbsr  rusure     Sure?
-         bne   xprtout    no, exit
-         com   xprtflag   signal xpert mode
-         ldd   #xprtpos  
-         lbsr  movecurs   position cursor
-         leax  xprtmess,pcr
-         lbsr  pstring    display 'EXPERT'
-         bra   xprtout   
+* display module name and offset
+prntmod  ldd   #$3020               mod position
+         lbsr  movecurs
+         leax  >modnmhdr,pcr
+         lbsr  pstring
+         leax  <infile,u
+         lbsr  wrtlin1
+         ldd   #$5820               offset position
+         lbsr  movecurs
+         leax  >offmess,pcr
+         lbsr  pstring
+         leay  >i.o.buff,u
+         ldd   <offset
+         lbsr  convert2
+         lda   #$0D                 CR
+         sta   ,y
+         lbra  writeout
 
-help     lbsr  clrscr     clear screen
-         leax  helper,pcr point to help message
-         ldy   #helpchrs  length of message
-         lbsr  wrtlin2    print it
-         leax  i.o.buff,u
-         lbsr  Read1      get 1 byte
-         lbra  redo       redo display
+* unlink module and restore LSN to that of file
+unlinker tst   <infile
+         lbeq  getcmd
+         ldd   #8
+         leax  lsn,u
+unloop   sta   ,x+
+         decb  
+         bne   unloop
+         ldd   #$3020           mod position
+         lbsr  movecurs
+         lbsr  clrline
+         lbsr  clrline
+         clr   <infile
+         lbra  readloop
+
+* toggle expert mode - edits and zaps are auto-written
+expert   tst   <xprtflag
+         beq   xprton           turn flag on if not on
+         clr   <xprtflag
+         ldd   #$5933           expert position
+         lbsr  movecurs
+         lbsr  clrline
+xprtout  lbra  getcmd
+xprton   lbsr  rusure
+         bne   xprtout
+         com   <xprtflag
+         ldd   #$5933            expert position
+         lbsr  movecurs
+         leax  >xprtmess,pcr     display EXPERT
+         lbsr  pstring
+         bra   xprtout
+
+help     lbsr  clrscr
+         leax  >helper,pcr
+         ldy   #helpchrs
+         lbsr  wrtlin2
+         leax  >i.o.buff,u
+         lbsr  read1
+         lbra  cReturn
 
-find                     
-         clr   echobyte  
-         com   echobyte   echo on
-         lbsr  echo      
-         lbsr  movecmd   
-         lbsr  clrline   
-         tst   FHexAsc    Hex or Ascii mode?
-         bne   charfind   bra if Ascii
-         leax  findbyte,pcr
-         lbsr  pstring    display prompt
-         ldy   #33        max chars to read + 1
-         lbsr  FRead     
-         cmpy  #1         blank line entered?
-         lbeq  exitfind   yes, exit find mode
-         leay  -1,y       get rid of CR
-         tfr   y,d       
-         lsrb             divide # bytes read by 2
-         lbcs  badfind    bra if odd # read
-         stb   TargLen    save # bytes in find string
-         leau  findstr,u  point to storage area
-* Convert 2 bytes pointed to by X to object byte in A
-FConvert lbsr  hexobjct  
-         lbcs  badfind    bra if invalid char
-         sta   ,u+        save byte
-         leay  -2,y       all chars converted?
-         bne   FConvert   no, bra
-         ldu   Usave      restore U
-         bra   gofind    
+find     clr   <echobyte
+         com   <echobyte
+         lbsr  echo
+         lbsr  movecmd
+         lbsr  clrline
+         tst   <FhexAsc       hex or ascii mode?
+         bne   charfind       go if ascii
+         leax  >findbyte,pcr
+         lbsr  pstring
+         ldy   #$21
+         lbsr  FRead
+         cmpy  #1
+         lbeq  exitfind
+         leay  -1,y
+         tfr   y,d
+         lsrb  
+         lbcs  badfind
+         stb   <TargLen
+         leau  <findstr,u
+* convert 2 bytes pointed to by regX, store in regA
+FConvert lbsr  hexobjct
+         lbcs  badfind
+         sta   ,u+
+         leay  -2,y
+         bne   FConvert
+         ldu   <Usave
+         bra   gofind
 
-* Input a string of ASCII characters to search for
-
-charfind leax  findchar,pcr
-         lbsr  pstring    display prompt
-         ldy   #17        max # of chars + 1
-         lbsr  FRead     
-         cmpy  #1         only CR entered?
-         lbeq  exitfind   yes, exit find mode
-         tfr   y,d        # bytes read
-         decb             dump CR
-         stb   TargLen    save length of target string
-         leay  findstr,u 
-find20   lda   ,x+        move target
-         sta   ,y+        string to storage area
-         decb             done?
-         bne   find20    
+* input string of ascii chars
+charfind leax  >findchar,pcr
+         lbsr  pstring
+         ldy   #$11
+         lbsr  FRead
+         cmpy  #1
+         lbeq  exitfind
+         tfr   y,d
+         decb                 dump CR
+         stb   <TargLen
+         leay  <findstr,u
+find20   lda   ,x+
+         sta   ,y+
+         decb  
+         bne   find20
 
 * Check if byte from target string matches byte in buffer by EOR'ing the two.
 *  If they match exactly, result is 0. If in 'char' search mode, EOR results
 *  in bits 5 and/or 7 being set if 2 bytes differ only by case or bit 7 status
 
-gofind                   
 *****************************
 * Added 01/08/90 (RAK)
 *
-         clr   echobyte   echo off
-         lbsr  echo      
+*        clr   echobyte   echo off
+*        lbsr  echo      
 *
 * END of modification
 *****************************
-         leax  inbuff,u   point to sector buffer
-find30   ldb   seclen+1   # bytes in this sector
-         leay  findstr,u  point to target string
-find50   lda   ,y         get 1st target byte
-         eora  ,x+        does it match?
-         lbeq  found1     yes, bra
-         tst   FHexAsc    in 'char' search mode?
-         beq   find60     no, bra
-         bita  #%01011111 else, only bits 5 &/or 7 set?
-         lbeq  found1     bra if so
-find60   decb             whole sector checked?
-find70   bne   find50     no, bra
-* No match in this sector. Read in next sector.
-
-****************************************************
+gofind   clr   <echobyte
+         lbsr  echo
+         leax  >inbuff,u
+find30   ldb   <seclen+1
+         leay  <findstr,u
+find50   lda   ,y
+         eora  ,x+
+         lbeq  found1
+         tst   <FHexAsc
+         beq   find60
+         bita  #$5F      %01011111
+         lbeq  found1
+find60   decb  
+find70   bne   find50    no match in this sector
 * Modification (addition) by RAK 01/08/90
 * Read a character from std in to catch a break
 * key which allows aborting a <F>IND.
 * Note: "finderr2" resets the stack.
-*
-         pshs  d,x,y      save registers
-         clra             std in
-         ldb   #SS.Ready 
-         os9   I$GetStt   was there a key press?
-         bcs   NoKey      no, skip read
-         leax  i.o.buff,u point to buffer
-         lbsr  Read1      get a key
-         lda   ,x         get the key
-         cmpa  #5         break key?
-         beq   finderr2   yes, stop <F>ind
-NoKey    puls  d,x,y      no, restore registers
-*
-* End of modification
-****************************************************
-
-         bsr   FNxtsec    get next sector
-         bra   find30     back to loop
+         pshs  y,x,b,a
+         clra  
+         ldb   #1        SS.Ready
+         os9   I$GetStt 
+         bcs   NoKey
+         leax  >i.o.buff,u
+         lbsr  read1
+         lda   ,x
+         cmpa  #5         catch key to abort find
+         beq   finderr2
+NoKey    puls  y,x,b,a
+* end of mod
+         bsr   FNxtSec
+         bra   find30
 
-FNxtSec  tst   infile     module linked?
-         beq   find75     no, bra
-         ldd   lmodlen    else, get module length
-         subd  #1         now A = LSN of last sector
-         cmpa  LSN+2      was this last sector?
-         beq   finderr2   yes, bra
-find75   ldd   lsn+1      else, get next sector
-         addd  #1         inc lsn
-         std   lsn+1     
-         bne   find80     bra if no carry needed
-         inc   lsn        else, do add in carry
-find80   lbsr  lsnseek    seek to next sector
-         leax  inbuff,u   point to sector buffer
-         stx   buffptr    save
-         tst   infile     module linked?
-         beq   find256    no, bra
-         ldd   lmodlen    linked mod length
-         suba  lsn+2      > $100 bytes left?
-         bne   find256    yes, bra
-         tfr   d,y        else, set up for smaller read
-         bra   FRdSome   
-find256  ldy   #$100     
-FRdSome  lda   inpath    
-         os9   i$read    
-         bcs   finderr   
-         sty   seclen     save # bytes read
-         rts             
+FNxtSec  tst   <infile
+         beq   find75
+         ldd   <lmodlen
+         subd  #1
+         cmpa  <lsn+2
+         beq   finderr2
+find75   ldd   <lsn+1
+         addd  #1
+         std   <lsn+1
+         bne   find80
+         inc   <lsn
+find80   lbsr  lsnseek
+         leax  >inbuff,u
+         stx   <buffptr
+         tst   <infile
+         beq   find256
+         ldd   <lmodlen
+         suba  <lsn+2
+         bne   find256
+         tfr   d,y
+         bra   FRdSome
+find256  ldy   #$100
+FRdSome  lda   <inpath
+         os9   I$Read   
+         bcs   finderr
+         sty   <seclen
+         rts 
 
-* Input byte or char string to find
-
-FRead    leax  i.o.buff,u
-         clra             stdin
-         os9   i$readln  
-         bcs   cheksig3  
-         rts             
+* Get byte/char to find  
+FRead    leax  >i.o.buff,u
+         clra  
+         os9   I$ReadLn 
+         bcs   cheksig3
+         rts   
+cheksig3 leas  2,s
+         clr   <SgnlCode
+         cmpb  #2          break key?
+         lbne  error
+         com   <FHexAsc
+         lbra  find
+badfind  ldu   <Usave
+         bsr   beep
+         lbra  find
 
-ChekSig3 leas  2,s        scratch return addr
-         clr   SgnlCode   clear old signal
-         cmpb  #2         BREAK key?
-         lbne  error      no, exit
-         com   FHexAsc    yes, toggle Hex/Ascii flag
-         lbra  find      
-
-badfind  ldu   Usave      restore U
-         bsr   beep      
-         lbra  find      
-
-* Make a beep
-beep     leax  bell,pcr  
-         ldy   #1        
-         lbra  writeout   beep & return
+* make a beep
+beep     leax  >bell,pcr
+         ldy   #1
+         lbra  writeout
 
 * If error reading next sector was EOF, then find was unsuccessful.
 * Re-read original sector and return to CMD: prompt
+finderr  cmpb  #$D3         EOF
+         lbne  error
+finderr2 lds   <Ssave
+         ldd   <oldlsn
+         std   <lsn
+         lda   <oldlsn+2
+         sta   <lsn+2
+         lbsr  seeksec
+         sty   <seclen
+         bsr   beep
+exitfind lbra  exitzap
 
-finderr  cmpb  #e$eof     EOF?
-         lbne  error      no, exit
-finderr2 lds   Ssave      dump return addr
-         ldd   oldlsn     original LSN
-         std   lsn       
-         lda   oldlsn+2  
-         sta   lsn+2     
-         lbsr  seeksec    read original LSN
-         sty   seclen     save bytes read
-         bsr   beep      
-
-exitfind lbra  exitzap    exit
-
-found1   pshs  b          # bytes left in sector + 1
-         decb             # save bytes left if this search unsuccessful
-         stb   FBytes     and for 'Next' command
+found1   pshs  b
+         decb  
+         stb   <Fbytes
 * Save pointer (X) to next byte in buffer for search to resume if this search
 *  is unsuccessful or for 'Next' command
-         stx   findptr    pointer for next search
-         ldb   TargLen    #bytes in target string
-find90   decb             whole string checked?
-         beq   matched    yes, match found
-         dec   ,s         else, more bytes left in sector?
-         beq   find130    no, read in next
-find100  leay  1,y        else, point to next target byte
-         lda   ,y         target byte
-         eora  ,x+        match?
-         beq   find90     yes, loop back for more
-         tst   FhexAsc    in 'char' search mode?
-         beq   find110    no, bra
-         bita  #%01011111 only bits 5 &/or 7 set?
-         beq   find90     yes, bra
-find110  leas  1,s        else, dump counter
+         stx   <findptr
+         ldb   <TargLen
+find90   decb  
+         beq   matched
+         dec   ,s
+         beq   find130
+find100  leay  1,y
+         lda   ,y
+         eora  ,x+
+         beq   find90
+         tst   <FHexAsc
+         beq   find110
+         bita  #$5F
+         beq   find90
+find110  leas  1,s
 * Restore buffer pointer (X) to byte after 1st byte found that matched in
-*  search just completed (unsuccessfully). Restore B to # bytes left in 
-*  sector at that point. Y = start of target string.
-         ldx   findptr    ready for new search
-find120  leay  findstr,u 
-         ldb   FBytes     bytes left in sector
-         lbra  find70    
-
+* search just completed (unsuccessfully). Restore B to # bytes left in 
+* sector at that point. Y = start of target string.
+         ldx   <findptr
+find120  leay  <findstr,u
+         ldb   <FBytes
+         lbra  find70
 * Read in next sector to complete test for match
-find130  leas  1,s        dump counter
-         pshs  b,y        save counter & target pointer
-         lbsr  FNxtSec    read in next sector
-         puls  b,y        restore counter & target pointer
-         lda   seclen+1   # bytes in this sector
-         pshs  a          save
-         bra   find100    continue search
+find130  leas  1,s
+         pshs  y,b
+         lbsr  FNxtSec
+         puls  y,b
+         lda   <seclen+1
+         pshs  a
+         bra   find100
 
 * Successful Find
-*   Must determine whether target string starts in last LSN read or
-*    next-to-last, for display.
-
-matched  leas  1,s        dump counter
-         lda   lsn+2     
-         cmpa  oldlsn+2   did we have to read a new sector?
-         beq   match40    no, bra
-         cmpx  findptr    does target start in last sector read?
-         bhs   match30    yes, bra
-match10  ldd   lsn+1      else, set to re-read previous LSN
-         subd  #1        
-         std   lsn+1     
-         cmpd  #$ffff    
-         bne   match20   
-         dec   lsn       
-match20  lbsr  seeksec    re-read sector
-         sty   seclen     save bytes read ($100)
-match30  ldd   lsn        update 'oldlsn'
-         std   oldlsn    
-         lda   lsn+2     
-         sta   oldlsn+2  
-match40  lbsr  display    (re)display sector
+*  Must determine whether target string starts in last LSN read or
+*  next-to-last, for display
+matched  leas  1,s
+         lda   <lsn+2
+         cmpa  <oldlsn+2
+         beq   match40
+         cmpx  <findptr
+         bcc   match30
+         ldd   <lsn+1
+         subd  #1
+         std   <lsn+1
+         cmpd  #$FFFF
+         bne   match20
+         dec   <lsn
+match20  lbsr  seeksec
+         sty   <seclen
+match30  ldd   <lsn
+         std   <oldlsn
+         lda   <lsn+2
+         sta   <oldlsn+2
+match40  lbsr  display
 * Get offset of found string from beginning of LSN
-         ldd   findptr    addr 1 byte past start of found string
-         subd  #1         D = addr of string
-         std   edbufptr   save for display
-         subd  buffptr    D (B) = offset from buff start
+         ldd   <findptr
+         subd  #1
+         std   <edbufptr
+         subd  <buffptr
 * Now LS nib of B = col #, MS nib = row # for display
-         pshs  b         
-         andb  #$0f       mask off MS nibble
-         pshs  b         
-         addb  #$58       add offset for ascii dump column
-         stb   asciicol  
-         puls  b         
-         lda   #3         3 screen columns per hex byte dump
-         mul             
-         addb  #$25       add offset for hex dump column
-         stb   hexcol    
-         puls  b         
-         andb  #$f0       mask off LS nibble
-         lsrb            
-         lsrb            
-         lsrb            
-         lsrb             B now = row #
-         addb  #$23       add offset
-         stb   rownum    
-         lbsr  revdisp    reverse video
-         lbsr  eddisply   display 1st byte in found string
-         lbsr  normdisp   normal video
-         clr   rownum    
-         lbra  exitfind   done *** This line changed from 'lbra getcmd' in Version 2.0 ***
+         pshs  b
+         andb  #$0F
+         pshs  b
+         addb  #$58
+         stb   <asciicol
+         puls  b
+         lda   #$03
+         mul   
+         addb  #$25
+         stb   <hexcol
+         puls  b
+         andb  #$F0
+         lsrb  
+         lsrb  
+         lsrb  
+         lsrb  
+         addb  #$23
+         stb   <rownum
+         lbsr  revdisp
+         lbsr  eddisply
+         lbsr  normdisp
+         clr   <rownum
+*** This line changed from 'lbra getcmd' in Version 2.0 ***
+         lbra  exitfind
 
-* Locate next occurrence of string located with 'Find' command.
-*  Search starts where 'Find' left off, unless LSN has since changed,
-*   in which case search starts at start of present LSN
-
-next     tst   TargLen    is there a string to find?
-         lbeq  getcmd     no, exit
-         lbsr  movecmd   
-         leax  srchmess,pcr
-         lbsr  pstring    display "Searching"
-         ldx   findptr    pointer into buffer where 'find' left off
-         lbeq  gofind     0 => begin at start of LSN
-         lbra  find120   
-
-* Display file size and input new value
+* Next Search starts from Find unless LSN changed
+next     tst   <TargLen
+         lbeq  getcmd
+         lbsr  movecmd
+         leax  >srchmess,pcr
+         lbsr  pstring
+         ldx   <findptr
+         lbeq  gofind
+         lbra  find120
 
-diddle   lbsr  movecmd   
-         leax  lenmess,pcr
-         lbsr  pstring   
-         com   zeroflag   suppress leading zeroes
-         leay  i.o.buff,u
-         ldd   FileLen    MSB of file length
-         lbsr  convert1   convert 1st nibble to ascii
-         tfr   b,a       
-         lbsr  convert1   do 2nd nibble
-         ldd   FileLen+2  LSB of file length
-         lbsr  convert1   do 3rd nibble
-         clr   zeroflag   stop suppressing leading zeroes
-         tfr   b,a       
-         lbsr  convert1  
-         ldd   #$2020    
-         std   ,y++      
-         std   ,y++      
-         leax  i.o.buff,u
-         stx   bytsread   temp storage
-         tfr   y,d       
-         subd  bytsread   get # chars to display
-         tfr   d,y        setup for i$writln
-         lbsr  writeout  
-         leax  newmess,pcr
-         lbsr  pstring    display message
-         ldy   #9         max chars to read
-         lbsr  MakeHex    convert them to object
-         bcs   diddle    
-         ldd   #cmd1pos  
-         lbsr  movecurs  
-         lbsr  rusure10   ask  'Sure?'
-         lbne  getcmd    
-         ldx   HexBuff    MSB of new file length
-         ldu   HexBuff+2  LSB ""
-         ldb   #ss.size  
-         lda   inpath    
-         os9   i$setstt   set new file length
-         lbcs  error     
-         stx   FileLen   
-         stu   FileLen+2 
-         ldu   Usave     
+* Display/change file size
+diddle   lbsr  movecmd
+         leax  >lenmess,pcr
+         lbsr  pstring
+         com   <zeroflag
+         leay  >i.o.buff,u
+         ldd   <FileLen
+         lbsr  convert1        nibble to ascii
+         tfr   b,a
+         lbsr  convert1        second nibble
+         ldd   <FileLen+2
+         lbsr  convert1        third nibble
+         clr   <zeroflag
+         tfr   b,a
+         lbsr  convert1
+         ldd   #$2020
+         std   ,y++
+         std   ,y++
+         leax  >i.o.buff,u
+         stx   <bytsread
+         tfr   y,d
+         subd  <bytsread       chars to display
+         tfr   d,y
+         lbsr  writeout
+         leax  >newmess,pcr
+         lbsr  pstring
+         ldy   #9
+         lbsr  MakeHex
+         bcs   diddle
+         ldd   #$2037         command1 position
+         lbsr  movecurs
+         lbsr  rusure10
+         lbne  getcmd
+         ldx   <HexBuff
+         ldu   <HexBuff+2
+         ldb   #2             size
+         lda   <inpath
+         os9   I$SetStt 
+         lbcs  error
+         stx   <FileLen
+         stu   <FileLen+2
+         ldu   <Usave
 * Make sure LSN displayed is still within file (in case file shortened).
-*  If not, reset display to show last LSN with new file length.
-         lda   FileLen    MSB of file length
-         cmpa  lsn        is max LSN > current LSN?
-         blo   RstLSN     no, bra
-         bne   diddled    else, bra if LSN not last
-         ldd   FileLen+1  check LSB's (MSB's equal)
-         cmpd  lsn+1     
-         bls   RstLSN10  
-diddled  lbra  readloop   re-read sector & display
+* If not, reset display to show last LSN with new file length.
+         lda   <FileLen
+         cmpa  <lsn
+         bcs   RstLSN
+         bne   diddled
+         ldd   <FileLen+1
+         cmpd  <lsn+1
+         bls   RstLSN10
+diddled  lbra  readloop
 
-RstLSN   sta   lsn        reset MSB of lsn
-         ldd   FileLen+1  get LSB's of last sector
-RstLSN10 tst   FileLen+3  need to correct?
-         bne   RstLSN20  
-         subd  #1        
-RstLSN20 std   lsn+1      reset LSB's of lsn
-* If D was 0, need to 'borrow'
-         cmpd  #$ffff     was D 0?
-         bne   diddled    no, bra
-         dec   lsn        else, correct LSB of LSN
-         bra   diddled   
+RstLSN   sta   <lsn
+         ldd   <FileLen+1
+RstLSN10 tst   <FileLen+3
+         bne   RstLSN20
+         subd  #1
+RstLSN20 std   <lsn+1
+         cmpd  #$FFFF
+         bne   diddled
+         dec   <lsn
+         bra   diddled
 
-push     lda   StackCnt   # of LSN's on stack
-         cmpa  #MaxStack  more room?
-         bhs   full       no, bra
-         ldb   #3         3 bytes per entry
-         mul             
-         leax  Stack,u    start of stack
-         leax  b,x        add offset
-         ldd   lsn       
-         std   ,x++       put current LSN on stack
-         lda   lsn+2     
-         sta   ,x        
+push    lda   <StackCnt
+         cmpa  #$10
+         bcc   full
+         ldb   #$03
+         mul   
+         leax  >Stack,u
+         leax  b,x
+         ldd   <lsn
+         std   ,x++
+         lda   <lsn+2
+         sta   ,x
 * Now that LSN is on stack, check to make sure it isn't the last one
-*  pushed, as well. If so, don't increment StackCnt, which effectively
-*  cancels the Push operation.
-         tst   StackCnt   any sectors thus far?
-         beq   pushOK     no, do push
-         cmpa  -3,x       Is LSB of LSN the same as previous LSN pushed?
-         bne   pushOK     no, bra
-         ldd   lsn        check MS bytes of LSN
-         cmpa  -5,x       do they match?
-         beq   pushed     yes, exit without completing push
-pushOK   inc   StackCnt   complete push
-pushed   lbra  getcmd     exit
+* pushed, as well. If so, don't increment StackCnt, which effectively
+* cancels the Push operation.
+         tst   <StackCnt
+         beq   pushOK
+         cmpa  -$03,x
+         bne   pushOK
+         ldd   <lsn
+         cmpa  -5,x
+         beq   pushed
+pushOK   inc   <StackCnt
+pushed   lbra  getcmd
 
 * Stack is full - display message
-full     lbsr  movecmd   
-         leax  fullmess,pcr
-         lbsr  pstring    display 
-         lbsr  read1      wait for keypress
-         bra   pushed    
+full     lbsr  movecmd
+         leax  >bell,pcr
+         lbsr  pstring   full message
+         lbsr  read1
+         bra   pushed
+
+restore  lda   <StackCnt
+         beq   pushed
+         ldb   #3
+         mul   
+         subb  #3
+         leax  >Stack,u
+         leax  b,x
+         ldd   ,x++
+         std   <lsn
+         lda   ,x
+         sta   <lsn+2
+         dec   <StackCnt
+         lbra  readloop
+
+* This is a general purpose 16x16 bit multiplication.
+* regD is first number, regX is second number.
+* Returns answer in regY and regU.
+mulDbyX    pshs  u,y,x,b,a
+         clr   4,s
+         lda   3,s     lower word of regX times regB
+         mul   
+         std   6,s
+         ldd   1,s     upper word of regX times regB
+         mul   
+         addb  6,s
+         adca  #$00
+         std   5,s
+         ldb   ,s      original regA
+         lda   3,s     upper word regX
+         mul   
+         addd  5,s
+         std   5,s
+         bcc   mulDX2  L171D
+         inc   4,s
+mulDX2   lda   ,s
+         ldb   2,s
+         mul   
+         addd  4,s
+         std   4,s
+         puls  pc,u,y,x,b,a
 
-remove   lda   StackCnt   # sectors on stack
-         beq   pushed     exit if none
-         ldb   #3         3 bytes per entry
-         mul              offset to END of entry
-         subb  #3         no B = offset to entry
-         leax  Stack,u   
-         leax  b,x        point to entry
-         ldd   ,x++       get MS bytes of LSN
-         std   lsn       
-         lda   ,x         get LS byte of LSN
-         sta   lsn+2      reset LSN
-         dec   StackCnt   1 less sector on stack
-         lbra  readloop   and go read in new sector
+* Looks like 16*regX
+mul16B   pshs  x,b,a
+         lda   #$10
+         pshs  a
+         clra  
+         clrb  
+mul16B2  lsl   4,s
+         rol   3,s
+         rolb  
+         rola  
+         cmpd  1,s
+         bcs   mul16B3
+         subd  1,s
+         inc   4,s
+mul16B3  dec   ,s
+         bne   mul16B2
+         ldx   3,s
+         leas  5,s
+         rts   
 
-         emod            
-dEDend   equ   *         
+prntBAM  ldd   #$2034
+         lbsr  movecurs
+         tst   clustflg
+         bne   csf9
+         leax  BAMmess1,pcr
+         bra   csf10
+csf9     leax  BAMmess2,pcr
+csf10    lbsr  pstring
+         leay  >i.o.buff,u
+         pshs  y
+         ldd   <BAMstart      get 3 byte address and display it
+         lbsr  convert1       convert hex to ascii
+         tfr   b,a
+         lbsr  convert1       convert hex to ascii
+         lda   <BAMstart+2
+         lbsr  convert1       convert hex to ascii
+         lda   ,-y
+         ora   #$80
+         sta   ,y
+         ldd   #$3234
+         lbsr  movecurs
+         ldx   ,s
+         lbsr  pstring
+         ldy   ,s
+         ldd   <BAMstop
+         lbsr  convert1
+         tfr   b,a
+         lbsr  convert1
+         lda   <BAMstop+2
+         lbsr  convert1
+         lda   ,-y
+         ora   #$80
+         sta   ,y
+         ldd   #$3D34
+         lbsr  movecurs
+         puls  x
+         lbsr  pstring
+         rts   
 
-         ENDC
+togCS    com   <clustflg
+         lbra  cReturn
+
+         emod
+eom      equ   *
 
          end