#!/bin/bash #- usage: #- converting: bash rom2cas.sh file.rom #- converting and playing: bash rom2cas.sh file.rom -p #- dependencies: #- cas2wav (castools) #- play (sox) #------------------------------------------------------------------ #------------------------------------------------------------------ #- splitting rom dd ibs=1 count=$((0x4000)) skip=$((0x0000)) if="$1" of=_split1_2_.bin dd ibs=1 count=$((0x4000)) skip=$((0x4000)) if="$1" of=_split2_2_.bin dd ibs=1 count=$((0x0002)) skip=$((0x0002)) if="$1" of=_abjump_.bin #------------------------------------------------------------------ #------------------------------------------------------------------ #- removing and creating .cas file rm "$1".cas rm "`basename "$1" .rom`.cas" rm _1_.cas touch _1_.cas romsize=$(wc -c <"$1") romsize=$((romsize/1024)) #------------------------------------------------------------------ #------------------------------------------------------------------ # run"cas:" loader echo 0:1FA6DEBACC137D74 | xxd -r >> _1_.cas echo 0:EAEAEAEAEAEAEAEAEAEA | xxd -r >> _1_.cas printf "LOADER" >> _1_.cas echo 0:1FA6DEBACC137D74 | xxd -r >> _1_.cas printf "10 KEYOFF:CLS" >> _1_.cas echo 0:0D0A | xxd -r >> _1_.cas printf "20 BLOAD" >> _1_.cas echo 0:22 | xxd -r >> _1_.cas printf "cas:" >> _1_.cas echo 0:22 | xxd -r >> _1_.cas printf ",r" >> _1_.cas echo 0:0D0A | xxd -r >> _1_.cas printf "30 BLOAD" >> _1_.cas echo 0:22 | xxd -r >> _1_.cas printf "cas:" >> _1_.cas echo 0:22 | xxd -r >> _1_.cas printf ",r" >> _1_.cas echo 0:0D0A | xxd -r >> _1_.cas echo 0:1A1A1A1A1A1A1A1A1A1A1A1A1A | xxd -r >> _1_.cas echo 0:1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A | xxd -r >> _1_.cas echo 0:1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A | xxd -r >> _1_.cas echo 0:1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A | xxd -r >> _1_.cas echo 0:1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A | xxd -r >> _1_.cas echo 0:1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A | xxd -r >> _1_.cas echo 0:1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A | xxd -r >> _1_.cas echo 0:1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A | xxd -r >> _1_.cas echo 0:1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A | xxd -r >> _1_.cas echo 0:1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A | xxd -r >> _1_.cas echo 0:1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A | xxd -r >> _1_.cas echo 0:1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A | xxd -r >> _1_.cas echo 0:1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A | xxd -r >> _1_.cas #------------------------------------------------------------------ #------------------------------------------------------------------ if [ $romsize -eq 8 ]; then #------------------------------------------------------------------ #- 8kb #------------------------------------------------------------------ #- split 1: 0x4000..0x7FFF echo 0:1FA6DEBACC137D74 | xxd -r >> _1_.cas echo 0:D0D0D0D0D0D0D0D0D0D0 | xxd -r >> _1_.cas printf "SPLIT1" >> _1_.cas echo 0:1FA6DEBACC137D74 | xxd -r >> _1_.cas echo 0:00885FA902A8 | xxd -r >> _1_.cas cat _split1_2_.bin >> _1_.cas #- routine copied from msxr2b echo 0:0001f33affff2f32e7 | xxd -r >> _1_.cas echo 0:a8e6f3320ca9dba832eca8e6f3320ba9 | xxd -r >> _1_.cas echo 0:0604c53e0490cb27cb27210ba9b6d3a8 | xxd -r >> _1_.cas echo 0:320da906043e0490cb27cb27210ca9b6 | xxd -r >> _1_.cas echo 0:320ea932ffff2100407e2f77be2f7728 | xxd -r >> _1_.cas echo 0:0910e2c110cccde4a8c9c13a0da932f9 | xxd -r >> _1_.cas echo 0:a8e6fc320ba93a0ea932f4a8e6fc320c | xxd -r >> _1_.cas echo 0:a90604c53e0490210ba9b6d3a8320da9 | xxd -r >> _1_.cas echo 0:06043e0490210ca9b6320ea932ffff21 | xxd -r >> _1_.cas echo 0:00007e2f77be2f77280910e6c110d4cd | xxd -r >> _1_.cas echo 0:e4a8c9c13a0da93206a93a0ea93201a9 | xxd -r >> _1_.cas echo 0:1804cde4a8c9cdf1a83a00a8fe002006 | xxd -r >> _1_.cas echo 0:2a02882260a93c471100202100201910 | xxd -r >> _1_.cas echo 0:fde5d1210088010020edb03a01a8fe00 | xxd -r >> _1_.cas echo 0:2004cde4a8c92a60a9e5c9f5f33e0f32 | xxd -r >> _1_.cas echo 0:ffff3ea0d3a8f1c9f5f33e0332ffff3e | xxd -r >> _1_.cas echo 0:a8d3a8f1c9f5f33e0332ffff3ea8d3a8 | xxd -r >> _1_.cas echo 0:f1c9ffffffff00000000000000000000 | xxd -r >> _1_.cas echo 0:00000000000000000000000000000000 | xxd -r >> _1_.cas echo 0:00000000000000000000000000000000 | xxd -r >> _1_.cas echo 0:00000000000000000000000000000000 | xxd -r >> _1_.cas echo 0:00000000000000000000000000000000 | xxd -r >> _1_.cas echo 0:00000000000000 | xxd -r >> _1_.cas echo 0:0000 | xxd -r >> _1_.cas fi #------------------------------------------------------------------ #------------------------------------------------------------------ if [ $romsize -eq 16 ]; then #------------------------------------------------------------------ #- 16kb #------------------------------------------------------------------ #- split 1: 0x4000..0x7FFF echo 0:1FA6DEBACC137D74 | xxd -r >> _1_.cas echo 0:D0D0D0D0D0D0D0D0D0D0 | xxd -r >> _1_.cas printf "SPLIT1" >> _1_.cas echo 0:1FA6DEBACC137D74 | xxd -r >> _1_.cas echo 0:00885fc902c8 | xxd -r >> _1_.cas cat _split1_2_.bin >> _1_.cas #- routine copied from msxr2b echo 0:0001f33affff2f3207 | xxd -r >> _1_.cas echo 0:c9e6f3322cc9dba8320cc9e6f3322bc9 | xxd -r >> _1_.cas echo 0:0604c53e0490cb27cb27212bc9b6d3a8 | xxd -r >> _1_.cas echo 0:322dc906043e0490cb27cb27212cc9b6 | xxd -r >> _1_.cas echo 0:322ec932ffff2100407e2f77be2f7728 | xxd -r >> _1_.cas echo 0:0910e2c110cccd04c9c9c13a2dc93219 | xxd -r >> _1_.cas echo 0:c9e6fc322bc93a2ec93214c9e6fc322c | xxd -r >> _1_.cas echo 0:c90604c53e0490212bc9b6d3a8322dc9 | xxd -r >> _1_.cas echo 0:06043e0490212cc9b6322ec932ffff21 | xxd -r >> _1_.cas echo 0:00007e2f77be2f77280910e6c110d4cd | xxd -r >> _1_.cas echo 0:04c9c9c13a2dc93226c93a2ec93221c9 | xxd -r >> _1_.cas echo 0:1804cd04c9c9cd1ec93a00c8fe002018 | xxd -r >> _1_.cas echo 0:210088110000010040edb02100881100 | xxd -r >> _1_.cas echo 0:40010040edb0180b2100881100800100 | xxd -r >> _1_.cas echo 0:40edb0cd11c93a01c8fe002004cd04c9 | xxd -r >> _1_.cas echo 0:c93a00c8fe00200f2100881100800100 | xxd -r >> _1_.cas echo 0:40edb02a0240e92a0240e9f5f33e0f32 | xxd -r >> _1_.cas echo 0:ffff3ea0d3a8f1c9f5f33e0332ffff3e | xxd -r >> _1_.cas echo 0:a8d3a8f1c9f5f33e0332ffff3ea8d3a8 | xxd -r >> _1_.cas echo 0:f1c9ffffffff00000000000000000000 | xxd -r >> _1_.cas echo 0:00000000000000000000000000000000 | xxd -r >> _1_.cas echo 0:00000000000000000000000000000000 | xxd -r >> _1_.cas echo 0:00000000000000 | xxd -r >> _1_.cas fi #------------------------------------------------------------------ #------------------------------------------------------------------ if [ $romsize -eq 32 ]; then #------------------------------------------------------------------ #- 32kb #------------------------------------------------------------------ #- split 1: 0x4000..0x7FFF echo 0:1FA6DEBACC137D74 | xxd -r >> _1_.cas echo 0:D0D0D0D0D0D0D0D0D0D0 | xxd -r >> _1_.cas printf "SPLIT1" >> _1_.cas echo 0:1FA6DEBACC137D74 | xxd -r >> _1_.cas echo 0:00885fc902c8 | xxd -r >> _1_.cas cat _split1_2_.bin >> _1_.cas #- routine copied from msxr2b echo 0:0000f33affff2f3207 | xxd -r >> _1_.cas echo 0:c9e6f3322cc9dba8320cc9e6f3322bc9 | xxd -r >> _1_.cas echo 0:0604c53e0490cb27cb27212bc9b6d3a8 | xxd -r >> _1_.cas echo 0:322dc906043e0490cb27cb27212cc9b6 | xxd -r >> _1_.cas echo 0:322ec932ffff2100407e2f77be2f7728 | xxd -r >> _1_.cas echo 0:0910e2c110cccd04c9c9c13a2dc93219 | xxd -r >> _1_.cas echo 0:c9e6fc322bc93a2ec93214c9e6fc322c | xxd -r >> _1_.cas echo 0:c90604c53e0490212bc9b6d3a8322dc9 | xxd -r >> _1_.cas echo 0:06043e0490212cc9b6322ec932ffff21 | xxd -r >> _1_.cas echo 0:00007e2f77be2f77280910e6c110d4cd | xxd -r >> _1_.cas echo 0:04c9c9c13a2dc93226c93a2ec93221c9 | xxd -r >> _1_.cas echo 0:1804cd04c9c9cd1ec93a00c8fe002018 | xxd -r >> _1_.cas echo 0:210088110000010040edb02100881100 | xxd -r >> _1_.cas echo 0:40010040edb0180b2100881100800100 | xxd -r >> _1_.cas echo 0:40edb0cd11c93a01c8fe002004cd04c9 | xxd -r >> _1_.cas echo 0:c93a00c8fe00200f2100881100800100 | xxd -r >> _1_.cas echo 0:40edb02a0240e92a0240e9f5f33e0f32 | xxd -r >> _1_.cas echo 0:ffff3ea0d3a8f1c9f5f33e0332ffff3e | xxd -r >> _1_.cas echo 0:a8d3a8f1c9f5f33e0332ffff3ea8d3a8 | xxd -r >> _1_.cas echo 0:f1c9ffffffff00000000000000000000 | xxd -r >> _1_.cas echo 0:00000000000000000000000000000000 | xxd -r >> _1_.cas echo 0:00000000000000000000000000000000 | xxd -r >> _1_.cas echo 0:000000000000 | xxd -r >> _1_.cas #------------------------------------------------------------------ #- split 2: 0x8000..0xBFFF echo 0:1FA6DEBACC137D74 | xxd -r >> _1_.cas echo 0:D0D0D0D0D0D0D0D0D0D0 | xxd -r >> _1_.cas printf "SPLIT2" >> _1_.cas echo 0:1FA6DEBACC137D74 | xxd -r >> _1_.cas echo 0:00885fc902c8 | xxd -r >> _1_.cas cat _split2_2_.bin >> _1_.cas #- routine copied from msxr2b echo 0:0101f33affff2f3207 | xxd -r >> _1_.cas echo 0:c9e6f3322cc9dba8320cc9e6f3322bc9 | xxd -r >> _1_.cas echo 0:0604c53e0490cb27cb27212bc9b6d3a8 | xxd -r >> _1_.cas echo 0:322dc906043e0490cb27cb27212cc9b6 | xxd -r >> _1_.cas echo 0:322ec932ffff2100407e2f77be2f7728 | xxd -r >> _1_.cas echo 0:0910e2c110cccd04c9c9c13a2dc93219 | xxd -r >> _1_.cas echo 0:c9e6fc322bc93a2ec93214c9e6fc322c | xxd -r >> _1_.cas echo 0:c90604c53e0490212bc9b6d3a8322dc9 | xxd -r >> _1_.cas echo 0:06043e0490212cc9b6322ec932ffff21 | xxd -r >> _1_.cas echo 0:00007e2f77be2f77280910e6c110d4cd | xxd -r >> _1_.cas echo 0:04c9c9c13a2dc93226c93a2ec93221c9 | xxd -r >> _1_.cas echo 0:1804cd04c9c9cd1ec93a00c8fe002018 | xxd -r >> _1_.cas echo 0:210088110000010040edb02100881100 | xxd -r >> _1_.cas echo 0:40010040edb0180b2100881100800100 | xxd -r >> _1_.cas echo 0:40edb0cd11c93a01c8fe002004cd04c9 | xxd -r >> _1_.cas echo 0:c93a00c8fe00200f2100881100800100 | xxd -r >> _1_.cas echo 0:40edb02a0240e92a0240e9f5f33e0f32 | xxd -r >> _1_.cas echo 0:ffff3ea0d3a8f1c9f5f33e0332ffff3e | xxd -r >> _1_.cas echo 0:a8d3a8f1c9f5f33e0332ffff3ea8d3a8 | xxd -r >> _1_.cas echo 0:f1c9ffffffff00000000000000000000 | xxd -r >> _1_.cas echo 0:00000000000000000000000000000000 | xxd -r >> _1_.cas echo 0:00000000000000000000000000000000 | xxd -r >> _1_.cas echo 0:00000000000000 | xxd -r >> _1_.cas fi #------------------------------------------------------------------ #------------------------------------------------------------------ #- ending rm _split1_2_.bin _split2_2_.bin _abjump_.bin mv _1_.cas "`basename "$1" .rom`.cas" #------------------------------------------------------------------ #------------------------------------------------------------------ if [ "$2" == "-p" ]; then #------------------------------------------------------------------ #- playing cas2wav "`basename "$1" .rom`.cas" _play_.wav play _play_.wav rm _play_.wav fi #------------------------------------------------------------------ #------------------------------------------------------------------