SSブログ
English Version

Z80でのDAA命令によるHEX変換テクニック [Z80]

 Z80 等で BCD 演算のための補正命令である DAA を使ってバイナリ(00H..0FH)をヘキサの文字コード('0'..'9','A'..'F')に巧妙に変換する処理が知られています。

 今回はこのバイナリ to HEX 変換処理でヘキサ文字を小文字にしたい場合の処理を考えたのでブログに記録しておきたいと思います。

 最初に結論から書いてしまうと今回考えた下記のコードで 00H..0FH のバイナリを '0'..'9','a'..'f' に変換できます。


  D6  0A    SUB    10  
  27DAA
  27DAA
  27DAA
  DE  9FSBC    A,9FH



 それでは上記のコードに辿り着いた経緯について以下に書きます。

  1. DAA 使用の一般的なヘキサ変換
     例えば居酒屋ガレージ日記の「プログラムテクニック「DAA」」の記事に書かれているように


      ADD    A,90H  
    DAA
      ADC    A,40H  
    DAA


    の6バイトのコードで 00H..0FH を '0'..'9','A'..'F' に変換できます。
     入力が 0AH 以上の場合は 最初の DAA で上位ニブルに桁上りし、更に上位ニブルが桁上りして 0 になり、キャリーが立つので2回目の DAA で上位ニブルは 4 となり、下位ニブルには キャリーも加算されるので最初の値から 9 が引かれた値になります。
     入力が 09H 以下の場合は最初の DAA では上位ニブルが 9 となることで 2回目の DAA で上位ニブルが 4-1=3 になります。
     BCD の桁上りとキャリーの効果を巧妙に組み合わせた処理ですね。

    ★追記 2023/05/24 {
     このような6バイトの変換コードは他にも存在します。例えば先頭の"ADD A,90H"は"OR 90H"でもいいし、"ADC A,40H"が"ADC A,3AH"でも結果は同じです。
     下記は今回考えたコードで引き算方式にしたもので、ここ以外では多分見かけないのではないかと思います。

    my idea 1

      SUB    0AH  
    DAA
      SBC    A,59H  
    DAA


    my idea 2

      SUB    0AH  
    SBC    A,25H
      CCF      
    DAA

    ※追記 2023/05/27 CCFではハーフキャリーが不定なので上記は環境依存性があります
    }
    ★追記 2023/05/26 {
     最初に OR を実行してハーフキャリーをクリアすれば普通に変換できます。

    my idea 3

      OR     A  
    DAA
    CP    10  
    SBC   0CFH


    my idea 4

      OR     A  
    DAA
    ADD    A,0F0H  
    ADC    A,40H

    }


  2. 更に短いコード
     上記の様なヘキサ変換で必要な処理の要素を列挙すると

    1. 下位ニブルの桁上り
       入力が 0AH 以上の場合は下位ニブルから上位ニブルに桁上りが発生するようにして上位ニブルを +1 する。
    2. 下位ニブルへの+1
       入力が 0AH 以上の場合は下位ニブルに +1 されるようにする('A'のアスキーコードは 41H なので xAH を x1H にする)

    となることが判ります。
     例えば Twitterのタイムラインで見つけた


      CP    10  
    SBCA,69H  
    DAA


    の5バイトのコードでもヘキサ変換が可能です。SBC を絶妙に組み合わせることで上記の2つの必要な要素が実現されています。

     キャリーを加算することで同じようなことが出来ないか考えてみました。入力が 0AH 以上の場合にキャリーを発生させる必要があるので


      ADD    A,0F6H  
    ADCA,3AH
    DAA


    としてみましたが、ADC 後も入力が 0AH以上の場合と 09H 以下の場合でキャリーの値が異なるので DAA の作用が不統一になり破城しましたw
     CP 命令は減算処理はするが A-reg は変更しないという命令ですが加算でも同様にフラグは更新するが A-reg を変更しない命令があればいいのですが・・・
     1バイト増えてしまいますが下記の様にキャリーの操作を加えると上手く行きました(処理内容も判り易いですね)。


      CP    10  
    CCF
    ADCA,30H  
    DAA



  3. 小文字のヘキサ変換
     上記の様に ADD や SUB でキャリーを操作した場合、次の加算または減算で 入力が 0AH 以上の場合と 09H 以下の場合でどちらかがバイトのバウンダリーを超えるので、キャリーが不一致な状態となり、DAA で不要に +6 や -6 されるので、5バイトでのヘキサ変換処理は上記の方法以外は無いのではないかと推測します。

     と言うわけで趣向を変えて小文字のヘキサ変換について挑戦してみました。DAA 命令の複雑な挙動に関しては「Zilog Z80 DAA実行結果」にまとめられているのを見つけたので、これを参考にして辿り着いたのが冒頭に書いたコードになります。

     下記のような検証用のプログラムで全てのケースについて確認を行いました。

    1バイトの小文字ヘキサ変換試験プログラム(Z80アセンブラ)
    ;+++++++++++++++++++++++++++++++++++++++++++++++ ; translate 0x00-0x0f to hex ascii code '0'-'f' ; Ver 0.01 2023/05/22 by skyriver ;+++++++++++++++++++++++++++++++++++++++++++++++ 000D CR EQU 13 000A LF EQU 10 0001 SMALL EQU 1 ; lower case ToHex macro if SMALL EQ 0 CP 10 SBC A,069H DAA else SUB 10 DAA DAA DAA SBC A,09FH endif endm 0000' ASEG ORG 0100H 0100 AF XOR A 0101 F5 LOOP: PUSH AF 0102 CD 0116 CALL TRAN 0105 3E 20 LD A,' ' 0107 CD 0135 CALL PUTC 010A F1 POP AF 010B 3C INC A 010C F5 PUSH AF 010D E6 0F AND 0FH 010F CC 013C CALL Z,NEWLN 0112 F1 POP AF 0113 20 EC JR NZ,LOOP 0115 C9 RET ; translate to hex ascii code ; A <- data(00-0f) 0116 F5 TRAN: PUSH AF 0117 0F RRCA 0118 0F RRCA 0119 0F RRCA 011A 0F RRCA 011B E6 0F AND 0FH ToHex 011D D6 0A + SUB 10 011F 27 + DAA 0120 27 + DAA 0121 27 + DAA 0122 DE 9F + SBC A,09FH 0124 CD 0135 CALL PUTC 0127 F1 POP AF 0128 E6 0F AND 0FH ToHex 012A D6 0A + SUB 10 012C 27 + DAA 012D 27 + DAA 012E 27 + DAA 012F DE 9F + SBC A,09FH 0131 CD 0135 CALL PUTC 0134 C9 RET ; put chara on screen ; A <- data 0135 PUTC: 0135 5F LD E,A 0136 0E 02 LD C,2 0138 CD 0005 CALL 0005H 013B C9 RET ; new line 013C 3E 0D NEWLN: LD A,CR 013E CD 0135 CALL PUTC 0141 3E 0A LD A,LF 0143 CD 0135 CALL PUTC 0146 C9 RET END Macros: TOHEX Symbols: 000D CR 000A LF 0101 LOOP 013C NEWLN 0135 PUTC 0001 SMALL 0116 TRAN No Fatal error(s)

     実機の CP/M-80 環境での確認結果が下図になります。

    CP/M-80 環境での確認結果(OK)

     ところが Windows の DOS 窓での CPM エミュ環境では下図のように NG でした。尚、プロンプトで表示されているパス情報はわざとぼかしています。

    CP/M エミュ環境での確認結果(NG)

     CP/M エミュでは DAA を実行した後のフラグの挙動が Z80 と違うことが原因の様です。下図は Z80 の実機(Z84C0020PEC)を使って CP/M 環境で ZSID でステップ動作した結果です。

    Z80 実機でのステップ動作

     下図が CP/M エミュでのステップ動作になります。DAA 命令での 'I'フラグの挙動が上記の実機と違いますね。尚、'I'フラグはハーフキャリーです。

    CP/M エミュでのステップ動作(NG)

     GAME 言語を使って 00H..0FH のどの範囲が NG なのか確認してみた結果が下図になります。上記の結果からも判っていましたが、00H..09H の範囲がNGの様です。

    CP/M エミュ環境での確認結果(NG)

     エミュということで試しに MSXPen 環境で確認した結果が下図になります。MSXPen 環境では流石に問題無いようです。

    MSXPen 環境での確認結果(OK)


★追記 2023/05/26
 その後も少し気になったので下記のパターンで自動スキャンしてみました。xxとyyは 00H..FFH の範囲でフルスキャンし、ニーモニックの部分はそれぞれのパタンの全組合せを自動チェックしています。

CP/OR/ADD/SUB xx; NOP/DAA; ADC/SBC yy; NOP/DAA

 結果は下図の通りで上記で既に記述したもの以外はありませんでした。「*** Find!!」以降の部分が見つけた解を表示している部分でそれ以外の表示はスキャンの進捗が判るように表示しているものです。
 尚、各ニーモニックのオペコードは

CP:FE,OR:F6,ADD:C6,SUB:D6,NOP:00,DAA:27,ADC:CE,SBC:DE

です。

変換コードパターンのスキャン結果


 2バイト分のフルスキャンとオペコード切替えなので全チェックパターンは 210 万(=4*256*2*2*256*2)程ですが、上記の画面で最後に表示されているようにほぼ4分でスキャンが完了しました。環境は Z80 20MHz で GAME コンパイラを使用しています。ソースはこれです。

★追記 2023/05/26
 ヘキサ文字への変換は最小単位としては1バイトを2桁のヘキサ文字に変換するケースが殆どなのではないかと思います。下位のニブルを取り出す時に AND 0FH を使用するとハーフキャリーが立ってしまうので厄介なのですが、OR 0F0H であればハーフキャリーが立たない(当然キャリーもゼロ)ので最初から DAA が使えます。入力データが F0H、FAH の場合、DAA 後は期待通りにそれぞれが 50H、60H になります。後は下記の様にキャリーを立てて加算/減算で調整すれば実質5バイトのコードで変換できます。
 以上より、現時点ではヘキサ文字に変換する5バイトコードは3通りあるということが判りました。

OR 0F0H method 1
  DAA      
CP60H
  SBC    A,1FH  

OR 0F0H method 2
  DAA      
ADDA,0A0H
  ADC    A,40H  



★追記 2023/08/18
 Twitter(X?)で関連するメッセージを見かけたのでこのページを紹介して、自分でも再度見てみました。最初に OR する方式で AND 方式の様に CP から始めるパターンもできることに気が付きました。

OR 0F0H method 3
  CP    0FAH  
SBCA,0B9H
  DAA      


nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

電動ドライバの購入 [購入]

 AliExpress で「スーパーセール」が常時表示されるようになり、結構安くなっている商品があります。特に残り数が表記されているものは割引率が高い傾向にあり、品切れになった場合でも暫くすると復活しがちですw

 小型の電動ドライバが安かったので購入してみました。本体だけなら千円以下でドライバ先端(Bit)のセットを付けても 1,373 円でした。

購入した電動ドライバセット


 このままではドライバ先端を直ぐに無くしそうなので、3Dプリンタでホルダーを作ることにしました。
 最初は六角穴を並べた単純な構造を考えましたが、3Dプリンタで出力すると端の部分と中央の部分の六角穴のサイズが微妙に異なりドライバ先端を上手くホールドするようにするのが難しい状況でした。手持ちのフレキシブルなフィラメント(TPU)を使おうかとも思いましたが、勉強も兼ねて PETG フィラメントを使い、構造を工夫してみることにしました。また、設計ポリシーとしてなるべく小型になるように考えました。

 何度か試行錯誤した末に辿り着いたものが下図になります。バネの部分は ABS フィラメントの場合は強度的に没ですが、PETG であれば大丈夫だと思います。

ドライバ Bit ホルダー(CAD 画面)


 透明の PETG フィラメントで出力したものが下の写真です。40 分程度で出力できました。サポート無しの構造で奇麗に出力できています。

3Dプリンタで出力した Bit ホルダー


 Bit を格納した状態が下の写真です。必要十分な最小限の幅になっていますね。
 ホールド具合は緩くも無く、きつくも無く丁度いい感じです^^

Bit ホールド中の Bit ホルダー



★追記 2023/12/12
 最近始まった AliExpress さんの「百円ショップ」が滅茶苦茶安くてつい買ってしまうw
 六角レンチのビットセットが 270 円だったので購入しました。ケースは無かったのですが3Dプリンタでちょちょいとやれば出来上がり^^


六角ビットホルダ(CAD画面)


ホルダに収めた六角ビット



nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

CP/M-80でのBIOSエミュレートによるMBASICの起動 [Z80]

 Twitter のタイムラインで CP/M-80 版 MBASIC は BIOS のコンソール入出力機能のみでも基本動作はするという情報を見かけたので確認して見ました。

 最近使っている 20MHz 動作の Z80PicCompactの開発機は CP/M が自動起動する設定にしているので、「CP/M用hexローダーの製作」の記事で紹介した HexLoader を使ってヘキサファイルをロードして実験しました。

 MBASICを起動するためにはBIOS のコンソール関連の実装以外に下記の項目への対応が必要でした。
  1. BDOS コールアドレスの設定
     MBASIC は BDOS コール(0005H)部分の BDOS アドレスを参照して、BDOSCCP 領域も使用するので BDOS コール用のジャンプ命令を設定する必要がある。
    ★修正 2023/05/17
     MBASIC はディスクアクセス機能が必要なので BDOS 領域は壊さないことを確認しました。


  2. コマンドパラメータ無しの設定
     MBASIC は起動時に 0080H 部分にあるコマンドパラメータを参照してパラメータがある場合、ソースをロードしようとします。0080H を 00H に設定することでパラメータが無い状態にします(この部分は上記の HexLoader が使用するメモリなのでこのために HexLoader をアップデートしました)

上記の項目を対応することで無事 MBASIC が起動するようになりました。

 殆ど処理が無いですが、ソースは下記になります。

CP/M BIOS エミュレータのソース
; CP/M-80 for Z80PicCompact ; Ver 0.01 2023/01/14 by skyriver ; based on CP/M-80 bios for Z80GAL ; Ver 0.01 2020/11/07 by skyriver ; Ver 0.02 2021/10/02 by skyriver ; save BC-reg at CONOUT ; test for Emurate CP/M BIOS environment 2023/05/15 ;++++ CP/M parameter ++++ 0006 MAXDSK EQU 6 ;number of drives. 0040 MAX_SEC EQU 64 ;sectors/track 0006 MAX_SIF EQU 6 ; MAX_SEC = 1 << MAX_SIF 002E MSIZE EQU 46 ;size of available RAM in KB 6800 BIAS EQU (MSIZE-20) * 1024 9C00 CCP EQU 3400H+BIAS ;base of cpm ccp A406 BDOS EQU CCP+806H ;base of bdos B200 BIOS EQU CCP+1600H ;base of bios 0004 CDISK EQU 0004H ;current disk number (0 ... 15) 0003 IOBYTE EQU 0003H ;intel iobyte 0080 BUFF EQU 0080H ;default buffer address 000D CR EQU 13 000A LF EQU 10 0080 SECSIZE EQU 128 ; sector size 0800 CPMBKSZ EQU 2048 ; CP/M block size 0200 SDBLKSZ EQU 512 ; SD card block size 0038 RSTAD EQU 038H ; interrupt entry adr 0100 CPM_AP EQU 0100H ; CP/M app entry ;++++ Z80PicCompact definition +++++++++++++++++++++++++++++++++++++++ 0000 DATPORT EQU 0 ; data port 0001 CMDPORT EQU 1 ; command port ; +++ status bit allign +++ 0001 RXRDY_B EQU 01H 0080 TXRDY_B EQU 80H 0002 SDERR_B EQU 02H ; +++ mode command +++ 0001 SIO_CHAR EQU 1 ; char mode 0002 SIO_STR EQU 2 ; put string 0003 SD_SECT EQU 3 ; set sector 0004 SD_RD EQU 4 ; read block 0005 SD_WRBUF EQU 5 ; write data to buffer 0006 SD_WR EQU 6 ; write block .Z80 0000' ASEG ORG BIOS B200 C3 B256 JP BOOT B203 WBOOTE: B203 C3 B299 JP WBOOT B206 C3 B280 JP CONST B209 C3 B288 JP CONIN B20C C3 B28B JP CONOUT B20F C3 B29A JP LIST B212 C3 B29A JP PUNCH B215 C3 B29A JP READER B218 C3 B29A JP HOME B21B C3 B29A JP SELDSK B21E C3 B29A JP SETTRK B221 C3 B29A JP SETSEC B224 C3 B29A JP SETDMA B227 C3 B29A JP READ B22A C3 B29A JP WRITE B22D C3 B29A JP LISTST B230 C3 B29A JP SECTRAN B233 StMsg: B233 0D 0A 34 DB CR,LF,MSIZE/10+'0' B236 36 DB (MSIZE mod 10) + '0' B237 6B 20 43 50 DB 'k CP/M Ver 2.2 BIOS Emulator' B23B 2F 4D 20 56 B23F 65 72 20 32 B243 2E 32 20 42 B247 49 4F 53 20 B24B 45 6D 75 6C B24F 61 74 6F 72 B253 0D 0A 00 DB CR,LF,0 B256 F3 BOOT: DI B257 ED 56 IM 1 B259 31 0080 LD SP,BUFF ;; XOR A ;; LD (IOBYTE),A ;; LD (CDISK),A ;; LD (SelDk),A B25C 3E C9 LD A,0C9H B25E 32 0038 LD (RSTAD),A B261 21 B233 LD HL,StMsg B264 CD B28F CALL Puts ;; JR GOCPM B267 GOCPM: B267 3E C3 LD A,0C3H B269 32 0000 LD (0),A B26C 21 B203 LD HL,WBOOTE B26F 22 0001 LD (1),HL B272 32 0005 LD (5),A B275 21 A406 LD HL,BDOS B278 22 0006 LD (6),HL B27B 36 C9 LD (HL),0C9H ; return code ;; LD BC,BUFF ;; CALL SETDMA ;; LD A,(CDISK) ;; LD C,A ;; JP CCP B27D C3 0100 JP CPM_AP ; ; check console key data ; A -> 0ffh:data exist 00h:none B280 CONST: B280 DB 01 IN A,(CMDPORT) ; get status B282 E6 01 AND RXRDY_B B284 C8 RET Z ; no data B285 3E FF LD A,0FFH B287 C9 RET ; ; input console ; A -> key data B288 DB 00 CONIN: IN A,(DATPORT) B28A C9 RET ; out console ; C <- data B28B 79 CONOUT: LD A,C B28C D3 00 OUT (DATPORT),A B28E C9 RET ; print string ; HL <- string addr B28F Puts: B28F 7E LD A,(HL) B290 B7 OR A B291 C8 RET Z B292 4F LD C,A B293 CD B28B CALL CONOUT B296 23 INC HL B297 18 F6 JR Puts B299 76 WBOOT: HALT B29A LIST: B29A PUNCH: B29A READER: B29A HOME: B29A SELDSK: B29A SETTRK: B29A SETSEC: B29A SETDMA: B29A READ: B29A WRITE: B29A LISTST: B29A SECTRAN: B29A C9 RETURN: RET END Macros: Symbols: A406 BDOS 6800 BIAS B200 BIOS B256 BOOT 0080 BUFF 9C00 CCP 0004 CDISK 0001 CMDPORT B288 CONIN B28B CONOUT B280 CONST 0800 CPMBKSZ 0100 CPM_AP 000D CR 0000 DATPORT B267 GOCPM B29A HOME 0003 IOBYTE 000A LF B29A LIST B29A LISTST 0006 MAXDSK 0040 MAX_SEC 0006 MAX_SIF 002E MSIZE B29A PUNCH B28F PUTS B29A READ B29A READER B29A RETURN 0038 RSTAD 0001 RXRDY_B 0200 SDBLKSZ 0002 SDERR_B 0004 SD_RD 0003 SD_SECT 0006 SD_WR 0005 SD_WRBUF 0080 SECSIZE B29A SECTRAN B29A SELDSK B29A SETDMA B29A SETSEC B29A SETTRK 0001 SIO_CHAR 0002 SIO_STR B233 STMSG 0080 TXRDY_B B299 WBOOT B203 WBOOTE B29A WRITE No Fatal error(s)


 Twitter に投稿した動画付きメッセージを貼っておきます。上記の BIOS エミュレータ+ MBASIC 本体のHEXファイルをロードすることで MBASIC を起動しています。
 BIOS エミュレータの WBOOT は HALT するようにしてあるので CP/M に戻るために元々の WBOOT(0xfa03)をコールしています。



nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

超小型Z80マイコン(その14)開発機のケース製作 [Z80]

 前回の記事で書いたようにユニバーサル基板を用いてポリウレタン線で手配線した開発用基板が 20MHz で動作しハード弄りは一段落しました。Z80 を使った簡単な実験を行う場合はやはり速い方がいいのでこの開発機を結構使っています。
 基板の裏面はカバーで保護していますが、今後も安定した状態で使っていきたいのでケースを作ることにしました。

 開発機なのであまり凝らずに下図のような3ピース構成にしてみました。右側面の穴は USB コネクタと TF カード用のものです。

Z80PicCompact開発機のケース設計01(CAD画面)


 各ピースの間隔を空けると下図のようになります。各パーツは下の方からベースプレート、サイドパーツ、トッププレートと呼ぶことにします。

Z80PicCompact開発機のケース設計02(CAD画面)


 下図はスケルトン表示になります。ベースプレートとトッププレートはネジでサイドパーツに固定します。

Z80PicCompact開発機のケース設計03(CAD画面)


 今までとほとんど同じ状態ですがベースプレートに開発基板を取り付けた状態が下の写真です。TF カードは外した状態です。今回ケースを作成する際にTF コネクタを汎用基板に直付けしようと試みたのですが、失敗してコネクタを1個壊してしまったので従来通り市販のコネクタ基板を使うことにしました。

ベースプレートに取付けた開発基板


 下の写真はサイドパーツを取り付けた後の状態です。汎用基板は四隅がベースプレートとサイドパーツで固定されます。

サイドパーツを取り付けた開発基板01 サイドパーツを取り付けた開発基板02


 左下の写真は TF カード基板を取り付けた状態のものでサイドパーツで支えられています。右下はベースプレート面の写真でネジの頭部が出っ張らないように頭部用のホールを設けています。

TF カード基板装着後 ベースプレート面


 トッププレートを取り付けた状態が下の写真です。本来であればアクリル板を CNC で加工して透明で文字入りのパネルにしたいのですが手抜きでトッププレートもFDM式の3Dプリンタで出力しました。以前、実験的にSLA式の3Dプリンタでパネル作成したこともありましたが、レジンは強度的にケース等には適さないということが判りました。

トッププレート取付け後


 しかし、基板に実装した部品が全く見えないのも面白くないので今回使用しているフィラメントである透明の PETG での造形物を透明化する簡単な実験を行いました。

 実験は次の二通りでやってみました。両者共に溶剤は手持ちのノルマルプロピルアルコール(NPA)を使い2倍程度に薄めて使いました。
  1. 2液式エポキシ接着剤でのコーティング
    参考:「これは超便利!何でも強力にコーティングできる激安エポキシクリアの自作実験をご紹介します!」
  2. 透明のUVレジンでのコーティング

 不要になったサイドパーツ部品にコーティングし評価しました。評価方法はペン型テスタのパネルに表示された "Auto" の文字の見え方で効果を判断しました(コーティング物からピンセットを使って約 1cm 離した状態で目視)。一応写真も撮りましたが、写真では目視での感覚をあまり表現できていません。
 結果を下表に示します。評価は5段階で数字が大きい程、良い結果ということにしています。

No.写真コーティング素材備考評価
1 コーティング無し無加工1
2 エポキシ原液1回コーティング
光の透過性はかなり向上したが表面に凹凸感がある
4
3 エポキシ(2倍希釈) サンドペーパーの600番で軽くヤスった後に1回コーティング
手間を掛けた割にはあまり透けない
3
4 レジン(2倍希釈) 1回コーティング
透明度がやや増した
2
5 レジン(2倍希釈) 2回コーティング
透明度が更に増した
4
6 レジン(2倍希釈) 3回コーティング
2回コーティングとほとんど同じ
4


 上記表の結果から No5 の手法でトッププレートをコーティングしてみました。片面はベッドに接している平らな面なのでベッドと反対側のみコーティングしました。結果が下の写真です。

トッププレートをコーティング後の状態


 評価で用いたサイドパーツと違いトッププレートはメッシュ状に積層されているのでメッシュ状に細かい気泡がありなかなか透明度は上がりませんでしたが、ICチップの位置が見えるようになりました。
 「Pic24MC68Kマイコン(その8)ケース作成」の記事の最後の方に書いたように以前、透明の PETG フィラメントで作ったケースにエアブラシで UV カット塗料を塗布したことがあります。同じ材料で比較できていませんが効果は同レベルなのでは無いかと思います。今回の手法はエアブラシで塗料を塗布するよりはお手軽なので今後活用できる場面があるのではないかと思います。


★追記 2023/05/14 {
 UV レジンをコーティングしたものはベトツキ感がなかなか取れない(レジンにも依存すると思いますが)という短所があったのでエポキシを使ってリベンジしてみました。
 前回からの変更点は
  • 濃度は高め
     上記では2倍(エポキシと溶剤を等分)に希釈していましたが、コーティングで効果を上げるため少し濃いめ(エポキシ:溶剤=3:2程度)にし、塗布回数は1回にしました。
  • 積層パターン
     外面(一番下面と一番上面)の積層パターンをメッシュから同心円に変更しました。
  • コーティング対象面
     前回はベッド面はコーティングしていませんでしたが、今回はベッド面も含め両面にコーティングしました。
結果として、エポキシでも前回のレジン2回塗布と同程度の効果(ベッド面もコーティングしたことで透明度は更に増している)が得られることが判りました。
 更にエポキシの場合、乾くのが早いし、コーティング面がすぐにサラサラな状態になるというメリットがあります。

エポキシでのトッププレートコーティング結果

 尚、筆を駄目にしたくないので割り箸と爪楊枝を使って塗布しています。
}



[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー