My destination is not to create a CAS file. I will get a plain text BAS file
Later i would like to implement a BAS2WAV converter. So you can edit a BASIC programm on PC in a normal Text editor. Change it and recreate the WAV file.
A dictionary of the BASIC tokens have i made:
Code: Select all
BASIC_TOKENS = {
128: " FOR ", # 0x80
129: " GO ", # 0x81
130: " REM ", # 0x82
131: "'", # 0x83
132: " ELSE ", # 0x84
133: " IF ", # 0x85
134: " DATA ", # 0x86
135: " PRINT ", # 0x87
136: " ON ", # 0x88
137: " INPUT ", # 0x89
138: " END ", # 0x8a
139: " NEXT ", # 0x8b
140: " DIM ", # 0x8c
141: " READ ", # 0x8d
142: " LET ", # 0x8e
143: " RUN ", # 0x8f
144: " RESTORE ", # 0x90
145: " RETURN ", # 0x91
146: " STOP ", # 0x92
147: " POKE ", # 0x93
148: " CONT ", # 0x94
149: " LIST ", # 0x95
150: " CLEAR ", # 0x96
151: " NEW ", # 0x97
152: " DEF ", # 0x98
153: " CLOAD ", # 0x99
154: " CSAVE ", # 0x9a
155: " OPEN ", # 0x9b
156: " CLOSE ", # 0x9c
157: " LLIST ", # 0x9d
158: " SET ", # 0x9e
159: " RESET ", # 0x9f
160: " CLS ", # 0xa0
161: " MOTOR ", # 0xa1
162: " SOUND ", # 0xa2
163: " AUDIO ", # 0xa3
164: " EXEC ", # 0xa4
165: " SKIPF ", # 0xa5
166: " DELETE ", # 0xa6
167: " EDIT ", # 0xa7
168: " TRON ", # 0xa8
169: " TROFF ", # 0xa9
170: " LINE ", # 0xaa
171: " PCLS ", # 0xab
172: " PSET ", # 0xac
173: " PRESET ", # 0xad
174: " SCREEN ", # 0xae
175: " PCLEAR ", # 0xaf
176: " COLOR ", # 0xb0
177: " CIRCLE ", # 0xb1
178: " PAINT ", # 0xb2
179: " GET ", # 0xb3
180: " PUT ", # 0xb4
181: " DRAW ", # 0xb5
182: " PCOPY ", # 0xb6
183: " PMODE ", # 0xb7
184: " PLAY ", # 0xb8
185: " DLOAD ", # 0xb9
186: " RENUM ", # 0xba
187: " TAB(", # 0xbb
188: " TO ", # 0xbc
189: " SUB ", # 0xbd
190: " FN ", # 0xbe
191: " THEN ", # 0xbf
192: " NOT ", # 0xc0
193: " STEP ", # 0xc1
194: " OFF ", # 0xc2
195: "+", # 0xc3
196: "-", # 0xc4
197: "*", # 0xc5
198: "/", # 0xc6
199: "^", # 0xc7
200: " AND ", # 0xc8
201: " OR ", # 0xc9
202: ">", # 0xca
203: "=", # 0xcb
204: "<", # 0xcc
205: " USING ", # 0xcd
}
The complete data block looks now like this:
Code: Select all
00111100 0x3c 60 '<'
10000000 0x1 1 '\x01'
01001100 0x32 50 '2'
01111000 0x1e 30 '\x1e'
01001000 0x12 18 '\x12'
00000000 0x0 0 '\x00'
01010000 0xa 10 '\n'
00000001 0x80 128 ' FOR '
00000100 0x20 32 ' '
10010010 0x49 73 'I'
00000100 0x20 32 ' '
11010011 0xcb 203 '='
00000100 0x20 32 ' '
10001100 0x31 49 '1'
00000100 0x20 32 ' '
00111101 0xbc 188 ' TO '
00000100 0x20 32 ' '
10001100 0x31 49 '1'
00001100 0x30 48 '0'
00000000 0x0 0 '\x00'
01111000 0x1e 30 '\x1e'
10010100 0x29 41 ')'
00000000 0x0 0 '\x00'
00101000 0x14 20 '\x14'
11100001 0x87 135 ' PRINT '
00000100 0x20 32 ' '
10010010 0x49 73 'I'
11011100 0x3b 59 ';'
01000100 0x22 34 '"'
00010010 0x48 72 'H'
10100010 0x45 69 'E'
00110010 0x4c 76 'L'
00110010 0x4c 76 'L'
11110010 0x4f 79 'O'
00000100 0x20 32 ' '
11101010 0x57 87 'W'
11110010 0x4f 79 'O'
01001010 0x52 82 'R'
00110010 0x4c 76 'L'
00100010 0x44 68 'D'
10000100 0x21 33 '!'
01000100 0x22 34 '"'
00000000 0x0 0 '\x00'
01111000 0x1e 30 '\x1e'
10001100 0x31 49 '1'
00000000 0x0 0 '\x00'
01111000 0x1e 30 '\x1e'
11010001 0x8b 139 ' NEXT '
00000100 0x20 32 ' '
10010010 0x49 73 'I'
00000000 0x0 0 '\x00'
00000000 0x0 0 '\x00'
00000000 0x0 0 '\x00'
11101010 0x57 87 'W'
Seems there are some "control bits" or "meta information"... In this there must be exist the "data length" and the "checksum" information.