名稱:A列車3/鐵路A計劃 (A-Train,中文/英文版)
簡介:Artdink 1992年出品的都市開發鐵道模擬遊戲,由智冠中文化並代理發行,為該遊戲
      系列第一部中文化的遊戲 [待補]。



備註:本版為繁中1.01版,且包含開天闢地篇資料片內容。
保護:中文版為數字密碼,並於安裝時鎖定硬體環境,英文版無保護。中文版破解碼:
      ATDRV.COM (解壓ATDRV.EXE所得)
        C3 2E 80 3E 1A 04 75 75 FE  (跳過密碼輸入)
        -- -- -- -- -- -- -- C3 --
        2E 80 3E 20 04 75 75 F6
        -- -- -- -- -- -- C3 --
        2E 80 3E E1 0F 75 75 EE
        -- -- -- -- -- -- C3 --
        2E 80 3E E7 0F 75 75 E6 C3 55
        -- -- -- -- -- -- C3 -- -- --
        2E 8A A4 3B 10 80 F4 77 2E 38 A0 0D 0A 75 09  (共2個)
        -- -- A0 0D 0A -- -- -- -- 88 A4 3B 10 90 90
        00 CD 21 1F BA 2E  (共2個)
        -- 90 90 -- -- --
        B4 07 CD 21  (共2個)
        -- -- EB 2B
      或
        2E 38 A0 0D 0A 75 09  (共2個) (密碼隨便輸入)
        -- 88 -- -- -- -- 00
備註:中文版ATDRV.EXE解壓法(刪除原來的ATDRV.EXE,改用解壓後的ATDRV.COM):

DEBUG ATDRV.EXE
-G 46
-T
-G 6F5
-T
-RCX
CX 2F00
:5000
-N ATDRV.COM
-W
Writing 05000 bytes
-Q

備註:顯示設定非使用VGA 640x480者,安裝後必須修改BAT檔,將/480改成使用的模式,如
      /350等,否則會無法啟動。
檔案:ATPatch102.rar = 英文版1.02更新檔(中文版不適用)
修改:

智冠中文版本身有做硬體環境檢測,在安裝時會寫在OUT.???的檔案裡面(例如OUT.480),
同時在執行時會檢查硬體環境是否變更,有的話在進入遊戲後會便會自動關閉跳出,並顯示
Configuration is no longer correct訊息。

這樣的檢驗會造成安裝好的版本無法適用在各種不同的環境,包括用DosBox 0.74版安裝好的
版本不能在SVN版DosBox上執行,反之亦然。由於英文版並沒有這項檢驗,因此是在中文化時,
由智冠自行加上去的,當然目的應該也是在保護,但這樣卻讓玩家很不方便,硬體環境一變
更就得重新安裝。因此追蹤了一下程式,找出略過此段檢查的方法(VGA 640x480模式):

AT.EXE (先用UNP解壓)
  26 3B 07 75 06 26 3B 57 02 74 1B
  -- -- -- 90 90 -- -- -- -- EB --

這樣只要安裝好一次,便可以在各種環境上執行了,不必保留原版磁片,每次重安裝。但解
壓AT.EXE會造成另一種問題,就是人物提示的文字顯示會不正確,因此必須改用常駐程式來
修改解決:

    EB 2F                 jmp  $start
    90                    nop
$int1C:
    9C                    pushf
    06                    push es
    50                    push ax
    33 C0                 xor  ax,ax
    8E C0                 mov  es,ax
    26 A1 22 00           mov  ax,word ptr es:[0022h]
    2D A4 52              sub  ax,52A4h
    8E C0                 mov  es,ax
    26 81 3E 6D 3F 75 06  cmp  word ptr es:[3F6Dh],0675h
    75 0D                 jne  $exit
    26 C7 06 6D 3F 90 90  mov  word ptr es:[3F6Dh],9090h
    26 C6 06 73 3F EB     mov  byte ptr es:[3F73h],0EBh
$exit:
    58                    pop  ax
    07                    pop  es
    9D                    popf
    EA                    db   0EAh
$1C_addr:
    00 00 00 00           dd   ?
$start:
    0E                    push cs
    1F                    pop  ds
    B8 1C 35              mov  ax,351Ch
    CD 21                 int  21h
    89 1E 2D 01           mov  word ptr [$1C_addr],bx
    8C 06 2F 01           mov  word ptr [$1C_addr+2],es
    B8 1C 25              mov  ax,251Ch
    BA 03 01              mov  dx,offset $int1C
    CD 21                 int  21h
    BA 31 01              mov  dx,offset $start
    CD 27                 int  27h