MacintoshでMS-DOSのdebugコマンドの動作確認をするのにどうしたらいいか悩んでいた。


MacintoshでMS-DOSのdebugコマンドの動作確認をするのにどうしたらいいか悩んでいた。

windowsでも64bitだとdebugコマンドをどう動かしたらいいか、よくわからなかった。16bitモードらしい。

ネットで検索すると

FreeDOSもLinuxも動く、JavaScriptで作られた x86エミュレータがスゴイ件
https://www.softantenna.com/wp/software/x86-emulator/

virtual X86
http://copy.sh/v86/

ReactOS(32MB) - Restored from snapshot
Windows95(6.7MB) - Restored from snapshot
FreeBSD 10.2(13.0MB) - Restored from snapshot
Oberon(16.0Mb) - Native Oberon 2.3.6 (via)
Windows 98(12.0MB) - Including Minesweeper and audio, additional sectors are loaded as needed
Arch Linux (10.1MB) - A complete Arch Linux restored from a snapshot, additional files are loaded as needed
KolibriOS(1.4MB) - Graphical OS, takes about 60 seconds to boot
Linux 2.6(5.4MB) - With busybox, Lua interpreter and test cases, takes about 20 seconds to boot
Linux 3.18(8.3MB) - With internet access, telnet, ping, wget and links. Takes about 60 seconds to boot. Run udhcpc for networking. Exchange files through /mnt/.
Windows 1.01(1.4MB) - Takes 1 second to boot
MS-DOS 6.22(3.4MB) - Takes 10 seconds to boot. With Enhanced Tools, QBasic and everything from the FreeDOS image
FreeDOS(0.7MB) - With nasm, vim, debug.com, some games and demos, takes 1 second to boot
OpenBSD(1.4MB) - Random boot floppy, takes about 60 seconds
olar OS(1.4MB) - Simple graphical OS
Bootchess(0.2MB) - A tiny chess program written in the boot sector 

MS-DOSのライセンスがどうなっているか調べてなかったので、Freedosを押して見た。

SeaBIOS (version rel-1.10.0-39-g3fdabae-dirty-20170530_144256-nyu)              
Booting from Floppy...                                                          
FreeDOS kernel - SVN (build 2040 OEM:0xfd) [compiled Apr  7 2012]               
Kernel compatibility 7.10 - WATCOMC - FAT32 support                             

(C) Copyright 1995-2011 Pasquale J. Villani and The FreeDOS Project.            
All Rights Reserved. This is free software and comes with ABSOLUTELY NO         
WARRANTY; you can redistribute it and/or modify it under the terms of the       
GNU General Public License as published by the Free Software Foundation;        
either version 2, or (at your option) any later version.                        
 - InitDiskno hard disks detected                                               
Can't disable A20 - ignored                                                     
FreeDOS HIMEM 2.07 [Feb 13 2003] (c) 1995, Till Gerken 2001-2003 tom ehlert     
Interface : XMS 2.00 80386 64MB                                                 
Kernel: allocated 46 Diskbuffers = 24472 Bytes in HMA                           

FreeCom version 0.82 pl 3 XMS_Swap [Dec 10 2003 06:49:21]                       


Welcome to FreeDOS (http://www.freedos.org)!                                    
Running on copy.sh/v86/                                                         

Try 'invaders' or 'snake' or 'tetris' for fun.                                  

A:\>  

debugコマンド起動。D(dump)

A:\>debug                                                                       
-d                                                                              
099F:0100  75 02 EB F2 FF 76 0C E8-70 81 59 8B 1E A8 00 89   u....v..p.Y.....   
099F:0110  47 08 0B C0 74 12 FF 76-04 E8 5E 81 59 8B 1E A8   G...t..v..^.Y...   
099F:0120  00 89 47 0A 0B C0 75 05-E8 C7 49 EB 0D 8D 86 F0   ..G...u...I.....   
099F:0130  FE 50 E8 82 B7 59 0B C0-75 05 E8 32 B8 EB B7 8B   .P...Y..u..2....   
099F:0140  1E A8 00 C7 47 1A 01 00-33 C0 8B E5 5D C3 55 8B   ....G...3...].U.   
099F:0150  EC 83 EC 0A 8D 46 F6 50-8D 46 FA 50 8D 46 F8 50   .....F.P.F.P.F.P   
099F:0160  8D 46 04 50 8D 46 FC 50-8D 46 FE 50 FF 76 04 E8   .F.P.F.P.F.P.v..   
099F:0170  E0 FD 83 C4 0E 48 8B D8-83 FB 04 77 23 D1 E3 2E   .....H.....w#...  

u(dis assemble)

-u                                                                              
099F:0100 7502          JNZ     0104                                            
099F:0102 EBF2          JMP     00F6                                            
099F:0104 FF760C        PUSH    WORD PTR [BP+0C]                                
099F:0107 E87081        CALL    827A                                            
099F:010A 59            POP     CX                                              
099F:010B 8B1EA800      MOV     BX,[00A8]                                       
099F:010F 894708        MOV     [BX+08],AX                                      
099F:0112 0BC0          OR      AX,AX                                           
099F:0114 7412          JZ      0128                                            
099F:0116 FF7604        PUSH    WORD PTR [BP+04]                                
099F:0119 E85E81        CALL    827A                                            
099F:011C 59            POP     CX                                              
099F:011D 8B1EA800      MOV     BX,[00A8]                   

おお、動く。

算譜(source)

copy/v86
https://github.com/copy/v86

cpu.js
"use strict";

/** @const */
var CPU_LOG_VERBOSE = false;


// Resources:

で始まっている。続いて次の3つのURLを示している。

https://pdos.csail.mit.edu/6.828/2006/readings/i386/toc.htm
https://www-ssl.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html
http://ref.x86asm.net/geek32.html

参考資料(reference)

FreeDOS
http://www.freedos.org

debugコマンド(MS DOS)
https://qiita.com/kaizen_nagoya/items/31542d281d16d135df66

文書履歴(document history)

ver. 0.10 初稿 20180714
ver. 0.11 参考資料追記 20180716