root/l8085.cpp

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. main

// $Log: l8085.cpp,v $
// Revision 1.3  2011/04/14 15:13:09  doug
// get ready for release to wiki and server
//
//

// ---------------------------------------------------
// l8085.cpp    21-Feb-11   Running on Mac OS X 10.6.6
// S/n 2011-1042-654321  Written by Douglas W. Goodall
// Copyright(c)2011 Douglas W. Goodall, United States.
// ---------------------------------------------------
// This file is part of Vintage Modern Assembler Plus Tools.
//
// VMAPT is free software: 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 3 of the License, or
// (at your option) any later version.
//
// VMAPT is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with VMAPT.  If not, see <http://www.gnu.org/licenses/>.
//
// 2/4/2011 dwg - cloned from my Borland version 

static char szL8085Cpp[] = "$Id: l8085.cpp,v 1.3 2011/04/14 15:13:09 doug Exp $";

#include "asdefs.hpp"
#define DWGALLOC
#define INIBIND
#define MEMORY
#include "includes.hpp"

int main(int argc,char **argv)
{
        int pc;
        int g_ucBytes;
        unsigned char g_szOpcode;
        unsigned char parm8;
        unsigned int parm16;
        unsigned char byte1;
        unsigned char byte2;
        unsigned char byte3;
        char szI[80];

        Version(argv[0]);

        if(2 > argc) {
                printf("usage - l <addr>\n");
                exit(EXIT_FAILURE);
        }

        CAlloc * pAlloc = new CAlloc();
        CMemory * pMem = new CMemory(MEMSIZE);

        sscanf(argv[1],"%04X",&pc);
        int rc = 0;
        while(0 == rc) {
                g_szOpcode = pMem->peekb(pc);
                parm8  = pMem->peekb(pc+1);
                parm16 = pMem->peekw(pc+1);
                byte1  = g_szOpcode;
                byte2  = pMem->peekb(pc+1);
                byte3  = pMem->peekb(pc+2);

                switch(g_szOpcode) {

                        // single byte g_szOpcodes
                        

                        case 0x00: sprintf(szI,"nop");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x01: sprintf(szI,"lxi  b,0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;   

                        case 0x02: sprintf(szI,"stax b,0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;
                        
                        case 0x03: sprintf(szI,"inx  b");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x07: sprintf(szI,"rlc");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x09: sprintf(szI,"dad  b");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x0A: sprintf(szI,"ldax b,0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0x0B: sprintf(szI,"dcx  b");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x0F: sprintf(szI,"rrc");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x11: sprintf(szI,"lxi  d,0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0x12: sprintf(szI,"stax d,0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0x13: sprintf(szI,"inx  d");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x17: sprintf(szI,"ral");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x19: sprintf(szI,"dad  d");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x1A: sprintf(szI,"ldax d,0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0x1B: sprintf(szI,"dcx  d");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x1F: sprintf(szI,"rar");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x20: sprintf(szI,"rim");
                                g_ucBytes = 1; rc = 0;; break;


                        case 0x21: sprintf(szI,"lxi h,0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0x22: sprintf(szI,"shld 0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0x23: sprintf(szI,"inx  h");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x27: sprintf(szI,"daa");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x29: sprintf(szI,"dad  h");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x2A: sprintf(szI,"lhld 0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0x2B: sprintf(szI,"dcx  h");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x2F: sprintf(szI,"cma");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x30: sprintf(szI,"sim");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x31: sprintf(szI,"lxi  sp");
                                g_ucBytes = 3; rc = 0; break;

                        case 0x32: sprintf(szI,"sta  0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0x33: sprintf(szI,"inx  sp");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x34: sprintf(szI,"inr  m");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x35: sprintf(szI,"dcr  m");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x36: sprintf(szI,"mvi m");
                                g_ucBytes = 3; rc = 0; break;

                        case 0x37: sprintf(szI,"stc");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x39: sprintf(szI,"dad  sp");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x3A: sprintf(szI,"lda  0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0x3B: sprintf(szI,"dcx  sp");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x3F: sprintf(szI,"cmc");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x76: sprintf(szI,"hlt");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x8E: sprintf(szI,"adc  m");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x96: sprintf(szI,"sub  m");
                                g_ucBytes = 1; rc = 0; break;

                        case 0x9E: sprintf(szI,"sbb  m");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xA6: sprintf(szI,"ama  m");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xAE: sprintf(szI,"xra  m");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xB6: sprintf(szI,"ora  m");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xBE: sprintf(szI,"cmp  m");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xC0: sprintf(szI,"rnz");
                                g_ucBytes = 1; rc = 0; break;


                        case 0xC1: sprintf(szI,"pop  b");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xC2: sprintf(szI,"jnz  0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0xC3: sprintf(szI,"jmp  0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0xC4: sprintf(szI,"cnz  0%04XH",parm16);
                                g_ucBytes = 4; rc = 0; break;

                        case 0xC5: sprintf(szI,"push b");
                                g_ucBytes = 1; rc = 0; break;
                
                        case 0xC6: sprintf(szI,"adi  0%02XH",parm8);
                                g_ucBytes = 2; rc = 0; break;

                        case 0xC8: sprintf(szI,"rz");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xC9: sprintf(szI,"ret");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xCA: sprintf(szI,"jz   0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0xCD: sprintf(szI,"call 0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0xCE: sprintf(szI,"aci  0%02XH",parm8);
                                g_ucBytes = 2; rc = 0; break;

                        case 0xD0: sprintf(szI,"rnc");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xD1: sprintf(szI,"pop  d");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xD2: sprintf(szI,"jnc  0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0xD3: sprintf(szI,"out  0%02XH",parm8);
                                g_ucBytes = 2; rc = 0; break;

                        case 0xD4: sprintf(szI,"cnc  0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0xD5: sprintf(szI,"push d");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xD6: sprintf(szI,"sui  0%02XH",parm8);
                                g_ucBytes = 2; rc = 0; break;

                        case 0xD8: sprintf(szI,"rc");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xDA: sprintf(szI,"jc   0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0xDB: sprintf(szI,"in   0%02XH",parm8);
                                g_ucBytes = 2; rc = 0; break;

                        case 0xDC: sprintf(szI,"cc   0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0xDE: sprintf(szI,"sbi  0%02XH",parm8);
                                g_ucBytes = 2; rc = 0; break;

                        case 0xE0: sprintf(szI,"rpo");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xE1: sprintf(szI,"pop  h");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xE2: sprintf(szI,"jpo  0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0xE3: sprintf(szI,"xthl");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xE4: sprintf(szI,"cpo  0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0xE5: sprintf(szI,"push h");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xE6: sprintf(szI,"ani");
                                g_ucBytes = 1; rc = 0; break;
                
                        case 0xE8: sprintf(szI,"rpe");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xE9: sprintf(szI,"pchl");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xEA: sprintf(szI,"jpe  0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0xEB: sprintf(szI,"xchg");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xEC: sprintf(szI,"cpe  0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0xEE: sprintf(szI,"xri");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xF0: sprintf(szI,"rp");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xF1: sprintf(szI,"pop  psw");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xF2: sprintf(szI,"jp   0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0xF3: sprintf(szI,"di");
                                g_ucBytes = 1; rc = 0;  break;

                        case 0xF4: sprintf(szI,"cp   0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0xF5: sprintf(szI,"push psw");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xF6: sprintf(szI,"ori  0%02XH",parm8);
                                g_ucBytes = 2; rc = 0; break;

                        case 0xF8: sprintf(szI,"rm");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xF9: sprintf(szI,"sphl");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xFA: sprintf(szI,"jm   0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0xFB: sprintf(szI,"ei");
                                g_ucBytes = 1; rc = 0; break;

                        case 0xFC: sprintf(szI,"cm   0%04XH",parm16);
                                g_ucBytes = 3; rc = 0; break;

                        case 0xFE: sprintf(szI,"cpi  0%02XH",parm8);
                                g_ucBytes = 2; rc = 0; break;

                        default: rc = 1;
                }
                if(0 == rc) {
                        printf("%04X: ",pc);
                        switch(g_ucBytes) {
                                case 1:
                                        printf("%02X         ",
                                                byte1);
                                        break;
                                case 2:
                                        printf("%02X %02X     ",
                                                byte1,byte2);
                                        break;
                                case 3:
                                        printf("%02X %02X %02X  ",
                                                byte1,byte2,byte3);
                                        break;
                        }
                        printf("%s",szI);
                        printf("\n");
                        pc += g_ucBytes;
                }
        }

        delete pMem;
                
        delete pAlloc;
}

/* [<][>][^][v][top][bottom][index][help] */