|
When a SVDL program is compiled, a SVX file is produced. SVX contain the bytecode that one SVDL interpreter can use for execute the SVDL program. Think a today JAVA: there's the JAVA language that are compiled for producing class file; then a Java Virtual Machine interpret the code in the class file. Else, a group of class can be packed together in a JAR file. In my case the SVX file are packed in SVDL library, so an antivirus can be updated given the new library of SVDL compiled code.
Header of SVDL compiled file:
12h SVDL 15h version 1.00 03h 0BhThis format is called 4 bytes header and was used in many my file formats (SVDL, COMP, C64 file), here the meanings:
bit 8 7 6 5 4 3 2 1 X0 X1 X2 1 0 0 1 0 (S) X3 X4 Y0 1 0 1 0 1 (V) Y1 Y2 Y3 0 0 0 1 1 (D) Y4 Y5 Y6 0 1 0 1 1 (L) \________/ \___________/ | | | | | Ascii compact code: | 5bit-sign(letter-'A') | X0 X1 X2 X3 X4 = principal version number 0 0 0 0 0 = 1 1 1 1 1 1 = 32 Y0 Y1 Y2 Y3 Y4 Y5 Y6 = secondary version number 0 0 0 0 0 0 0 = 0 1 1 0 0 1 0 0 = 99 1 1 1 1 1 1 1 =127 not used from 100 to thisIF instruction
IF oper1 comp oper2
1° instruction byte: bit 8 7 6 5 4 3 2 1 1 x _ _ _ x x x | | | | | 0 0 0 : (0) not used 0 : '+' 0 0 1 : (1) '=' 1 : '-' 0 1 0 : (2) '>' 0 1 1 : (3) '>=' 1 0 0 : (4) '<' 1 0 1 : (5) '<=' 1 1 0 : (6) '<>' 1 1 1 : (7) not used 2° instruction byte: bit 8 7 6 5 4 3 2 1 x x x x x x x x | | | | | | | | 0 0 0 0 0 0 0 0 : (0) byte variable (X#) 0 0 0 1 0 0 0 1 : (1) word variable (X%) 0 0 1 0 0 0 1 0 : (2) low of word variable (|X%) 0 0 1 1 0 0 1 1 : (3) high of word variable (@X%) unused 0 1 0 0 : (4) byte number (not 0) (xx) unused 0 1 0 1 : (5) word number (not 0) (xxxx) unused 0 1 1 0 : (6) char ('x') unused 0 1 1 1 : (7) string of 2 bytes ('xx') unused 1 0 0 0 : (8) string greater of 2 bytes ('...') 1 0 0 1 unused : (9) disk read ([xx]) 1 0 1 0 unused : (A) disk long read ([xx+]) unused 1 0 1 1 : (B) number 0 1 1 0 0 unused : (C) disk read from the end ([_xx]) 1 1 0 1 unused : (D) disk read from variable ([X]) 1 1 1 0 unused : (E) disk long read from variable ([X+]) 1 1 1 1 unused : (F) disk read from end with variable ([_X]) 3° instruction byte: bit 8 7 6 5 4 3 2 1 x x x x x x x x | | | | | | | | disk read : disk seek number variable : ascii code of variable letter disk read variable: code b/w/ident eventual other bytes: number 0: nothing byte variable: 4°=ascii code of the variable letter word variable: 4°=ascii code of the variable letter char: 4°=char ascii code 2 chars: 4°=second char 5°=first char string: 4°=string length 5°=..n..255°=other chars byte number: 4°=number word number: 4°=low of number 5°=high of numberAssignment
1° instruction byte: bit 8 7 6 5 4 3 2 1 0 x _ x x x x x | | | | 0 sintax 1 1 sintax 2 sintax1: bit 5 4 3 2 1 _ x x x x | | | | 0 0 0 0 : (0) ADC 0 0 0 1 : (1) ADD 0 0 1 0 : (2) AND 0 0 1 1 : (3) DIV 0 1 0 0 : (4) IDIV 0 1 0 1 : (5) IMUL 0 1 1 0 : (6) MUL 0 1 1 1 : (7) OR 1 0 0 0 : (8) ROL 1 0 0 1 : (9) ROR 1 0 1 0 : (A) SAR 1 0 1 1 : (B) SBB 1 1 0 0 : (C) SHL/SAL 1 1 0 1 : (D) SHR 1 1 1 0 : (E) SUB 1 1 1 1 : (F) XOR sintax2: bit 5 4 3 2 1 x x x x x | | | | | 0 0 0 0 0 : (0) byte variable (X#) 0 0 0 0 1 : (1) word variable (X%) 0 0 0 1 0 : (2) low of word variable (|X%) 0 0 0 1 1 : (3) high of word variable (@X%) 0 0 1 0 0 : (4) byte number (not 0) (xx) 0 0 1 0 1 : (5) word number (not 0) (xxxx) 0 0 1 1 0 : (6) char ('x') 0 0 1 1 1 : (7) string of 2 chars ('xx') 0 1 0 0 0 : (8) string with more of 2 chars ('...') 0 1 0 0 1 : (9) disk read ([xx]) 0 1 0 1 0 : (A) disk long read ([xx+]) 0 1 0 1 1 : (B) numer 0 0 1 1 0 0 : (C) disk read from the end ([_xx]) 0 1 1 0 1 : (D) disk read from variable ([X]) 0 1 1 1 0 : (E) disk long read from variable ([X+]) 0 1 1 1 1 : (F) disk read from end with variable ([_X]) ... unused ... 1 0 1 1 1 : (17) ATTR 1 1 0 0 0 : (18) DATE 1 1 0 0 1 : (19) DEC 1 1 0 1 0 : (1A) DIML 1 1 0 1 1 : (1B) DIMH 1 1 1 0 0 : (1C) INC 1 1 1 0 1 : (1D) NEG 1 1 1 1 0 : (1E) NOT 1 1 1 1 1 : (1F) TIME 2° instruction byte: var1: bit 8 7 6 5 4 3 2 1 x x x x x x x x | | | | | | | | byte: ascii code of the variable letter word: ascii code of the variable letter plus 26 low_word: ascii code of the variable letter plus -65 hi_word: ascii code of the variable letter plus -39 other bytes: sintax1: 3° instruction byte: var2: see var1 of 2° instruction byte 4° instruction byte: var3: see above sintax2: like in the other bytes of IF instruction
PC | Tognon Stefano programs |