Sinclair Club #05
31 декабря 2001 |
|
Soft - Strange system programs: STS 5.1, ALASM 4.1.
Oddities system software! (C) Alone Coder / Any STS 5.1 by STALKER STS 5.1 is a very strange Editor line mode Hex Dump. If this line was a "" symbol, then After you press Enter, when the string is copied into memory, the bytes will be skipped. The last byte string in this case will be taken from the previous version (which existed prior to editing), and, more simply, from the ceiling. At this glitch already referred someone somewhere (Go, find out now!), Leads to even way to remedy that reduces the length of the buffer the user. Here is another way: Copy from # DE10 to # DE1B -> # DE0F # DE1B: JR Z, # DE22 DEC DE After such a correction bytes marked with the symbol "" will not change. Corrections must be done not on a running STS'e, but the downloaded file to a different page sts5.1a! Improper positioning of the 0-th track after changing the drive - a chronic disease for all versions of STS. Version 6.2 Ivan Roshchin fixed, and over 5.1 seem to be nothing is yet known ... ALASM 4.1 6x7 by ALEM ALASM has a glitch in the assembly, associated with the intersection of the team address # 8000. In most cases, this leads to the fact that a piece of the team to address # 7FFF inclusive, compiled fine, but the rest of the erasure start ALASM'a. This bug has already been described MAX'om in the journal "Black Crow" # 3. Explained glitch the fact that during his work ALASM (as however, and other assemblers) moves in the 2 nd page and its contents are old at this time is stored in so-called System page (usually 4-th page). After exiting the assembly (as well as after RUN, DEBUG etc.) pages, of course, swapped back. Prefiksirovannye teams that do not suffer. If the previous command has ended to # 7FFF, and the next is at # 8000, then the problems will not arise too. And in general, if you know about this glitch, it can be control. For example, the initialization procedure in my AC Edit calmly crosses # 8000. Another thing that I had neither me:)). A better, of course, just write your program in the fast memory. In going through the address # C000 glitch is not arises. There is another glyuchok in ALASM, which fix nevozmozhno.On associated with a specific single-pass method kompilyatsii.Pravda, you first need to explain how it works one-pass compiler. The compiler scans the text of the program from top to bottom, assembliruya team, defining the labels and affixing certain parameters teams in their address chast.Esli compiler encounters the expression is not defined above tag, it displays a message error. If he meets is simply not already defined a label, then it writes the name this label and the address of the address part of the team (Sorry, pun) in tablitsu.Kogda mark will be determined, all the blank address of commands Organization, which should contain the address of the tags are filled, and their occurrence removed from the table. Now, attention! How could compile a fragment? DUP 7 LD A, (BC) XOR (HL) AND 240 XOR (HL) LD (DE), A INC B; +0 INC H; +1 INC D; +2 LD A, D; +3 AND 7; 4 CALL Z, DDEU; +6 EDUP ORG $ -9 JP PRRQ; +0 PR1ST PUSH BC; +3 PUSH DE; +4 PUSH HL; +5 BIT 0, C; +6 JR Z, PR1STL; +8 ... DDEU LD A, E ADD A, 32 LD E, A RET C LD A, D SUB 8 LD D, A RET Insides DUP'a otkompilyatsya 7 times then the current address is moved to command INC B (for convenience, I have to command offset of this address), and ... But the label DDEU is not defined yet! AND after it determines its value will be written by a relative at 7 parameter in the command CALL, which at the moment will no longer exist! The result will be broken by any innocent BIT Team and JR! Therefore, these pieces should be written as follows: DUP 6 LD A, (BC) XOR (HL) AND 240 XOR (HL) LD (DE), A INC B INC H INC D LD A, D AND 7 CALL Z, DDEU EDUP LD A, (BC) XOR (HL) AND 240 XOR (HL) LD (DE), A ... Better yet, make maker. Gluck with the 11-character name of the disk mode directory ALASM'e: If the drive name has all 11 characters, then the next may appear completely random characters arbitrary number. Correct the seal 11-character name should be taken into account As the end of the name: 1) the end of the sector, 2) B # 0, 3) fixed 7-bit (Which, incidentally, when you print to reset). Probably, many lack the Help alasma.Ego at startup so you can kill (the command itself Help on this, of course, is not affected): # B77E: JP # 8B8F However, even exempt the following 15 bytes. Although, strictly speaking, they can win and elsewhere: Coding of the masters so The original that their programs more streamlined and optimized ... In these 15 bytes (more precisely, we only need 13) and we place our program print the drive name: # B781: LD A, (HL) AND 127 RET Z CALL # 8C96 OR (HL) RET M INC L JR NZ, # B781 RET And changing the link below: # 99D1: CALL # B781 Naturally, all this have to do it is yet again not working alasme, and the downloaded at # 8000 file alasm67.
Other articles:
Similar articles:
В этот день... 21 November