OS-9/X68000に関するページです。

参照回数[

  1. OS-9/X68000って知ってますか?。
    その昔モトローラ社のMPU 6809(8bit !!)用にマイクロウェア社が開発 したオペレーティングシステム(OS-9/6809)を源流としてMPU 68000シリーズ用 に発表された OS-9/68000(OSKと呼ぶ場合も有る)をSHARP X68000シリーズに対 応させた物で、TSSを基本としたマルチユーザ&マルチタスクを可能とする、 現在の基準に当てはめても遜色の無い先進のオペレーティングシステムでした。

  2. OS-9(6809/68000),OS-9000関係のftp site

  3. 私の作ったふりーうぇあ(^^;。

  4. OS-9/X68000 物理フロッピーからベタイメージの吸出しスクリプト(Linux)
    getxos9fdimg.sh
    #! /bin/sh
    #
    # OS-9/X68000 BOOT DISK
    #   セクタ長  セクタ/トラック ヘッド数 シリンダ数
    #   256バイト 26              2        77 (No.0: IPL, No.1 to 76: DATA)
    #
    # OS-9/X68000 DATA DISK
    #   セクタ長  セクタ/トラック ヘッド数 シリンダ数
    #   不定(未使用)------------- 2        1 (No.0)
    #   256バイト 26              2        76 (No.1 to 76: DATA)
    #
    
    ipl="n"
    drive="1"
    output="fd.img"
    
    while [ "$#" != "0" ]
    do
    	case $1 in
    	-h|--help )
    		echo "Usage: $0 [options] output"
    		echo "get image file from OS-9/X68000 floppy."
    		echo ""
    		echo " -h|--help           show help"
    		echo " -b|--boot           get bootable disk"
    		echo " -d|--drive DRIVE    default 1(/dev/fd1)"
    		echo " output              default fd.img(1,025,024 bytes = 77cyl * 2head * 26secs * 256bytes)"
    		echo ""
    		exit 0
    		;;
    	-b|--boot )
    		ipl="y"
    		;;
    	-d|--drive )
    		shift
    		drive="$1"
    		;;
    	*)
    		output="$1"
    		;;
    	esac
    	shift
    done
    
    total_cyl=77
    total_head=2
    gpl=27
    dtl=255
    secsz=1 # 128*2^secsz = 256
    spt=26
    
    cp /dev/null ${output}
    
    floppycontrol -d /dev/fd${drive} --resetnow 2
    floppycontrol -d /dev/fd${drive} --reset 2
    
    cyl=0
    head=0
    sec=1
    drvsel=`echo "${head} * 4 + ${drive}" | bc`
    length=`echo "${spt} * 128 * 2^${secsz}" | bc`
    
    while [ ${cyl} -lt ${total_cyl} ]
    do
    
    	fdrawcmd drive=/dev/fd${drive} \
    		rate=0 \
    		seek ${drvsel} ${cyl}
    
    	while [ ${head} -lt ${total_head} ]
    	do
    		echo "cyl=${cyl} head=${head} sec=${sec} drvsel=${drvsel} length=${length}"
    
    		if [ ${cyl} -eq 0 ]
    		then
    			if [ ${ipl} = "y" ]
    			then
    				fdrawcmd drive=/dev/fd${drive} \
    					rate=0 \
    					length=${length} \
    					cylinder=${cyl} \
    					read ${drvsel} ${cyl} ${head} ${sec} ${secsz} ${spt} ${gpl} ${dtl} >>${output}
    			else
    				dd bs=${length} count=1 if=/dev/zero >>${output}
    			fi
    		else
    			fdrawcmd drive=/dev/fd${drive} \
    				rate=0 \
    				length=${length} \
    				cylinder=${cyl} \
    				read ${drvsel} ${cyl} ${head} ${sec} ${secsz} ${spt} ${gpl} ${dtl} >>${output}
    		fi
    
    		head=`expr ${head} + 1`
    		drvsel=`echo "${head} * 4 + ${drive}" | bc`
    	done
    	head=0
    	drvsel=`echo "${head} * 4 + ${drive}" | bc`
    	cyl=`expr ${cyl} + 1`
    done
    

  5. OS-9/X68000 物理フロッピーのベタイメージからD88ファイルに変換するスクリプト(Linux)
    makexos9d88.sh
    #! /bin/sh
    #
    # D88 format
    #
    # ディスクイメージ
    #   +---------------------+
    #   |      ヘッダ部       | サイズ 0x2b0 バイト
    #   +---------------------+
    #   |トラック部 (0 Track) | サイズ 不定
    #   +---------------------+
    #   |トラック部 (1 Track) | サイズ 不定
    #   +---------------------+
    #   |         ・          | ・
    #   |         ・          | ・
    #   |         ・          | ・
    #   +---------------------+         トラック部の数は不定
    #
    # ヘッダ部分の詳細
    #   offset  サイズ
    #    0x00     17        ディスクの名前(ASCII + '\0')
    #    0x11      9        リザーブ ( 0x00 )
    #    0x1a      1        ライトプロテクト  0x00 なし、0x10 あり
    #    0x1b      1        ディスクの種類    0x00 2D、 0x10 2DD、 0x20 2HD
    #    0x1c      4        ディスクのサイズ
    #    0x20    4*164      トラック部のオフセットテーブル 0 Track 〜 163 Track
    #
    # トラック部の詳細
    #   トラック部は、セクタ部を必要数連結したもの
    #
    # セクタ部の詳細
    #   offset  サイズ
    #    0x00      1        ID の C
    #    0x01      1        ID の H
    #    0x02      1        ID の R
    #    0x03      1        ID の N
    #    0x04      2        このトラック内に存在するセクタの数
    #    0x06      1        記録密度 0x00 倍密度、0x40 単密度、0x01 高密度
    #    0x07      1        DELETED MARK     0x00 ノーマル、0x10 DELETED
    #    0x08      1        ステータス
    #    0x09      5        リザーブ
    #    0x0e      2        このセクタ部のデータサイズ
    #    0x10     不定      データ (サイズは、0x0e に格納しているバイト数)
    #
    
    ipl="n"
    input=""
    output=""
    
    while [ "$#" != "0" ]
    do
    	case $1 in
    	-h|--help )
    		echo "Usage: $0 [options] input output"
    		echo "convert floppy image file to d88 format file."
    		echo ""
    		echo " -h|--help   show help"
    		echo " -b|--boot   convert bootable disk"
    		echo " input       default fd.img"
    		echo " output      default fd.d88"
    		echo ""
    		exit 0
    		;;
    	-b|--boot )
    		ipl="y"
    		;;
    	*)
    		if [ "X${input}" = "X" ]
    		then
    			input="$1"
    		elif [ "X${output}" = "X" ]
    		then
    			output="$1"
    		else
    			echo "Unknown option: $1"
    			exit 1
    		fi
    		;;
    	esac
    	shift
    done
    
    if [ "X${input}" = "X" ]
    then
    	input="fd.img"
    fi
    
    if [ "X${output}" = "X" ]
    then
    	input="fd.d88"
    fi
    
    headsz=`echo "17+9+1+1+4+4*164"|bc`
    sectsz=`echo "1+1+1+1+2+1+1+1+5+2+256"|bc`
    spt=26
    total_cylinder=77
    total_over_cylinder=82
    total_head=2
    
    #--------------------
    # Header
    #--------------------
    
    # Disk name
    echo -n "Default" >${output}
    echo -n -e "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" >>${output}
    
    # Reserve area
    echo -n -e "\x00\x00\x00\x00\x00\x00\x00\x00\x00" >>${output}
    
    # Write protect off
    echo -n -e "\x00" >>${output}
    
    # Disk type 2HD
    echo -n -e "\x20" >>${output}
    
    # Disk size
    disksize=`echo "${headsz}+${sectsz}*${spt}*${total_cylinder}*${total_head}" | bc`
    disksize_hex=`printf "%08x" ${disksize}|sed -e 's/^\(..\)\(..\)\(..\)\(..\)$/\\\\x\4\\\\x\3\\\\x\2\\\\x\1/'`
    echo -n -e ${disksize_hex} >>${output}
    
    # Offset for each sector part
    offset=${headsz}
    c=0
    while [ ${c} -lt ${total_cylinder} ]
    do
    	offset_hex=`printf "%08x" ${offset}|sed -e 's/^\(..\)\(..\)\(..\)\(..\)$/\\\\x\4\\\\x\3\\\\x\2\\\\x\1/'`
    	echo -n -e ${offset_hex} >>${output}
    
    	offset=`echo "${offset}+${sectsz}*${spt}" | bc`
    	offset_hex=`printf "%08x" ${offset}|sed -e 's/^\(..\)\(..\)\(..\)\(..\)$/\\\\x\4\\\\x\3\\\\x\2\\\\x\1/'`
    	echo -n -e ${offset_hex} >>${output}
    
    	c=`expr ${c} + 1`
    	offset=`echo "${offset}+${sectsz}*${spt}" | bc`
    done
    
    # Offset for filler secter part
    while [ ${c} -lt ${total_over_cylinder} ]
    do
    	offset=0
    	offset_hex=`printf "%08x" ${offset}|sed -e 's/^\(..\)\(..\)\(..\)\(..\)$/\\\\x\4\\\\x\3\\\\x\2\\\\x\1/'`
    	echo -n -e ${offset_hex} >>${output}
    
    	offset=0
    	offset_hex=`printf "%08x" ${offset}|sed -e 's/^\(..\)\(..\)\(..\)\(..\)$/\\\\x\4\\\\x\3\\\\x\2\\\\x\1/'`
    	echo -n -e ${offset_hex} >>${output}
    
    	c=`expr ${c} + 1`
    done
    
    #--------------------
    # Tracks
    #--------------------
    
    n=1
    # den=1 # なぜか高密度(2HD)ではseek errorで読めないD88ファイルになってしまう...
    den=0
    sts=0
    rsv=0
    secsz=`echo "128*2^${n}"|bc`
    
    c=0
    while [ ${c} -lt ${total_cylinder} ]
    do
    	h=0
    	while [ ${h} -lt ${total_head} ]
    	do
    		r=1
    		while [ ${r} -le ${spt} ]
    		do
    			#--------------------
    			# Sectors
    			#--------------------
    
    			# Cylinder
    			c_hex=`printf "%02x" ${c}|sed -e 's/^\(..\)$/\\\\x\1/'`
    			echo -n -e ${c_hex} >>${output}
    
    			# Head
    			h_hex=`printf "%02x" ${h}|sed -e 's/^\(..\)$/\\\\x\1/'`
    			echo -n -e ${h_hex} >>${output}
    
    			# Sector
    			r_hex=`printf "%02x" ${r}|sed -e 's/^\(..\)$/\\\\x\1/'`
    			echo -n -e ${r_hex} >>${output}
    
    			# Sector size(128*2^${n})
    			n_hex=`printf "%02x" ${n}|sed -e 's/^\(..\)$/\\\\x\1/'`
    			echo -n -e ${n_hex} >>${output}
    
    			# Sector/track
    			spt_hex=`printf "%04x" ${spt}|sed -e 's/^\(..\)\(..\)$/\\\\x\2\\\\x\1/'`
    			echo -n -e ${spt_hex} >>${output}
    
    			# Dencity(2DD)
    			den_hex=`printf "%02x" ${den}|sed -e 's/^\(..\)$/\\\\x\1/'`
    			echo -n -e ${den_hex} >>${output}
    
    			# Delete mark
    			if [ ${c} -eq 0 ]
    			then
    				if [ ${ipl} = y ]
    				then
    					dm=0
    				else
    					dm=1
    				fi
    			else
    				dm=0
    			fi
    			dm_hex=`printf "%02x" ${dm}|sed -e 's/^\(..\)$/\\\\x\1/'`
    			echo -n -e ${dm_hex} >>${output}
    
    			# Status
    			sts_hex=`printf "%02x" ${sts}|sed -e 's/^\(..\)$/\\\\x\1/'`
    			echo -n -e ${sts_hex} >>${output}
    
    			# Reserve
    			rsv_hex=`printf "%010x" ${rsv}|sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)$/\\\\x\5\\\\x\4\\\\x\3\\\\x\2\\\\x\1/'`
    			echo -n -e ${rsv_hex} >>${output}
    
    			# Sector size
    			secsz_hex=`printf "%04x" ${secsz}|sed -e 's/^\(..\)\(..\)$/\\\\x\2\\\\x\1/'`
    			echo -n -e ${secsz_hex} >>${output}
    
    			# Sector data
    			skip=`echo "${c}*${total_head}*${spt} + ${h}*${spt} + ${r} - 1"|bc`
    			dd bs=${secsz} skip=${skip} count=1 if=${input} of=${input}.tmp
    			cat ${input}.tmp >>${output}
    			echo ${c}_${h}_${r}
    
    			r=`expr ${r} + 1`
    		done
    		h=`expr ${h} + 1`
    	done
    	c=`expr ${c} + 1`
    done
    rm ${input}.tmp
    
  6. XM6 TypeGから(仮想)MOを利用する方法
    エミュレータの操作

    OS-9/X68000の操作
    $ chd cmds/bootobjs
    $ fdisk
    
    (1)SCSI(内蔵) (2)SCSI(ボード) (3)ハードディスク
    >ハードディスク・タイプを選択して下さい (1-3,?,q): 2
    
    (1)レベル2 (2)レベル4
    >割り込みレベルを選択して下さい (1-2,?,q): 1
    >ターゲットのSCSI IDを選択して下さい (0-7,?): 2
    
    パーティションが初期化されていません!
    パーティションを使用する場合は、初めにHuman68kでフォーマットして下さい。
    OS-9だけで使用するには、デバイス全体用のディスクリプタが必要です。
    ディスクリプタを作成しますか (Y/N)? Y
    
    >モジュール名を入力して下さい (最大 15文字) [h0]: m2
    >格納ディレクトリを入力して下さい (最大256文字) []: 
    
     フォーマット可能 : m2fmt (file=m2fmt_all)
     フォーマット不可 : m2    (file=m2_all)
     デフォルト・デバイス用   (file=dd.m2_all)
    よろしいですか (Y/N)? Y
    
    $ load -d m2fmt_all
    $ iniz m2fmt
    $ format /m2fmt
    
    ディスク フォーマット
    OS-9/68K V2.4 SHARP X68000 - 68000
    ----------------------------------
    固定値:
     ディスク・タイプ: ハード(ディスク着脱式)
     セクタ・サイズ: 256
     ディスク容量: 248822 セクタ
                  (127396864 バイト)
     セクタ・オフセット: 0
     トラック・オフセット: 0
     LSN オフセット: $000004
     アロケーション最小セクタ: 8
    
    可変値:
     セクタ・インタリーブ: 1
    
    フォーマット・デバイス: /m2fmt
    よろしいですか? Y
    ハード・ディスクです。よろしいですか? Y
    物理フォーマットしますか? Y
    物理ベリファイしますか? N
    ボリューム名: 
    ビットマップ作成中
    ルートディレクトリを作成中
    
    $ load -d m2_all
    $ iniz m2
    
  7. MOにtarで書き込む方法
    $ tar cvf - . | wrd /m2
    
  8. MOからtarで読み込む方法
    $ rrd /m2 | tar tf -
    
  9. 上記の方法で書き込んだMOをLinux等のtarで読む方法
    $ dd bs=256 skip=10 if=scsimo_superfd.MOS of=scsimo_superfd.tar
    $ tar xvf scsimo_superfd.tar
    

Return to top page of Masa's WebPage
introduction of kyoto internet people
[更新]