石原 博の覚書

電子工作に関する日々の覚書を記載します

MulticompでFUZIX

2022-08-27 23:19:37 | 日記

Multicomp Cycllne II-C で先日flex, Nitros9を動かしたが、それだけではもったいない。同sdでFUZIXがあるので試してみた。


電源を入れるとCamelForthが起動する。そこでFUZIXと入力すると起動。



知らなかったが、調べてみるとfuzixは結構有名。8bitCPU Z80, 6809, 6502 などで動くunix likeなOS。
(バンクでのメモリ拡張は必要だが)


unix likeというだけあって、良く使うコマンドは大概使える。


# ls -al /bin
drwxr-xr-x   2 root     root         3072 Nov 24 08:44 .
drwxrwxrwx  11 root     root          512 Nov 24 08:44 ..
-rwxr-xr-x   1 root     root         7511 Nov 24 08:44 banner
-rwxr-xr-x   1 root     root          573 Nov 24 08:44 basename
-rwxr-xr-x   1 root     root         9259 Nov 24 08:44 bd
-rwxr-xr-x   1 root     root        19511 Nov 24 08:44 cal
-rwxr-xr-x   1 root     root         1484 Nov 24 08:44 cat
-rwxr-xr-x   1 root     root         3315 Nov 24 08:44 chgrp
-rwxr-xr-x   1 root     root         3941 Nov 24 08:44 chmod
-rwxr-xr-x   1 root     root         3345 Nov 24 08:44 chown
-rwxr-xr-x   1 root     root         9135 Nov 24 08:44 cksum
-rwxr-xr-x   1 root     root         6252 Nov 24 08:44 cmp
-rwxr-xr-x   1 root     root         2349 Nov 24 08:44 cp
-rwxr-xr-x   1 root     root        11341 Nov 24 08:44 cut
-rwxr-xr-x   1 root     root        11144 Nov 24 08:44 date
-rwxr-xr-x   1 root     root        15982 Nov 24 08:44 dd
-rwxr-xr-x   1 root     root         3937 Nov 24 08:44 decomp16
-rwxr-xr-x   1 root     root        11246 Nov 24 08:44 df
-rwxr-xr-x   1 root     root          480 Nov 24 08:44 dirname
-rwxr-xr-x   1 root     root        25505 Nov 24 08:44 dosread
-rwxr-xr-x   1 root     root        11509 Nov 24 08:44 du
-rwxr-xr-x   1 root     root         1841 Nov 24 08:44 echo
-rwxr-xr-x   1 root     root        16605 Nov 24 08:44 ed
-rwxr-xr-x   1 root     root        10096 Nov 24 08:44 env
-rwxr-xr-x   1 root     root        13335 Nov 24 08:44 factor
-rwxr-xr-x   1 root     root          203 Nov 24 08:44 false
-rwxr-xr-x   1 root     root        15683 Nov 24 08:44 fdisk
-rwxr-xr-x   1 root     root        10900 Nov 24 08:44 fgrep
-rwxr-xr-x   1 root     root        22727 Nov 24 08:44 fsck
-rwxr-xr-x   1 root     root        14591 Nov 24 08:44 grep
-rwxr-xr-x   1 root     root         3172 Nov 24 08:44 groups
-rwxr-xr-x   1 root     root         2807 Nov 24 08:44 head
-rwxr-xr-x   1 root     root         9427 Nov 24 08:44 id
-rwxr-xr-x   1 root     root         2311 Nov 24 08:44 kbdrate
-rwxr-xr-x   1 root     root         2432 Nov 24 08:44 kill
-rwxr-xr-x   3 root     root        29969 Nov 24 08:44 levee
-rwxr-xr-x   1 root     root        30035 Nov 24 08:44 levee-ansi
-rwxr-xr-x   3 root     root        29969 Nov 24 08:44 levee-vt52
-rwxr-xr-x   1 root     root        14789 Nov 24 08:44 ll
-rwxr-xr-x   1 root     root         1940 Nov 24 08:44 ln
-rwxr-xr-x   1 root     root         1962 Nov 24 08:44 logname
-rwxr-xr-x   1 root     root        21722 Nov 24 08:44 ls
-rwxr-xr-x   1 root     root        20498 Nov 24 08:44 man
-rwxr-xr-x   1 root     root         1748 Nov 24 08:44 mkdir
-rwxr-xr-x   1 root     root          471 Nov 24 08:44 mkfifo
-rwxr-xr-x   1 root     root        13440 Nov 24 08:44 mkfs
-rwxr-xr-x   1 root     root         2705 Nov 24 08:44 mknod
-rwxr-xr-x   1 root     root        10060 Nov 24 08:44 mode
-rwxr-xr-x   1 root     root         9666 Nov 24 08:44 more
-rwxr-xr-x   1 root     root        10768 Nov 24 08:44 mount
-rwxr-xr-x   1 root     root         2431 Nov 24 08:44 mv
-rwxr-xr-x   1 root     root        11860 Nov 24 08:44 od
-rwxr-xr-x   1 root     root         3267 Nov 24 08:44 pagesize
-rwxr-xr-x   1 root     root        14575 Nov 24 08:44 passwd
-rwxr-xr-x   1 root     root          533 Nov 24 08:44 printenv
-rwxr-xr-x   1 root     root         2322 Nov 24 08:44 prtroot
-rwxr-xr-x   1 root     root        11905 Nov 24 08:44 ps
-rwxr-xr-x   1 root     root         2088 Nov 24 08:44 pwd
-rwxr-xr-x   1 root     root         1436 Nov 24 08:44 reboot
-rwxr-xr-x   1 root     root         1514 Nov 24 08:44 rm
-rwxr-xr-x   1 root     root         1738 Nov 24 08:44 rmdir
-rwxr-xr-x   1 root     root        21560 Nov 24 08:44 sed
-rwxr-xr-x   1 root     root        22001 Nov 24 08:44 sh
-rwxr-xr-x   1 root     root         7562 Nov 24 08:44 sleep
-rwxr-xr-x   1 root     root        11058 Nov 24 08:44 sort
-rwxr-xr-x   1 root     root         7831 Nov 24 08:44 ssh
-rwxr-xr-x   1 root     root        20530 Nov 24 08:44 stty
-rwxr-xr-x   1 root     root        12074 Nov 24 08:44 su
-rwxr-xr-x   1 root     root         1314 Nov 24 08:44 sum
-rwxr-xr-x   1 root     root          213 Nov 24 08:44 sync
-rwxr-xr-x   1 root     root        12873 Nov 24 08:44 tail
-rwxr-xr-x   1 root     root        16257 Nov 24 08:44 tar
-rwxr-xr-x   1 root     root          897 Nov 24 08:44 tee
-rwxr-xr-x   1 root     root         1550 Nov 24 08:44 telinit
-rwxr-xr-x   1 root     root        13729 Nov 24 08:44 termcap
-rwxr-xr-x   1 root     root        12461 Nov 24 08:44 tget
-rwxr-xr-x   1 root     root         7922 Nov 24 08:44 touch
-rwxr-xr-x   1 root     root         1565 Nov 24 08:44 tr
-rwxr-xr-x   1 root     root          204 Nov 24 08:44 true
-rwxr-xr-x   1 root     root         6697 Nov 24 08:44 ue
-rwxr-xr-x   1 root     root        10714 Nov 24 08:44 umount
-rwxr-xr-x   1 root     root         2502 Nov 24 08:44 uname
-rwxr-xr-x   1 root     root        11223 Nov 24 08:44 uniq
-rwxr-xr-x   1 root     root        15556 Nov 24 08:44 uptime
-rwxr-xr-x   1 root     root        14966 Nov 24 08:44 uud
-rwxr-xr-x   1 root     root        11214 Nov 24 08:44 uue
-rwxr-xr-x   3 root     root        29969 Nov 24 08:44 vi
-rwxr-xr-x   1 root     root        10305 Nov 24 08:44 wc
-rwxr-xr-x   1 root     root         8671 Nov 24 08:44 which
-rwxr-xr-x   1 root     root        14549 Nov 24 08:44 who
-rwxr-xr-x   1 root     root         1963 Nov 24 08:44 whoami
-rwxr-xr-x   1 root     root        10270 Nov 24 08:44 write
-rwxr-xr-x   1 root     root        10838 Nov 24 08:44 xargs
-rwxr-xr-x   1 root     root          297 Nov 24 08:44 yes
# ls -al /usr/bin
drwxr-xr-x   2 root     root         3072 Nov 24 08:44 .
drwxr-xr-x   9 root     root          512 Nov 24 08:44 ..
-rwxr-xr-x   2 root     root         5425 Nov 24 08:44 [
-rwxr-xr-x   1 root     root        19454 Nov 24 08:44 ac
-rwxr-xr-x   1 root     root         1858 Nov 24 08:44 accton
-rwxr-xr-x   1 root     root        18705 Nov 24 08:44 adv01
-rwxr-xr-x   1 root     root        18440 Nov 24 08:44 adv02
-rwxr-xr-x   1 root     root        18449 Nov 24 08:44 adv03
-rwxr-xr-x   1 root     root        18357 Nov 24 08:44 adv04
-rwxr-xr-x   1 root     root        18368 Nov 24 08:44 adv05
-rwxr-xr-x   1 root     root        18289 Nov 24 08:44 adv06
-rwxr-xr-x   1 root     root        18225 Nov 24 08:44 adv07
-rwxr-xr-x   1 root     root        18174 Nov 24 08:44 adv08
-rwxr-xr-x   1 root     root        17979 Nov 24 08:44 adv09
-rwxr-xr-x   1 root     root        17948 Nov 24 08:44 adv10
-rwxr-xr-x   1 root     root        18278 Nov 24 08:44 adv11
-rwxr-xr-x   1 root     root        18295 Nov 24 08:44 adv12
-rwxr-xr-x   1 root     root        17936 Nov 24 08:44 adv13
-rwxr-xr-x   1 root     root        18244 Nov 24 08:44 adv14a
-rwxr-xr-x   1 root     root        17651 Nov 24 08:44 adv14b
-rwxr-xr-x   1 root     root        23672 Nov 24 08:44 advent
-rw-r--r--   1 root     root        46458 Nov 24 08:44 advent.db
-rwxr-xr-x   1 root     root        15967 Nov 24 08:44 almanac
-rwxr-xr-x   1 root     root        14854 Nov 24 08:44 arithmetic
-rwxr-xr-x   1 root     root        24432 Nov 24 08:44 as09
-rwxr-xr-x   1 root     root        20193 Nov 24 08:44 at
-rwxr-xr-x   1 root     root        19056 Nov 24 08:44 atrun
-rwxr-xr-x   1 root     root        19472 Nov 24 08:44 backgammon
-rwxr-xr-x   1 root     root         1516 Nov 24 08:44 bcpl
-rwxr-xr-x   1 root     root        21083 Nov 24 08:44 calendar
-rwxr-xr-x   1 root     root         6291 Nov 24 08:44 col
-rwxr-xr-x   1 root     root         9757 Nov 24 08:44 comm
-rw-r--r--   1 root     root        25554 Nov 24 08:44 cpp
-rwxr-xr-x   1 root     root        15215 Nov 24 08:44 cron
-rwxr-xr-x   1 root     root         7008 Nov 24 08:44 crypt
-rwxr-xr-x   1 root     root        35933 Nov 24 08:44 dc
-rwxr-xr-x   1 root     root        12571 Nov 24 08:44 deroff
-rwxr-xr-x   1 root     root        16502 Nov 24 08:44 diff
-rwxr-xr-x   1 root     root        12787 Nov 24 08:44 diff3
-rwxr-xr-x   1 root     root        12966 Nov 24 08:44 diffh
-rwxr-xr-x   1 root     root         1618 Nov 24 08:44 dw
-rwxr-xr-x   1 root     root        16082 Nov 24 08:44 dwdate
-rwxr-xr-x   1 root     root         7745 Nov 24 08:44 dwgetty
-rwxr-xr-x   1 root     root        11939 Nov 24 08:44 dwterm
-rwxr-xr-x   1 root     root        16864 Nov 24 08:44 expr
-rwxr-xr-x   1 root     root        20226 Nov 24 08:44 fforth
-rwxr-xr-x   1 root     root        23770 Nov 24 08:44 find
-rwxr-xr-x   1 root     root        13124 Nov 24 08:44 fish
-rwxr-xr-x   1 root     root         2509 Nov 24 08:44 fortune
-rwxr-xr-x   1 root     root         9264 Nov 24 08:44 fortune-gen
-rwxr-xr-x   1 root     root        12688 Nov 24 08:44 icint
-rwxr-xr-x   1 root     root        14061 Nov 24 08:44 icintv
-rwxr-xr-x   1 root     root        13163 Nov 24 08:44 join
-rwxr-xr-x   1 root     root        12672 Nov 24 08:44 ld09
-rwxr-xr-x   1 root     root        10357 Nov 24 08:44 look
-rwxr-xr-x   1 root     root        24179 Nov 24 08:44 m4
-rwxr-xr-x   1 root     root         1979 Nov 24 08:44 makekey
-rwxr-xr-x   1 root     root         9752 Nov 24 08:44 mesg
-rwxr-xr-x   1 root     root        10108 Nov 24 08:44 moo
-rwxr-xr-x   1 root     root        16627 Nov 24 08:44 myst01
-rwxr-xr-x   1 root     root        16708 Nov 24 08:44 myst02
-rwxr-xr-x   1 root     root        16784 Nov 24 08:44 myst03
-rwxr-xr-x   1 root     root        17568 Nov 24 08:44 myst04
-rwxr-xr-x   1 root     root        18259 Nov 24 08:44 myst05
-rwxr-xr-x   1 root     root        16643 Nov 24 08:44 myst06
-rwxr-xr-x   1 root     root        16591 Nov 24 08:44 myst07
-rwxr-xr-x   1 root     root        18650 Nov 24 08:44 myst08
-rwxr-xr-x   1 root     root        18053 Nov 24 08:44 myst09
-rwxr-xr-x   1 root     root        17004 Nov 24 08:44 myst10
-rwxr-xr-x   1 root     root        18186 Nov 24 08:44 myst11
-rwxr-xr-x   1 root     root        12566 Nov 24 08:44 newgrp
-rwxr-xr-x   1 root     root        18418 Nov 24 08:44 picol
-rwxr-xr-x   2 root     root        24824 Nov 24 08:44 pilot
-rwxr-xr-x   1 root     root        20423 Nov 24 08:44 pr
-rwxr-xr-x   1 root     root        15141 Nov 24 08:44 ptx
-rwxr-xr-x   1 root     root        13429 Nov 24 08:44 qrun
-rwxr-xr-x   1 root     root         8530 Nov 24 08:44 rev
-rwxr-xr-x   2 root     root        24824 Nov 24 08:44 rpilot
-rwxr-xr-x   1 root     root         4815 Nov 24 08:44 split
-rwxr-xr-x   1 root     root         8879 Nov 24 08:44 sum
-rwxr-xr-x   2 root     root         5425 Nov 24 08:44 test
-rwxr-xr-x   1 root     root         8477 Nov 24 08:44 time
-rwxr-xr-x   1 root     root        11943 Nov 24 08:44 tsort
-rwxr-xr-x   1 root     root         9821 Nov 24 08:44 ttt
-rwxr-xr-x   1 root     root        21034 Nov 24 08:44 units
-rwxr-xr-x   1 root     root         9514 Nov 24 08:44 wall
-rwxr-xr-x   1 root     root        14113 Nov 24 08:44 wump

8bitCPUでこれだけ動くのは素晴らしいが、unixに似ているのだが微妙な違いが引っかかる。(例えば日付の合わせ方がわからない。説明が見つからない。manでも登録されていない)。これなら母艦のlinuxで良いじゃないという気になってしまった。


他に気になったのは、バックスペースがうまく動かないところ。
stty -a では以下のように表示されるが、baud rateは9600ということはないし微妙...


# stty -a
speed 9600 baud; cs8 -parenb -parodd hupcl -cstopb cread -clocal
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -ixon
-ixoff -ixany
opost onlcr
isig icanon iexten echo echoe echok -echonl -noflsh
eof = ^D eol = <undef> erase = ^H intr = ^C kill = ^U quit = ^\ susp = ^Z
start = ^Q stop = ^S flush = ^O min = 4 time = 0
0 rows 0 columns 0 ypixels 0 xpixels

github上にソースがあり読めば色々おもしろそうだが、各種platformに対応しておりややこしい(github上にsetdateのソースはあるが、このSDには入ってないし)。もう少し調べないと。



multicompでのcamelforthからのbootについて

2022-08-21 10:26:45 | 日記

multicompでは電源ONするとcamelforthが起動し、コマンドを入力することで各OS等が起動する。 どんなものがあるのか確認するためにForthのワード定義をWORDSで見ると、FUZIX, NITROS9, FLEX, BUGGY, SDFORTH, BASIC, SDBOOT, CUBIXあたりがあるが、起動の状況が良くわからない。camelforthはreadme.09を見るとmulticomp6809-master/camelforth/chromium.scrにforthのソースがある模様。 1行64バイト固定長なので単純にエディタでは見えないため、以下のrubyスクリプトで適当に切り出してみた。

   page = 1
   File.open("./camelforth/chromium.scr") do |f|
     catch(:exit) do
       loop do
         puts %Q|===page.#{page}===|
         page += 1
         16.times do
           l = f.read(64)
           throw :exit if l == nil
           puts l
         end
       end
     end
     puts
   end

結果

    : MMUMAP \ enable MMU with 1-1 mapping                29aug15nac
      10 0 DO I DUP 8 LSHIFT OR FFDE ! LOOP 20 FFDE C! ;

    : EFTOCD ( --) \ map top 8K to C000-DFFF so it can be loaded    
      2607 FFDE ! ;

    : CDTOCD ( --) \ restore 1-1 map                                
      2606 FFDE ! ;


    \ Multicomp extras: start CUBIX/BASIC/BUGGY/FORTH     29aug15nac
    : CUBIX \ 4KB from SD at 0x2.0000                               
      MMUMAP EFTOCD                                                 
      2 SDLBA2 0 D800 4 SDRDn 0 SDLBA2 \ load bootloader to F800    
      CDTOCD PIVOTRST ;                \ restore map, go thru RST

    : SDBOOT ( n - ) \ 8KB from SD at 0x2.nnnn and jmp thru RST     
      MMUMAP EFTOCD 2 SDLBA2                                        
      ( n ) C000 10 SDRDn 0 SDLBA2  \ load 8Kb from n to E000       
      CDTOCD 2787 FFDE ! PIVOTRST ; \ restore map, protect, jmp

    : BASIC   1000 SDBOOT ; \ on SD at 0x2.1000

    : SDFORTH 0FF0 SDBOOT ; \ on SD at 0x2.0FF0 - blk file with src

    : BUGGY \ 7KB from SD at 0x2.1E00                               
      MMUMAP EFTOCD                                                 
      2 SDLBA2 1E00 C400 E SDRDn 0 SDLBA2 \ load to E400            
      CDTOCD PIVOTRST ; \ restore map, go thru RST vector

    \ Multicomp extras: start FLEX/NITROS9/FUZIX          10may16nac
    : FLEX \ 512 bytes (256 used) from SD at 0x2.2000               
      MMUMAP                                                        
      2 SDLBA2 2000 C100 SDRD 0 SDLBA2                              
      C100 PIVOT ;                  ( entry point of loader)

    : NITROS9 \ load track34 and start it                           
      \ disk is on SD at 0x2.8000 so track34 is at 0x2.84C8         
      MMUMAP EFTOCD                                                 
      2 SDLBA2 84C8 2600   \ load from 0x2.84C8 to 2600             
      12 SDRD256n 0 SDLBA2 \ 18 (hex 12) 256-byte sectors           
      \ vectors to RAM expected by krn                              
      0100 DFF2 ! 0103 DFF4 ! 010F DFF6 ! \ SWI3 SWI2 FIRQ          
      010C DFF8 ! 0106 DFFA ! 0109 DFFC ! \ IRQ  SWI  NMI           
      CDTOCD 2602 PIVOT ;  \ restore map, start at 2602             
    : FUZIX MMUMAP 3 SDLBA2 0 D000 SDRD D000 PIVOT ;

⇒MMUの仕様がわからないとさっぱり解読出来ない。

そこでmulticomp6809-master/multicomp/Components/MMAPPPER2/mem_mapper2.vhdを読む(vhdlは良くわからないけどコメントで説明がある)。

6809は8ビットCPUでアドレス空間は64KB。そこでMMUで8KB毎にマッピングを行っている。論理的な8KBx8ブロックを物理的な8KBx128ブロックに対応させるため、$FFDE, $FFDFに書き込みによりコントロールを行う。

リセット直後はMMUは無効なので、MMUMAPで以下のようにマップの初期設定を行っている。 「10 0 DO I DUP 8 LSHIFT OR FFDE ! LOOP 20 FFDE C!」 $FFDE(下4bitは論理アドレスブロック)と$FFDF(下7ビットは物理アドレスブロック)に同じもの(0〜$f)を書き込み、1-1マッピングと呼ばれる状態とした上で、MMUイネーブル。

EFTOCDは、「2607 FFDE !」により、論理アドレスブロックに6、対応する物理アドレスブロックに7を設定。 これによりCPUがブロック6の$CDxxをアクセスすると、ブロック7の$EFxx領域がアクセスされることになる。
CDTOCDは、「2606 FFDE !」により、論理アドレスブロックに6、対応する物理アドレスブロックは6と戻す。
要するに、$EFxxの8KBはROM領域なので書けない。そこで$EFxxのRAMを$CDxxにマップさせて書き込みを行い、元に戻す。最終的にROMを無効化すれば良いという考え。

ROMの無効化は以下のようになる。6809CPU自身が$A0をFFDEに書き込みROMの無効化($FFDE bit7=1)を行っている。

    : piv ( --) \ helper for PIVOT, PIVOTRST                        
      4F   1000 C!                     ( CLRA)                      
      1F8B 1001 !                      ( TFR A,DP)                  
      86A0 1003 !                      ( LDA #A0)                   
      B7   1005 C! FFDE 1006 !         ( STA FFDE ; page ROM out)   
      1000 EXECUTE                                                  
    ;                                                               
    : PIVOT ( addr --) \ copy to RAM, init DP, disable ROM, jump    
      7E   1008 C!      1009 !         ( JMP addr ; go there)       
      piv ;

これを見ながら最初のCUBIXからFUZIXまでのブート定義を見ると理解出来た。


Multicompでのnitros9

2022-08-14 10:23:24 | 日記

Multicomp Cycllne II-C で先日flexを動かしたが、flexだけではもったいない。同sdでNitros9(os9)があるので試してみた。

電源を入れるとCamelForthが起動する。そこでNITROS9と入力すると日付と時間を聞いてくる(yyyy/mm/dd hh:mm:ss)。
プロンプトは{Terml02}/DD:

ここで困った。CP/M, dos, linuxのコマンドはわかるが、os9は全くわからない。 Webで調べて見るとある程度unixに類似している。そこで良く使うコマンドの簡単な対比表を作成してみた。(細かな動きは違う)

nitros9 unixで相当するコマンド 詳細
chd chdir working directoryの変更
pwd pwd working directoryの表示
chx   execution directoryの変更
pwx   execution directoryの表示
copy cp ファイルのコピー
del rm ファイル削除
dir ls ファイルの一覧
list cat ファイルの内容をstandard outputへ
makdir mkdir ディレクトリの作成
rename mv ファイル名称の変更
build   コンソールからの入力でファイルを作成
date date 日付を表示する。date t で時刻を含めて表示する
settime date [MMDDhhmmYY] settime [y,m,d,h,m,s] 時刻を設定する
echo echo  
help man  

ファイル構造もunixに似ており、/d0/CMDS/ などと表すことが出来る。 リダイレクトや(|ではなく!だが)パイプラインも使える。コマンド名は違うが、ほとんどunix? と思ったが、さらに調べて見ると、/D0/CMDS にunixそっくりのコマンドが...
cp, rm, ls, cat, grep, mv, more, tar, cut, wc, touch, tee, ln, ar, fgrep (なぜかここにcdはないのだが使える)

os9のマニュアルには記載がないので、Nirots9なのか、このディストリビューション独自なのかわからないが、簡単な操作には困らない。(やはり引数が違いがあり、 ls -alはエラー。 dir -eで詳細が表示される)

以下の面白そうなツールもあるが、良くわからん。

asm アセンブラ
basic09 Basic
cc cコンパイラ
edit エディタ


ハードディスクが壊れたので交換

2022-08-09 14:31:41 | 日記

2022/8/6 ディスクが1本故障。ソフトウエアでraid1(2TB+2TB)を使用していたためデータは無事というものの、いつもう一本故障するかもしれない。 急ぎディスクを注文。最近価格が安くなっているので思い切って8TBディスク2本とした。

8/7朝に宅配便で到着(便利になったものだ)。1本目の交換をすぐに行い一旦休止。 8/8夜から2本目の交換を行い、8/9昼には終了した。

ここでは今後の参考にリビルドと領域拡張について記録する。

  • 構成

    • Debian GNU/Linux 10 (buster)
    • sda 1TBに/を置き、2TBのraid1(sdb,sdc)に/home, /etc, /var 等ディレクトリを置く。
  • ディスクの故障状況(気づいた時にはsdbが既に故障して切り離されていた)

    $ cat /proc/mdstat
    Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]  
    md0 : active raid1 sdc1[2]
          1953382336 blocks super 1.2 [2/1] [U_]
    
    unused devices: 
    

                2TBのディスクが4.1GBと認識されている。

                

  • PCを停止

    $ sudo shutdown -h now
    
  • 故障したディスクを交換し起動

  • 新規ディスクにパーティション作成(2TB超えのためpartedを使用)

    $ sudo parted -s /dev/sdb print
    Error: /dev/sdb: unrecognised disk label
    Model: ATA WDC WD80EAZZ-00B (scsi)
    Disk /dev/sdb: 8002GB
    Sector size (logical/physical): 512B/4096B
    Partition Table: unknown
    Disk Flags:
    $ sudo parted /dev/sdb
    GNU Parted 3.2
    Using /dev/sdb
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) mklabel gpt
    (parted) mkpart primary 0% 100%
    (parted) print
    Model: ATA WDC WD80EAZZ-00B (scsi)
    Disk /dev/sdb: 8002GB
    Sector size (logical/physical): 512B/4096B
    Partition Table: gpt
    Disk Flags:
    
    Number  Start   End     Size    File system  Name     Flags
     1      1049kB  8002GB  8002GB               primary
    
    (parted) set 1 raid on
    (parted) print
    Model: ATA WDC WD80EAZZ-00B (scsi)
    Disk /dev/sdb: 8002GB
    Sector size (logical/physical): 512B/4096B
    Partition Table: gpt
    Disk Flags:
    
    Number  Start   End     Size    File system  Name     Flags
     1      1049kB  8002GB  8002GB               primary  raid
    
    (parted) quit
    Information: You may need to update /etc/fstab.
    
  • 新規ディスクのraidへ参加

    $ sudo mdadm --manage /dev/md0 --add /dev/sdb1
    mdadm: added /dev/sdb1
    $ cat /proc/mdstat
    Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
    md0 : active raid1 sdb1[3] sdc1[2]
          1953382336 blocks super 1.2 [2/1] [U_]
          [>....................]  recovery =  0.0% (381952/1953382336) finish=596.5min speed=54564K/sec
    
    unused devices: 
    $ cat /proc/mdstat
    Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
    

    md0 : active raid1 sdb1[3] sdc1[2] 1953382336 blocks super 1.2 [2/1] [U_] [>....................] recovery = 0.3% (6095552/1953382336) finish=792.1min speed=40970K/sec

    unused devices: 
    
  • リビルド完了まで待つ(12時間ぐらいかかった)
    これでデータは安心だが、2TBと8TBでのraid1(容量としては2TBのみ)。故障していない2TB側も交換する。

  • リビルド完了後に、2TBのデスク切り離しのためfail、removeする

    $ cat /proc/mdstat
    Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
    md0 : active raid1 sdb1[3] sdc1[2]
          1953382336 blocks super 1.2 [2/2] [UU]
    
    unused devices: 
    $ sudo mdadm --manage /dev/md0 --fail /dev/sdc1
    mdadm: set /dev/sdc1 faulty in /dev/md0
    $ sudo mdadm --manage /dev/md0 --remove /dev/sdc1
    mdadm: hot removed /dev/sdc1 from /dev/md0
    $ sudo cat /proc/mdstat
    Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
    md0 : active raid1 sdb1[3]
          1953382336 blocks super 1.2 [2/1] [_U]
    
    unused devices: 
    
  • PCを停止

    $ sudo shutdown -h now
    
  • 2TBのディスクを8TB新規ディスクに交換し起動

  • 新規ディスクにパーティション作成(2TB超えのためpartedを使用)

    $ sudo parted -s /dev/sdc print
    Error: /dev/sdc: unrecognised disk label
    Model: ATA WDC WD80EAZZ-00B (scsi)
    Disk /dev/sdc: 8002GB
    Sector size (logical/physical): 512B/4096B
    Partition Table: unknown
    Disk Flags:
    $ sudo parted /dev/sdc
    GNU Parted 3.2
    Using /dev/sdc
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) mklabel gpt
    (parted) mkpart primary 0% 100%
    (parted) print
    Model: ATA WDC WD80EAZZ-00B (scsi)
    Disk /dev/sdc: 8002GB
    Sector size (logical/physical): 512B/4096B
    Partition Table: gpt
    Disk Flags:
    
    Number  Start   End     Size    File system  Name     Flags
     1      1049kB  8002GB  8002GB               primary
    
    (parted) set 1 raid on
    (parted) print
    Model: ATA WDC WD80EAZZ-00B (scsi)
    Disk /dev/sdc: 8002GB
    Sector size (logical/physical): 512B/4096B
    Partition Table: gpt
    Disk Flags:
    
    Number  Start   End     Size    File system  Name     Flags
     1      1049kB  8002GB  8002GB               primary  raid
    
    (parted) quit
    Information: You may need to update /etc/fstab.
    
  • 8TBディスクをraidへ参加

    $ sudo mdadm --manage /dev/md0 --add /dev/sdc1
    mdadm: added /dev/sdc1
    $ sudo cat /proc/mdstat
    Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
    md0 : active raid1 sdc1[2] sdb1[3]
          1953382336 blocks super 1.2 [2/1] [_U]
          [>....................]  recovery =  0.0% (645952/1953382336) finish=554.2min speed=58722K/sec
    
    unused devices: 
    
  • リビルド完了まで待つ(14時間ぐらいかかった)

  • ディスクの領域拡張
    raid1なので、不必要な同期をしないように --assume-clean をつけておく

    $ sudo mdadm --grow /dev/md0 --size=max --assume-clean
    mdadm: component size of /dev/md0 has been set to 7813894144K
    $ sudo resize2fs -p /dev/md0
    resize2fs 1.44.5 (15-Dec-2018)
    Filesystem at /dev/md0 is mounted on /home; on-line resizing required
    old_desc_blocks = 117, new_desc_blocks = 466
    The filesystem on /dev/md0 is now 1953473536 (4k) blocks long.
    
  • ディスクの状況

    $ cat /proc/mdstat
    Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
    md0 : active raid1 sdb1[3] sdc1[2]
          7813894144 blocks super 1.2 [2/2] [UU]
    

以上で終了。


Multicomp Cycllne II-C でflexが動いた

2022-08-07 14:48:22 | 日記

Multicomp Cycllne II-C でflexが動いた

せっかくmulticompが動くのに、CP/Mだけではもったいないのでflexを動かした。

Web上では色々な情報があるが、とりあえず単純な方法を使う。
[1]fpgaの書き込み
 https://github.com/nealcrook/multicomp6809 から一式ダウンロード
 multicomp6809-master/multicomp/MicrocomputerPCB/MicrocomputerPCB.qsf
 をQualtus II 13.0.1でコンパイルしfpgaに書き込み

[2]sdカード書き込み
 ダウンロードした中の、bin/create_sd_image等を使えば、sdカードのイメージが作れそうだったが良くわからない。

 そこでてっとり速く
 https://www.retrobrewcomputers.org/doku.php?id=boards:sbc:multicomp:cycloneii-c:start から
 multicomp09_sd.zip 22Apr2017 をダウンロードし、ddでカードへ書き込み(SDHCでもOK)


[3]起動
  RS232C(115200baud)で接続し電源を入れるとCamelForthが起動する。

[4]flexを起動
 FLEXと入力すると日付を聞いてくる。(2000年問題は大丈夫?)
 プロンプトは +++

 

 ここで困った。CP/M, dos, linuxのコマンドはわかるが、flexは全くわからない。

[5]簡単なコマンド
 マニュアルはインターネット上で検索すれば出てくるが、ちょっと違うので簡単に調べた。
 CamelForthでは大文字小文字は区別するが、flexはしないようだ。なおバックスペースは起動時は0x08になっているので、シリアルソフトで合わせた方が幸せになる。コマンドと引数間のセパレータには「,」を使うらしい。慣れるまでは見にくい。スペースも可のようだが郷にいれば郷に従えで、記載には「,」を使っている。

 ASN[,W=<drive>][,S=<drive>]

  システムとワーキングドライブを指定する。(引数がなければ、表示だけ)
  ドライブは0〜3の4つ。初期ではシステムドライブは0, ワーキングドライブも0

     コマンドを入力時にコマンドを探すのがシステムドライブ。データの読み込み、書き込みを行うのがワーキングドライブ
  なのでユーティリティ類はドライブ0, 開発中のPGはドライブ1などとしておけば便利に使える。
  さらにオート(a)を指定すれば0〜3まで順に探してくれ、非常に便利(CP/Mでも欲しかった)。
   

  例 ASN,S=A,W=1

  注意点
   ASN.CMD自身がドライブ0にある。なのでASN,S=1とかするとその後はASN出来ない。コマンド類はほとんどドライブ0のため詰む。

  FILES[,<drive list>][,<match list>]
  CAT[,<drive list>][,<match list>]
  DIR[,<drive list>][,<match list>] 
   ドライブ内のリストを表示
  FILESはファイル名を表示、CATはファイル名とサイズを表示、DIRはファイル名とディスク内位置(セクタ?)、サイズ、日付等を表示
  例 DIR,1

    注意点
   match listはファイル名や拡張子の先頭とマッチさせる。このため CAT,1,.C では、拡張子が Cだけでなく CMD や COR も出てくる

  COPY,<file spec>,<file spec>
  COPY,<file spec>,<drive>
  COPY,<drive>,<drive>[,<match list>
  ファイルのコピー
  例 COPY,0.COPY.CMD,1.COPY.CMD
              COPY,COPY.CMD,2
              COPY,0,2,.CMD

  DELETE,<file spec>[,<file list>]
       ファイル削除
        例 DELETE,1.COPY.CMD

  DATE[,<mm,dd,yy>]
    日付の設定(引数がなければ、表示だけ)
        例 DATE,08,07,22

  EXEC
        Default extention: .TXT
  CP/MのSUBMITのようなもの
  例 EXEC,1.TEST

  BUILD,<file spec>
        Default extension: .TXT
  あえていうならCP/Mでの、PIP ファイル名=CON: みたいなものかな? 
  小さいPGを作るのには、エディタを起動しなくてもよいので便利。
         例 BUILD,TEST
               以降プロンプトが「=」に変わるのでテキストを入力。1文字目「#」で終了

   LIST,<file spec>[,<line range>][,+(options)]
          Default extension: .TXT
  ファイルの中身を表示
             option N ラインナンバー付与
          P 印字用にフォーマット(Title等)
  例 LIST,0.WC.C,1-10,+N

  HELP,<コマンド名>
         コマンド名.HLPを表示する。unixのmanのようなもの。

  BASIC, XBASIC
         PRINT, FOR NEXT, GOTO 程度を使った数行程度のPGを実行してみた。詳細不明違。

  VED2[,<file spec>]
  viライクなスクリーンエディタ
         例 VED2,TEST.TXT

  CC[,<file spec>]
   Cコンパイラ
          例 CC,WC.C

  ASMB,<file spec>
  ASMB,<input file spec>,<binary file spec>
  ASMB,<input file spec>[,<binary file spec>][,+<option list>]
         Default extension: .TXT
  アセンブラ

[6]コンパイル例(付属しているゲーム)

FILES ON DRIVE NUMBER 1

ADVENT1.DAT    ADVENT2.DAT    ADVENT3.DAT    ADVENT4.DAT    ADVENT5.DAT    
ADVENT6.DAT    ADVENT.C       SAVEADV.C      ENGLISH.C      ITVERB.C       
DATABASE.C     TURN.C         VERB.C         ADVENT.H       ADVENT.DOC     
MAKEADV.TXT    LINKADV.TXT

+++EXEC MAKEADEV

+++FILES

FILES ON DRIVE NUMBER 1

ADVENT1.DAT    ADVENT2.DAT    ADVENT3.DAT    ADVENT4.DAT    ADVENT5.DAT    
ADVENT6.DAT    ADVENT.C       SAVEADV.C      ENGLISH.C      ITVERB.C       
DATABASE.C     TURN.C         VERB.C         ADVENT.H       ADVENT.DOC     
MAKEADV.TXT    LINKADV.TXT    ADVENT.R       SAVEADV.R      ENGLISH.R
ITVERB.R       DATABASE.R     TURN.R         VERB.R         ADVENT.CMD     

+++1.ADVENT


Go read a book while I get my act together...

Welcome to adventure!!  Would you like instructions?
>y


Somewhere nearby is Colossal Cave, where others have
found fortunes in treasure and gold, though it is rumored
that some who enter are never seen again.  Magic is said
to work in the cave.  I will be your eyes and hands.  Direct
me with commands of 1 or 2 words.  I should warn you that I
look at only the first five letters of each word, so you'll
have to enter "Northeast" as "ne" to distinguish it from
"North".  (Should you get stuck, type "help" for some
general hints.

This program was originally developed by Willie Crowther.
Most of the features of the current program were added by
Don Woods.  This version, written in BDS 8080 C was adapted
by Jay R. Jaeger.
You are inside a building, a well house for a large spring.
There are some keys on the ground here.
There is a shiny brass lamp nearby.
There is tasty food here.
There is a bottle of water here.

アドベンチャーゲームだが、よくわからん。