 Echo35 (2:5029/35.26)  ZX.SPECTRUM 
 Msg  : 100 of 107
 From : Alexey Komarov                      2:5020/400      23 Apr 02  14:29:48
 To   : All                                                 26 Apr 02  01:04:11
 Subj : Fwd: SOURCE: ⨫ 审  ணࠬ  ALASM  ⥪

From: "Alexey Komarov" <komarov@dubna.ru>

==========================================================================
* Forwarded by Alexey Komarov <komarov@dubna.ru>
* Newsgroup: relcom.comp.speccy
* From: "Alexander Shabarshin" <shaos@mail.ru>
* Date: Fri, 12 Apr 2002 16:43:34 +0600
* Subj: SOURCE: ⨫ 审  ணࠬ  ALASM  ⥪
==========================================================================

// H2ASM.CPP - Alexander Shabarshin  (shaos@mail.ru) 12.04.2002
// Convert hobeta with ALASM source to text source
// ⨫ 审  ணࠬ  ALASM   ⥪
//   -  ⨫, ᮮ頩!
// த 㦭  -    ਣ
// ᫨   -   fido7.zx.spectrum
//    㤠  :)
// http://www.shaos.ru/nedopc

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* decode(int c,int col)
{
 static char str[256];
 char *po = str;
 *po = 0;
 switch(c)
 {
  case 0x80: strcpy(str," INCLUDE"); break;
  case 0x81: strcpy(str," INCBIN"); break;
  case 0x82: strcpy(str," MACRO"); break;
//  case 0x83:
  case 0x84: strcpy(str," RLCA"); break;
  case 0x85: strcpy(str," RRCA"); break;
  case 0x86: strcpy(str," HALT"); break;
  case 0x87: strcpy(str," CALL"); break;
  case 0x88: strcpy(str," PUSH"); break;
//  case 0x89:
//  case 0x8A:
  case 0x8B: strcpy(str," DJNZ"); break;
//  case 0x8C:
//  case 0x8D:
  case 0x8E: strcpy(str," LDIR"); break;
  case 0x8F: strcpy(str," CPIR"); break;
//  case 0x90:
//  case 0x91:
  case 0x92: strcpy(str," LDDR"); break;
//  case 0x93:
//  case 0x94:
//  case 0x95:
//  case 0x96:
  case 0x97: strcpy(str," DEFB"); break;
  case 0x98: strcpy(str," DEFW"); break;
  case 0x99: strcpy(str," DEFS"); break;
  case 0x9A: strcpy(str," DISP"); break;
  case 0x9B: strcpy(str," ENDM"); break;
  case 0x9C: strcpy(str," EDUP"); break;
//  case 0x9D:
  case 0x9E: strcpy(str," MAIN"); break;
//  case 0x9F:
  case 0x9F: strcpy(str," (BC)"); break;
  case 0xA0: strcpy(str," (DE)"); break;
  case 0xA1: strcpy(str," (HL)"); break;
  case 0xA2: strcpy(str," DB"); break;
  case 0xA3: strcpy(str," DW"); break;
  case 0xA4: strcpy(str," DS"); break;
  case 0xA5: strcpy(str," NOP"); break;
  case 0xA6: strcpy(str," INC"); break;
  case 0xA7: strcpy(str," DEC"); break;
  case 0xA8: strcpy(str," RLA"); break;
  case 0xA9: strcpy(str," RRA"); break;
//  case 0xAA:
  case 0xAB: strcpy(str," CPL"); break;
  case 0xAC: strcpy(str," SCF"); break;
  case 0xAD: strcpy(str," CCF"); break;
  case 0xAE: strcpy(str," ADD"); break;
  case 0xAF: strcpy(str," ADC"); break;
  case 0xB0: strcpy(str," SUB"); break;
  case 0xB1: strcpy(str," SBC"); break;
  case 0xB2: strcpy(str," AND"); break;
  case 0xB3: strcpy(str," XOR"); break;
  case 0xB4: strcpy(str," RET"); break;
  case 0xB5: strcpy(str," POP"); break;
//  case 0xB6:
  case 0xB7: strcpy(str," EXX"); break;
  case 0xB8: strcpy(str," RLC"); break;
  case 0xB9: strcpy(str," RRC"); break;
  case 0xBA: strcpy(str," SLA"); break;
  case 0xBB: strcpy(str," SRA"); break;
  case 0xBC: strcpy(str," SLI"); break;
  case 0xBD: strcpy(str," SRL"); break;
  case 0xBE: strcpy(str," BIT"); break;
  case 0xBF: strcpy(str," RES"); break;
  case 0xC0: strcpy(str," SET"); break;
  case 0xC1: strcpy(str," OUT"); break;
  case 0xC2: strcpy(str," NEG"); break;
//  case 0xC3:
//  case 0xC4:
  case 0xC5: strcpy(str," LDI"); break;
//  case 0xC6:
//  case 0xC7:
//  case 0xC8:
//  case 0xC9:
//  case 0xCA:
  case 0xCB: strcpy(str," ORG"); break;
  case 0xCC: strcpy(str," EQU"); break;
  case 0xCD: strcpy(str," ENT"); break;
//  case 0xCE:
  case 0xCF: strcpy(str," DUP"); break;
  case 0xD0: strcpy(str," (C)"); break;
  case 0xD1: strcpy(str," (IX"); break;
  case 0xD2: strcpy(str," (IY"); break;
  case 0xD3: strcpy(str," AF'"); break;
  case 0xD4: strcpy(str," LD"); break;
  case 0xD5: strcpy(str," JR"); break;
  case 0xD6: strcpy(str," JP"); break;
  case 0xD7: strcpy(str," OR"); break;
  case 0xD8: strcpy(str," CP"); break;
  case 0xD9: strcpy(str," EX"); break;
  case 0xDA: strcpy(str," DI"); break;
  case 0xDB: strcpy(str," EI"); break;
  case 0xDC: strcpy(str," IN"); break;
  case 0xDD: strcpy(str," RL"); break;
  case 0xDE: strcpy(str," RR"); break;
//  case 0xDF:
  case 0xE0: strcpy(str," BC"); break;
  case 0xE1: strcpy(str," DE"); break;
  case 0xE2: strcpy(str," HL"); break;
  case 0xE3: strcpy(str," AF"); break;
  case 0xE4: strcpy(str," IX"); break;
  case 0xE5: strcpy(str," IY"); break;
  case 0xE6: strcpy(str," SP"); break;
  case 0xE7: strcpy(str," NZ"); break;
  case 0xE8: strcpy(str," NC"); break;
//  case 0xE9:
//  case 0xEA:
  case 0xEB: strcpy(str," HX"); break;
  case 0xEC: strcpy(str," LX"); break;
//  case 0xED:
//  case 0xEE:
  case 0xEF: strcpy(str," B"); break;
  case 0xF0: strcpy(str," C"); break;
  case 0xF1: strcpy(str," D"); break;
  case 0xF2: strcpy(str," E"); break;
  case 0xF3: strcpy(str," H"); break;
  case 0xF4: strcpy(str," L"); break;
  case 0xF5: strcpy(str," A"); break;
  case 0xF6: strcpy(str," P"); break;
  case 0xF7: strcpy(str," M"); break;
  case 0xF8: strcpy(str," Z"); break;
//  case 0xF9:
//  case 0xFA:
//  case 0xFB:
//  case 0xFC:
//  case 0xFD:
//  case 0xFE:
  case 0xFF: strcpy(str," "); break;
  default: sprintf(str," |0x%2.2X|",c);
           printf("\n\nError %s\n",str);
           return NULL;
 }
 if(col>2) po++;
 return po;
}

int main(int argc,char **argv)
{
 int i,j,k,c;
 char hhead[17],name[12],ahead[64],str[256],*po=str;
 printf("\n\nH2ASM v1.0, Copyright (c) 2002, Alexander Shabarshin
http://www.shaos.ru\n\n");
 if(argc<3)
 {
    printf("\n\nH2ASM file.$h file.asm\n\n");
    return 1;
 }
 FILE *fh = fopen(argv[1],"rb");
 if(fh==NULL) return 0;
 FILE *fa = fopen(argv[2],"wt");
 if(fa==NULL)
 {
    fclose(fh);
    return 0;
 }
 fread(hhead,17,1,fh);
 for(i=0;i<8;i++) name[i]=hhead[i];
 int ftyp=hhead[8];
 int fstart=(int)hhead[9]+((int)hhead[10]<<8);
 int flen=(int)hhead[11]+((int)hhead[12]<<8);
 int blk=hhead[14];
 int check=hhead[15]+(hhead[16]<<8);
 for(j=i=0; i<0x0F; ++i)
 {
   k = hhead[i]; k &= 0xFF;
   j += (k * 0x0101 + i);
 }
 j &= 0xFFFF;
 if(j!=check)
 {
    printf("Illegal checksum in header of hobeta\n");
 }
 fread(ahead,64,1,fh);
 flen-=64;
 printf("Name:%s\n",ahead);
 printf("\n");
 int comment,colon,old,quat;
 while(1)
 {
   comment = 0;
   colon = 0;
   quat = 0;
   k = fgetc(fh);
   flen--;
   j = 0;
   old = 0;
   for(i=1;i<k;i++)
   {
      c = fgetc(fh);
      flen--;
      if(c<128||comment||quat)
      {
         if(c<32)
         {
           while(--c>0) str[j++]=' ';
         }
         else          {
           if(!comment && !quat && colon==1 && old>=128) str[j++]=' ';
           str[j++]=c;
         }
         if(c==';') comment=1;
         if(c=='"')
         {
           if(quat) quat=0;
           else     quat=1;
         }
      }
      else       {
         po = decode(c,++colon);
         if(po==NULL) break;
         str[j] = 0;
         if(colon<2)
         {
            strcat(str,"\t");
            j++;
         }
         strcat(str,po);
         j += strlen(po);
      }
      old = c;
   }
   if(po==NULL) break;
   str[j] = 0;
   printf("%s\n",str);
   fprintf(fa,"%s\n",str);
   if(flen<=0) break;
 }
 fclose(fh);
 fclose(fa);
 return 1;
}


==========================================================================
                        㢠, ᥩ.








--- ifmail v.2.15dev5
 * Origin: OOO Contact company (2:5020/400)

