Ä 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" ========================================================================== * Forwarded by Alexey Komarov * Newsgroup: relcom.comp.speccy * From: "Alexander Shabarshin" * 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 #include #include 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;i0) 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)