Files
2024-10-25 00:46:14 +10:00

284 lines
8.0 KiB
Plaintext

Ä 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)