OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů
Právě je 20 črc 2018, 21:34

Všechny časy jsou v UTC + 1 hodina




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 6 ] 
Autor Zpráva
 Předmět příspěvku: Tokeny BASICových príkazov
PříspěvekNapsal: 07 led 2018, 16:43 
Offline
Profík
Uživatelský avatar

Registrován: 09 říj 2013, 18:04
Příspěvky: 733
Has thanked: 86 times
Been thanked: 28 times
Kedysi sa k 3,5" mechanike od niektorého Sharp klubu, ale neviem ktorého dodávala BASICová disketa plná všelijakých programov. Jeden z nich bol program, ktorý vypisoval tokeny všetkých aktuálnych príkazov, čiže ak bol jeden z príkazov zmenený na BOR (častá modifikácia), tak vypísal BOR. Tieto tokeny boli niekde v pamäti a tento program ich dešifroval. Vedel by mi niekto poradiť ako ich dešifrovať a kde ich hladať v pamäti? Prípadne poskytnúť tento program, ak ho niekto máte?

Pamätám si jedine, že príkaz bol celý zobrazený v čitateľnej podobe a posledné písmeno bolo zašifrované XOR 80h, keďže všetky príkazy boli zo znakov do 7fh.

Napadlo ma to v súvislosti s témou, ktorú práve otvoril wankes.

Prípadne, bol by autor programu na prevod BAS => TXT poskytnúť jeho zdroják? Aj to by niečo pomohlo.

_________________
Sharp MZ-821
Milsa MZ-841


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Tokeny BASICových príkazov
PříspěvekNapsal: 07 led 2018, 19:22 
Offline
Kecka

Registrován: 28 říj 2016, 20:03
Příspěvky: 46
Has thanked: 1 time
Been thanked: 17 times
Příloha:
commands.png
commands.png [ 38.95 KiB | Zobrazeno 671 krát ]


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Tokeny BASICových príkazov
PříspěvekNapsal: 08 led 2018, 17:51 
Offline
Profík
Uživatelský avatar

Registrován: 09 říj 2013, 18:04
Příspěvky: 733
Has thanked: 86 times
Been thanked: 28 times
Aha, takže to je len tabuľka príkazov a tie tokeny sú zrejme poradie v tabuľke. Od akého čísla začínajú tokeny a ako sú riešené dvojbajtové tokeny (viem, že sú aj také)?

_________________
Sharp MZ-821
Milsa MZ-841


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Tokeny BASICových príkazov
PříspěvekNapsal: 14 led 2018, 22:15 
Offline
Pan Štábní

Registrován: 19 črc 2013, 14:54
Příspěvky: 1259
Has thanked: 53 times
Been thanked: 175 times
Milsa urcite existuje dokument prelozeny z nemciny do cestiny kde jsou vstupni body tokenu jak pro CMT tak pro QD Basic. Nikdy mne to moc nezajimalo a tak jsem to poradne necetl. Muzu se ale na to casem podivat. Je dosti pravdepodobne ze to existuje i v digitalni forme.

Jinak co se tyce prevodu programu z a do Basicu, tak bych urcite pouzil SAVE s parametrem /A a MERGE /A a pomoci QD image by to jiste slo udelat. Uplne idelani by ale bylo kdyz by tvuj emulator reagoval na nejakou udalost a on sam by umel presmerovat napr. LIST do otevreneho souboru na realnem pocitaci.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Tokeny BASICových príkazov
PříspěvekNapsal: 15 led 2018, 09:33 
Offline
Kecálek

Registrován: 11 lis 2013, 09:29
Příspěvky: 249
Has thanked: 10 times
Been thanked: 74 times
Ono je to s temi prikazy slozitejsi. Ruzne BASICy to maji upravene podle vlastni specifikace. A taky nektere prikazy pouzivaji 2-bytove tokeny. Treba u MZ-800 je to takhle:
Kód:
unsigned char *comtotok(unsigned char *command)
{
//  if (*command < 0x80)
//    return NULL;
//
  switch (*command) {
    case 0x80: return "GOTO";
    case 0x81: return "GOSUB";
    case 0x83: return "RUN";
    case 0x84: return "RETURN";
    case 0x85: return "RESTORE";
    case 0x86: return "RESUME";
    case 0x87: return "LIST";
    case 0x89: return "DELETE";
    case 0x8a: return "RENUM";
    case 0x8b: return "AUTO";
    case 0x8c: return "EDIT";
    case 0x8d: return "FOR";
    case 0x8e: return "NEXT";
    case 0x8f: return "PRINT";
    case 0x91: return "INPUT";
    case 0x93: return "IF";
    case 0x94: return "DATA";
    case 0x95: return "READ";
    case 0x96: return "DIM";
    case 0x97: return "REM";
    case 0x98: return "END";
    case 0x99: return "STOP";
    case 0x9a: return "CONT";
    case 0x9b: return "CLS";
    case 0x9d: return "ON";
    case 0x9e: return "LET";
    case 0x9f: return "NEW";
    case 0xa0: return "POKE";
    case 0xa1: return "OFF";
    case 0xa2: return "PMODE";
    case 0xa3: return "PSKIP";
    case 0xa4: return "PLOT";
    case 0xa5: return "PLINE";
    case 0xa6: return "RLINE";
    case 0xa7: return "PMOVE";
    case 0xa8: return "RMOVE";
    case 0xa9: return "TRON";
    case 0xaa: return "TROFF";
    case 0xab: return "INP@";
    case 0xac: return "DEFAULT";
    case 0xad: return "GET";
    case 0xae: return "PCOLOR";
    case 0xaf: return "PHOME";
    case 0xb0: return "HSET";
    case 0xb1: return "GPRINT";
    case 0xb2: return "KEY";
    case 0xb3: return "AXIS";
    case 0xb4: return "LOAD";
    case 0xb5: return "SAVE";
    case 0xb6: return "MERGE";
    case 0xb7: return "CHAIN";
    case 0xb8: return "CONSOLE";
    case 0xb9: return "SEARCH";
    case 0xba: return "OUT@";
    case 0xbb: return "PCIRCLE";
    case 0xbc: return "PTEST";
    case 0xbd: return "PAGE";
    case 0xbe: return "WAIT";
    case 0xbf: return "SWAP";
    case 0xc1: return "ERROR";
    case 0xc2: return "ELSE";
    case 0xc3: return "USR";
    case 0xc4: return "BYE";
    case 0xc7: return "DEF";
    case 0xca: return "LABEL";
    case 0xce: return "WOPEN";
    case 0xcf: return "CLOSE";
    case 0xd0: return "ROPEN";
    case 0xd1: return "XOPEN";
    case 0xd5: return "DIR";
    case 0xd8: return "RENAME";
    case 0xd9: return "KILL";
    case 0xda: return "LOCK";
    case 0xdb: return "UNLOCK";
    case 0xdc: return "INIT";
    case 0xe0: return "TO";
    case 0xe1: return "STEP";
    case 0xe2: return "THEN";
    case 0xe3: return "USING";
    case 0xe4: return "PI";
    case 0xe5: return "ALL";
    case 0xe6: return "TAB";
    case 0xe7: return "SPC";
    case 0xea: return ".XOR";
    case 0xeb: return ".OR";
    case 0xec: return ".AND";
    case 0xed: return ".NOT";
    case 0xee: return "><";
    case 0xef: return "<>";
    case 0xf0: return "=<";
    case 0xf1: return "<=";
    case 0xf2: return "=>";
    case 0xf3: return ">=";
    case 0xf4: return "=";
    case 0xf5: return ">";
    case 0xf6: return "<";
    case 0xf7: return "+";
    case 0xf8: return "-";
    case 0xf9: return "\\";
    case 0xfa: return ".MOD";
    case 0xfb: return "/";
    case 0xfc: return "*";
    case 0xfd: return "^";
    case 0xfe: switch (*(command+1)) {
                 case 0x81: return "CSET";
                 case 0x82: return "CRESET";
                 case 0x83: return "CCOLOR";
                 case 0x8a: return "SOUND";
                 case 0x8c: return "NOISE";
                 case 0x8d: return "BEEP";
                 case 0x90: return "COLOR";
                 case 0x92: return "SET";
                 case 0x93: return "RESET";
                 case 0x94: return "LINE";
                 case 0x95: return "BLINE";
                 case 0x96: return "PAL";
                 case 0x97: return "CIRCLE";
                 case 0x98: return "BOX";
                 case 0x99: return "PAINT";
                 case 0x9a: return "POSITION";
                 case 0x9b: return "PATTERN";
                 case 0x9c: return "HCOPY";
                 case 0xa0: return "SYMBOL";
                 case 0xa2: return "MUSIC";
                 case 0xa3: return "TEMPO";
                 case 0xa4: return "CURSOR";
                 case 0xa5: return "VERIFY";
                 case 0xa6: return "CLR";
                 case 0xa7: return "LIMIT";
                 case 0xae: return "BOOT";
               }
               sprintf(st, "?ext1: %02x?", *command);
               return st;
    case 0xff: switch (*(command+1)) {
                 case 0x80: return "INT";
                 case 0x81: return "ABS";
                 case 0x82: return "SIN";
                 case 0x83: return "COS";
                 case 0x84: return "TAN";
                 case 0x85: return "LN";
                 case 0x86: return "EXP";
                 case 0x87: return "SQR";
                 case 0x88: return "RND";
                 case 0x89: return "PEEK";
                 case 0x8a: return "ATN";
                 case 0x8b: return "SGN";
                 case 0x8c: return "LOG";
                 case 0x8d: return "FRAC";
                 case 0x8e: return "PAI";
                 case 0x8f: return "RAD";
                 case 0x9c: return "STICK";
                 case 0x9d: return "STRING";
                 case 0xa0: return "CHR$";
                 case 0xa1: return "STR$";
                 case 0xa2: return "HEX$";
                 case 0xa8: return "SPACES$";
                 case 0xab: return "ASC";
                 case 0xac: return "LEN";
                 case 0xad: return "VAL";
                 case 0xb3: return "ERN";
                 case 0xb4: return "ERL";
                 case 0xb5: return "SIZE";
                 case 0xb6: return "CSRH";
                 case 0xb7: return "CSRV";
                 case 0xb8: return "POSH";
                 case 0xb9: return "POSV";
                 case 0xba: return "LEFT$";
                 case 0xbb: return "RIGHT$";
                 case 0xbc: return "MID$";
                 case 0xc4: return "TI$";
                 case 0xc5: return "POINT";
                 case 0xc6: return "EOF";
                 case 0xc7: return "FN";
               }
               sprintf(st, "?ext2: %02x?", *command);
               return st;
  }
  sprintf(st, "?comm: %02x?", *command);
  return st;
}

To je kousek zdrojaku, ktery to prevadi z .btx na .bas

_________________
Sharp MZ-800++, MZ-1500++, MZ-2500++, SM-B-80T, MK-14_replica, HP-85, ZX-80+replica, ZX81, ZX-Spectrum+replica++, PMI-80+replica, SAM coupe++, PMD-85-2A+3, Didaktik-M, SORD-M5, TI-57, TI-59+PC-100, TI99/4A, ZetaV2+ppp, ZX-uno, Petr


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Tokeny BASICových príkazov
PříspěvekNapsal: 16 led 2018, 18:54 
Offline
Profík
Uživatelský avatar

Registrován: 09 říj 2013, 18:04
Příspěvky: 733
Has thanked: 86 times
Been thanked: 28 times
Veľmi pekne ti ďakujem. Toto som potreboval. Nenájdeš niekde v archíve aj ten BASIC program, ktorý vypisoval tokeny príkazov v bežiacom BASICu?

_________________
Sharp MZ-821
Milsa MZ-841


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 6 ] 

Všechny časy jsou v UTC + 1 hodina


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz