]> cloudbase.mooo.com Git - kermit-80.git/commitdiff
Inquire AVR-CP/M firmware version
authorLeo C <erbl259-lmu@yahoo.de>
Thu, 10 Dec 2015 18:31:52 +0000 (19:31 +0100)
committerLeo C <erbl259-lmu@yahoo.de>
Thu, 10 Dec 2015 18:31:52 +0000 (19:31 +0100)
cpxac.asm
cpxtyp.asm

index 611f22a774f8d4808dd968c1d76bfa1b39fb4a39..f8763c8c3c4db6b33e4d57d865d66e7b78c7cd6f 100644 (file)
--- a/cpxac.asm
+++ b/cpxac.asm
@@ -1,6 +1,10 @@
 IF NOT lasm\r
 .printx * CPXAC.ASM *\r
 ENDIF  ;NOT lasm\r
+IF lasm\r
+.printx Error: Z80 macro assembler (i.e. M80) required\r
+       END\r
+ENDIF  ;lasm\r
 ;      KERMIT - (Celtic for "FREE")\r
 ;\r
 ;      This is the CP/M-80 implementation of the Columbia University\r
@@ -24,7 +28,7 @@ ENDIF ;NOT lasm
 ;\r
 ; Keep module name, edit number, and last revision date in memory.\r
 ;\r
-family:        db      'CPXCP.ASM  (1) 3-DEC-2015$'    ; First entry for V4.11\r
+family:        db      'CPXCA.ASM  (1) 3-DEC-2015$'    ; First entry for V4.11\r
 \r
 ;\r
 ; Assembly time message to let me know I'm building the right version.\r
@@ -37,6 +41,8 @@ family:       db      'CPXCP.ASM  (1) 3-DEC-2015$'    ; First entry for V4.11
 SC16IS740_ADDR equ     90H     ;SC16IS740 I2C address. (8bit, A0=VDD, A1=VDD)\r
 OUTSIZE                equ     64\r
 \r
+VERSION_MIN    equ     0304H   ;Minimum AVR-CP/M firmware version required\r
+\r
 ; Virtual I2C Interface\r
 \r
 VI2C_STAT      equ     05h\r
@@ -89,15 +95,306 @@ I2C_UART_XOFF1     equ     I2C_UART_PORT+06H       ;R/W    Xoff1 word
 I2C_UART_XOFF2 equ     I2C_UART_PORT+07H       ;R/W    Xoff2 word\r
 \r
 \r
-\r
 z80    set     TRUE    ;This one emulates an Z80.\r
 \r
-\r
        .z80\r
+;----------------------------------------------------------------------\r
+;      Macros\r
+;----------------------------------------------------------------------\r
+\r
+; make a message table\r
+;   usage:\r
+;     label: mkmsgtab <msg0,msg1,msg2,...>\r
+\r
+mkm_tab macro  x\r
+n?msg  defl    0\r
+       irp     y,<x>\r
+n?msg   defl   n?msg+1\r
+       endm\r
+       db      n?msg\r
+       irp     y,<x>\r
+        db     '&y','$'\r
+       endm\r
+       endm\r
+\r
+; make a message table\r
+;   usage:\r
+;     label: mkmsgtab <msg0,msg1,msg2,...>\r
+\r
+mkms_tab macro x\r
+n?msg  defl    0\r
+       irp     y,<x>\r
+n?msg   defl   n?msg+1\r
+       endm\r
+       db      n?msg\r
+       irp     y,<x>\r
+        ifnb   <y>\r
+         db    y,'$'\r
+        else\r
+         db    '$'\r
+        endif\r
+       endm\r
+       endm\r
+\r
+;----------------------------------------------------------------------\r
+;      Messages\r
+;----------------------------------------------------------------------\r
+\r
+umsg_tab:\r
+       ;            0   1  2         3                  4            5\r
+       mkms_tab <'UART',,' not', ' detected',', crystal frequency: ','!'>\r
+\r
+fmsg_tab:\r
+       mkm_tab <?,1.8432, 3.6864, 5.5296, 7.3728, 9.216, 11.0592, 12.9024, 14.7456, 16.5888, 18.432, 20.2752, 22.1184, 23.9616>\r
+fdim_msg:\r
+       db      ' MHz.',cr,lf,'$'\r
+fw_msg:\r
+       db      'AVR firmware to old, at least version 3.4 neded.','$'\r
+exit_msg:\r
+       db      cr,lf,'Exiting!',cr,lf,'$'\r
+\r
+;----------------------------------------------------------------------\r
+;      Utilities\r
+;----------------------------------------------------------------------\r
+\r
+; Print message from table\r
+;\r
+; hl: message table address\r
+;     first byte is number of table entries\r
+;  a: number of message to print (0 based, index in table)\r
+;\r
+; If index is out of range, print message #0\r
+\r
+pdecoded:\r
+       push    bc\r
+       push    de\r
+       push    hl\r
+       ld      bc,0\r
+       cp      (hl)            ; number of messages in table\r
+       jr      c,pdc_1\r
+       ld      a,c\r
+pdc_1:\r
+       inc     hl\r
+       ld      e,a\r
+       ld      a,'$'\r
+       inc     e\r
+       jr      pdc_2\r
+pdc_nxt_str:\r
+       cpir\r
+pdc_2:\r
+       dec     e\r
+       jr      nz,pdc_nxt_str\r
+       ex      de,hl\r
+       call    prtstr\r
+       pop     hl\r
+       pop     de\r
+       pop     bc\r
+       ret\r
+\r
+;----------------------------------------------------------------------\r
+; output bytes to ports\r
+;\r
+; hl: tables of port,value pairs:\r
+;       db n  ;number of pairs\r
+;       db port1,val1, port2,val2,... portn,valn\r
+;       ...\r
+;       db 0 ; Terminate table\r
+\r
+ioinil:\r
+       push    bc\r
+       ld      b,(hl)          ;count\r
+       inc     hl\r
+io1_lp:\r
+       ld      c,(hl)          ;port address\r
+       inc     hl\r
+       outi\r
+       jr      nz,io1_lp\r
+       pop     bc\r
+       ret\r
+\r
+;----------------------------------------------------------------------\r
+\r
+vi2c_setup_chk:\r
+       ld      hl,chkbuf\r
+vi2c_setup:\r
+       out     (VI2C_BLEN),a\r
+       ld      a,h\r
+       out     (VI2C_ADR+1),a\r
+       ld      a,l\r
+       out     (VI2C_ADR+0),a\r
+       ret\r
+\r
+;----------------------------------------------------------------------\r
+\r
+prspeedmsg:\r
+       ld      hl,fmsg_tab\r
+       call    pdecoded\r
+       ld      de,fdim_msg\r
+       call    prtstr\r
+       ret\r
+\r
+;----------------------------------------------------------------------\r
+;\r
+;----------------------------------------------------------------------\r
+\r
+fw_check:\r
+       ld      bc,000CH                ;\r
+       out     (c),b                   ;write 0 to version port\r
+       in      a,(c)\r
+       cp      1                       ;result should be 0\r
+       ret     nc                      ;exit (a != 0) if it wasn't\r
+       inc     b\r
+       out     (c),b\r
+       in      h,(c)                   ;get MAJOR\r
+       inc     b\r
+       out     (c),b\r
+       in      l,(c)                   ;get MINOR\r
+       ld      de,VERSION_MIN\r
+       xor     a                       ;clear carry\r
+       sbc     hl,de\r
+       sbc     a,a                     ;z if hl >= VERSION_MIN\r
+       ret\r
+\r
+;----------------------------------------------------------------------\r
+\r
+uart_check:\r
+       ld      a,3                     ;2 byte + SLA\r
+       call    vi2c_setup_chk\r
+       ld      a,2                     ;write cmd\r
+       out     (VI2C_CTRL),a\r
+uc_0:\r
+       in      a,(VI2C_CTRL)           ;do: get i2c result\r
+       bit     7,a                     ;\r
+       jr      nz,uc_0                 ;while busy\r
+       cp      0FH\r
+       jr      nz,uc_err               ;error in transaction\r
+       in      a,(VI2C_BLEN)\r
+       cp      3\r
+       jr      nz,uc_err\r
+\r
+       inc     hl\r
+       inc     hl\r
+       in      a,(I2C_UART_SPR)\r
+       cp      (hl)\r
+       jr      nz,uc_err\r
+       ld      (hl),42H\r
+       ld      a,2\r
+       out     (VI2C_CTRL),a\r
+       in      a,(I2C_UART_SPR)\r
+       cp      (hl)\r
+       jr      nz,uc_err\r
+       xor     a\r
+       jr      uc_1\r
+uc_err:\r
+       ld      a,1\r
+uc_1:\r
+       ld      c,a\r
+       ld      hl,umsg_tab\r
+       xor     a\r
+       call    pdecoded\r
+       ld      a,1\r
+       add     a,c\r
+       call    pdecoded\r
+       ld      a,3\r
+       call    pdecoded\r
+       ld      a,4\r
+       add     a,c\r
+       call    pdecoded\r
+       ld      a,c\r
+       or      a\r
+       ret\r
+\r
+;----------------------------------------------------------------------\r
+\r
+chkbuf:\r
+       db      SC16IS740_ADDR\r
+       db      (I2C_UART_SPR - I2C_UART_PORT) shl 3    ;address of scratch pad register\r
+       db      5AH\r
+\r
+;----------------------------------------------------------------------\r
+\r
+speedtest:\r
+       ld      hl,spt_tab              ;init UART in loop back mode\r
+       call    ioinil                  ;  and fill tx fifo with 60 chars\r
+\r
+       in      a,(I2C_UART_MSR)        ;Clear Modem Status Register\r
+       in      a,(I2C_UART_LSR)        ;Clear Line Status Register\r
+       in      a,(I2C_UART_RHR)        ;Clear Receiver Buffers\r
+       in      a,(I2C_UART_RHR)\r
+\r
+       ld      a,2                     ;start write transaction\r
+       out     (VI2C_CTRL),a\r
+\r
+       ; get time stamp\r
+       in      a,(41H)                 ;lsb ms\r
+       ld      e,a\r
+       in      a,(42H)                 ;msb ms\r
+       ld      d,a\r
+       in      a,(43H)                 ;lsb seconds\r
+       ld      c,a\r
+\r
+spt_1:\r
+       in      a,(I2C_UART_RXLVL)      ;wait till all 60 char in rx fifo\r
+       cp      60\r
+       jr      nz,spt_1\r
+\r
+       ; get 2nd time stamp\r
+       in      a,(41H)                 ;lsb ms\r
+       ld      l,a\r
+       in      a,(42H)                 ;msb ms\r
+       ld      h,a\r
+       in      a,(43H)                 ;lsb seconds\r
+       sub     c                       ;seconds diff\r
+       jr      z,spt_3\r
+       ld      bc,1000\r
+spt_2:                                 ;convert s to ms\r
+       add     hl,bc\r
+       dec     a\r
+       jr      nz,spt_2\r
+spt_3:\r
+       sbc     hl,de                   ;hl = elapsed time (ms) for 60 chars\r
+       ld      d,h\r
+       ld      e,l\r
+       inc     hl\r
+       srl     h\r
+       rr      l\r
+       ld      bc,500\r
+       add     hl,bc\r
+\r
+       xor     a                       ;clear carry\r
+spt_4:\r
+       inc     a\r
+       sbc     hl,de\r
+       jr      nc,spt_4\r
+       dec     a\r
+       ret\r
+\r
+spt_tab:\r
+       db      (spt_tab_end - ($+1))/2\r
+       db      I2C_UART_LCR, DLAB+03H  ;Set devisor latch access bit\r
+       db      I2C_UART_DLL, low 96    ;1200 bit/s at 1.832 MHz\r
+       db      I2C_UART_DLH, high 96   ;Out to the MSB divisor port\r
+       db      I2C_UART_LCR, 03H       ;Disable Divisor Access Latch\r
+       db      I2C_UART_FCR, 07H       ;Clear and enable fifos\r
+       db      I2C_UART_MCR, 10H       ;Enable loopback\r
+       db      I2C_UART_IER, 0         ;Set no interrupts\r
+       db      VI2C_ADR+0, low outbuf\r
+       db      VI2C_ADR+1, high outbuf\r
+       db      VI2C_BLEN, 60+2\r
+spt_tab_end:\r
+\r
+;----------------------------------------------------------------------\r
+;\r
+;----------------------------------------------------------------------\r
 \r
 sysxin:                ; continuation of system initialisation from sysinit\r
 \r
+       call    fw_check\r
+       jr      nz,si_exit_f\r
+       call    uart_check\r
+       jr      nz,si_exit\r
        call    speedtest\r
+       ld      (clk_div),a\r
        call    prspeedmsg\r
 \r
        ld      hl,6                    ;set default baud rate\r
@@ -109,49 +406,19 @@ sysxin:           ; continuation of system initialisation from sysinit
        out     (I2C_UART_MCR),a\r
        ret\r
 \r
-;      ld      a,07H                   ;Enable and clear fifos\r
-;      out     (I2C_UART_FCR),a        ;\r
-;      ld      a,03H                   ;8N1\r
-;      out     (I2C_UART_LCR),a        ;\r
-\r
-prspeedmsg:\r
-       push    af\r
-       ld      de,freqmsg\r
+si_exit_f:\r
+       ld      de,fw_msg\r
        call    prtstr\r
-       pop     af\r
-       cp      13+1\r
-       jr      c,$+3\r
-        xor    a\r
-       ld      e,a\r
-       ld      d,0\r
-       ld      hl,fm_tab\r
-       add     hl,de\r
-       add     hl,de\r
-       ld      e,(hl)\r
-       inc     hl\r
-       ld      d,(hl)\r
-       call    prtstr\r
-       ld      de,fdimmsg\r
+si_exit:\r
+       ld      de,exit_msg\r
        call    prtstr\r
-       ret\r
-\r
-mkftab macro   x\r
-       irp     y,<x>\r
-fm&y:\r
-       db      '&y','$'\r
-       endm\r
-fm_tab:\r
-       irp     y,<x>\r
-       dw      fm&y\r
-       endm\r
-       endm\r
+       jp      0\r
 \r
 \r
-freqmsg:\r
-       db      'UART crystal frequency: ','$'\r
-       mkftab  <?,1.8432,3.6864,5.5296,7.3728,9.216,11.0592,12.9024,14.7456,16.5888,18.432,20.2752,22.1184,23.9616>\r
-fdimmsg:\r
-       db      ' MHz.',cr,lf,'$'\r
+;      ld      a,07H                   ;Enable and clear fifos\r
+;      out     (I2C_UART_FCR),a        ;\r
+;      ld      a,03H                   ;8N1\r
+;      out     (I2C_UART_LCR),a        ;\r
 \r
 \r
 ;\r
@@ -366,7 +633,7 @@ spdtbl: db  15                      ; Number of entries
        db      5,'38400$'\r
        dw                 3\r
        db      3,'450$'\r
-       dw               288\r
+       dw               256\r
        db      4,'4800$'\r
        dw                24\r
        db      5,'57600$'\r
@@ -386,98 +653,6 @@ sphtbl: db cr,lf,'           110    300    600   2400   9600  28800  57600'
        db      cr,lf,'     75    150    450   1200   4800  19200  38400 115200$'\r
 \r
 \r
-speedtest:\r
-       ld      hl,spt_tab\r
-       call    ioinil\r
-\r
-       in      a,(I2C_UART_MSR)        ;Clear Modem Status Register\r
-       in      a,(I2C_UART_LSR)        ;Clear Line Status Register\r
-       in      a,(I2C_UART_RHR)        ;Clear Receiver Buffers\r
-       in      a,(I2C_UART_RHR)\r
-\r
-       ld      a,2                     ;start write transaction\r
-       out     (VI2C_CTRL),a\r
-\r
-       ; get time stamp\r
-       in      a,(41H)                 ;lsb ms\r
-       ld      e,a\r
-       in      a,(42H)                 ;msb ms\r
-       ld      d,a\r
-       in      a,(43H)                 ;lsb seconds\r
-       ld      c,a\r
-\r
-spt_1:\r
-       in      a,(I2C_UART_RXLVL)\r
-       cp      60\r
-       jr      nz,spt_1\r
-\r
-       ; get 2nd time stamp\r
-       in      a,(41H)                 ;lsb ms\r
-       ld      l,a\r
-       in      a,(42H)                 ;msb ms\r
-       ld      h,a\r
-       in      a,(43H)                 ;lsb seconds\r
-       sub     c\r
-       jr      z,spt_3\r
-       ld      bc,1000\r
-spt_2:\r
-       add     hl,bc\r
-       dec     a\r
-       jr      nz,spt_2\r
-spt_3:\r
-       sbc     hl,de\r
-       ld      d,h\r
-       ld      e,l\r
-       inc     hl\r
-       srl     h\r
-       rr      l\r
-       ld      bc,500\r
-       add     hl,bc\r
-\r
-       xor     a                       ;clear carry\r
-spt_4:\r
-       inc     a\r
-       sbc     hl,de\r
-       jr      nc,spt_4\r
-       dec     a\r
-       ld      (clk_div),a\r
-       ret\r
-\r
-spt_tab:\r
-       db      (spt_tab_end - ($+1))/2\r
-       db      I2C_UART_LCR, DLAB+03H  ;Set devisor latch access bit\r
-       db      I2C_UART_DLL, low 96    ;1200 bit/s at 1.832 MHz\r
-       db      I2C_UART_DLH, high 96   ;Out to the MSB divisor port\r
-       db      I2C_UART_LCR, 03H       ;Disable Divisor Access Latch\r
-       db      I2C_UART_FCR, 07H       ;Clear and enable fifos\r
-       db      I2C_UART_MCR, 10H       ;Enable loopback\r
-       db      I2C_UART_IER, 0         ;Set no interrupts\r
-       db      VI2C_ADR+0, low outbuf\r
-       db      VI2C_ADR+1, high outbuf\r
-       db      VI2C_BLEN, 60+2\r
-spt_tab_end:\r
-\r
-;----------------------------------------------------------------------\r
-; output bytes to ports\r
-;\r
-;     hl: tables of port,value pairs:\r
-;         db n  ;number of pairs\r
-;        db port1,val1, port2,val2,... portn,valn\r
-;         ...\r
-;         db 0 ; Terminate table\r
-\r
-ioinil:\r
-       push    bc\r
-       ld      b,(hl)          ;count\r
-       inc     hl\r
-io1_lp:\r
-       ld      c,(hl)          ;port address\r
-       inc     hl\r
-       outi\r
-       jr      nz,io1_lp\r
-       pop     bc\r
-       ret\r
-\r
 ;\r
 ;      This is the system-dependent SET PORT command.\r
 ;      HL contains the argument from the command table.\r
@@ -501,11 +676,7 @@ selmdm:
        ret\r
 \r
 selcon:\r
-IF 1\r
        jr      omflush\r
-ELSE\r
-       ret\r
-ENDIF\r
 \r
 ;\r
 ;      Get character from console, or return zero.\r
@@ -534,15 +705,6 @@ outcon:
 ;      returns nonskip; bc, de, hl preserved.\r
 ;\r
 outmdm:\r
-IF 0\r
-       in      a,(I2C_UART_LSR) ;Get the output done flag.\r
-       and     TXRDY           ;Is it set?\r
-       jr      z,outmdm        ;If not, loop until it is.\r
-       ld      a,e\r
-       out     (I2C_UART_THR),a ;Output it.\r
-ENDIF\r
-IF 1\r
-\r
        push    hl\r
        ld      hl,(outptr)\r
        ld      (hl),e                  ;return buffered char\r
@@ -607,35 +769,21 @@ omfex:
        pop     bc\r
        pop     hl\r
        ret\r
-ENDIF\r
+\r
 ;\r
 ;      get character from modem; return zero if none available.\r
 ;      for IOBYT systems, the modem port has already been selected.\r
 ;      destroys bc, de, hl.\r
 ;\r
 inpmdm:\r
-if 0\r
-       in      a,(I2C_UART_LSR) ;Get the port status into A.\r
-       and     RXRDY           ;See if the input ready bit is on.\r
-       ret     z               ;If not then return.\r
-\r
-       in      a,(I2C_UART_MCR)        ;debug\r
-       xor     RTS\r
-       out     (I2C_UART_MCR),a\r
-\r
-       in      a,(I2C_UART_RHR);If so, get the char.\r
-       ret\r
-endif\r
-\r
-if 1\r
-       ld      a,(inpcnt)\r
+       ld      a,(inpcnt)              ;any buffered chars?\r
        dec     a\r
-       jp      m,imdrdi2c      ;buffer empty\r
-       ld      (inpcnt),a\r
+       jp      m,imdrdi2c              ;no, buffer empty\r
+       ld      (inpcnt),a              ;save updated buffer counter\r
        ld      hl,(inpptr)\r
-       ld      a,(hl)          ;return buffered char\r
+       ld      a,(hl)                  ;return buffered char\r
        inc     hl\r
-       ld      (inpptr),hl\r
+       ld      (inpptr),hl             ;save buffer pointer\r
        ret\r
 \r
 imdrdi2c:\r
@@ -645,16 +793,12 @@ imdrdi2c:
 \r
        ; prepare fifo read\r
        inc     a                       ;+ slave address\r
-       ld      (VI2C_BLEN),a\r
        ld      hl,inbuf\r
-       ld      a,h\r
-       out     (VI2C_ADR+1),a\r
-       ld      a,l\r
-       out     (VI2C_ADR+0),a\r
+       call    vi2c_setup\r
        inc     hl\r
        ld      (hl),0                  ;select subaddr 0 (RHR) for next read\r
        ld      a,3                     ;write 1 byte (subaddr.), then read fifo\r
-       ld      (VI2C_CTRL),a\r
+       out     (VI2C_CTRL),a\r
        in      a,(VI2C_CTRL)           ;get i2c result\r
        xor     01h\r
        and     11h                     ;transfer completed?\r
@@ -666,16 +810,14 @@ imdrdi2c:
        ld      (inpcnt),a              ;save new buffer count\r
        ld      a,(hl)\r
        inc     hl\r
-       ld      (inpptr),hl\r
+       ld      (inpptr),hl             ;save buffer pointer\r
        ret\r
 \r
 imrdex:\r
        xor     a\r
        ret\r
-endif\r
 \r
        .8080\r
-\r
 ;\r
 ;      flsmdm - flush comm line.\r
 ;      Modem is selected.\r
@@ -734,10 +876,12 @@ clrlin:   lxi     d,eralin
 clrtop:        lxi     d,erascr\r
        jmp     prtstr\r
 \r
+;----------------------------------------------------------------------\r
 \r
 sysver:        db      'AVR-CP/M'\r
        db      '$'\r
 \r
+;----------------------------------------------------------------------\r
 \r
 clk_div:\r
        db      1               ;default div\r
@@ -756,6 +900,7 @@ outbuf:
        db      0               ;RHR subaddress\r
        ds      OUTSIZE\r
 \r
+;----------------------------------------------------------------------\r
 \r
 IF lasm\r
 LINK CPXVDU.ASM                ; get terminal defs etc\r
index 1acf241e206c4cab92363b070256c0363513ff62..bc753237383f5ceda486a071de935b890e74f2d2 100644 (file)
 ;      edit of 10 Apr 87 by C W Rose\r
 ;      Amended code for pci2651 to handle Telecom Merlin M2215.\r
 ;      (8085 at 5 MHz, 2651 USART, port TTY1:, Ampro 230 terminal equivalent).\r
-;      \r
+;\r
 ;      edit of 13 Jul 1987 by C W Rose\r
 ;       Added Micromint SB180 with 6/9 MHz. option.\r
 ;\r
-; edit 22, 15th July, 1987 by OBSchou for David Moore.  \r
+; edit 22, 15th July, 1987 by OBSchou for David Moore.\r
 ;      David submitted a paper copy of Kermit 4.05 overlay for a Teletek\r
 ;      system:  I have (hopefully) correctly appended his code.  He also\r
 ;      send in the code for ADM 22 terminals.\r
 ;\r
-; edit 21, 14 July, 1986 by OBSchou for John Shearwood of Birmingham \r
+; edit 21, 14 July, 1986 by OBSchou for John Shearwood of Birmingham\r
 ;      University.  His edits:\r
 ;      edit of Apr 7th, 1987 by JA Shearwood.  Added entry for Cifer Aux port\r
 ;      edit of Mar 24 1987 by JA Shearwood, Birmingham.  Added code for Cifer\r
@@ -98,7 +98,7 @@
 ;      [Note: Martins CPXFRK is another version of CPXSWT.ASM]\r
 ;\r
 ;\r
-; edit 20, 21 May 1987 by OBSchou for Colin Burns of the Institute \r
+; edit 20, 21 May 1987 by OBSchou for Colin Burns of the Institute\r
 ;      of Neurological Sciences, Glasgow.  Added flag for Hazeltine 1500\r
 ;      VDU (h1500)\r
 ;\r
 ;      Manchester University.  NCR code is similar to the PCI2651 code, so\r
 ;      NCRDMV chains to CPXTOR.ASM.  CPC cahins to the modified CPXPCW file\r
 ;      as submitted by Chris.  *** NOTE *** All Amstrad versions require\r
-;      CP/M 3, so the 664 version must both have the system upgraded to \r
+;      CP/M 3, so the 664 version must both have the system upgraded to\r
 ;      CP/M 3 and have an aditional RAM pack.  All Amstrad systems require\r
 ;      a serial interface.\r
 ;\r
 ;      * * * Here Begineth kermit-80 Version 4.09 * * *\r
 ;\r
 ;      Biggest change is the overlay address has been moved (again) to 6000h\r
-;      and the files have all been diced into families.  M80 (almost) back \r
+;      and the files have all been diced into families.  M80 (almost) back\r
 ;      in, though I have found some bugs.  Will worry about those later.\r
-;      CPXSYS.ASM (CP4SYS.ASM in V4.05) now is a family file as well.  \r
+;      CPXSYS.ASM (CP4SYS.ASM in V4.05) now is a family file as well.\r
 ;\r
 ;      Comments and all that would be much appreciated.\r
 ;\r
 ;      Bertil Schou,\r
 ;      The Computer Centre,\r
-;      Loughborough University of Technology, \r
+;      Loughborough University of Technology,\r
 ;      Loughborough\r
 ;      Leicestershire,  LE11 3TU\r
 ;      Great Britain\r
 ;       file being assembled.  I hope.\r
 ;\r
 ; edit 16 Dec 1st, 1986 by OBSchou.  Added entry for Amstrad PCW range (PCW)\r
-;      Code in Family file CPXPCW.ASM, submitted by Ian Young of Lattice \r
+;      Code in Family file CPXPCW.ASM, submitted by Ian Young of Lattice\r
 ;      Logic Systems.\r
 ;\r
 ; Edit 15 June 20 1986.  Had to chand org address to 5000h to give room for\r
 ;       multi-fcb space for DIR command and other additions in the system\r
 ;       indepentent part.  This starts Kermit-80 version 4.08...\r
 ;\r
-; Edit 14: March 20, 1986 by OBSchou Loughborough University for \r
+; Edit 14: March 20, 1986 by OBSchou Loughborough University for\r
 ;       B Robertson, Aberdeen Univ. Computing Centre.\r
 ;       Add support for APPLE II with serial cards based on the 6850 ACIA.\r
 ;       Mod 380Z support to allow both MDS (5 1/4" discs) and FDS (8" discs)\r
 ; edit 12 5 Febuary, 1986 by OBSchou\r
 ;       merged in conditionals for Epson PX8 (px8). Code from Tony Addyman\r
 ;       Salford University, England.\r
-;       Added code from other contibutors for Basic Northstar (basicns), \r
+;       Added code from other contibutors for Basic Northstar (basicns),\r
 ;       Access-Matrix (access), US Micro Sales s1008 (s1008),\r
-;       Micro Mate (mmate), A.C.E. Discovery (disc).  \r
+;       Micro Mate (mmate), A.C.E. Discovery (disc).\r
 ;       These I cannot test: please send comments back if these are buggy.\r
 ;\r
 ; edit 11 29 January 1985 by OBSchou @ multics.lut.ac.uk\r
@@ -362,7 +362,7 @@ hp125       EQU     FALSE           ;[MF]HP-125 Business Assistant, 8-bit data
                                ; thru Data Comm 2 (requires 8th-bit quoting\r
                                ; for binary transfers on Data Comm 2)\r
                                ; set VT52 TRUE\r
-mbee   EQU     FALSE           ; Microbee Systems - Microbee \r
+mbee   EQU     FALSE           ; Microbee Systems - Microbee\r
 avrcpm EQU     TRUE            ;AVR-CP/M (terminal required)\r
 \r
 \r
@@ -512,7 +512,7 @@ ENDIF;sb9
 \r
 IF hp125 OR telcon\r
 cpuspd SET     40              ;[MF]HP125 or TELCON\r
-ENDIF;hp125 OR telcon \r
+ENDIF;hp125 OR telcon\r
 \r
 IF mbee\r
 cpuspd SET     33              ; Microbee has 3.375MHz Z80\r
@@ -523,7 +523,7 @@ IF  FALSE                   ; assume all systems are not z80 based
 ;z80   SET     FALSE\r
 ENDIF  ;FALSE\r
 \r
-; Now, lets see what family we are assembling for.  Reset all \r
+; Now, lets see what family we are assembling for.  Reset all\r
 ;      family file to FALSE\r
 \r
 torfam  SET     FALSE          ; not Torch family file\r