Advertisement
xiahanlu

gbz80反汇编

Oct 13th, 2018
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 64.17 KB | None | 0 0
  1. /* GBZ80 Static Disassembler
  2.  *
  3.  * Copyright (C) 2018 moecmks
  4.  * This file is part of KS3578.
  5.  *
  6.  * do What The Fuck you want to Public License
  7.  *
  8.  * Version 1.0, March 2000
  9.  * Copyright (C) 2000 Banlu Kemiyatorn (]d).
  10.  * 136 Nives 7 Jangwattana 14 Laksi Bangkok
  11.  * Everyone is permitted to copy and distribute verbatim copies
  12.  * of this license document, but changing it is not allowed.
  13.  *
  14.  * Ok, the purpose of this license is simple
  15.  * and you just
  16.  *
  17.  * DO WHAT THE FUCK YOU WANT TO.
  18.  */
  19.  
  20. #include "conf.h"
  21. #include "gameboy.h"
  22. #include "list.h"
  23.  
  24. #ifdef _WIN32
  25. # include <Windows.h>
  26. #endif
  27.  
  28. static char *g_lutctype[256];
  29. static char *g_lutanclic[256];
  30. static char *g_lutcurlic[256];
  31. static unsigned short g_addrb = 0;
  32.  
  33. struct romheader {
  34.   char title[16];
  35.   short curlic;
  36.   char sgb;
  37.   unsigned char ctype;
  38.   unsigned char promsize;
  39.   unsigned char ramsize;
  40.   unsigned char targetcode;
  41.   unsigned char anclic;
  42.   unsigned char maskver;
  43.   unsigned char hdcrc;
  44.   unsigned short gcrc;
  45. };
  46.  
  47. static
  48. void kinit (void) {
  49.  
  50.   static int _init = 0;
  51.  
  52.   if (_init != 0)
  53.     return ;
  54.   else
  55.     _init = 1;
  56.  
  57.   memset (g_lutctype, 0, sizeof (g_lutctype));
  58.   memset (g_lutanclic, 0, sizeof (g_lutanclic));
  59.   memset (g_lutcurlic, 0, sizeof (g_lutcurlic));
  60.  
  61.   g_lutctype[0x00] = "ROM ONLY";
  62.   g_lutctype[0x01] = "ROM+MBC1";
  63.   g_lutctype[0x02] = "ROM+MBC1+RAM";
  64.   g_lutctype[0x03] = "ROM+MBC1+RAM+Battery";
  65.   g_lutctype[0x05] = "ROM+MBC2";
  66.   g_lutctype[0x06] = "ROM+MBC2+Battery";
  67.   g_lutctype[0x08] = "ROM+RAM";
  68.   g_lutctype[0x09] = "ROM+RAM+Battery";
  69.   g_lutctype[0x0B] = "ROM+MMM01";
  70.   g_lutctype[0x0C] = "ROM+MMM01+RAM";
  71.   g_lutctype[0x0D] = "ROM+MMM01+RAM+Battery";
  72.   g_lutctype[0x0F] = "ROM+MBC3+Battery+Timer";
  73.   g_lutctype[0x10] = "ROM+MBC3+RAM+Battery+Timer";
  74.   g_lutctype[0x11] = "ROM+MBC3";
  75.   g_lutctype[0x12] = "ROM+MBC3+RAM";
  76.   g_lutctype[0x13] = "ROM+MBC3+RAM+Battery";
  77.   g_lutctype[0x15] = "ROM+MBC4";
  78.   g_lutctype[0x16] = "ROM+MBC4+RAM";
  79.   g_lutctype[0x17] = "ROM+MBC4+RAM+Battery";
  80.   g_lutctype[0x19] = "ROM+MBC5";
  81.   g_lutctype[0x1A] = "ROM+MBC5+RAM";
  82.   g_lutctype[0x1B] = "ROM+MBC5+RAM+Battery";
  83.   g_lutctype[0x1C] = "ROM+MBC5+Rumble";
  84.   g_lutctype[0x1D] = "ROM+MBC5+RAM+Rumble";
  85.   g_lutctype[0x1E] = "ROM+MBC5+RAM+Battery+Rumble";
  86.   g_lutctype[0x22] = "ROM+MBC5+Tilt";
  87.   g_lutctype[0xFC] = "Nintendo Pocket Camera";
  88.   g_lutctype[0xFD] = "Bandai TAMA5";
  89.   g_lutctype[0xFE] = "Hudson HuC-3";
  90.   g_lutctype[0xFF] = "Hudson HuC-1";
  91.  
  92.   /* Settings old licensee desc init --*/
  93.   g_lutanclic[0x00] = "None";
  94.   g_lutanclic[0x01] = "Nintendo"; /* homepage:https://www.nintendo.com */
  95.   g_lutanclic[0x08] = "Capcom"; /* homepage:http://www.capcom.com*/
  96.   g_lutanclic[0x09] = "Hot B Games"; /* wiki:https://en.wikipedia.org/wiki/Category:Hot_B_games */
  97.   g_lutanclic[0x0A] = "Jaleco"; /* wiki:https://en.wikipedia.org/wiki/Jaleco*/
  98.   g_lutanclic[0x0B] = "Coconuts Japan"; /* misc link:https://www.genkivideogames.com/japanese_imported_video_games.asp?pagetoshow=search&keywordtext=Coconuts%20Japan&searchtype=publisher*/
  99.   g_lutanclic[0x0C] = "Elite Systems";/*wiki: https://en.wikipedia.org/wiki/Elite_Systems*/
  100.   g_lutanclic[0x13] = "EA"; /*homepage: https://www.ea.com/zh-cn */
  101.   g_lutanclic[0x18] = "Hudson Soft"; /*homepage: http://www.hudsonsoft.net/what-we-do/ */
  102.   g_lutanclic[0x19] = "ITC Entertainment"; /*wiki: https://en.wikipedia.org/wiki/ITC_Entertainment */
  103.   g_lutanclic[0x1A] = "Yanoman"; /* MobyGames:https://www.mobygames.com/company/yanoman-corporation */
  104.   g_lutanclic[0x1D] = "Nippon Clary"; /* giantbomb:https://www.giantbomb.com/nippon-clary-business/3010-6837/ */
  105.   g_lutanclic[0x1F] = "Virgin"; /* wiki:https://en.wikipedia.org/wiki/Virgin_Interactive */
  106.                                              /* homepage: https://www.virgingames.com/quick-login */
  107.   g_lutanclic[0x24] = "PCM Complete"; /* https://segaretro.org/PCM_Complete | https://www.mobygames.com/company/pcm-complete */
  108.   g_lutanclic[0x25] = "San-X"; /* homepage http://www.san-x.jp*/
  109.   g_lutanclic[0x28] = "Kotobuki Systems";/*wiki: https://en.wikipedia.org/wiki/Kemco*/
  110.   g_lutanclic[0x29] = "SETA"; /*wiki: https://en.wikipedia.org/wiki/SETA_Corporation */
  111.   g_lutanclic[0x30] = "Atari,SA"; /*wiki: https://en.wikipedia.org/wiki/Atari,_SA */
  112.   g_lutanclic[0x31] = "Nintendo"; /* homepage:https://www.nintendo.com */
  113.   g_lutanclic[0x32] = "Bandai"; /*homepage: http://www.bandai.com */
  114.   g_lutanclic[0x33] = "GameBoyColor"; /*new licensee */
  115.   g_lutanclic[0x34] = "Konami"; /*homepage: https://www.konami.com/en/*/
  116.   g_lutanclic[0x35] = "Hector"; /*N/A */
  117.   g_lutanclic[0x38] = "Capcom"; /* homepage:http://www.capcom.com*/
  118.   g_lutanclic[0x39] = "Banpresto"; /* homepage:http://www.banpresto.jp/prize/0008.html*/
  119.   g_lutanclic[0x3C] = "Entertainment i"; /* truncated, see http://gbdev.gg8.se/wiki/articles/Gameboy_ROM_Header_Info#Licensee*/
  120.   g_lutanclic[0x3E] = "Gremlin"; /* wiki: https://en.wikipedia.org/wiki/Gremlin_Interactive */
  121.   g_lutanclic[0x41] = "Ubisoft"; /*homepage: https://www.ubisoft.com/en-US/ */
  122.   g_lutanclic[0x42] = "Atlus"; /*homepage: https://atlus.com*/
  123.   g_lutanclic[0x44] = "Malibu"; /*swiki: https://strategywiki.org/wiki/Category:Malibu*/
  124.   g_lutanclic[0x46] = "Angel"; /*N/A*/
  125.   g_lutanclic[0x47] = "Spectrum HoloByte"; /*wiki: https://en.wikipedia.org/wiki/Spectrum_HoloByte*/
  126.   g_lutanclic[0x49] = "Irem"; /* wiki: https://en.wikipedia.org/wiki/Irem */
  127.   g_lutanclic[0x4A] = "Virgin"; /* wiki:https://en.wikipedia.org/wiki/Virgin_Interactive */
  128.                                              /* homepage: https://www.virgingames.com/quick-login */
  129.   g_lutanclic[0x4D] = "Malibu"; /*swiki: https://strategywiki.org/wiki/Category:Malibu*/
  130.   g_lutanclic[0x4F] = "US.Gold"; /*wiki: https://en.wikipedia.org/wiki/U.S._Gold */
  131.   g_lutanclic[0x50] = "Absolute"; /*homepgae:http://www.absolutegamez.com */
  132.   g_lutanclic[0x51] = "Acclaim"; /*wiki: https://en.wikipedia.org/wiki/Acclaim_Games*/
  133.   g_lutanclic[0x52] = "Activision"; /*homepage: https://www.activision.com*/  
  134.   g_lutanclic[0x53] = "Sammy"; /*wiki: https://en.wikipedia.org/wiki/Sammy_Corporation*/
  135.   g_lutanclic[0x54] = "GameTek"; /*wiki: https://en.wikipedia.org/wiki/GameTek*/
  136.   g_lutanclic[0x55] = "Park Place"; /*maybe???: https://en.wikipedia.org/wiki/List_of_Jurassic_Park_video_games*/
  137.   g_lutanclic[0x56] = "LJN"; /*avgn: http://avgn.wikia.com/wiki/LJN*/  
  138.   g_lutanclic[0x57] = "MATCHBOX"; /*homepage: http://play.matchbox.com/en_US/*/
  139.   g_lutanclic[0x59] = "Milton Bradley"; /*wiki: https://en.wikipedia.org/wiki/Milton_Bradley_Company*/
  140.   g_lutanclic[0x5A] = "Mindscape"; /*wiki: https://en.wikipedia.org/wiki/Mindscape*/
  141.   g_lutanclic[0x5B] = "Romstar"; /*wiki: https://en.wikipedia.org/wiki/Romstar*/  
  142.   g_lutanclic[0x5C] = "Kaga Create"; /*wiki: https://en.wikipedia.org/wiki/Kaga_Create*/
  143.   g_lutanclic[0x5D] = "Tradewest"; /*wiki: https://en.wikipedia.org/wiki/Tradewest*/
  144.   g_lutanclic[0x60] = "Titus"; /*wiki: https://en.wikipedia.org/wiki/Titus_Interactive*/
  145.   g_lutanclic[0x61] = "Virgin"; /* wiki:https://en.wikipedia.org/wiki/Virgin_Interactive */
  146.                                              /* homepage: https://www.virgingames.com/quick-login */
  147.   g_lutanclic[0x67] = "Ocean"; /*wiki: https://en.wikipedia.org/wiki/Ocean_Software*/  
  148.   g_lutanclic[0x69] = "EA"; /*homepage: https://www.ea.com/zh-cn */
  149.   g_lutanclic[0x6E] = "Elite Systems";/*wiki: https://en.wikipedia.org/wiki/Elite_Systems*/
  150.   g_lutanclic[0x6F] = "Electro Brain";/*wiki: https://en.wikipedia.org/wiki/Electro_Brain*/
  151.   g_lutanclic[0x70] = "Atari,SA"; /*wiki: https://en.wikipedia.org/wiki/Atari,_SA */
  152.   g_lutanclic[0x71] = "Interplay"; /*wiki: https://en.wikipedia.org/wiki/Interplay_Entertainment*/
  153.   g_lutanclic[0x72] = "Brøderbund"; /*moby: https://www.mobygames.com/company/brderbund-software-inc*/  
  154.   g_lutanclic[0x73] = "Sculptured"; /*maybe??: http://closinglogogroup.wikia.com/wiki/Sculptured_Software,_Inc.*/
  155.   g_lutanclic[0x75] = "SCi Games"; /*wiki: https://en.wikipedia.org/wiki/SCi_Games*/  
  156.   g_lutanclic[0x78] = "THQ"; /*source is:t*hq wiki: https://en.wikipedia.org/wiki/THQ*/
  157.   g_lutanclic[0x79] = "Accolade"; /*wiki: https://en.wikipedia.org/wiki/Accolade_(game_company)*/
  158.   g_lutanclic[0x7A] = "Triffix"; /*wiki: https://en.wikipedia.org/wiki/Triffix_Entertainment*/
  159.   g_lutanclic[0x7C] = "MicroProse"; /*homepage: http://www.microprose.com*/  
  160.   g_lutanclic[0x7F] = "Kemco";/*wiki: https://en.wikipedia.org/wiki/Kemco*/
  161.   g_lutanclic[0x80] = "Misawa"; /*nseen64: https://www.unseen64.net/tag/misawa-entertainment/*/
  162.   g_lutanclic[0x83] = "LOZC G"; /*wiki: https://en.wikipedia.org/wiki/Category:LOZC_G._Amusements_games*/
  163.   g_lutanclic[0x86] = "Tokuma Shoten"; /*wiki: https://en.wikipedia.org/wiki/Tokuma_Shoten*/  
  164.   g_lutanclic[0x8B] = "Blue Planet"; /*wiki: https://en.wikipedia.org/wiki/Blue_Planet_Software*/
  165.   g_lutanclic[0x8C] = "Tokai Communications"; /*wiki: https://en.wikipedia.org/wiki/Tokai_Communications*/
  166.   g_lutanclic[0x8E] = "APE Games"; /*homepage: http://www.apegames.com*/
  167.   g_lutanclic[0x8F] = "I'Max"; /*No find infos */  
  168.   g_lutanclic[0x91] = "Spike Chunsoft"; /*wiki: https://en.wikipedia.org/wiki/Spike_Chunsoft*/
  169.   g_lutanclic[0x92] = "Video System"; /*No find infos*/  
  170.   g_lutanclic[0x93] = "Tsuburava"; /*No find infos */
  171.   g_lutanclic[0x95] = "Varie"; /*wiki: https://en.wikipedia.org/wiki/Varie*/  
  172.   g_lutanclic[0x96] = "Yonezawa PR21"; /*wiki: https://en.wikipedia.org/wiki/Yonezawa_PR21*/
  173.   g_lutanclic[0x97] = "Kaneko"; /*wiki: https://en.wikipedia.org/wiki/Kaneko*/
  174.   g_lutanclic[0x99] = "Arcade"; /*wiki: https://en.wikipedia.org/wiki/Arcade_game*/
  175.   g_lutanclic[0x9A] = "Nihon Bussan"; /*wiki: https://en.wikipedia.org/wiki/Nihon_Bussan*/  
  176.   g_lutanclic[0x9B] = "Tecmo"; /*wiki: https://en.wikipedia.org/wiki/Tecmo*/
  177.   g_lutanclic[0x9C] = "Disney"; /*wiki: https://en.wikipedia.org/wiki/Walt_Disney_Imagineering*/
  178.   g_lutanclic[0x9D] = "Banpresto"; /* homepage:http://www.banpresto.jp/prize/0008.html*/
  179.   g_lutanclic[0x9F] = "Nova"; /*No find infos*/
  180.   g_lutanclic[0xA1] = "Hori Electric"; /* https://www.giantbomb.com/hori-electric-co-ltd/3010-5917/*/  
  181.   g_lutanclic[0xA2] = "Bandai"; /*homepage: http://www.bandai.com */
  182.   g_lutanclic[0xA4] = "Konami"; /*homepage: https://www.konami.com/en/*/  
  183.   g_lutanclic[0xA6] = "Kawada"; /*No find infos*/
  184.   g_lutanclic[0xA7] = "Takara"; /*wiki: https://en.wikipedia.org/wiki/Takara**/
  185.   g_lutanclic[0xA9] = "Technōs Japan"; /*wiki: https://en.wikipedia.org/wiki/Technōs_Japan*/
  186.   g_lutanclic[0xAA] = "Brøderbund"; /*moby: https://www.mobygames.com/company/brderbund-software-inc*/  
  187.   g_lutanclic[0xAC] = "Toei Animation"; /*homepage: http://toei-animation-usa.com*/  
  188.   g_lutanclic[0xAD] = "Toho"; /*No find infos*/
  189.   g_lutanclic[0xAF] = "Namco"; /*homepage: https://www.bandainamcoent.com*/  
  190.   g_lutanclic[0xB0] = "Acclaim"; /*wiki: https://en.wikipedia.org/wiki/Acclaim_Games*/
  191.   g_lutanclic[0xB1] = "ASCII|Nexoft"; /*moby: http://www.mobygames.com/company/nexoft-corporation*/
  192.   g_lutanclic[0xB2] = "Bandai"; /*homepage: http://www.bandai.com */
  193.   g_lutanclic[0xB4] = "Enix"; /*homepage: https://en.wikipedia.org/wiki/Enix*/  
  194.   g_lutanclic[0xB6] = "HAL"; /*wiki: https://en.wikipedia.org/wiki/HAL_Laboratory*/
  195.   g_lutanclic[0xB7] = "SNK"; /*wiki: https://en.wikipedia.org/wiki/SNK*/
  196.   g_lutanclic[0xB9] = "Pony Canyon"; /*wiki: https://en.wikipedia.org/wiki/Pony_Canyon*/
  197.   g_lutanclic[0xBA] = "Culture Brain"; /*wiki: https://en.wikipedia.org/wiki/Culture_Brain*/  
  198.   g_lutanclic[0xBB] = "Sunsoft"; /*wiki: https://en.wikipedia.org/wiki/Sunsoft*/
  199.   g_lutanclic[0xBD] = "Sony Imagesoft"; /*wiki: https://en.wikipedia.org/wiki/Sony_Imagesoft*/
  200.   g_lutanclic[0xBF] = "Sammy"; /*wiki: https://en.wikipedia.org/wiki/Sammy_Corporation*/
  201.   g_lutanclic[0xC0] = "Taito"; /*wiki: https://en.wikipedia.org/wiki/Taito*/  
  202.   g_lutanclic[0xC2] = "Kemco";/*wiki: https://en.wikipedia.org/wiki/Kemco*/
  203.   g_lutanclic[0xC3] = "Square"; /*wiki: https://en.wikipedia.org/wiki/Square_(company)*/
  204.   g_lutanclic[0xC4] = "Tokuma Shoten"; /*wiki: https://en.wikipedia.org/wiki/Tokuma_Shoten*/  
  205.   g_lutanclic[0xC5] = "Data East"; /*wiki: https://en.wikipedia.org/wiki/Data_East*/  
  206.   g_lutanclic[0xC6] = "Tonkin House"; /*wiki: https://en.wikipedia.org/wiki/Category:Tonkin_House_games*/
  207.   g_lutanclic[0xC8] = "Koei"; /*wiki: https://en.wikipedia.org/wiki/Koei*/  
  208.   g_lutanclic[0xC9] = "UFL"; /*No find infos*/
  209.   g_lutanclic[0xCA] = "Ultra"; /*wiki: https://en.wikipedia.org/wiki/Ultra_Games*/
  210.   g_lutanclic[0xCB] = "VAP"; /*wiki: https://en.wikipedia.org/wiki/VAP_%28company%29*/  
  211.   g_lutanclic[0xCC] = "Use"; /*No Find infos*/
  212.   g_lutanclic[0xCD] = "Meldac"; /*wiki: https://en.wikipedia.org/wiki/Meldac*/
  213.   g_lutanclic[0xCE] = "Pony Canyon"; /*wiki: https://en.wikipedia.org/wiki/Pony_Canyon*/
  214.   g_lutanclic[0xCF] = "Angel"; /*N/A*/
  215.   g_lutanclic[0xD0] = "Taito"; /*wiki: https://en.wikipedia.org/wiki/Taito*/
  216.   g_lutanclic[0xD1] = "SOFEL"; /*wiki: https://en.wikipedia.org/wiki/SOFEL*/
  217.   g_lutanclic[0xD2] = "Quest"; /*No find infos*/  
  218.   g_lutanclic[0xD3] = "Sigma Enterprises"; /*maybe?: http://sigma-enterprises.com*/
  219.   g_lutanclic[0xD4] = "Ask Kodansha"; /*https://www.giantbomb.com/ask-kodansha/3010-3528/*/
  220.   g_lutanclic[0xD6] = "Kaga Create"; /*wiki: https://en.wikipedia.org/wiki/Kaga_Create*/
  221.   g_lutanclic[0xD7] = "Copya Systems"; /*wiki: https://en.wikipedia.org/wiki/Category:Copya_Systems_games*/
  222.   g_lutanclic[0xD9] = "Banpresto"; /* homepage:http://www.banpresto.jp/prize/0008.html*/
  223.   g_lutanclic[0xDA] = "Tomy"; /*wiki: https://en.wikipedia.org/wiki/Tomy*/  
  224.   g_lutanclic[0xDB] = "LJN"; /*avgn: http://avgn.wikia.com/wiki/LJN*/  
  225.   g_lutanclic[0xDD] = "Masaya Games"; /*wiki: https://en.wikipedia.org/wiki/Masaya_Games*/
  226.   g_lutanclic[0xDE] = "Human"; /*No find infos */  
  227.   g_lutanclic[0xDF] = "Altron"; /*wiki: https://en.wikipedia.org/wiki/Altron*/
  228.   g_lutanclic[0xE0] = "Jaleco"; /* wiki:https://en.wikipedia.org/wiki/Jaleco*/
  229.   g_lutanclic[0xE1] = "Towa Chiki"; /*wiki: https://en.wikipedia.org/wiki/Towa_Chiki*/  
  230.   g_lutanclic[0xE2] = "Uutaka"; /*No find infos*/
  231.   g_lutanclic[0xE3] = "Varie"; /*wiki: https://en.wikipedia.org/wiki/Varie*/  
  232.   g_lutanclic[0xE5] = "Epoch"; /*wiki: https://en.wikipedia.org/wiki/Epoch_Co.*/
  233.   g_lutanclic[0xE7] = "Athena"; /*wiki: https://en.wikipedia.org/wiki/Athena_(company)*/
  234.   g_lutanclic[0xE8] = "Asmik ACE"; /*wiki: https://en.wikipedia.org/wiki/Asmik_Ace*/  
  235.   g_lutanclic[0xE9] = "Natsume"; /*Homepage: http://www.natsume.com*/
  236.   g_lutanclic[0xEA] = "King_Records"; /*wiki: https://en.wikipedia.org/wiki/King_Records_(Japan)*/
  237.   g_lutanclic[0xEB] = "Atlus"; /*homepage: https://atlus.com*/
  238.   g_lutanclic[0xEC] = "Epic Records"; /*wiki: https://en.wikipedia.org/wiki/Epic_Records_Japan*/
  239.   g_lutanclic[0xEE] = "IGS"; /*wiki: https://en.wikipedia.org/wiki/International_Games_System*/  
  240.   g_lutanclic[0xF0] = "a wave"; /*No find infos*/
  241.   g_lutanclic[0xF3] = "Extreme Entertainment"; /**Moby: https://www.mobygames.com/company/extreme-entertainment-group-inc */
  242.   g_lutanclic[0xFF] = "LJN"; /*avgn: http://avgn.wikia.com/wiki/LJN*/
  243.  
  244.   g_lutcurlic[0] = "None";
  245.   g_lutcurlic[1] = "Nintendo"; /* homepage:https://www.nintendo.com */
  246.   g_lutcurlic[8] = "Capcom"; /* homepage:http://www.capcom.com*/
  247.   g_lutcurlic[13] = "EA"; /*homepage: https://www.ea.com/zh-cn */
  248.   g_lutcurlic[18] = "Hudson Soft"; /*homepage: http://www.hudsonsoft.net/what-we-do/ */
  249.   g_lutcurlic[19] = "B-AI";  
  250.   g_lutcurlic[20] = "KSS"; /* wiki: https://en.wikipedia.org/wiki/KSS_(company) */
  251.   g_lutcurlic[22] = "POW";                                      /* homepage: https://www.virgingames.com/quick-login */
  252.   g_lutcurlic[24] = "PCM Complete"; /* https://segaretro.org/PCM_Complete | https://www.mobygames.com/company/pcm-complete */
  253.   g_lutcurlic[25] = "San-X"; /* homepage http://www.san-x.jp*/
  254.   g_lutcurlic[28] = "Kemco Japan";/*homepage: https://kemco-games.com/global/index.html*/
  255.   g_lutcurlic[29] = "SETA"; /*wiki: https://en.wikipedia.org/wiki/SETA_Corporation */
  256.   g_lutcurlic[30] = "Viacom"; /*wiki: https://en.wikipedia.org/wiki/Viacom */
  257.   g_lutcurlic[31] = "Nintendo"; /* homepage:https://www.nintendo.com */
  258.   g_lutcurlic[32] = "Bandai"; /*bandia? homepage: http://www.bandai.com */
  259.   g_lutcurlic[33] = "Ocean"; /*wiki: https://en.wikipedia.org/wiki/Ocean_Software*/  
  260.   g_lutcurlic[34] = "Konami"; /*homepage: https://www.konami.com/en/*/
  261.   g_lutcurlic[35] = "Hector"; /*N/A */
  262.   g_lutcurlic[37] = "Taito"; /*wiki: https://en.wikipedia.org/wiki/Taito*/  
  263.   g_lutcurlic[38] = "Hudson"; /*homepage: http://www.hudsonsoft.net/what-we-do/ */
  264.   g_lutcurlic[39] = "Banpresto"; /* homepage:http://www.banpresto.jp/prize/0008.html*/
  265.   g_lutcurlic[41] = "Ubisoft"; /*homepage: https://www.ubisoft.com/en-US/ */
  266.   g_lutcurlic[42] = "Atlus"; /*homepage: https://atlus.com*/
  267.   g_lutcurlic[44] = "Malibu"; /*swiki: https://strategywiki.org/wiki/Category:Malibu*/
  268.   g_lutcurlic[46] = "Angel"; /*N/A*/
  269.   g_lutcurlic[47] = "Pullet-Proof";
  270.   g_lutcurlic[49] = "Irem"; /* wiki: https://en.wikipedia.org/wiki/Irem */
  271.   g_lutcurlic[50] = "Absolute"; /*homepgae:http://www.absolutegamez.com */
  272.   g_lutcurlic[51] = "Acclaim"; /*wiki: https://en.wikipedia.org/wiki/Acclaim_Games*/
  273.   g_lutcurlic[52] = "Activision"; /*homepage: https://www.activision.com*/  
  274.   g_lutcurlic[53] = "American Sammy"; /*wiki: https://en.wikipedia.org/wiki/Sammy_Corporation*/
  275.   g_lutcurlic[54] = "Konami"; /*homepage: https://www.konami.com/en/*/
  276.   g_lutcurlic[55] = "Hi-TECH";
  277.   g_lutcurlic[56] = "LJN"; /*avgn: http://avgn.wikia.com/wiki/LJN*/  
  278.   g_lutcurlic[57] = "MATCHBOX"; /*homepage: http://play.matchbox.com/en_US/*/
  279.   g_lutcurlic[58] = "Mattel"; /*wiki: https://en.wikipedia.org/wiki/Mattel*/
  280.   g_lutcurlic[59] = "Milton Bradley"; /*wiki: https://en.wikipedia.org/wiki/Milton_Bradley_Company*/
  281.   g_lutcurlic[60] = "Titus"; /*wiki: https://en.wikipedia.org/wiki/Titus_Interactive*/
  282.   g_lutcurlic[61] = "Virgin"; /* wiki:https://en.wikipedia.org/wiki/Virgin_Interactive */
  283.                                              /* homepage: https://www.virgingames.com/quick-login */                                        
  284.   g_lutcurlic[64] = "LucasArts";/*wiki: https://en.wikipedia.org/wiki/LucasArts*/
  285.   g_lutcurlic[67] = "Ocean"; /*wiki: https://en.wikipedia.org/wiki/Ocean_Software*/  
  286.   g_lutcurlic[69] = "EA"; /*homepage: https://www.ea.com/zh-cn */
  287.   g_lutcurlic[70] = "Atari,SA"; /*wiki: https://en.wikipedia.org/wiki/Atari,_SA */
  288.   g_lutcurlic[71] = "Interplay"; /*wiki: https://en.wikipedia.org/wiki/Interplay_Entertainment*/
  289.   g_lutcurlic[72] = "Brøderbund"; /*moby: https://www.mobygames.com/company/brderbund-software-inc*/  
  290.   g_lutcurlic[73] = "Sculptured"; /*maybe??: http://closinglogogroup.wikia.com/wiki/Sculptured_Software,_Inc.*/
  291.   g_lutcurlic[75] = "SCi Games"; /*wiki: https://en.wikipedia.org/wiki/SCi_Games*/  
  292.   g_lutcurlic[78] = "THQ"; /*source is:t*hq wiki: https://en.wikipedia.org/wiki/THQ*/
  293.   g_lutcurlic[79] = "Accolade"; /*wiki: https://en.wikipedia.org/wiki/Accolade_(game_company)*/
  294.   g_lutcurlic[80] = "Misawa"; /*nseen64: https://www.unseen64.net/tag/misawa-entertainment/*/
  295.   g_lutcurlic[83] = "LOZC G"; /*wiki: https://en.wikipedia.org/wiki/Category:LOZC_G._Amusements_games*/
  296.   g_lutcurlic[86] = "Tokuma Shoten"; /*wiki: https://en.wikipedia.org/wiki/Tokuma_Shoten*/  
  297.   g_lutcurlic[87] = "Tsukuda Original"; /*https://segaretro.org/Tsukuda_Original*/
  298.   g_lutcurlic[91] = "Spike Chunsoft"; /*wiki: https://en.wikipedia.org/wiki/Spike_Chunsoft*/
  299.   g_lutcurlic[92] = "Video System"; /*No find infos*/  
  300.   g_lutcurlic[93] = "Ocean"; /*wiki: https://en.wikipedia.org/wiki/Ocean_Software*/  
  301.   g_lutcurlic[95] = "Varie"; /*wiki: https://en.wikipedia.org/wiki/Varie*/  
  302.   g_lutcurlic[96] = "Yonezawa PR21"; /*wiki: https://en.wikipedia.org/wiki/Yonezawa_PR21*/
  303.   g_lutcurlic[97] = "Kaneko"; /*wiki: https://en.wikipedia.org/wiki/Kaneko*/
  304.   g_lutcurlic[99] = "Pack-In-Video"; /*wiki: https://en.wikipedia.org/wiki/Pack-In-Video*/
  305. }
  306.  
  307. /*
  308. |||||| -------------- BANK-ID :%d START -------------- ||||||
  309. >% abs $% cc
  310. %fece sub_ffff:    >%ffff >%fffe >%fffc >%ffed
  311. %fece long_ffff:   >%ffff >%fffe >%fffc >%ffed
  312. %fece              ld $bc, %ff @@ this is comment
  313. %fecf loc_fecf:    >%ffff >%fffe >%fffc >%ffed
  314. %fecf              ld ($hl), $bc
  315. %fed0              ld ($hl), $sp  
  316. %fed2              dec a
  317. %fed4              jrnz loc_fecf
  318. %fed7              jp %ffff
  319.  
  320. @--------------------------------------------------------------
  321. ||||||| -------------- BANK-ID :%d END   -------------- |||||||
  322. call/jr/jp/ret/reti proc mark. jp mark again.
  323. */
  324.  
  325. struct addrmark_n {
  326.   ks_bool ccbranch;
  327.   ks_uint16 addr;
  328. };
  329. struct addrmark {
  330.   ks_uint16 baddr;
  331.   struct list_ *reflong_tracker;
  332.   struct list_ *refcall_tracker;
  333.   struct list_ *refshort_tracker;
  334. };
  335. struct instr_sec {
  336.   ks_uint16 addr;
  337.   ks_uint16 instr_len;
  338.   ks_uint8 opcode[2];
  339.   ks_int8 opdesc[32];
  340.   struct addrmark *attach;
  341. };
  342. struct sub_proc_tree {
  343.   struct sub_proc_tree *parent;
  344.   struct sub_proc_tree *child;
  345.   struct sub_proc_tree *level_n;
  346.   struct sub_proc_tree *level_p;
  347. # define optype_jr 0
  348. # define optype_jp 1
  349. # define optype_call 2
  350. # define optype_ret 3
  351. # define optype_reti 4
  352. # define optype_rst 5
  353.   int start;
  354.   int end;
  355.   int envlope;
  356. };
  357. struct sub_proc {
  358.   int start;
  359.   int end;
  360. };
  361. struct bank_disassembler {
  362.   struct list_ *instr_list;
  363.   struct list_ *armark_list;
  364.   struct list_ *codechunk_list;
  365.  
  366.   union { struct { ks_uint16 F; ks_uint16 A; }; ks_uint32 AF; };
  367.   union { struct { ks_uint16 C; ks_uint16 B; }; ks_uint32 BC; };
  368.   union { struct { ks_uint16 E; ks_uint16 D; }; ks_uint32 DE; };
  369.   union { struct { ks_uint16 L; ks_uint16 H; }; ks_uint32 HL; };
  370. };
  371. static const uint8_t cpu_lens[256] = {
  372. /*--  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F   --*/
  373. /*0*/ 1, 3, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 2, 1, /*0*/
  374. /*1*/ 2, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, /*1*/
  375. /*2*/ 2, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, /*2*/
  376. /*3*/ 2, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, /*3*/
  377. /*4*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*4*/
  378. /*5*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*5*/
  379. /*6*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*6*/
  380. /*7*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*7*/
  381. /*8*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*8*/
  382. /*9*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*9*/
  383. /*A*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*A*/
  384. /*B*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*B*/
  385. /*C*/ 1, 1, 3, 3, 3, 1, 2, 1, 1, 1, 3, 2, 3, 3, 2, 1, /*C*/
  386. /*D*/ 1, 1, 3, 1, 3, 1, 2, 1, 1, 1, 3, 1, 3, 1, 2, 1, /*D*/
  387. /*E*/ 2, 1, 2, 1, 1, 1, 2, 1, 2, 1, 3, 1, 1, 1, 2, 1, /*E*/
  388. /*F*/ 2, 1, 2, 1, 1, 1, 2, 1, 2, 1, 3, 1, 1, 1, 2, 1  /*F*/
  389. /*--  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F   --*/
  390. };
  391. int
  392. lr35902_getaddrmark (char *babuf, int bankid, struct list_ *armark_list /* inited */) {
  393.  
  394.   ks_uint8 *tempBank;
  395.   ks_int32 addrcount;
  396.   ks_uint8 opcode;
  397.  
  398.   tempBank = (ks_uint8 *) & babuf[bankid*0x4000];
  399.   addrcount = 0;
  400.   while (addrcount <= 0x3FFF) {
  401.     ks_bool ccdone;
  402.     ks_uint16 addrTemp;
  403.     ks_int32 id;
  404.     ks_int32 adid;
  405.     struct addrmark *amnk;
  406.     struct list_v *am;
  407.     struct addrmark_n *amm;
  408.     opcode = tempBank[addrcount];
  409.     if (addrcount <= 0x3FFD)
  410.       addrTemp = *(ks_uint16 *)& tempBank[addrcount+1];
  411.     else
  412.       addrTemp = 0;
  413.     ccdone = ks_true;
  414.     adid = -1;
  415.     switch (opcode) {
  416.       /* jmp/jcc branch opcode case **/
  417.  // case 0xE9:/* JP(HL) */
  418.     case 0xC3:/* JP   */
  419.       ccdone = ks_false;
  420.     case 0xC2:/* JPNZ */
  421.     case 0xD2:/* JPNC */
  422.     case 0xCA:/* JPZ   */
  423.     case 0xDA:/* JPC */
  424.       adid = 0;
  425.       break;
  426.       /* call/ccc branch opcode case **/
  427.     case 0xCD:/* CALL   */
  428.       ccdone = ks_false;
  429.     case 0xC4:/* CALLNZ */
  430.     case 0xD4:/* CALLNC */
  431.     case 0xCC:/* CALLZ   */
  432.     case 0xDC:/* CALLC */
  433.       adid = 1;
  434.       break;
  435.       /* jr/jcc short branch opcode case **/
  436.     case 0x18:/* JR   */
  437.       ccdone = ks_false;
  438.     case 0x20:/* JRNZ */
  439.     case 0x30:/* JRNC */
  440.     case 0x28:/* JRZ   */
  441.     case 0x38:/* JRC */
  442.       adid = 2;
  443.       addrTemp = (addrcount +2) + ((char)tempBank[addrcount+1]);
  444.       addrTemp &= 0xFFFF;
  445.     default:
  446.       break;
  447.     }
  448.     if (adid >= 0)
  449.     {
  450.       LIST_FOREACH (armark_list, id, am) {
  451.         amnk = (struct addrmark *)am->obj;
  452.         if (amnk->baddr == (addrTemp + g_addrb))
  453.           goto skip;
  454.         else ;
  455.       }
  456.       /* alloc chunk  struct addrmark * */
  457.       amnk =(struct addrmark *)malloc (sizeof (struct addrmark));
  458.       amnk->baddr = addrTemp + g_addrb;
  459.       list_init (& amnk->refcall_tracker);
  460.       list_init (& amnk->reflong_tracker);
  461.       list_init (& amnk->refshort_tracker);
  462.       list_insert (armark_list, -1, amnk);
  463.   skip:
  464.       amm = (struct addrmark_n *)malloc (sizeof (struct addrmark_n));
  465.       amm->addr = addrcount + g_addrb;
  466.       amm->ccbranch = ccdone;
  467.       if (adid == 0)
  468.         list_insert (amnk->reflong_tracker, -1, amm);
  469.       else if (adid == 1)
  470.         list_insert (amnk->refcall_tracker, -1, amm);
  471.       else
  472.         list_insert (amnk->refshort_tracker, -1, amm);
  473.     }
  474.     addrcount += cpu_lens[opcode];
  475.   }
  476. }
  477.  
  478. int
  479. lr35902_bankdis (char *babuf, int bankid, struct bank_disassembler *bankdis) {
  480.  
  481.   ks_uint8 *tempBank;
  482.   ks_int32 addrcount;
  483.   ks_uint8 opcode;
  484.   ks_uint8 opcode2 ;
  485.  
  486.   tempBank = (ks_uint8 *) & babuf[bankid*0x4000];
  487.   opcode2 = 0;
  488.   addrcount = 0;
  489.   while (addrcount <= 0x3FFF) {
  490.     ks_uint16 addrTemp16;
  491.     ks_uint8 addrTemp8;
  492.     struct instr_sec *isec;
  493.     opcode = tempBank[addrcount];
  494.     if (addrcount <= 0x3FFD)
  495.       addrTemp16 = *(ks_uint16 *)& tempBank[addrcount+1];
  496.     else
  497.       addrTemp16 = 0;
  498.     addrTemp8 = (ks_uint8)addrTemp16;
  499.     isec = (struct instr_sec *)malloc (sizeof (struct instr_sec));
  500.     isec->attach = ks_null;
  501.     memset (isec->opdesc, 0, sizeof (isec->opdesc));
  502.  
  503. #define __bufccpy(desc,...)\
  504.     do {  \
  505.       int n = sprintf ((char *)isec->opdesc, desc, __VA_ARGS__);\
  506.       isec->opdesc[n] = 0;\
  507.     } while (0)
  508.  
  509.     /* check register write */
  510.     switch (opcode) {
  511.     case 0xDB:
  512.     case 0xEB:
  513.     case 0xEC:
  514.     case 0xFC:
  515.     case 0xDD:
  516.     case 0xED:
  517.     case 0xFD:
  518.     case 0xF4:
  519.     case 0xE4:
  520.     case 0xD3:
  521.     case 0xE3: __bufccpy ("undefined"); break;
  522.     case 0x00: __bufccpy ("nop"); break;
  523.     case 0x10: __bufccpy ("stop"); break;
  524.     case 0x76: __bufccpy ("halt"); break;
  525.     case 0xFB: __bufccpy ("ei"); break;
  526.     case 0xF3: __bufccpy ("di"); break;
  527.     case 0x07:  __bufccpy ("rlca"); break;
  528.     case 0x17:  __bufccpy ("rla"); break;
  529.     case 0x27:  __bufccpy ("daa"); break;
  530.     case 0x37:  __bufccpy ("scf"); break;
  531.     case 0x07+8:  __bufccpy ("rrca"); break;
  532.     case 0x17+8:  __bufccpy ("rra"); break;
  533.     case 0x27+8:  __bufccpy ("cpl"); break;
  534.     case 0x37+8:  __bufccpy ("ccf"); break;
  535.     /* LD $reg, d16 */
  536.     case 0x01: __bufccpy ("ld bc, %%%04x", addrTemp16); break;
  537.     case 0x11: __bufccpy ("ld de, %%%04x", addrTemp16); break;
  538.     case 0x21: __bufccpy ("ld hl, %%%04x", addrTemp16); break;
  539.     case 0x31: __bufccpy ("ld sp, %%%04x", addrTemp16); break;  
  540.     /* LD $reg,  d8*/
  541.     case 0x06: __bufccpy ("ld b, %%%02x", addrTemp8); break;
  542.     case 0x16: __bufccpy ("ld d, %%%02x", addrTemp8); break;
  543.     case 0x26: __bufccpy ("ld h, %%%02x", addrTemp8); break;
  544.     case 0x36: __bufccpy ("ld (hl), %%%02x", addrTemp8); break;  
  545.     case 0x06+8: __bufccpy ("ld c, %%%02x", addrTemp8); break;
  546.     case 0x16+8: __bufccpy ("ld e, %%%02x", addrTemp8); break;
  547.     case 0x26+8: __bufccpy ("ld l, %%%02x", addrTemp8); break;
  548.     case 0x36+8: __bufccpy ("ld a, %%%02x", addrTemp8); break;  
  549.     /* LD ($reg),a | LD a, ($reg) */
  550.     case 0x06-4: __bufccpy ("ld (bc), a"); break;
  551.     case 0x16-4: __bufccpy ("ld (de), a"); break;
  552.     case 0x26-4: __bufccpy ("ld (hl+), a"); break;
  553.     case 0x36-4: __bufccpy ("ld (hl-), a"); break;  
  554.     case 0x06+8-4: __bufccpy ("ld a, (bc)"); break;
  555.     case 0x16+8-4: __bufccpy ("ld a, (de)"); break;
  556.     case 0x26+8-4: __bufccpy ("ld a, (hl+)"); break;
  557.     case 0x36+8-4: __bufccpy ("ld a, (hl-)"); break;
  558.    
  559.     /* LD martix */  
  560.     case 0x40+0x00+0: __bufccpy ("ld b, b"); break;  
  561.     case 0x40+0x00+1: __bufccpy ("ld b, c"); break;  
  562.     case 0x40+0x00+2: __bufccpy ("ld b, d"); break;  
  563.     case 0x40+0x00+3: __bufccpy ("ld b, e"); break;  
  564.     case 0x40+0x00+4: __bufccpy ("ld b, h"); break;  
  565.     case 0x40+0x00+5: __bufccpy ("ld b, l"); break;  
  566.     case 0x40+0x00+6: __bufccpy ("ld b, (hl)"); break;  
  567.     case 0x40+0x00+7: __bufccpy ("ld b, a"); break;  
  568.     case 0x40+0x00+0+8: __bufccpy ("ld c, b"); break;  
  569.     case 0x40+0x00+1+8: __bufccpy ("ld c, c"); break;  
  570.     case 0x40+0x00+2+8: __bufccpy ("ld c, d"); break;  
  571.     case 0x40+0x00+3+8: __bufccpy ("ld c, e"); break;  
  572.     case 0x40+0x00+4+8: __bufccpy ("ld c, h"); break;  
  573.     case 0x40+0x00+5+8: __bufccpy ("ld c, l"); break;  
  574.     case 0x40+0x00+6+8: __bufccpy ("ld c, (hl)"); break;  
  575.     case 0x40+0x00+7+8: __bufccpy ("ld c, a"); break;  
  576.  
  577.     case 0x40+0x10+0: __bufccpy ("ld d, b"); break;  
  578.     case 0x40+0x10+1: __bufccpy ("ld d, c"); break;  
  579.     case 0x40+0x10+2: __bufccpy ("ld d, d"); break;  
  580.     case 0x40+0x10+3: __bufccpy ("ld d, e"); break;  
  581.     case 0x40+0x10+4: __bufccpy ("ld d, h"); break;  
  582.     case 0x40+0x10+5: __bufccpy ("ld d, l"); break;  
  583.     case 0x40+0x10+6: __bufccpy ("ld d, (hl)"); break;  
  584.     case 0x40+0x10+7: __bufccpy ("ld d, a"); break;  
  585.     case 0x40+0x10+0+8: __bufccpy ("ld e, b"); break;  
  586.     case 0x40+0x10+1+8: __bufccpy ("ld e, c"); break;  
  587.     case 0x40+0x10+2+8: __bufccpy ("ld e, d"); break;  
  588.     case 0x40+0x10+3+8: __bufccpy ("ld e, e"); break;  
  589.     case 0x40+0x10+4+8: __bufccpy ("ld e, h"); break;  
  590.     case 0x40+0x10+5+8: __bufccpy ("ld e, l"); break;  
  591.     case 0x40+0x10+6+8: __bufccpy ("ld e, (hl)"); break;  
  592.     case 0x40+0x10+7+8: __bufccpy ("ld e, a"); break;  
  593.    
  594.     case 0x40+0x20+0: __bufccpy ("ld h, b"); break;  
  595.     case 0x40+0x20+1: __bufccpy ("ld h, c"); break;  
  596.     case 0x40+0x20+2: __bufccpy ("ld h, d"); break;  
  597.     case 0x40+0x20+3: __bufccpy ("ld h, e"); break;  
  598.     case 0x40+0x20+4: __bufccpy ("ld h, h"); break;  
  599.     case 0x40+0x20+5: __bufccpy ("ld h, l"); break;  
  600.     case 0x40+0x20+6: __bufccpy ("ld h, (hl)"); break;  
  601.     case 0x40+0x20+7: __bufccpy ("ld h, a"); break;  
  602.     case 0x40+0x20+0+8: __bufccpy ("ld l, b"); break;  
  603.     case 0x40+0x20+1+8: __bufccpy ("ld l, c"); break;  
  604.     case 0x40+0x20+2+8: __bufccpy ("ld l, d"); break;  
  605.     case 0x40+0x20+3+8: __bufccpy ("ld l, e"); break;  
  606.     case 0x40+0x20+4+8: __bufccpy ("ld l, h"); break;  
  607.     case 0x40+0x20+5+8: __bufccpy ("ld l, l"); break;  
  608.     case 0x40+0x20+6+8: __bufccpy ("ld l, (hl)"); break;  
  609.     case 0x40+0x20+7+8: __bufccpy ("ld l, a"); break;  
  610.    
  611.     case 0x40+0x30+0: __bufccpy ("ld (hl), b"); break;  
  612.     case 0x40+0x30+1: __bufccpy ("ld (hl), c"); break;  
  613.     case 0x40+0x30+2: __bufccpy ("ld (hl), d"); break;  
  614.     case 0x40+0x30+3: __bufccpy ("ld (hl), e"); break;  
  615.     case 0x40+0x30+4: __bufccpy ("ld (hl), h"); break;  
  616.     case 0x40+0x30+5: __bufccpy ("ld (hl), l"); break;  
  617.     case 0x40+0x30+7: __bufccpy ("ld (hl), a"); break;  
  618.     case 0x40+0x30+0+8: __bufccpy ("ld a, b"); break;  
  619.     case 0x40+0x30+1+8: __bufccpy ("ld a, c"); break;  
  620.     case 0x40+0x30+2+8: __bufccpy ("ld a, d"); break;  
  621.     case 0x40+0x30+3+8: __bufccpy ("ld a, e"); break;  
  622.     case 0x40+0x30+4+8: __bufccpy ("ld a, h"); break;  
  623.     case 0x40+0x30+5+8: __bufccpy ("ld a, l"); break;  
  624.     case 0x40+0x30+6+8: __bufccpy ("ld a, (hl)"); break;  
  625.     case 0x40+0x30+7+8: __bufccpy ("ld a, a"); break;  
  626.  
  627.     /* LD misc */
  628.     case 0xE0: __bufccpy ("ld (%%%02x), a", 0xFF00+addrTemp8); break;
  629.     case 0xF0: __bufccpy ("ld a, (%%%02x)", 0xFF00+addrTemp8); break;
  630.     case 0xE0+2: __bufccpy ("ld (%%ff00+c), a"); break;
  631.     case 0xF0+2: __bufccpy ("ld a, (%%ff00+c)"); break;
  632.     case 0xF8: __bufccpy ("ld hl, sp+%%%01x", addrTemp8); break;
  633.     case 0xF9: __bufccpy ("ld sp, hl"); break;
  634.     case 0xFA: __bufccpy ("ld a, (%%%04x)", addrTemp16); break;
  635.     case 0xEA: __bufccpy ("ld (%%%04x), a", addrTemp16); break;
  636.     case 0x08: __bufccpy ("ld (%%%04x), sp", addrTemp16); break;
  637.     /* large alu */
  638.     case 0x80+0x00+0: __bufccpy ("add a, b"); break;  
  639.     case 0x80+0x00+1: __bufccpy ("add a, c"); break;  
  640.     case 0x80+0x00+2: __bufccpy ("add a, d"); break;  
  641.     case 0x80+0x00+3: __bufccpy ("add a, e"); break;  
  642.     case 0x80+0x00+4: __bufccpy ("add a, h"); break;  
  643.     case 0x80+0x00+5: __bufccpy ("add a, l"); break;  
  644.     case 0x80+0x00+6: __bufccpy ("add a, (hl)"); break;  
  645.     case 0x80+0x00+7: __bufccpy ("add a, a"); break;  
  646.     case 0x80+0x00+0+8: __bufccpy ("adc a, b"); break;  
  647.     case 0x80+0x00+1+8: __bufccpy ("adc a, c"); break;  
  648.     case 0x80+0x00+2+8: __bufccpy ("adc a, d"); break;  
  649.     case 0x80+0x00+3+8: __bufccpy ("adc a, e"); break;  
  650.     case 0x80+0x00+4+8: __bufccpy ("adc a, h"); break;  
  651.     case 0x80+0x00+5+8: __bufccpy ("adc a, l"); break;  
  652.     case 0x80+0x00+6+8: __bufccpy ("adc a, (hl)"); break;  
  653.     case 0x80+0x00+7+8: __bufccpy ("adc a, a"); break;  
  654.  
  655.     case 0x80+0x10+0: __bufccpy ("sub a, b"); break;  
  656.     case 0x80+0x10+1: __bufccpy ("sub a, c"); break;  
  657.     case 0x80+0x10+2: __bufccpy ("sub a, d"); break;  
  658.     case 0x80+0x10+3: __bufccpy ("sub a, e"); break;  
  659.     case 0x80+0x10+4: __bufccpy ("sub a, h"); break;  
  660.     case 0x80+0x10+5: __bufccpy ("sub a, l"); break;  
  661.     case 0x80+0x10+6: __bufccpy ("sub a, (hl)"); break;  
  662.     case 0x80+0x10+7: __bufccpy ("sub a, a"); break;  
  663.     case 0x80+0x10+0+8: __bufccpy ("sbc a, b"); break;  
  664.     case 0x80+0x10+1+8: __bufccpy ("sbc a, c"); break;  
  665.     case 0x80+0x10+2+8: __bufccpy ("sbc a, d"); break;  
  666.     case 0x80+0x10+3+8: __bufccpy ("sbc a, e"); break;  
  667.     case 0x80+0x10+4+8: __bufccpy ("sbc a, h"); break;  
  668.     case 0x80+0x10+5+8: __bufccpy ("sbc a, l"); break;  
  669.     case 0x80+0x10+6+8: __bufccpy ("sbc a, (hl)"); break;  
  670.     case 0x80+0x10+7+8: __bufccpy ("sbc a, a"); break;  
  671.    
  672.     case 0x80+0x20+0: __bufccpy ("and a, b"); break;  
  673.     case 0x80+0x20+1: __bufccpy ("and a, c"); break;  
  674.     case 0x80+0x20+2: __bufccpy ("and a, d"); break;  
  675.     case 0x80+0x20+3: __bufccpy ("and a, e"); break;  
  676.     case 0x80+0x20+4: __bufccpy ("and a, h"); break;  
  677.     case 0x80+0x20+5: __bufccpy ("and a, l"); break;  
  678.     case 0x80+0x20+6: __bufccpy ("and a, (hl)"); break;  
  679.     case 0x80+0x20+7: __bufccpy ("and a, a"); break;  
  680.     case 0x80+0x20+0+8: __bufccpy ("xor a, b"); break;  
  681.     case 0x80+0x20+1+8: __bufccpy ("xor a, c"); break;  
  682.     case 0x80+0x20+2+8: __bufccpy ("xor a, d"); break;  
  683.     case 0x80+0x20+3+8: __bufccpy ("xor a, e"); break;  
  684.     case 0x80+0x20+4+8: __bufccpy ("xor a, h"); break;  
  685.     case 0x80+0x20+5+8: __bufccpy ("xor a, l"); break;  
  686.     case 0x80+0x20+6+8: __bufccpy ("xor a, (hl)"); break;  
  687.     case 0x80+0x20+7+8: __bufccpy ("xor a, a"); break;  
  688.    
  689.     case 0x80+0x30+0: __bufccpy ("or a, b"); break;  
  690.     case 0x80+0x30+1: __bufccpy ("or a, c"); break;  
  691.     case 0x80+0x30+2: __bufccpy ("or a, d"); break;  
  692.     case 0x80+0x30+3: __bufccpy ("or a, e"); break;  
  693.     case 0x80+0x30+4: __bufccpy ("or a, h"); break;  
  694.     case 0x80+0x30+5: __bufccpy ("or a, l"); break;  
  695.     case 0x80+0x30+6: __bufccpy ("or a, (hl)"); break;  
  696.     case 0x80+0x30+7: __bufccpy ("or a, a"); break;  
  697.     case 0x80+0x30+0+8: __bufccpy ("cp a, b"); break;  
  698.     case 0x80+0x30+1+8: __bufccpy ("cp a, c"); break;  
  699.     case 0x80+0x30+2+8: __bufccpy ("cp a, d"); break;  
  700.     case 0x80+0x30+3+8: __bufccpy ("cp a, e"); break;  
  701.     case 0x80+0x30+4+8: __bufccpy ("cp a, h"); break;  
  702.     case 0x80+0x30+5+8: __bufccpy ("cp a, l"); break;  
  703.     case 0x80+0x30+6+8: __bufccpy ("cp a, (hl)"); break;  
  704.     case 0x80+0x30+7+8: __bufccpy ("cp a, a"); break;
  705.  
  706.       /* inc /decv wordreg */
  707.     case 0x03: __bufccpy ("inc bc"); break;
  708.     case 0x13: __bufccpy ("inc de"); break;
  709.     case 0x23: __bufccpy ("inc hl"); break;
  710.     case 0x33: __bufccpy ("inc sp"); break;
  711.     case 0x03+8: __bufccpy ("dec bc"); break;
  712.     case 0x13+8: __bufccpy ("dec de"); break;
  713.     case 0x23+8: __bufccpy ("dec hl"); break;
  714.     case 0x33+8: __bufccpy ("dec sp"); break;
  715.       /* inc /decv sreg */
  716.     case 0x03+1: __bufccpy ("inc b"); break;
  717.     case 0x13+1: __bufccpy ("inc d"); break;
  718.     case 0x23+1: __bufccpy ("inc h"); break;
  719.     case 0x33+1: __bufccpy ("inc (hl)"); break;
  720.     case 0x03+8+1: __bufccpy ("inc c"); break;
  721.     case 0x13+8+1: __bufccpy ("inc e"); break;
  722.     case 0x23+8+1: __bufccpy ("inc l"); break;
  723.     case 0x33+8+1: __bufccpy ("inc a"); break;
  724.     case 0x03+1+1: __bufccpy ("dec b"); break;
  725.     case 0x13+1+1: __bufccpy ("dec d"); break;
  726.     case 0x23+1+1: __bufccpy ("dec h"); break;
  727.     case 0x33+1+1: __bufccpy ("dec (hl)"); break;
  728.     case 0x03+8+1+1: __bufccpy ("dec c"); break;
  729.     case 0x13+8+1+1: __bufccpy ("dec e"); break;
  730.     case 0x23+8+1+1: __bufccpy ("dec l"); break;
  731.     case 0x33+8+1+1: __bufccpy ("dec a"); break;
  732.  
  733.     /* add word */
  734.     case 0x09: __bufccpy ("add hl, bc"); break;
  735.     case 0x19: __bufccpy ("add hl, de"); break;
  736.     case 0x29: __bufccpy ("add hl, hl"); break;
  737.     case 0x39: __bufccpy ("add hl, sp"); break;
  738.  
  739.     /* jr */
  740.     case 0x18:/* JR   */ __bufccpy ("jr loc_%04x", (g_addrb + ((((addrcount + 2) + (char)addrTemp8)) ))& 0xFFFF); break;
  741.     case 0x20:/* JRNZ */ __bufccpy ("jrnz loc_%04x",( g_addrb + ((((addrcount + 2) + (char)addrTemp8)) ))& 0xFFFF); break;
  742.     case 0x30:/* JRNC */ __bufccpy ("jrnc loc_%04x", (g_addrb + ((((addrcount + 2) + (char)addrTemp8))))& 0xFFFF); break;
  743.     case 0x28:/* JRZ   */ __bufccpy ("jrz loc_%04x", (g_addrb + ((((addrcount + 2) + (char)addrTemp8)) ))& 0xFFFF); break;
  744.     case 0x38:/* JRC */ __bufccpy ("jrc loc_%04x", (g_addrb + ((((addrcount + 2) + (char)addrTemp8)) ))& 0xFFFF); break;
  745.     /* call */
  746.     case 0xCD:/* CALL   */ __bufccpy ("call sub_%04x", addrTemp16); break;
  747.     case 0xC4:/* CALLNZ */ __bufccpy ("callnz sub_%04x", addrTemp16); break;
  748.     case 0xD4:/* CALLNC */     __bufccpy ("callnc sub_%04x", addrTemp16); break;
  749.     case 0xCC:/* CALLZ   */   __bufccpy ("callz sub_%04x", addrTemp16); break;
  750.     case 0xDC:/* CALLC */ __bufccpy ("callc sub_%04x", addrTemp16); break;
  751.    /* jp */
  752.     case 0xE9:/* JP(HL) */ __bufccpy ("jp (hl)"); break;
  753.     case 0xC3:/* JP   */ __bufccpy ("jp long_%04x", addrTemp16); break;
  754.     case 0xC2:/* JPNZ */ __bufccpy ("jpnz long_%04x", addrTemp16); break;
  755.     case 0xD2:/* JPNC */  __bufccpy ("jpnc long_%04x", addrTemp16); break;
  756.     case 0xCA:/* JPZ   */ __bufccpy ("jpz long_%04x", addrTemp16); break;
  757.     case 0xDA:/* JPC */  __bufccpy ("jpc long_%04x", addrTemp16); break;
  758.       /* ret */
  759.     case 0xC0:/*RETNZ */  __bufccpy ("retnz", addrTemp16); break;
  760.     case 0xD0:/*RETNC */  __bufccpy ("retnc", addrTemp16); break;
  761.     case 0xC0+8:/*RETZ */  __bufccpy ("retz", addrTemp16); break;
  762.     case 0xD0+8:/*RETC */  __bufccpy ("retc", addrTemp16); break;
  763.     case 0xC0+8+1:/*RET */  __bufccpy ("ret", addrTemp16); break;
  764.     case 0xD0+8+1:/*RETI */  __bufccpy ("reti", addrTemp16); break;
  765.       /* push pop */
  766.     case 0xC5:  __bufccpy ("push bc", addrTemp16); break;
  767.     case 0xD5:  __bufccpy ("push de", addrTemp16); break;
  768.     case 0xE5:  __bufccpy ("push hl", addrTemp16); break;
  769.     case 0xF5:  __bufccpy ("push af", addrTemp16); break;
  770.     case 0xC1:  __bufccpy ("pop bc", addrTemp16); break;
  771.     case 0xD1:  __bufccpy ("pop de", addrTemp16); break;
  772.     case 0xE1:  __bufccpy ("pop hl", addrTemp16); break;
  773.     case 0xF1:  __bufccpy ("pop af", addrTemp16); break;
  774.       /* rst */
  775.     case 0xC7:  __bufccpy ("rst %%00", addrTemp16); break;
  776.     case 0xD7:  __bufccpy ("rst %%10", addrTemp16); break;
  777.     case 0xE7:  __bufccpy ("rst %%20", addrTemp16); break;
  778.     case 0xF7:  __bufccpy ("rst %%30", addrTemp16); break;
  779.     case 0xC7+8:  __bufccpy ("rst %%08", addrTemp16); break;
  780.     case 0xD7+8:  __bufccpy ("rst %%18", addrTemp16); break;
  781.     case 0xE7+8:  __bufccpy ("rst %%28", addrTemp16); break;
  782.     case 0xF7+8:  __bufccpy ("rst %%38", addrTemp16); break;
  783.       /* alu d8*/
  784.     case 0xC6: __bufccpy ("add a, %%%02x", addrTemp8); break;
  785.     case 0xD6: __bufccpy ("sub a, %%%02x", addrTemp8); break;
  786.     case 0xE6: __bufccpy ("and a, %%%02x", addrTemp8); break;
  787.     case 0xF6: __bufccpy ("or a, %%%02x", addrTemp8); break;
  788.     case 0xC6+8: __bufccpy ("adc a, %%%02x", addrTemp8); break;
  789.     case 0xD6+8: __bufccpy ("sbc a, %%%02x", addrTemp8); break;
  790.     case 0xE6+8: __bufccpy ("xor a, %%%02x", addrTemp8); break;
  791.     case 0xF6+8: __bufccpy ("cp a, %%%02x", addrTemp8); break;
  792.       /* misc */
  793.     case 0xE8:  __bufccpy ("add esp, %%%02x", addrTemp8); break;
  794.     case 0xCB:
  795.       /* perix cb */
  796.       opcode2 = tempBank[addrcount+1];
  797.       switch (opcode2) {
  798.       case 0x00+0x00+0: __bufccpy ("rlc, b"); break;  
  799.       case 0x00+0x00+1: __bufccpy ("rlc, c"); break;  
  800.       case 0x00+0x00+2: __bufccpy ("rlc, d"); break;  
  801.       case 0x00+0x00+3: __bufccpy ("rlc, e"); break;  
  802.       case 0x00+0x00+4: __bufccpy ("rlc, h"); break;  
  803.       case 0x00+0x00+5: __bufccpy ("rlc, l"); break;  
  804.       case 0x00+0x00+6: __bufccpy ("rlc, (hl)"); break;  
  805.       case 0x00+0x00+7: __bufccpy ("rlc, a"); break;  
  806.       case 0x00+0x00+0+8: __bufccpy ("rrc, b"); break;  
  807.       case 0x00+0x00+1+8: __bufccpy ("rrc, c"); break;  
  808.       case 0x00+0x00+2+8: __bufccpy ("rrc, d"); break;  
  809.       case 0x00+0x00+3+8: __bufccpy ("rrc, e"); break;  
  810.       case 0x00+0x00+4+8: __bufccpy ("rrc, h"); break;  
  811.       case 0x00+0x00+5+8: __bufccpy ("rrc, l"); break;  
  812.       case 0x00+0x00+6+8: __bufccpy ("rrc, (hl)"); break;  
  813.       case 0x00+0x00+7+8: __bufccpy ("rrc, a"); break;  
  814.  
  815.       case 0x00+0x10+0: __bufccpy ("rl, b"); break;  
  816.       case 0x00+0x10+1: __bufccpy ("rl, c"); break;  
  817.       case 0x00+0x10+2: __bufccpy ("rl, d"); break;  
  818.       case 0x00+0x10+3: __bufccpy ("rl, e"); break;  
  819.       case 0x00+0x10+4: __bufccpy ("rl, h"); break;  
  820.       case 0x00+0x10+5: __bufccpy ("rl, l"); break;  
  821.       case 0x00+0x10+6: __bufccpy ("rl, (hl)"); break;  
  822.       case 0x00+0x10+7: __bufccpy ("rl, a"); break;  
  823.       case 0x00+0x10+0+8: __bufccpy ("rr, b"); break;  
  824.       case 0x00+0x10+1+8: __bufccpy ("rr, c"); break;  
  825.       case 0x00+0x10+2+8: __bufccpy ("rr, d"); break;  
  826.       case 0x00+0x10+3+8: __bufccpy ("rr, e"); break;  
  827.       case 0x00+0x10+4+8: __bufccpy ("rr, h"); break;  
  828.       case 0x00+0x10+5+8: __bufccpy ("rr, l"); break;  
  829.       case 0x00+0x10+6+8: __bufccpy ("rr, (hl)"); break;  
  830.       case 0x00+0x10+7+8: __bufccpy ("rr, a"); break;  
  831.    
  832.       case 0x00+0x20+0: __bufccpy ("sla, b"); break;  
  833.       case 0x00+0x20+1: __bufccpy ("sla, c"); break;  
  834.       case 0x00+0x20+2: __bufccpy ("sla, d"); break;  
  835.       case 0x00+0x20+3: __bufccpy ("sla, e"); break;  
  836.       case 0x00+0x20+4: __bufccpy ("sla, h"); break;  
  837.       case 0x00+0x20+5: __bufccpy ("sla, l"); break;  
  838.       case 0x00+0x20+6: __bufccpy ("sla, (hl)"); break;  
  839.       case 0x00+0x20+7: __bufccpy ("sla, a"); break;  
  840.       case 0x00+0x20+0+8: __bufccpy ("sra, b"); break;  
  841.       case 0x00+0x20+1+8: __bufccpy ("sra, c"); break;  
  842.       case 0x00+0x20+2+8: __bufccpy ("sra, d"); break;  
  843.       case 0x00+0x20+3+8: __bufccpy ("sra, e"); break;  
  844.       case 0x00+0x20+4+8: __bufccpy ("sra, h"); break;  
  845.       case 0x00+0x20+5+8: __bufccpy ("sra, l"); break;  
  846.       case 0x00+0x20+6+8: __bufccpy ("sra, (hl)"); break;  
  847.       case 0x00+0x20+7+8: __bufccpy ("sra, a"); break;  
  848.    
  849.       case 0x00+0x30+0: __bufccpy ("swap, b"); break;  
  850.       case 0x00+0x30+1: __bufccpy ("swap, c"); break;  
  851.       case 0x00+0x30+2: __bufccpy ("swap, d"); break;  
  852.       case 0x00+0x30+3: __bufccpy ("swap, e"); break;  
  853.       case 0x00+0x30+4: __bufccpy ("swap, h"); break;  
  854.       case 0x00+0x30+5: __bufccpy ("swap, l"); break;  
  855.       case 0x00+0x30+6: __bufccpy ("swap, (hl)"); break;  
  856.       case 0x00+0x30+7: __bufccpy ("swap, a"); break;  
  857.       case 0x00+0x30+0+8: __bufccpy ("srl, b"); break;  
  858.       case 0x00+0x30+1+8: __bufccpy ("srl, c"); break;  
  859.       case 0x00+0x30+2+8: __bufccpy ("srl, d"); break;  
  860.       case 0x00+0x30+3+8: __bufccpy ("srl, e"); break;  
  861.       case 0x00+0x30+4+8: __bufccpy ("srl, h"); break;  
  862.       case 0x00+0x30+5+8: __bufccpy ("srl, l"); break;  
  863.       case 0x00+0x30+6+8: __bufccpy ("srl, (hl)"); break;  
  864.       case 0x00+0x30+7+8: __bufccpy ("srl, a"); break;
  865.  
  866.       case 0x40+0x00+0: __bufccpy ("bit b, 0"); break;  
  867.       case 0x40+0x00+1: __bufccpy ("bit c, 0"); break;  
  868.       case 0x40+0x00+2: __bufccpy ("bit d, 0"); break;  
  869.       case 0x40+0x00+3: __bufccpy ("bit e, 0"); break;  
  870.       case 0x40+0x00+4: __bufccpy ("bit h, 0"); break;  
  871.       case 0x40+0x00+5: __bufccpy ("bit l, 0"); break;  
  872.       case 0x40+0x00+6: __bufccpy ("bit (hl), 0"); break;  
  873.       case 0x40+0x00+7: __bufccpy ("bit a, 0"); break;  
  874.       case 0x40+0x00+0+8: __bufccpy ("bit b, 1"); break;  
  875.       case 0x40+0x00+1+8: __bufccpy ("bit c, 1"); break;  
  876.       case 0x40+0x00+2+8: __bufccpy ("bit d, 1"); break;  
  877.       case 0x40+0x00+3+8: __bufccpy ("bit e, 1"); break;  
  878.       case 0x40+0x00+4+8: __bufccpy ("bit h, 1"); break;  
  879.       case 0x40+0x00+5+8: __bufccpy ("bit l, 1"); break;  
  880.       case 0x40+0x00+6+8: __bufccpy ("bit (hl), 1"); break;  
  881.       case 0x40+0x00+7+8: __bufccpy ("bit a, 1"); break;  
  882.  
  883.       case 0x40+0x10+0: __bufccpy ("bit b, 2"); break;  
  884.       case 0x40+0x10+1: __bufccpy ("bit c, 2"); break;  
  885.       case 0x40+0x10+2: __bufccpy ("bit d, 2"); break;  
  886.       case 0x40+0x10+3: __bufccpy ("bit e, 2"); break;  
  887.       case 0x40+0x10+4: __bufccpy ("bit h, 2"); break;  
  888.       case 0x40+0x10+5: __bufccpy ("bit l, 2"); break;  
  889.       case 0x40+0x10+6: __bufccpy ("bit (hl), 2"); break;  
  890.       case 0x40+0x10+7: __bufccpy ("bit a, 2"); break;  
  891.       case 0x40+0x10+0+8: __bufccpy ("bit b, 3"); break;  
  892.       case 0x40+0x10+1+8: __bufccpy ("bit c, 3"); break;  
  893.       case 0x40+0x10+2+8: __bufccpy ("bit d, 3"); break;  
  894.       case 0x40+0x10+3+8: __bufccpy ("bit e, 3"); break;  
  895.       case 0x40+0x10+4+8: __bufccpy ("bit h, 3"); break;  
  896.       case 0x40+0x10+5+8: __bufccpy ("bit l, 3"); break;  
  897.       case 0x40+0x10+6+8: __bufccpy ("bit (hl), 3"); break;  
  898.       case 0x40+0x10+7+8: __bufccpy ("bit a, 3"); break;  
  899.    
  900.       case 0x40+0x20+0: __bufccpy ("bit b, 4"); break;  
  901.       case 0x40+0x20+1: __bufccpy ("bit c, 4"); break;  
  902.       case 0x40+0x20+2: __bufccpy ("bit d, 4"); break;  
  903.       case 0x40+0x20+3: __bufccpy ("bit e, 4"); break;  
  904.       case 0x40+0x20+4: __bufccpy ("bit h, 4"); break;  
  905.       case 0x40+0x20+5: __bufccpy ("bit l, 4"); break;  
  906.       case 0x40+0x20+6: __bufccpy ("bit (hl), 4"); break;  
  907.       case 0x40+0x20+7: __bufccpy ("bit a, 4"); break;  
  908.       case 0x40+0x20+0+8: __bufccpy ("bit b, 5"); break;  
  909.       case 0x40+0x20+1+8: __bufccpy ("bit c, 5"); break;  
  910.       case 0x40+0x20+2+8: __bufccpy ("bit d, 5"); break;  
  911.       case 0x40+0x20+3+8: __bufccpy ("bit e, 5"); break;  
  912.       case 0x40+0x20+4+8: __bufccpy ("bit h, 5"); break;  
  913.       case 0x40+0x20+5+8: __bufccpy ("bit l, 5"); break;  
  914.       case 0x40+0x20+6+8: __bufccpy ("bit (hl), 5"); break;  
  915.       case 0x40+0x20+7+8: __bufccpy ("bit a, 5"); break;  
  916.    
  917.       case 0x40+0x30+0: __bufccpy ("bit b, 6"); break;  
  918.       case 0x40+0x30+1: __bufccpy ("bit c, 6"); break;  
  919.       case 0x40+0x30+2: __bufccpy ("bit d, 6"); break;  
  920.       case 0x40+0x30+3: __bufccpy ("bit e, 6"); break;  
  921.       case 0x40+0x30+4: __bufccpy ("bit h, 6"); break;  
  922.       case 0x40+0x30+5: __bufccpy ("bit l, 6"); break;  
  923.       case 0x40+0x30+6: __bufccpy ("bit (hl), 6"); break;  
  924.       case 0x40+0x30+7: __bufccpy ("bit a, 6"); break;  
  925.       case 0x40+0x30+0+8: __bufccpy ("bit b, 7"); break;  
  926.       case 0x40+0x30+1+8: __bufccpy ("bit c, 7"); break;  
  927.       case 0x40+0x30+2+8: __bufccpy ("bit d, 7"); break;  
  928.       case 0x40+0x30+3+8: __bufccpy ("bit e, 7"); break;  
  929.       case 0x40+0x30+4+8: __bufccpy ("bit h, 7"); break;  
  930.       case 0x40+0x30+5+8: __bufccpy ("bit l, 7"); break;  
  931.       case 0x40+0x30+6+8: __bufccpy ("bit (hl), 7"); break;  
  932.       case 0x40+0x30+7+8: __bufccpy ("bit a, 7"); break;
  933.  
  934.       case 0x80+0x00+0: __bufccpy ("res b, 0"); break;  
  935.       case 0x80+0x00+1: __bufccpy ("res c, 0"); break;  
  936.       case 0x80+0x00+2: __bufccpy ("res d, 0"); break;  
  937.       case 0x80+0x00+3: __bufccpy ("res e, 0"); break;  
  938.       case 0x80+0x00+4: __bufccpy ("res h, 0"); break;  
  939.       case 0x80+0x00+5: __bufccpy ("res l, 0"); break;  
  940.       case 0x80+0x00+6: __bufccpy ("res (hl), 0"); break;  
  941.       case 0x80+0x00+7: __bufccpy ("res a, 0"); break;  
  942.       case 0x80+0x00+0+8: __bufccpy ("res b, 1"); break;  
  943.       case 0x80+0x00+1+8: __bufccpy ("res c, 1"); break;  
  944.       case 0x80+0x00+2+8: __bufccpy ("res d, 1"); break;  
  945.       case 0x80+0x00+3+8: __bufccpy ("res e, 1"); break;  
  946.       case 0x80+0x00+4+8: __bufccpy ("res h, 1"); break;  
  947.       case 0x80+0x00+5+8: __bufccpy ("res l, 1"); break;  
  948.       case 0x80+0x00+6+8: __bufccpy ("res (hl), 1"); break;  
  949.       case 0x80+0x00+7+8: __bufccpy ("res a, 1"); break;  
  950.  
  951.       case 0x80+0x10+0: __bufccpy ("res b, 2"); break;  
  952.       case 0x80+0x10+1: __bufccpy ("res c, 2"); break;  
  953.       case 0x80+0x10+2: __bufccpy ("res d, 2"); break;  
  954.       case 0x80+0x10+3: __bufccpy ("res e, 2"); break;  
  955.       case 0x80+0x10+4: __bufccpy ("res h, 2"); break;  
  956.       case 0x80+0x10+5: __bufccpy ("res l, 2"); break;  
  957.       case 0x80+0x10+6: __bufccpy ("res (hl), 2"); break;  
  958.       case 0x80+0x10+7: __bufccpy ("res a, 2"); break;  
  959.       case 0x80+0x10+0+8: __bufccpy ("res b, 3"); break;  
  960.       case 0x80+0x10+1+8: __bufccpy ("res c, 3"); break;  
  961.       case 0x80+0x10+2+8: __bufccpy ("res d, 3"); break;  
  962.       case 0x80+0x10+3+8: __bufccpy ("res e, 3"); break;  
  963.       case 0x80+0x10+4+8: __bufccpy ("res h, 3"); break;  
  964.       case 0x80+0x10+5+8: __bufccpy ("res l, 3"); break;  
  965.       case 0x80+0x10+6+8: __bufccpy ("res (hl), 3"); break;  
  966.       case 0x80+0x10+7+8: __bufccpy ("res a, 3"); break;  
  967.    
  968.       case 0x80+0x20+0: __bufccpy ("res b, 4"); break;  
  969.       case 0x80+0x20+1: __bufccpy ("res c, 4"); break;  
  970.       case 0x80+0x20+2: __bufccpy ("res d, 4"); break;  
  971.       case 0x80+0x20+3: __bufccpy ("res e, 4"); break;  
  972.       case 0x80+0x20+4: __bufccpy ("res h, 4"); break;  
  973.       case 0x80+0x20+5: __bufccpy ("res l, 4"); break;  
  974.       case 0x80+0x20+6: __bufccpy ("res (hl), 4"); break;  
  975.       case 0x80+0x20+7: __bufccpy ("res a, 4"); break;  
  976.       case 0x80+0x20+0+8: __bufccpy ("res b, 5"); break;  
  977.       case 0x80+0x20+1+8: __bufccpy ("res c, 5"); break;  
  978.       case 0x80+0x20+2+8: __bufccpy ("res d, 5"); break;  
  979.       case 0x80+0x20+3+8: __bufccpy ("res e, 5"); break;  
  980.       case 0x80+0x20+4+8: __bufccpy ("res h, 5"); break;  
  981.       case 0x80+0x20+5+8: __bufccpy ("res l, 5"); break;  
  982.       case 0x80+0x20+6+8: __bufccpy ("res (hl), 5"); break;  
  983.       case 0x80+0x20+7+8: __bufccpy ("res a, 5"); break;  
  984.    
  985.       case 0x80+0x30+0: __bufccpy ("sres b, 6"); break;  
  986.       case 0x80+0x30+1: __bufccpy ("sres c, 6"); break;  
  987.       case 0x80+0x30+2: __bufccpy ("sres d, 6"); break;  
  988.       case 0x80+0x30+3: __bufccpy ("sres e, 6"); break;  
  989.       case 0x80+0x30+4: __bufccpy ("sres h, 6"); break;  
  990.       case 0x80+0x30+5: __bufccpy ("sres l, 6"); break;  
  991.       case 0x80+0x30+6: __bufccpy ("sres (hl), 6"); break;  
  992.       case 0x80+0x30+7: __bufccpy ("sres a, 6"); break;  
  993.       case 0x80+0x30+0+8: __bufccpy ("res b, 7"); break;  
  994.       case 0x80+0x30+1+8: __bufccpy ("res c, 7"); break;  
  995.       case 0x80+0x30+2+8: __bufccpy ("res d, 7"); break;  
  996.       case 0x80+0x30+3+8: __bufccpy ("res e, 7"); break;  
  997.       case 0x80+0x30+4+8: __bufccpy ("res h, 7"); break;  
  998.       case 0x80+0x30+5+8: __bufccpy ("res l, 7"); break;  
  999.       case 0x80+0x30+6+8: __bufccpy ("res (hl), 7"); break;  
  1000.       case 0x80+0x30+7+8: __bufccpy ("res a, 7"); break;
  1001.  
  1002.       case 0xC0+0x00+0: __bufccpy ("set b, 0"); break;  
  1003.       case 0xC0+0x00+1: __bufccpy ("set c, 0"); break;  
  1004.       case 0xC0+0x00+2: __bufccpy ("set d, 0"); break;  
  1005.       case 0xC0+0x00+3: __bufccpy ("set e, 0"); break;  
  1006.       case 0xC0+0x00+4: __bufccpy ("set h, 0"); break;  
  1007.       case 0xC0+0x00+5: __bufccpy ("set l, 0"); break;  
  1008.       case 0xC0+0x00+6: __bufccpy ("set (hl), 0"); break;  
  1009.       case 0xC0+0x00+7: __bufccpy ("set a, 0"); break;  
  1010.       case 0xC0+0x00+0+8: __bufccpy ("set b, 1"); break;  
  1011.       case 0xC0+0x00+1+8: __bufccpy ("set c, 1"); break;  
  1012.       case 0xC0+0x00+2+8: __bufccpy ("set d, 1"); break;  
  1013.       case 0xC0+0x00+3+8: __bufccpy ("set e, 1"); break;  
  1014.       case 0xC0+0x00+4+8: __bufccpy ("set h, 1"); break;  
  1015.       case 0xC0+0x00+5+8: __bufccpy ("set l, 1"); break;  
  1016.       case 0xC0+0x00+6+8: __bufccpy ("set (hl), 1"); break;  
  1017.       case 0xC0+0x00+7+8: __bufccpy ("set a, 1"); break;  
  1018.  
  1019.       case 0xC0+0x10+0: __bufccpy ("set b, 2"); break;  
  1020.       case 0xC0+0x10+1: __bufccpy ("set c, 2"); break;  
  1021.       case 0xC0+0x10+2: __bufccpy ("set d, 2"); break;  
  1022.       case 0xC0+0x10+3: __bufccpy ("set e, 2"); break;  
  1023.       case 0xC0+0x10+4: __bufccpy ("set h, 2"); break;  
  1024.       case 0xC0+0x10+5: __bufccpy ("set l, 2"); break;  
  1025.       case 0xC0+0x10+6: __bufccpy ("set (hl), 2"); break;  
  1026.       case 0xC0+0x10+7: __bufccpy ("set a, 2"); break;  
  1027.       case 0xC0+0x10+0+8: __bufccpy ("set b, 3"); break;  
  1028.       case 0xC0+0x10+1+8: __bufccpy ("set c, 3"); break;  
  1029.       case 0xC0+0x10+2+8: __bufccpy ("set d, 3"); break;  
  1030.       case 0xC0+0x10+3+8: __bufccpy ("set e, 3"); break;  
  1031.       case 0xC0+0x10+4+8: __bufccpy ("set h, 3"); break;  
  1032.       case 0xC0+0x10+5+8: __bufccpy ("set l, 3"); break;  
  1033.       case 0xC0+0x10+6+8: __bufccpy ("set (hl), 3"); break;  
  1034.       case 0xC0+0x10+7+8: __bufccpy ("set a, 3"); break;  
  1035.    
  1036.       case 0xC0+0x20+0: __bufccpy ("set b, 4"); break;  
  1037.       case 0xC0+0x20+1: __bufccpy ("set c, 4"); break;  
  1038.       case 0xC0+0x20+2: __bufccpy ("set d, 4"); break;  
  1039.       case 0xC0+0x20+3: __bufccpy ("set e, 4"); break;  
  1040.       case 0xC0+0x20+4: __bufccpy ("set h, 4"); break;  
  1041.       case 0xC0+0x20+5: __bufccpy ("set l, 4"); break;  
  1042.       case 0xC0+0x20+6: __bufccpy ("set (hl), 4"); break;  
  1043.       case 0xC0+0x20+7: __bufccpy ("set a, 4"); break;  
  1044.       case 0xC0+0x20+0+8: __bufccpy ("set b, 5"); break;  
  1045.       case 0xC0+0x20+1+8: __bufccpy ("set c, 5"); break;  
  1046.       case 0xC0+0x20+2+8: __bufccpy ("set d, 5"); break;  
  1047.       case 0xC0+0x20+3+8: __bufccpy ("set e, 5"); break;  
  1048.       case 0xC0+0x20+4+8: __bufccpy ("set h, 5"); break;  
  1049.       case 0xC0+0x20+5+8: __bufccpy ("set l, 5"); break;  
  1050.       case 0xC0+0x20+6+8: __bufccpy ("set (hl), 5"); break;  
  1051.       case 0xC0+0x20+7+8: __bufccpy ("set a, 5"); break;  
  1052.    
  1053.       case 0xC0+0x30+0: __bufccpy ("set b, 6"); break;  
  1054.       case 0xC0+0x30+1: __bufccpy ("set c, 6"); break;  
  1055.       case 0xC0+0x30+2: __bufccpy ("set d, 6"); break;  
  1056.       case 0xC0+0x30+3: __bufccpy ("set e, 6"); break;  
  1057.       case 0xC0+0x30+4: __bufccpy ("set h, 6"); break;  
  1058.       case 0xC0+0x30+5: __bufccpy ("set l, 6"); break;  
  1059.       case 0xC0+0x30+6: __bufccpy ("set (hl), 6"); break;  
  1060.       case 0xC0+0x30+7: __bufccpy ("set a, 6"); break;  
  1061.       case 0xC0+0x30+0+8: __bufccpy ("set b, 7"); break;  
  1062.       case 0xC0+0x30+1+8: __bufccpy ("set c, 7"); break;  
  1063.       case 0xC0+0x30+2+8: __bufccpy ("set d, 7"); break;  
  1064.       case 0xC0+0x30+3+8: __bufccpy ("set e, 7"); break;  
  1065.       case 0xC0+0x30+4+8: __bufccpy ("set h, 7"); break;  
  1066.       case 0xC0+0x30+5+8: __bufccpy ("set l, 7"); break;  
  1067.       case 0xC0+0x30+6+8: __bufccpy ("set (hl), 7"); break;  
  1068.       case 0xC0+0x30+7+8: __bufccpy ("set a, 7"); break;
  1069.       default:
  1070.         assert (0);
  1071.       }
  1072.       break;
  1073.     default:
  1074.       assert (0);
  1075.     }
  1076.     isec->addr = addrcount + g_addrb;
  1077.     isec->instr_len = cpu_lens[opcode];
  1078.     isec->opcode[0] = opcode;
  1079.     isec->opcode[1] = opcode2;
  1080.     addrcount += cpu_lens[opcode];
  1081.     list_insert (bankdis->instr_list, -1, isec);
  1082.   }
  1083.   return 0;
  1084. }
  1085.  
  1086. int lr35902_bankout (FILE *output /* offset setted */, struct bank_disassembler *bankdis, int bankid) {
  1087.  
  1088.   /* set attach */
  1089.   struct list_v *p;
  1090.   ks_int id;
  1091.  
  1092.   LIST_FOREACH (bankdis->armark_list, id, p) {
  1093.     struct addrmark *mk = (struct addrmark *) p->obj;
  1094.     struct list_v *p2;
  1095.     ks_int id2;
  1096.     LIST_FOREACH (bankdis->instr_list, id2, p2) {
  1097.       struct instr_sec *is  = (struct instr_sec *) p2->obj;
  1098.       if (is->addr >= mk->baddr) {
  1099.         if (is->addr == mk->baddr)
  1100.           is->attach = mk;
  1101.         break;
  1102.       }
  1103.     }
  1104.   }
  1105.   /* output distext */
  1106.   fprintf (output, "================ BANK %d Start ================ \n", bankid);
  1107.   LIST_FOREACH (bankdis->instr_list, id, p) {
  1108.     struct instr_sec *is  = (struct instr_sec *) p->obj;
  1109.     struct addrmark_n *amn;
  1110.     struct list_v *p2;
  1111.     ks_int id2;
  1112.     if (is->attach != ks_null) {
  1113.       /* out ref list */
  1114.       if (is->attach->refcall_tracker != ks_null && is->attach->refcall_tracker->nums > 0) {
  1115.         fprintf (output, "%%%d:%04x sub_%04x: ", bankid, is->addr, is->addr);
  1116.         LIST_FOREACH (is->attach->refcall_tracker, id2, p2) {
  1117.           amn = (struct addrmark_n *) p2->obj;
  1118.           if (amn->ccbranch != ks_false)
  1119.             fprintf (output, "$%%%04x ", amn->addr);
  1120.           else
  1121.             fprintf (output, ">%%%04x ", amn->addr);
  1122.         }
  1123.         fprintf (output, "\n");
  1124.       }
  1125.       if (is->attach->reflong_tracker != ks_null && is->attach->reflong_tracker->nums > 0) {
  1126.         fprintf (output, "%%%d:%04x long_%04x: ", bankid, is->addr, is->addr);
  1127.         LIST_FOREACH (is->attach->reflong_tracker, id2, p2) {
  1128.           amn = (struct addrmark_n *) p2->obj;
  1129.           if (amn->ccbranch != ks_false)
  1130.             fprintf (output, "$%%%04x ", amn->addr);
  1131.           else
  1132.             fprintf (output, ">%%%04x ", amn->addr);
  1133.         }
  1134.         fprintf (output, "\n");
  1135.       }
  1136.       if (is->attach->refshort_tracker != ks_null && is->attach->refshort_tracker->nums > 0) {
  1137.         fprintf (output, "%%%d:%04x loc_%04x: ", bankid, is->addr, is->addr);
  1138.         LIST_FOREACH (is->attach->refshort_tracker, id2, p2) {
  1139.           amn = (struct addrmark_n *) p2->obj;
  1140.           if (amn->ccbranch != ks_false)
  1141.             fprintf (output, "$%%%04x ", amn->addr);
  1142.           else
  1143.             fprintf (output, ">%%%04x ", amn->addr);
  1144.         }
  1145.         fprintf (output, "\n");
  1146.       }
  1147.     }
  1148. # if 0
  1149.     fprintf (output, "%%%04x %02x ", is->addr, is->opcode[0]);
  1150.     if (is->instr_len == 2)
  1151.       fprintf (output, "%02x ", is->opcode[1]);
  1152.     fprintf (output, "%s \n", is->opdesc);
  1153. #else
  1154.     fprintf (output, "%%%d:%04x ", bankid, is->addr);
  1155.     fprintf (output, "                %s \n", is->opdesc);
  1156. #endif
  1157.   }
  1158.   fprintf (output, "================ BANK %d End ==================\n", bankid);
  1159.   return 0;
  1160. }
  1161.  
  1162. int
  1163. lr35902_disassembler2 (host_char *path_r, host_char *path_w) {
  1164.  
  1165.   struct bank_disassembler bkdis;
  1166.   struct romheader *prh;
  1167.   int sig = -1;
  1168.   FILE *output = ks_null;
  1169.   ks_int promsize;
  1170.   ks_int sramsize;
  1171.   ks_int id;
  1172.   ks_uint8 *buf = ks_null;
  1173.   ks_int32 fsize = -1;
  1174.   ks_bool sgb_done, dmg_done, cgb_done;
  1175.   char cac;
  1176.   char title16[17];
  1177.   char title15[16];
  1178.   char title11[12];
  1179.   char *ctype = "no adapter";
  1180.   char *lic = "no adapter";
  1181.  
  1182.   static ks_uint8 nintendo_magicnumber[] =
  1183.   { 0xCE, 0xED, 0x66, 0x66, 0xCC, 0x0D, 0x00, 0x0B, 0x03, 0x73, 0x00, 0x83, 0x00, 0x0C, 0x00, 0x0D,
  1184.     0x00, 0x08, 0x11, 0x1F, 0x88, 0x89, 0x00, 0x0E, 0xDC, 0xCC, 0x6E, 0xE6, 0xDD, 0xDD, 0xD9, 0x99,
  1185.     0xBB, 0xBB, 0x67, 0x63, 0x6E, 0x0E, 0xEC, 0xCC, 0xDD, 0xDC, 0x99, 0x9F, 0xBB, 0xB9, 0x33, 0x3E };
  1186.  
  1187. # if defined (_WIN32)
  1188.   HANDLE win32fd = INVALID_HANDLE_VALUE;
  1189.   HANDLE win32mmap = INVALID_HANDLE_VALUE;
  1190.   DWORD dwCalcLow,dwCalcHigh;
  1191. # endif
  1192.  
  1193. # if defined (_WIN32)
  1194.   if ( (win32fd = CreateFile (  path_r,
  1195.                       GENERIC_READ, /*source only read */
  1196.                       FILE_SHARE_READ,  
  1197.                       NULL,      
  1198.                       OPEN_EXISTING,
  1199.                       FILE_ATTRIBUTE_READONLY,    
  1200.                       NULL )) == INVALID_HANDLE_VALUE)
  1201.     return -1;
  1202.   if ((dwCalcLow = GetFileSize (win32fd, & dwCalcHigh)) <= 0x4000) {
  1203.     CloseHandle (win32fd);
  1204.     return -1;
  1205.   }
  1206.   win32mmap = CreateFileMappingW
  1207.        ( win32fd, NULL, PAGE_READONLY,
  1208.           dwCalcHigh,      
  1209.           dwCalcLow,  
  1210.           NULL );
  1211.   assert (win32mmap != INVALID_HANDLE_VALUE);
  1212.   buf = (ks_uint8 *)MapViewOfFile (win32mmap, FILE_MAP_READ, 0, 0, 0);
  1213.   assert (buf != NULL);
  1214.   prh = (struct romheader *)& buf[0x134];
  1215.   if (memcmp (& buf[0x104],
  1216.                 nintendo_magicnumber, sizeof (nintendo_magicnumber) != 0))
  1217.     goto __cleanup;
  1218.   else ;
  1219.  
  1220.   switch (prh->promsize) {
  1221.   case 0x00: promsize = 2; break;
  1222.   case 0x01: promsize = 4; break;
  1223.   case 0x02: promsize = 8; break;
  1224.   case 0x03: promsize =16; break;
  1225.   case 0x04: promsize =32; break;
  1226.   case 0x05: promsize =64; break;
  1227.   case 0x06: promsize =128; break;
  1228.   case 0x07: promsize =256; break;
  1229.   case 0x08: promsize =512; break;
  1230.   case 0x52: promsize =72; break;
  1231.   case 0x53: promsize =80; break;
  1232.   case 0x54: promsize =96; break;
  1233.   default : goto __cleanup;
  1234.   }
  1235.  
  1236.   if (dwCalcLow != (0x4000 * promsize))
  1237.     promsize = dwCalcLow/ 0x4000;
  1238.   else ;
  1239.  
  1240. #ifdef UCS2
  1241.   output = _wfopen (path_w,  L"wb");
  1242. #else
  1243.   output = fopen (path_w,  "wb"));
  1244. #endif
  1245.   if (output == NULL)
  1246.     goto __cleanup;
  1247.   else ;
  1248.   memset (title16, 0, sizeof (title16));
  1249.   memset (title15, 0, sizeof (title15));
  1250.   memset (title11, 0, sizeof (title11));
  1251.  
  1252.   /* get title */
  1253.   for (id = 0; id != 16; id++) {
  1254.     title16[id] = prh->title[id];
  1255.     title16[id] &= 0x7F;
  1256.     if (id < 15)
  1257.       title15[id] = title16[id];
  1258.     if (id < 11)
  1259.       title11[id] = title16[id];
  1260.   }
  1261.   /* assert cgb */
  1262.   cac = prh->title[15];
  1263.   if (cac & 0x80) {
  1264.     cgb_done = ks_true;
  1265.     if (cac & 0x40)
  1266.       dmg_done = ks_false;
  1267.     else
  1268.       dmg_done = ks_true;
  1269.   } else {
  1270.     cgb_done = ks_false;
  1271.     dmg_done = ks_true;
  1272.   }
  1273.   /* assert sgb */
  1274.   if (prh->sgb == 3)
  1275.     sgb_done = ks_true;
  1276.   else
  1277.     sgb_done = ks_false;
  1278.   /*
  1279.    * get cart type */
  1280.   kinit ();
  1281.   ctype = g_lutctype[prh->ctype];
  1282.   if (prh->anclic == 0x33) {
  1283.     // new lic
  1284.     char v[3];
  1285.     v[2] = 0;
  1286.     *((short *)v) = prh->curlic;
  1287.     lic = g_lutcurlic[atoi (v)];
  1288.   } else {
  1289.     lic = g_lutanclic[prh->anclic];
  1290.   }
  1291.   switch (prh->ramsize) {
  1292.   case 0x00: sramsize = 0; break;
  1293.   case 0x01: sramsize =-1; break; /* 2K */
  1294.   case 0x02: sramsize = 1; break;
  1295.   case 0x03: sramsize = 4; break;
  1296.   case 0x04: sramsize =16; break;
  1297.   case 0x05: sramsize = 8; break;
  1298.   default : goto __cleanup;
  1299.   }
  1300.   fprintf (output,
  1301.    ">!\n"\
  1302.    "  KS3578:: GBZ80 Static Disassembler - moecmks\n"\
  1303.    "  |\n"\
  1304.    "  rominfos:\n"\
  1305.    "     \\.__ title16:%s\n"\
  1306.    "     \\.__ title15:%s\n"\
  1307.    "     \\.__ title11:%s\n"\
  1308.    "     \\.__ manufacturer code: %08X\n"\
  1309.    "     \\.__ cgbbyte: %02X\n"\
  1310.    "     \\.__ cartridge type:%s\n"\
  1311.    "     \\.__ licensee:%s\n"\
  1312.    "     \\.__ promsize:%d\n"\
  1313.    "     \\.__ ramsize:%d\n"\
  1314.    "     \\.__ target code:%s\n"\
  1315.    "     \\.__ dmg support:%s\n"\
  1316.    "     \\.__ cgb support:%s\n"\
  1317.    "     \\.__ sgb support:%s\n"\
  1318.    "     \\.__ markv:%02x\n"\
  1319.    "     \\.__ hdcrc:%02x\n"\
  1320.    "     \\.__ gcrc:%04x\n"\
  1321.    "  |____________________________________\n"\
  1322.    "!<\n\n",
  1323.    title16, /* title */
  1324.    title15, /* title */
  1325.    title11, /* title */
  1326.    *(unsigned int *)& title16[11],
  1327.    (unsigned char)prh->title[15],
  1328.    ctype,
  1329.    lic, /* licensee*/
  1330.    promsize,
  1331.    sramsize,
  1332.    (prh->targetcode == 0) ? "japanese" :"non-japanese",
  1333.    dmg_done ? "true" : "false",
  1334.    cgb_done ? "true" : "false",
  1335.    sgb_done ? "true" : "false",
  1336.    prh->maskver,
  1337.    prh->hdcrc,
  1338.    prh->gcrc);
  1339.    
  1340.   /* disbanlk */
  1341.   for (id = 0; id != promsize; id++ ){
  1342.  
  1343.     if (id == 0)
  1344.       g_addrb = 0;
  1345.     else
  1346.       g_addrb = 0x4000;
  1347.  
  1348.     list_init (& bkdis.armark_list);
  1349.     list_init (& bkdis.instr_list);
  1350.  
  1351.     lr35902_getaddrmark ((char *)buf, id, bkdis.armark_list);
  1352.     lr35902_bankdis ((char *)buf, id, & bkdis);
  1353.     lr35902_bankout (output, & bkdis, id);
  1354.   }
  1355. __cleanup:
  1356.   if (buf != NULL)
  1357.     UnmapViewOfFile (buf);
  1358.   if (win32mmap != NULL)
  1359.     CloseHandle (win32mmap);
  1360.   if (win32fd != NULL)
  1361.     CloseHandle (win32fd);
  1362.   if (output != NULL)
  1363.     fclose (output);
  1364.   return sig;
  1365.  
  1366.  
  1367. # endif
  1368.   return sig;
  1369. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement