Submitted by Steve Fewell
Description:
Call &9B46: to check for '=' as the next non-space character at BASIC text pointer B location, (& generate 'Syntax error'
if another character was found instead); Get the result of the expression at BASIC text pointer B; and check
that the BASIC statement finishes after the expression (with a '<cr>', ':' or 'ELSE-token' character.
'Syntax error' is generated if the end of the statement was not found.
If the expression result (&27) is not 0 (String) then issue a 'Type mismatch' error as TIME$ must be set to a String
value.
Set A to #&0F (the OSWORD call number for the setting of the time-date string).
Set Y to &36 (the SWA Length byte), store this value in location &05FF (i.e. the first byte of the OSWORD parameter
block) - location &05FF shouldn't be used by any other BASIC storage.
Set X (LSB) & Y (MSB) to point to the address of the start of the OSWORD parameter block that contains the new TIME$
value. This parameter block is located at &05FF (i.e. the length byte followed by the SWA).
Call OSWORD (&FFF1) to execute the Set TIME command and set the Operating System's Internal counter to the IWA value.
Lastly, jump to &9005 to start processing the next program statement.
968E | 230 010 | E6 0A | INC &0A | |
9690 | F | 032 070 155 | 20 46 9B | JSR &9B46 Ptr B = Ptr A; Check for '=' & get result of expression; check end of statement |
9693 | ' | 165 039 | A5 27 | LDA &27 |
9695 | @ | 208 064 | D0 40 | BNE 64 --> &96D7 [JMP &9092 'Type mismatch' error] |
9697 | 169 015 | A9 0F | LDA#&0F | |
9699 | 6 | 164 054 | A4 36 | LDY &36 |
969B | 140 255 005 | 8C FF 05 | STY &05FF | |
969E | 162 255 | A2 FF | LDX#&FF | |
96A0 | 160 005 | A0 05 | LDY#&05 | |
96A2 | 128 231 | 80 E7 | BRA -25 --> &968B [JMP &B312 [JSR &FFF1: BRA 11 --> &B222 [JMP &9005 Process next Statement]]] |