; MS-BASIC START UP ROUTINE ; TARGET: AKI-80 M2 with Watch ; ASSEMBLER: ARCPIT XZ80.EXE ; 000A HZ EQU 10 ; System Clock 12 or 10 ; 80ED TSTACK EQU 80EDH ; 0010 CTC0 EQU 10H 0013 PCTCC2 EQU 13H ; Changed from 12H to 13H 0018 PSIOAD EQU 18H 0019 PSIOAC EQU 19H 001A PSIOBD EQU 1AH 001B PSIOBC EQU 1BH 001C PIOA EQU 1CH 001E PIOB EQU 1EH ; 000D CR EQU 0DH 000A LF EQU 0AH ; ; SYSTEM PARAMETERS 8100 ORG 08100H 8100 RBFCNT DS 01H 8101 RBFRDP DS 01H 8102 RBFWTP DS 01H 8103 RECBUF DS 40H ; ; ; RESET VECTOR 0000 ORG 0000H 0000 F3 RST00: DI 0001 C3 A8 00 JP SINIT ; ; RESTART VECTOR 0008 ORG 0008H 0008 C3 72 00 RST08: JP TXA 0010 ORG 0010H 0010 C3 4C 00 RST10: JP RXA 0018 ORG 0018H 0018 C3 7D 00 RST18: JP KBHIT ; ; SIOA -> BUFFER BY INTERRUPT 001B INTRCV: 001B F3 di 001C F5 PUSH AF 001D C5 PUSH BC 001E D5 PUSH DE 001F E5 PUSH HL ; DI 0020 DB 19 IN A,(PSIOAC) ;CHECK RECEIVE 0022 CB 47 BIT 0,A ;IF NOT 0024 28 1F JR Z,RWTEXT ;EXIT 0026 DB 18 IN A,(PSIOAD) ;GET DATA 0028 57 LD D,A ;SAVE TO D 0029 3A 00 81 LD A,(RBFCNT) ;GET COUNT 002C FE 40 CP 40H ;IF BUFFER FULL 002E 28 15 JR Z,RWTEXT ;EXIT(GIVE UP!) 0030 3C STRWT3: INC A ;COUNT UP 0031 32 00 81 LD (RBFCNT),A ;COUNT UPDATE 0034 3A 02 81 LD A,(RBFWTP) ;GET OFFSET 0037 4F LD C,A ;C, OFFSET LOW 0038 06 00 LD B,00H ;B, OFFSET HIGH 003A 21 03 81 LD HL,RECBUF ;HL, BUFFER TOP 003D 09 ADD HL,BC ;HL, WRITE POINT IN BUFFER 003E 72 LD (HL),D ;WRITE DATA 003F 3C INC A ;OFFSET INCREMENT 0040 E6 3F AND 3FH ;WRAP 0042 32 02 81 LD (RBFWTP),A ;OFFSET UPDATE 0045 RWTEXT: 0045 E1 POP HL 0046 D1 POP DE 0047 C1 POP BC 0048 F1 POP AF 0049 FB EI 004A ED 4D RETI ; ; ; BUFER -> A 004C RXA: 004C C5 PUSH BC 004D D5 PUSH DE 004E E5 PUSH HL 004F LOPRBR: 004F 3A 00 81 LD A,(RBFCNT) ;GET COUNT 0052 FE 00 CP 00H ;CHECK RECEIVE 0054 28 F9 JR Z,LOPRBR ;WAIT FOR RECEIVE 0056 F3 DI ;DISABLE INTERRUPT 0057 3D DEC A ;COUNT DOWN 0058 32 00 81 LD (RBFCNT),A ;COUNT UPDATE 005B 3A 01 81 LD A,(RBFRDP) ;GET OFFSET 005E 4F LD C,A ;C, OFFSET LOW 005F 06 00 LD B,00H ;B, OFFSET HIGH 0061 21 03 81 LD HL,RECBUF ;HL, BUFFER TOP 0064 09 ADD HL,BC ;HL, READ POINT IN BUFFER 0065 56 LD D,(HL) ;READ DATA 0066 3C INC A ;OFFSET INCREMENT 0067 E6 3F AND 3FH ;WRAP 0069 32 01 81 LD (RBFRDP),A ;OFFSET UPDATE 006C 7A LD A,D ;GET DATA 006D FB EI ;ENABLE INTERRUPT 006E E1 POP HL 006F D1 POP DE 0070 C1 POP BC 0071 C9 RET ; ; A -> SIO 0072 F5 TXA: PUSH AF ;SAVE DATA 0073 DB 19 TXLOOP: IN A,(PSIOAC) ;CHECK STATUS 0075 CB 57 BIT 2,A ;IF BUFFER NOT EMPTY 0077 28 FA JR Z,TXLOOP ;WAIT FOR EMPTY 0079 F1 POP AF ;RESTORE DATA 007A D3 18 OUT (PSIOAD),A ;TRANSFER 007C C9 RET ; ; CHECK RECEIVE STATUS 007D 3A 00 81 KBHIT: LD A,(RBFCNT) 0080 FE 00 CP 00H 0082 C9 RET ; ; INTERRUPT VECTORS 0090 ORG (($-1) AND 0FFF0H) + 10H 0090 92 1D VECTOR: DW INTX ; M2 Interrupt Table 0092 00 00 DW 0H 0094 00 00 DW 0H 0096 00 00 DW 0H 0098 1B 00 INTVCT: DW INTRCV ; ; SIOA COMMAND CHAIN 009A SIOACD: 009A 18 DB 00011000B ;RESET 009B 01 10 DB 01H,00010000B ;RX INTERRUPT ENABLE 009D 04 44 DB 04H,01000100B ;FORMAT 009F 05 EA DB 05H,11101010B ;TX ENABLE 00A1 03 C1 DB 03H,11000001B ;RX ENABLE 0009 SIOACL EQU $-SIOACD ; ; SIOB COMMAND CHAIN 00A3 SIOBCD: 00A3 18 DB 00011000B ;RESET 00A4 01 00 DB 01H,00000000B ;DISABLE STATUS/AFFECTS VECTOR 00A6 02 98 DB 02H,INTVCT AND 00FFH ;SET INTERRUPT VECTOR 0005 SIOBCL EQU $-SIOBCD ; ; SYSTEM INITIALIZE 00A8 31 ED 80 SINIT: LD SP,TSTACK 00AB AF XOR A 00AC 32 00 81 LD (RBFCNT),A 00AF 32 01 81 LD (RBFRDP),A 00B2 32 02 81 LD (RBFWTP),A ; ; CTC INITIALIZE 00B5 3E 07 LD A,00000111B 00B7 D3 13 OUT (PCTCC2),A 0000 if (HZ=12) LD A,5 ;12MHz else 00B9 3E 04 LD A,4 ;9.8304MHz endif 00BB D3 13 OUT (PCTCC2),A ; ; SIO INITIALIZE 00BD 06 09 LD B,SIOACL ;LENGTH 00BF 0E 19 LD C,PSIOAC ;I/O ADDRESS 00C1 21 9A 00 LD HL,SIOACD ;COMMAND ADDRESS 00C4 ED B3 OTIR 00C6 06 05 LD B,SIOBCL ;LENGTH 00C8 0E 1B LD C,PSIOBC ;I/O ADDRESS 00CA 21 A3 00 LD HL,SIOBCD ;COMMAND ADDRESS 00CD ED B3 OTIR ; ; SETUP INTERRUPT 00CF 21 98 00 LD HL,INTVCT 00D2 7C LD A,H 00D3 ED 47 LD I,A 00D5 ED 5E IM 2 00D7 FB EI ; ; ; ; START BASIC 00D8 CD 6A 1D CALL CLOCK 00DB C3 DE 00 JP COLD ; ;================================================================================== ; The updates to the original BASIC within this file are copyright Grant Searle ; ; You have permission to use this for NON COMMERCIAL USE ONLY ; If you wish to use it elsewhere, please include an acknowledgement to myself. ; ; http://searle.hostei.com/grant/index.html ; ; eMail: home.micros01@btinternet.com ; ; If the above don't work, please perform an Internet search to see if I have ; updated the web page hosting service. ; ;================================================================================== ; ; NASCOM ROM BASIC Ver 4.7, (C) 1978 Microsoft ; Scanned from source published in 80-BUS NEWS from Vol 2, Issue 3 ; (May-June 1983) to Vol 3, Issue 3 (May-June 1984) ; Adapted for the freeware Zilog Macro Assembler 2.10 to produce ; the original ROM code (checksum A934H). PA ; ; GENERAL EQUATES ; 0003 CTRLC EQU 03H ; Control "C" 0007 CTRLG EQU 07H ; Control "G" 0008 BKSP EQU 08H ; Back space 000A LF EQU 0AH ; Line feed 000C CS EQU 0CH ; Clear screen 000D CR EQU 0DH ; Carriage return 000F CTRLO EQU 0FH ; Control "O" 0011 CTRLQ EQU 11H ; Control "Q" 0012 CTRLR EQU 12H ; Control "R" 0013 CTRLS EQU 13H ; Control "S" 0015 CTRLU EQU 15H ; Control "U" 001B ESC EQU 1BH ; Escape 007F DEL EQU 7FH ; Delete ; ; BASIC WORK SPACE LOCATIONS ; 8000 RAMTOP EQU 8000H ; ID No 8002 MS EQU RAMTOP+2 8004 SEC EQU MS+2 8005 MIN EQU SEC+1 ; 1 Byte Size 8006 HOR EQU MIN+1 8007 DAY EQU HOR+1 8008 PADIR EQU DAY+1 8009 PADT EQU PADIR+1 800A PBDIR EQU PADT+1 800B PBDT EQU PBDIR+1 800D AFREG EQU PBDT+2 800F BCREG EQU AFREG+2 8011 DEREG EQU BCREG+2 8013 HLREG EQU DEREG+2 ; 8145 WRKSPC EQU 8145H ; BASIC Work space 8148 USR EQU WRKSPC+3H ; "USR (x)" jump 814B OUTSUB EQU WRKSPC+6H ; "OUT p,n" 814C OTPORT EQU WRKSPC+7H ; Port (p) 814E DIVSUP EQU WRKSPC+9H ; Division support routine 814F DIV1 EQU WRKSPC+0AH ; <- Values 8153 DIV2 EQU WRKSPC+0EH ; <- to 8157 DIV3 EQU WRKSPC+12H ; <- be 815A DIV4 EQU WRKSPC+15H ; <- inserted 815C SEED EQU WRKSPC+17H ; Random number seed 817F LSTRND EQU WRKSPC+3AH ; Last random number 8183 INPSUB EQU WRKSPC+3EH ; #INP (x)" Routine 8184 INPORT EQU WRKSPC+3FH ; PORT (x) 8186 NULLS EQU WRKSPC+41H ; Number of nulls 8187 LWIDTH EQU WRKSPC+42H ; Terminal width 8188 COMMAN EQU WRKSPC+43H ; Width for commas 8189 NULFLG EQU WRKSPC+44H ; Null after input byte flag 818A CTLOFG EQU WRKSPC+45H ; Control "O" flag 818B LINESC EQU WRKSPC+46H ; Lines counter 818D LINESN EQU WRKSPC+48H ; Lines number 818F CHKSUM EQU WRKSPC+4AH ; Array load/save check sum 8191 NMIFLG EQU WRKSPC+4CH ; Flag for NMI break routine 8192 BRKFLG EQU WRKSPC+4DH ; Break flag 8193 RINPUT EQU WRKSPC+4EH ; Input reflection 8196 POINT EQU WRKSPC+51H ; "POINT" reflection (unused) 8199 PSET EQU WRKSPC+54H ; "SET" reflection 819C RESET EQU WRKSPC+57H ; "RESET" reflection 819F STRSPC EQU WRKSPC+5AH ; Bottom of string space 81A1 LINEAT EQU WRKSPC+5CH ; Current line number 81A3 BASTXT EQU WRKSPC+5EH ; Pointer to start of program 81A6 BUFFER EQU WRKSPC+61H ; Input buffer 81AB STACK EQU WRKSPC+66H ; Initial stack 81F0 CURPOS EQU WRKSPC+0ABH ; Character position on line 81F1 LCRFLG EQU WRKSPC+0ACH ; Locate/Create flag 81F2 TYPE EQU WRKSPC+0ADH ; Data type flag 81F3 DATFLG EQU WRKSPC+0AEH ; Literal statement flag 81F4 LSTRAM EQU WRKSPC+0AFH ; Last available RAM 81F6 TMSTPT EQU WRKSPC+0B1H ; Temporary string pointer 81F8 TMSTPL EQU WRKSPC+0B3H ; Temporary string pool 8204 TMPSTR EQU WRKSPC+0BFH ; Temporary string 8208 STRBOT EQU WRKSPC+0C3H ; Bottom of string space 820A CUROPR EQU WRKSPC+0C5H ; Current operator in EVAL 820C LOOPST EQU WRKSPC+0C7H ; First statement of loop 820E DATLIN EQU WRKSPC+0C9H ; Line of current DATA item 8210 FORFLG EQU WRKSPC+0CBH ; "FOR" loop flag 8211 LSTBIN EQU WRKSPC+0CCH ; Last byte entered 8212 READFG EQU WRKSPC+0CDH ; Read/Input flag 8213 BRKLIN EQU WRKSPC+0CEH ; Line of break 8215 NXTOPR EQU WRKSPC+0D0H ; Next operator in EVAL 8217 ERRLIN EQU WRKSPC+0D2H ; Line of error 8219 CONTAD EQU WRKSPC+0D4H ; Where to CONTinue 821B PROGND EQU WRKSPC+0D6H ; End of program 821D VAREND EQU WRKSPC+0D8H ; End of variables 821F ARREND EQU WRKSPC+0DAH ; End of arrays 8221 NXTDAT EQU WRKSPC+0DCH ; Next data item 8223 FNRGNM EQU WRKSPC+0DEH ; Name of FN argument 8225 FNARG EQU WRKSPC+0E0H ; FN argument value 8229 FPREG EQU WRKSPC+0E4H ; Floating point register 822C FPEXP EQU FPREG+3 ; Floating point exponent 822D SGNRES EQU WRKSPC+0E8H ; Sign of result 822E PBUFF EQU WRKSPC+0E9H ; Number print buffer 823B MULVAL EQU WRKSPC+0F6H ; Multiplier 823E PROGST EQU WRKSPC+0F9H ; Start of program text area 82A2 STLOOK EQU WRKSPC+15DH ; Start of memory test ; ; BASIC ERROR CODE VALUES ; 0000 NF EQU 00H ; NEXT without FOR 0002 SN EQU 02H ; Syntax error 0004 RG EQU 04H ; RETURN without GOSUB 0006 OD EQU 06H ; Out of DATA 0008 FC EQU 08H ; Function call error 000A OV EQU 0AH ; Overflow 000C OM EQU 0CH ; Out of memory 000E UL EQU 0EH ; Undefined line number 0010 BS EQU 10H ; Bad subscript 0012 RD EQU 12H ; Re-DIMensioned array 0014 DZ EQU 14H ; Division by zero (/0) 0016 ID EQU 16H ; Illegal direct 0018 TM EQU 18H ; Type miss-match 001A OS EQU 1AH ; Out of string space 001C LS EQU 1CH ; String too long 001E ST EQU 1EH ; String formula too complex 0020 CN EQU 20H ; Can't CONTinue 0022 UF EQU 22H ; UnDEFined FN function 0024 MO EQU 24H ; Missing operand 0026 HX EQU 26H ; HEX error 0028 BN EQU 28H ; BIN error ; 00DE C3 E4 00 COLD: JP STARTB ; Jump for cold start 00E1 C3 7E 01 WARM: JP WARMST ; Jump for warm start 00E4 C3 EB 00 STARTB: JP CSTART ; Jump to initialise ; 00E7 C4 09 DW DEINT ; Get integer -32768 to 32767 00E9 3A 11 DW ABPASS ; Return integer in AB ; 00EB 21 45 81 CSTART: LD HL,WRKSPC ; Start of workspace RAM 00EE F9 LD SP,HL ; Set up a temporary stack 00EF 3E 02 LD A,0002H ;ID No. 00F1 32 00 80 LD (RAMTOP),A 00F4 AF XOR A 00F5 32 07 80 LD (DAY),A 00F8 32 06 80 LD (HOR),A 00FB 32 05 80 LD (MIN),A 00FE 32 04 80 LD (SEC),A 0101 11 00 00 LD DE,0 0104 21 5C 1F LD HL,BSRAM 0107 01 50 1F LD BC,BSRAM1-BSRAM 010A ED B0 LDIR 010C 3E 05 LD A,5 010E D3 1B OUT (01BH),a 0110 3E 6A LD A,06AH 0112 D3 1B OUT (01BH),A 0114 C3 55 1D JP INITST ; Go to initialise ; 0117 11 EB 03 INIT: LD DE,INITAB ; Initialise workspace 011A 06 63 LD B,INITBE-INITAB+3; Bytes to copy 011C 21 45 81 LD HL,WRKSPC ; Into workspace RAM 011F 1A COPY: LD A,(DE) ; Get source 0120 77 LD (HL),A ; To destination 0121 23 INC HL ; Next destination 0122 13 INC DE ; Next source 0123 05 DEC B ; Count bytes 0124 C2 1F 01 JP NZ,COPY ; More to move 0127 F9 LD SP,HL ; Temporary stack 0128 CD EC 05 CALL CLREG ; Clear registers and stack 012B CD BA 0B CALL PRCRLF ; Output CRLF 012E 32 EF 81 LD (BUFFER+72+1),A ; Mark end of buffer 0131 32 3E 82 LD (PROGST),A ; Initialise program area 0134 21 A2 82 MSIZE: LD HL,STLOOK ; Point to start of RAM 0137 23 MLOOP: INC HL ; Next byte 0138 7C LD A,H ; Above address FFFF ? 0139 B5 OR L 013A CA 46 01 JP Z,SETTOP ; Yes - 64K RAM 013D 7E LD A,(HL) ; Get contents 013E 47 LD B,A ; Save it 013F 2F CPL ; Flip all bits 0140 77 LD (HL),A ; Put it back 0141 BE CP (HL) ; RAM there if same 0142 70 LD (HL),B ; Restore old contents 0143 CA 37 01 JP Z,MLOOP ; If RAM - test next byte ; 0146 2B SETTOP: DEC HL ; Back one byte 0147 11 A1 82 LD DE,STLOOK-1 ; See if enough RAM 014A CD 82 07 CALL CPDEHL ; Compare DE with HL 014D DA 87 01 JP C,NEMEM ; If not enough RAM 0150 11 CE FF LD DE,0-50 ; 50 Bytes string space 0153 22 F4 81 LD (LSTRAM),HL ; Save last available RAM 0156 19 ADD HL,DE ; Allocate string space 0157 22 9F 81 LD (STRSPC),HL ; Save string space 015A CD C7 05 CALL CLRPTR ; Clear program area 015D 2A 9F 81 LD HL,(STRSPC) ; Get end of memory 0160 11 EF FF LD DE,0-17 ; Offset for free bytes 0163 19 ADD HL,DE ; Adjust HL 0164 11 3E 82 LD DE,PROGST ; Start of program text 0167 7D LD A,L ; Get LSB 0168 93 SUB E ; Adjust it 0169 6F LD L,A ; Re-save 016A 7C LD A,H ; Get MSB 016B 9A SBC A,D ; Adjust it 016C 67 LD H,A ; Re-save 016D E5 PUSH HL ; Save bytes free 016E 21 9F 01 LD HL,SIGNON ; Sign-on message 0171 CD 58 12 CALL PRS ; Output string 0174 E1 POP HL ; Get bytes free back 0175 CD FB 18 CALL PRNTHL ; Output amount of free memory 0178 21 90 01 LD HL,BFREE ; " Bytes free" message 017B CD 58 12 CALL PRS ; Output string ; 017E 31 AB 81 WARMST: LD SP,STACK ; Temporary stack 0181 CD EC 05 BRKRET: CALL CLREG ; Clear registers and stack 0184 C3 05 05 JP PRNTOK ; Go to get command line ; 0187 21 DD 01 NEMEM: LD HL,MEMMSG ; Memory size not enough 018A CD 58 12 CALL PRS ; Print it 018D C3 8D 01 XXXXX: JP XXXXX ; Stop ; 0190 20 42 79 74 BFREE: DB " Bytes free",CR,LF,0,0 0194 65 73 20 66 0198 72 65 65 0D 019C 0A 00 00 ; 019F 5A 38 30 20 SIGNON: DB "Z80 BASIC Ver 4.7b",CR,LF 01A3 42 41 53 49 01A7 43 20 56 65 01AB 72 20 34 2E 01AF 37 62 0D 0A 01B3 43 6F 70 79 DB "Copyright ",40,"C",41 01B7 72 69 67 68 01BB 74 20 28 43 01BF 29 01C0 20 31 39 37 DB " 1978 by Microsoft on ROM",CR,LF,0,0 01C4 38 20 62 79 01C8 20 4D 69 63 01CC 72 6F 73 6F 01D0 66 74 20 6F 01D4 6E 20 52 4F 01D8 4D 0D 0A 00 01DC 00 ; 01DD 4D 65 6D 6F MEMMSG: DB "Memory size not enough",CR,LF 01E1 72 79 20 73 01E5 69 7A 65 20 01E9 6E 6F 74 20 01ED 65 6E 6F 75 01F1 67 68 0D 0A 01F5 54 68 65 20 DB "The system is stopped.",CR,LF,0,0 01F9 73 79 73 74 01FD 65 6D 20 69 0201 73 20 73 74 0205 6F 70 70 65 0209 64 2E 0D 0A 020D 00 00 ; ; FUNCTION ADDRESS TABLE ; 020F 70 17 FNCTAB: DW SGN 0211 34 18 DW INT 0213 86 17 DW ABS 0215 48 81 DW USR 0217 18 11 DW FRE 0219 9D 14 DW INP 021B 46 11 DW POS 021D FA 19 DW SQR 021F D9 1A DW RND 0221 15 16 DW LOG 0223 48 1A DW EXP 0225 4E 1B DW COS 0227 54 1B DW SIN 0229 B5 1B DW TAN 022B CA 1B DW ATN 022D F1 14 DW PEEK 022F 35 1C DW DEEK 0231 96 81 DW POINT 0233 CA 13 DW LEN 0235 E2 11 DW STR 0237 64 14 DW VAL 0239 D9 13 DW ASC 023B EA 13 DW CHR 023D 57 1C DW HEX 023F EA 1C DW BIN 0241 FA 13 DW LEFT 0243 2A 14 DW RIGHT 0245 34 14 DW MID ; ; RESERVED WORD LIST ; 0247 C5 4E 44 WORDS: DB 0C5H,"ND" 024A C6 4F 52 DB 0C6H,"OR" 024D CE 45 58 54 DB 0CEH,"EXT" 0251 C4 41 54 41 DB 0C4H,"ATA" 0255 C9 4E 50 55 DB 0C9H,"NPUT" 0259 54 025A C4 49 4D DB 0C4H,"IM" 025D D2 45 41 44 DB 0D2H,"EAD" 0261 CC 45 54 DB 0CCH,"ET" 0264 C7 4F 54 4F DB 0C7H,"OTO" 0268 D2 55 4E DB 0D2H,"UN" 026B C9 46 DB 0C9H,"F" 026D D2 45 53 54 DB 0D2H,"ESTORE" 0271 4F 52 45 0274 C7 4F 53 55 DB 0C7H,"OSUB" 0278 42 0279 D2 45 54 55 DB 0D2H,"ETURN" 027D 52 4E 027F D2 45 4D DB 0D2H,"EM" 0282 D3 54 4F 50 DB 0D3H,"TOP" 0286 CF 55 54 DB 0CFH,"UT" 0289 CF 4E DB 0CFH,"N" 028B CE 55 4C 4C DB 0CEH,"ULL" 028F D7 41 49 54 DB 0D7H,"AIT" 0293 C4 45 46 DB 0C4H,"EF" 0296 D0 4F 4B 45 DB 0D0H,"OKE" 029A C4 4F 4B 45 DB 0C4H,"OKE" 029E D3 43 52 45 DB 0D3H,"CREEN" 02A2 45 4E 02A4 CC 49 4E 45 DB 0CCH,"INES" 02A8 53 02A9 C3 4C 53 DB 0C3H,"LS" 02AC D7 49 44 54 DB 0D7H,"IDTH" 02B0 48 02B1 CD 4F 4E 49 DB 0CDH,"ONITOR" 02B5 54 4F 52 02B8 D3 45 54 DB 0D3H,"ET" 02BB D2 45 53 45 DB 0D2H,"ESET" 02BF 54 02C0 D0 52 49 4E DB 0D0H,"RINT" 02C4 54 02C5 C3 4F 4E 54 DB 0C3H,"ONT" 02C9 CC 49 53 54 DB 0CCH,"IST" 02CD C3 4C 45 41 DB 0C3H,"LEAR" 02D1 52 02D2 D0 50 DB 0D0H,"P" 02D4 CC 4F 41 44 DB 0CCH,"OAD" 02D8 CE 45 57 DB 0CEH,"EW" ; 02DB D4 41 42 28 DB 0D4H,"AB(" 02DF D4 4F DB 0D4H,"O" 02E1 C6 4E DB 0C6H,"N" 02E3 D3 50 43 28 DB 0D3H,"PC(" 02E7 D4 48 45 4E DB 0D4H,"HEN" 02EB CE 4F 54 DB 0CEH,"OT" 02EE D3 54 45 50 DB 0D3H,"TEP" ; 02F2 AB DB 0ABH 02F3 AD DB 0ADH 02F4 AA DB 0AAH 02F5 AF DB 0AFH 02F6 DE DB 0DEH 02F7 C1 4E 44 DB 0C1H,"ND" 02FA CF 52 DB 0CFH,"R" 02FC BE DB 0BEH 02FD BD DB 0BDH 02FE BC DB 0BCH ; 02FF D3 47 4E DB 0D3H,"GN" 0302 C9 4E 54 DB 0C9H,"NT" 0305 C1 42 53 DB 0C1H,"BS" 0308 D5 53 52 DB 0D5H,"SR" 030B C6 52 45 DB 0C6H,"RE" 030E C9 4E 50 DB 0C9H,"NP" 0311 D0 4F 53 DB 0D0H,"OS" 0314 D3 51 52 DB 0D3H,"QR" 0317 D2 4E 44 DB 0D2H,"ND" 031A CC 4F 47 DB 0CCH,"OG" 031D C5 58 50 DB 0C5H,"XP" 0320 C3 4F 53 DB 0C3H,"OS" 0323 D3 49 4E DB 0D3H,"IN" 0326 D4 41 4E DB 0D4H,"AN" 0329 C1 54 4E DB 0C1H,"TN" 032C D0 45 45 4B DB 0D0H,"EEK" 0330 C4 45 45 4B DB 0C4H,"EEK" 0334 D0 4F 49 4E DB 0D0H,"OINT" 0338 54 0339 CC 45 4E DB 0CCH,"EN" 033C D3 54 52 24 DB 0D3H,"TR$" 0340 D6 41 4C DB 0D6H,"AL" 0343 C1 53 43 DB 0C1H,"SC" 0346 C3 48 52 24 DB 0C3H,"HR$" 034A C8 45 58 24 DB 0C8H,"EX$" 034E C2 49 4E 24 DB 0C2H,"IN$" 0352 CC 45 46 54 DB 0CCH,"EFT$" 0356 24 0357 D2 49 47 48 DB 0D2H,"IGHT$" 035B 54 24 035D CD 49 44 24 DB 0CDH,"ID$" 0361 80 DB 80H ; End of list marker ; ; KEYWORD ADDRESS TABLE ; 0362 5C 09 WORDTB: DW PEND 0364 59 08 DW FOR 0366 34 0D DW NEXT 0368 A9 0A DW DATA 036A 3B 0C DW INPUT 036C 70 0F DW DIM 036E 6A 0C DW READ 0370 C0 0A DW LET 0372 66 0A DW GOTO 0374 49 0A DW RUN 0376 38 0B DW IF 0378 22 09 DW RESTOR 037A 55 0A DW GOSUB 037C 84 0A DW RETURN 037E AB 0A DW REM 0380 5A 09 DW STOP 0382 A9 14 DW POUT 0384 1A 0B DW ON 0386 9B 09 DW NULL 0388 AF 14 DW WAIT 038A 4E 11 DW DEF 038C F8 14 DW POKE 038E 40 1C DW DOKE 0390 AB 0A DW REM 0392 26 1C DW LINES 0394 19 1C DW CLS 0396 1E 1C DW WIDTH 0398 52 1D DW MONITR 039A 99 81 DW PSET 039C 9C 81 DW RESET 039E 5C 0B DW PRINT 03A0 88 09 DW CONT 03A2 CE 07 DW LIST 03A4 03 0A DW CLEAR 03A6 15 1E DW PP 03A8 46 1E DW LOAD 03AA C6 05 DW NEW ; ; RESERVED WORD TOKEN VALUES ; 0080 ZEND EQU 080H ; END 0081 ZFOR EQU 081H ; FOR 0083 ZDATA EQU 083H ; DATA 0088 ZGOTO EQU 088H ; GOTO 008C ZGOSUB EQU 08CH ; GOSUB 008E ZREM EQU 08EH ; REM 009E ZPRINT EQU 09EH ; PRINT 00A4 ZNEW EQU 0A4H ; NEW ; 00A5 ZTAB EQU 0A5H ; TAB 00A6 ZTO EQU 0A6H ; TO 00A7 ZFN EQU 0A7H ; FN 00A8 ZSPC EQU 0A8H ; SPC 00A9 ZTHEN EQU 0A9H ; THEN 00AA ZNOT EQU 0AAH ; NOT 00AB ZSTEP EQU 0ABH ; STEP ; 00AC ZPLUS EQU 0ACH ; + 00AD ZMINUS EQU 0ADH ; - 00AE ZTIMES EQU 0AEH ; * 00AF ZDIV EQU 0AFH ; / 00B2 ZOR EQU 0B2H ; OR 00B3 ZGTR EQU 0B3H ; > 00B4 ZEQUAL EQU 0B4H ; M 00B5 ZLTH EQU 0B5H ; < 00B6 ZSGN EQU 0B6H ; SGN 00C7 ZPOINT EQU 0C7H ; POINT 00CF ZLEFT EQU 0CDH +2 ; LEFT$ ; ; ARITHMETIC PRECEDENCE TABLE ; 03AC 79 PRITAB: DB 79H ; Precedence value 03AD E2 18 DW PADD ; FPREG = + FPREG ; 03AF 79 DB 79H ; Precedence value 03B0 16 15 DW PSUB ; FPREG = - FPREG ; 03B2 7C DB 7CH ; Precedence value 03B3 54 16 DW MULT ; PPREG = * FPREG ; 03B5 7C DB 7CH ; Precedence value 03B6 B5 16 DW DIV ; FPREG = / FPREG ; 03B8 7F DB 7FH ; Precedence value 03B9 03 1A DW POWER ; FPREG = ^ FPREG ; 03BB 50 DB 50H ; Precedence value 03BC C9 0E DW PAND ; FPREG = AND FPREG ; 03BE 46 DB 46H ; Precedence value 03BF C8 0E DW POR ; FPREG = OR FPREG ; ; BASIC ERROR CODE LIST ; 03C1 4E 46 ERRORS: DB "NF" ; NEXT without FOR 03C3 53 4E DB "SN" ; Syntax error 03C5 52 47 DB "RG" ; RETURN without GOSUB 03C7 4F 44 DB "OD" ; Out of DATA 03C9 46 43 DB "FC" ; Illegal function call 03CB 4F 56 DB "OV" ; Overflow error 03CD 4F 4D DB "OM" ; Out of memory 03CF 55 4C DB "UL" ; Undefined line 03D1 42 53 DB "BS" ; Bad subscript 03D3 44 44 DB "DD" ; Re-DIMensioned array 03D5 2F 30 DB "/0" ; Division by zero 03D7 49 44 DB "ID" ; Illegal direct 03D9 54 4D DB "TM" ; Type mis-match 03DB 4F 53 DB "OS" ; Out of string space 03DD 4C 53 DB "LS" ; String too long 03DF 53 54 DB "ST" ; String formula too complex 03E1 43 4E DB "CN" ; Can't CONTinue 03E3 55 46 DB "UF" ; Undefined FN function 03E5 4D 4F DB "MO" ; Missing operand 03E7 48 58 DB "HX" ; HEX error 03E9 42 4E DB "BN" ; BIN error ; ; INITIALISATION TABLE ------------------------------------------------------- ; 03EB C3 7E 01 INITAB: JP WARMST ; Warm start jump 03EE C3 D9 09 JP FCERR ; "USR (X)" jump (Set to Error) 03F1 D3 00 OUT (0),A ; "OUT p,n" skeleton 03F3 C9 RET 03F4 D6 00 SUB 0 ; Division support routine 03F6 6F LD L,A 03F7 7C LD A,H 03F8 DE 00 SBC A,0 03FA 67 LD H,A 03FB 78 LD A,B 03FC DE 00 SBC A,0 03FE 47 LD B,A 03FF 3E 00 LD A,0 0401 C9 RET 0402 00 00 00 DB 0,0,0 ; Random number seed table used by RND 0405 35 4A CA 99 DB 035H,04AH,0CAH,099H ;-2.65145E+07 0409 39 1C 76 98 DB 039H,01CH,076H,098H ; 1.61291E+07 040D 22 95 B3 98 DB 022H,095H,0B3H,098H ;-1.17691E+07 0411 0A DD 47 98 DB 00AH,0DDH,047H,098H ; 1.30983E+07 0415 53 D1 99 99 DB 053H,0D1H,099H,099H ;-2-01612E+07 0419 0A 1A 9F 98 DB 00AH,01AH,09FH,098H ;-1.04269E+07 041D 65 BC CD 98 DB 065H,0BCH,0CDH,098H ;-1.34831E+07 0421 D6 77 3E 98 DB 0D6H,077H,03EH,098H ; 1.24825E+07 0425 52 C7 4F 80 DB 052H,0C7H,04FH,080H ; Last random number 0429 DB 00 IN A,(0) ; INP (x) skeleton 042B C9 RET 042C 01 DB 1 ; POS (x) number (1) 042D FF DB 255 ; Terminal width (255 = no auto CRLF) 042E 1C DB 28 ; Width for commas (3 columns) 042F 00 DB 0 ; No nulls after input bytes 0430 00 DB 0 ; Output enabled (^O off) 0431 14 00 DW 20 ; Initial lines counter 0433 14 00 DW 20 ; Initial lines number 0435 00 00 DW 0 ; Array load/save check sum 0437 00 DB 0 ; Break not by NMI 0438 00 DB 0 ; Break flag 0439 C3 FF 06 JP TTYLIN ; Input reflection (set to TTY) 043C C3 00 00 JP 0000H ; POINT reflection unused 043F C3 00 00 JP 0000H ; SET reflection 0442 C3 00 00 JP 0000H ; RESET reflection 0445 A2 82 DW STLOOK ; Temp string space 0447 FE FF DW -2 ; Current line number (cold) 0449 3F 82 DW PROGST+1 ; Start of program text 044B INITBE: ; ; END OF INITIALISATION TABLE --------------------------------------------------- ; 044B 20 45 72 72 ERRMSG: DB " Error",0 044F 6F 72 00 0452 20 69 6E 20 INMSG: DB " in ",0 0456 00 0456 ZERBYT EQU $-1 ; A zero byte 0457 4F 6B 0D 0A OKMSG: DB "Ok",CR,LF,0,0 045B 00 00 045D 42 72 65 61 BRKMSG: DB "Break",0 0461 6B 00 ; 0463 21 04 00 BAKSTK: LD HL,4 ; Look for "FOR" block with 0466 39 ADD HL,SP ; same index as specified 0467 7E LOKFOR: LD A,(HL) ; Get block ID 0468 23 INC HL ; Point to index address 0469 FE 81 CP ZFOR ; Is it a "FOR" token 046B C0 RET NZ ; No - exit 046C 4E LD C,(HL) ; BC = Address of "FOR" index 046D 23 INC HL 046E 46 LD B,(HL) 046F 23 INC HL ; Point to sign of STEP 0470 E5 PUSH HL ; Save pointer to sign 0471 69 LD L,C ; HL = address of "FOR" index 0472 60 LD H,B 0473 7A LD A,D ; See if an index was specified 0474 B3 OR E ; DE = 0 if no index specified 0475 EB EX DE,HL ; Specified index into HL 0476 CA 7D 04 JP Z,INDFND ; Skip if no index given 0479 EB EX DE,HL ; Index back into DE 047A CD 82 07 CALL CPDEHL ; Compare index with one given 047D 01 0D 00 INDFND: LD BC,16-3 ; Offset to next block 0480 E1 POP HL ; Restore pointer to sign 0481 C8 RET Z ; Return if block found 0482 09 ADD HL,BC ; Point to next block 0483 C3 67 04 JP LOKFOR ; Keep on looking ; 0486 CD A0 04 MOVUP: CALL ENFMEM ; See if enough memory 0489 C5 MOVSTR: PUSH BC ; Save end of source 048A E3 EX (SP),HL ; Swap source and dest" end 048B C1 POP BC ; Get end of destination 048C CD 82 07 MOVLP: CALL CPDEHL ; See if list moved 048F 7E LD A,(HL) ; Get byte 0490 02 LD (BC),A ; Move it 0491 C8 RET Z ; Exit if all done 0492 0B DEC BC ; Next byte to move to 0493 2B DEC HL ; Next byte to move 0494 C3 8C 04 JP MOVLP ; Loop until all bytes moved ; 0497 E5 CHKSTK: PUSH HL ; Save code string address 0498 2A 1F 82 LD HL,(ARREND) ; Lowest free memory 049B 06 00 LD B,0 ; BC = Number of levels to test 049D 09 ADD HL,BC ; 2 Bytes for each level 049E 09 ADD HL,BC 049F 3E DB 3EH ; Skip "PUSH HL" 04A0 E5 ENFMEM: PUSH HL ; Save code string address 04A1 3E D0 LD A,0D0H ; LOW -48; 48 Bytes minimum RAM 04A3 95 SUB L 04A4 6F LD L,A 04A5 3E FF LD A,0FFH ; HIGH (-48); 48 Bytes minimum RAM 04A7 9C SBC A,H 04A8 DA AF 04 JP C,OMERR ; Not enough - ?OM Error 04AB 67 LD H,A 04AC 39 ADD HL,SP ; Test if stack is overflowed 04AD E1 POP HL ; Restore code string address 04AE D8 RET C ; Return if enough mmory 04AF 1E 0C OMERR: LD E,OM ; ?OM Error 04B1 C3 CE 04 JP ERROR ; 04B4 2A 0E 82 DATSNR: LD HL,(DATLIN) ; Get line of current DATA item 04B7 22 A1 81 LD (LINEAT),HL ; Save as current line 04BA 1E 02 SNERR: LD E,SN ; ?SN Error 04BC 01 DB 01H ; Skip "LD E,DZ" 04BD 1E 14 DZERR: LD E,DZ ; ?/0 Error 04BF 01 DB 01H ; Skip "LD E,NF" 04C0 1E 00 NFERR: LD E,NF ; ?NF Error 04C2 01 DB 01H ; Skip "LD E,RD" 04C3 1E 12 DDERR: LD E,RD ; ?DD Error 04C5 01 DB 01H ; Skip "LD E,UF" 04C6 1E 22 UFERR: LD E,UF ; ?UF Error 04C8 01 DB 01H ; Skip "LD E,OV 04C9 1E 0A OVERR: LD E,OV ; ?OV Error 04CB 01 DB 01H ; Skip "LD E,TM" 04CC 1E 18 TMERR: LD E,TM ; ?TM Error ; 04CE CD EC 05 ERROR: CALL CLREG ; Clear registers and stack 04D1 32 8A 81 LD (CTLOFG),A ; Enable output (A is 0) 04D4 CD AD 0B CALL STTLIN ; Start new line 04D7 21 C1 03 LD HL,ERRORS ; Point to error codes 04DA 57 LD D,A ; D = 0 (A is 0) 04DB 3E 3F LD A,'?' 04DD CD 93 07 CALL OUTC ; Output '?' 04E0 19 ADD HL,DE ; Offset to correct error code 04E1 7E LD A,(HL) ; First character 04E2 CD 93 07 CALL OUTC ; Output it 04E5 CD 12 09 CALL GETCHR ; Get next character 04E8 CD 93 07 CALL OUTC ; Output it 04EB 21 4B 04 LD HL,ERRMSG ; "Error" message 04EE CD 58 12 ERRIN: CALL PRS ; Output message 04F1 2A A1 81 LD HL,(LINEAT) ; Get line of error 04F4 11 FE FF LD DE,-2 ; Cold start error if -2 04F7 CD 82 07 CALL CPDEHL ; See if cold start error 04FA CA EB 00 JP Z,CSTART ; Cold start error - Restart 04FD 7C LD A,H ; Was it a direct error? 04FE A5 AND L ; Line = -1 if direct error 04FF 3C INC A 0500 C4 F3 18 CALL NZ,LINEIN ; No - output line of error 0503 3E DB 3EH ; Skip "POP BC" 0504 C1 POPNOK: POP BC ; Drop address in input buffer ; 0505 AF PRNTOK: XOR A ; Output "Ok" and get command 0506 32 8A 81 LD (CTLOFG),A ; Enable output 0509 CD AD 0B CALL STTLIN ; Start new line 050C 21 57 04 LD HL,OKMSG ; "Ok" message 050F CD 58 12 CALL PRS ; Output "Ok" 0512 21 FF FF GETCMD: LD HL,-1 ; Flag direct mode 0515 22 A1 81 LD (LINEAT),HL ; Save as current line 0518 CD FF 06 CALL GETLIN ; Get an input line 051B DA 12 05 JP C,GETCMD ; Get line again if break 051E CD 12 09 CALL GETCHR ; Get first character 0521 3C INC A ; Test if end of line 0522 3D DEC A ; Without affecting Carry 0523 CA 12 05 JP Z,GETCMD ; Nothing entered - Get another 0526 F5 PUSH AF ; Save Carry status 0527 CD DE 09 CALL ATOH ; Get line number into DE 052A D5 PUSH DE ; Save line number 052B CD 16 06 CALL CRUNCH ; Tokenise rest of line 052E 47 LD B,A ; Length of tokenised line 052F D1 POP DE ; Restore line number 0530 F1 POP AF ; Restore Carry 0531 D2 F2 08 JP NC,EXCUTE ; No line number - Direct mode 0534 D5 PUSH DE ; Save line number 0535 C5 PUSH BC ; Save length of tokenised line 0536 AF XOR A 0537 32 11 82 LD (LSTBIN),A ; Clear last byte input 053A CD 12 09 CALL GETCHR ; Get next character 053D B7 OR A ; Set flags 053E F5 PUSH AF ; And save them 053F CD A6 05 CALL SRCHLN ; Search for line number in DE 0542 DA 4B 05 JP C,LINFND ; Jump if line found 0545 F1 POP AF ; Get status 0546 F5 PUSH AF ; And re-save 0547 CA 7F 0A JP Z,ULERR ; Nothing after number - Error 054A B7 OR A ; Clear Carry 054B C5 LINFND: PUSH BC ; Save address of line in prog 054C D2 62 05 JP NC,INEWLN ; Line not found - Insert new 054F EB EX DE,HL ; Next line address in DE 0550 2A 1B 82 LD HL,(PROGND) ; End of program 0553 1A SFTPRG: LD A,(DE) ; Shift rest of program down 0554 02 LD (BC),A 0555 03 INC BC ; Next destination 0556 13 INC DE ; Next source 0557 CD 82 07 CALL CPDEHL ; All done? 055A C2 53 05 JP NZ,SFTPRG ; More to do 055D 60 LD H,B ; HL - New end of program 055E 69 LD L,C 055F 22 1B 82 LD (PROGND),HL ; Update end of program ; 0562 D1 INEWLN: POP DE ; Get address of line, 0563 F1 POP AF ; Get status 0564 CA 89 05 JP Z,SETPTR ; No text - Set up pointers 0567 2A 1B 82 LD HL,(PROGND) ; Get end of program 056A E3 EX (SP),HL ; Get length of input line 056B C1 POP BC ; End of program to BC 056C 09 ADD HL,BC ; Find new end 056D E5 PUSH HL ; Save new end 056E CD 86 04 CALL MOVUP ; Make space for line 0571 E1 POP HL ; Restore new end 0572 22 1B 82 LD (PROGND),HL ; Update end of program pointer 0575 EB EX DE,HL ; Get line to move up in HL 0576 74 LD (HL),H ; Save MSB 0577 D1 POP DE ; Get new line number 0578 23 INC HL ; Skip pointer 0579 23 INC HL 057A 73 LD (HL),E ; Save LSB of line number 057B 23 INC HL 057C 72 LD (HL),D ; Save MSB of line number 057D 23 INC HL ; To first byte in line 057E 11 A6 81 LD DE,BUFFER ; Copy buffer to program 0581 1A MOVBUF: LD A,(DE) ; Get source 0582 77 LD (HL),A ; Save destinations 0583 23 INC HL ; Next source 0584 13 INC DE ; Next destination 0585 B7 OR A ; Done? 0586 C2 81 05 JP NZ,MOVBUF ; No - Repeat 0589 CD D2 05 SETPTR: CALL RUNFST ; Set line pointers 058C 23 INC HL ; To LSB of pointer 058D EB EX DE,HL ; Address to DE 058E 62 PTRLP: LD H,D ; Address to HL 058F 6B LD L,E 0590 7E LD A,(HL) ; Get LSB of pointer 0591 23 INC HL ; To MSB of pointer 0592 B6 OR (HL) ; Compare with MSB pointer 0593 CA 12 05 JP Z,GETCMD ; Get command line if end 0596 23 INC HL ; To LSB of line number 0597 23 INC HL ; Skip line number 0598 23 INC HL ; Point to first byte in line 0599 AF XOR A ; Looking for 00 byte 059A BE FNDEND: CP (HL) ; Found end of line? 059B 23 INC HL ; Move to next byte 059C C2 9A 05 JP NZ,FNDEND ; No - Keep looking 059F EB EX DE,HL ; Next line address to HL 05A0 73 LD (HL),E ; Save LSB of pointer 05A1 23 INC HL 05A2 72 LD (HL),D ; Save MSB of pointer 05A3 C3 8E 05 JP PTRLP ; Do next line ; 05A6 2A A3 81 SRCHLN: LD HL,(BASTXT) ; Start of program text 05A9 44 SRCHLP: LD B,H ; BC = Address to look at 05AA 4D LD C,L 05AB 7E LD A,(HL) ; Get address of next line 05AC 23 INC HL 05AD B6 OR (HL) ; End of program found? 05AE 2B DEC HL 05AF C8 RET Z ; Yes - Line not found 05B0 23 INC HL 05B1 23 INC HL 05B2 7E LD A,(HL) ; Get LSB of line number 05B3 23 INC HL 05B4 66 LD H,(HL) ; Get MSB of line number 05B5 6F LD L,A 05B6 CD 82 07 CALL CPDEHL ; Compare with line in DE 05B9 60 LD H,B ; HL = Start of this line 05BA 69 LD L,C 05BB 7E LD A,(HL) ; Get LSB of next line address 05BC 23 INC HL 05BD 66 LD H,(HL) ; Get MSB of next line address 05BE 6F LD L,A ; Next line to HL 05BF 3F CCF 05C0 C8 RET Z ; Lines found - Exit 05C1 3F CCF 05C2 D0 RET NC ; Line not found,at line after 05C3 C3 A9 05 JP SRCHLP ; Keep looking ; 05C6 C0 NEW: RET NZ ; Return if any more on line 05C7 2A A3 81 CLRPTR: LD HL,(BASTXT) ; Point to start of program 05CA AF XOR A ; Set program area to empty 05CB 77 LD (HL),A ; Save LSB = 00 05CC 23 INC HL 05CD 77 LD (HL),A ; Save MSB = 00 05CE 23 INC HL 05CF 22 1B 82 LD (PROGND),HL ; Set program end ; 05D2 2A A3 81 RUNFST: LD HL,(BASTXT) ; Clear all variables 05D5 2B DEC HL ; 05D6 22 13 82 INTVAR: LD (BRKLIN),HL ; Initialise RUN variables 05D9 2A F4 81 LD HL,(LSTRAM) ; Get end of RAM 05DC 22 08 82 LD (STRBOT),HL ; Clear string space 05DF AF XOR A 05E0 CD 22 09 CALL RESTOR ; Reset DATA pointers 05E3 2A 1B 82 LD HL,(PROGND) ; Get end of program 05E6 22 1D 82 LD (VAREND),HL ; Clear variables 05E9 22 1F 82 LD (ARREND),HL ; Clear arrays ; 05EC C1 CLREG: POP BC ; Save return address 05ED 2A 9F 81 LD HL,(STRSPC) ; Get end of working RAN 05F0 F9 LD SP,HL ; Set stack 05F1 21 F8 81 LD HL,TMSTPL ; Temporary string pool 05F4 22 F6 81 LD (TMSTPT),HL ; Reset temporary string ptr 05F7 AF XOR A ; A = 00 05F8 6F LD L,A ; HL = 0000 05F9 67 LD H,A 05FA 22 19 82 LD (CONTAD),HL ; No CONTinue 05FD 32 10 82 LD (FORFLG),A ; Clear FOR flag 0600 22 23 82 LD (FNRGNM),HL ; Clear FN argument 0603 E5 PUSH HL ; HL = 0000 0604 C5 PUSH BC ; Put back return 0605 2A 13 82 DOAGN: LD HL,(BRKLIN) ; Get address of code to RUN 0608 C9 RET ; Return to execution driver ; 0609 3E 3F PROMPT: LD A,'?' ; '?' 060B CD 93 07 CALL OUTC ; Output character 060E 3E 20 LD A,' ' ; Space 0610 CD 93 07 CALL OUTC ; Output character 0613 C3 93 81 JP RINPUT ; Get input line ; 0616 AF CRUNCH: XOR A ; Tokenise line @ HL to BUFFER 0617 32 F3 81 LD (DATFLG),A ; Reset literal flag 061A 0E 05 LD C,2+3 ; 2 byte number and 3 nulls 061C 11 A6 81 LD DE,BUFFER ; Start of input buffer 061F 7E CRNCLP: LD A,(HL) ; Get byte 0620 FE 20 CP ' ' ; Is it a space? 0622 CA 9E 06 JP Z,MOVDIR ; Yes - Copy direct 0625 47 LD B,A ; Save character 0626 FE 22 CP '"' ; Is it a quote? 0628 CA BE 06 JP Z,CPYLIT ; Yes - Copy literal string 062B B7 OR A ; Is it end of buffer? 062C CA C5 06 JP Z,ENDBUF ; Yes - End buffer 062F 3A F3 81 LD A,(DATFLG) ; Get data type 0632 B7 OR A ; Literal? 0633 7E LD A,(HL) ; Get byte to copy 0634 C2 9E 06 JP NZ,MOVDIR ; Literal - Copy direct 0637 FE 3F CP '?' ; Is it '?' short for PRINT 0639 3E 9E LD A,ZPRINT ; "PRINT" token 063B CA 9E 06 JP Z,MOVDIR ; Yes - replace it 063E 7E LD A,(HL) ; Get byte again 063F FE 30 CP '0' ; Is it less than '0' 0641 DA 49 06 JP C,FNDWRD ; Yes - Look for reserved words 0644 FE 3C CP 60 ; ";"+1; Is it "0123456789:;" ? 0646 DA 9E 06 JP C,MOVDIR ; Yes - copy it direct 0649 D5 FNDWRD: PUSH DE ; Look for reserved words 064A 11 46 02 LD DE,WORDS-1 ; Point to table 064D C5 PUSH BC ; Save count 064E 01 9A 06 LD BC,RETNAD ; Where to return to 0651 C5 PUSH BC ; Save return address 0652 06 7F LD B,ZEND-1 ; First token value -1 0654 7E LD A,(HL) ; Get byte 0655 FE 61 CP 'a' ; Less than 'a' ? 0657 DA 62 06 JP C,SEARCH ; Yes - search for words 065A FE 7B CP 'z'+1 ; Greater than 'z' ? 065C D2 62 06 JP NC,SEARCH ; Yes - search for words 065F E6 5F AND 01011111B ; Force upper case 0661 77 LD (HL),A ; Replace byte 0662 4E SEARCH: LD C,(HL) ; Search for a word 0663 EB EX DE,HL 0664 23 GETNXT: INC HL ; Get next reserved word 0665 B6 OR (HL) ; Start of word? 0666 F2 64 06 JP P,GETNXT ; No - move on 0669 04 INC B ; Increment token value 066A 7E LD A, (HL) ; Get byte from table 066B E6 7F AND 01111111B ; Strip bit 7 066D C8 RET Z ; Return if end of list 066E B9 CP C ; Same character as in buffer? 066F C2 64 06 JP NZ,GETNXT ; No - get next word 0672 EB EX DE,HL 0673 E5 PUSH HL ; Save start of word ; 0674 13 NXTBYT: INC DE ; Look through rest of word 0675 1A LD A,(DE) ; Get byte from table 0676 B7 OR A ; End of word ? 0677 FA 96 06 JP M,MATCH ; Yes - Match found 067A 4F LD C,A ; Save it 067B 78 LD A,B ; Get token value 067C FE 88 CP ZGOTO ; Is it "GOTO" token ? 067E C2 85 06 JP NZ,NOSPC ; No - Don't allow spaces 0681 CD 12 09 CALL GETCHR ; Get next character 0684 2B DEC HL ; Cancel increment from GETCHR 0685 23 NOSPC: INC HL ; Next byte 0686 7E LD A,(HL) ; Get byte 0687 FE 61 CP 'a' ; Less than 'a' ? 0689 DA 8E 06 JP C,NOCHNG ; Yes - don't change 068C E6 5F AND 01011111B ; Make upper case 068E B9 NOCHNG: CP C ; Same as in buffer ? 068F CA 74 06 JP Z,NXTBYT ; Yes - keep testing 0692 E1 POP HL ; Get back start of word 0693 C3 62 06 JP SEARCH ; Look at next word ; 0696 48 MATCH: LD C,B ; Word found - Save token value 0697 F1 POP AF ; Throw away return 0698 EB EX DE,HL 0699 C9 RET ; Return to "RETNAD" 069A EB RETNAD: EX DE,HL ; Get address in string 069B 79 LD A,C ; Get token value 069C C1 POP BC ; Restore buffer length 069D D1 POP DE ; Get destination address 069E 23 MOVDIR: INC HL ; Next source in buffer 069F 12 LD (DE),A ; Put byte in buffer 06A0 13 INC DE ; Move up buffer 06A1 0C INC C ; Increment length of buffer 06A2 D6 3A SUB ':' ; End of statement? 06A4 CA AC 06 JP Z,SETLIT ; Jump if multi-statement line 06A7 FE 49 CP ZDATA-3AH ; Is it DATA statement ? 06A9 C2 AF 06 JP NZ,TSTREM ; No - see if REM 06AC 32 F3 81 SETLIT: LD (DATFLG),A ; Set literal flag 06AF D6 54 TSTREM: SUB ZREM-3AH ; Is it REM? 06B1 C2 1F 06 JP NZ,CRNCLP ; No - Leave flag 06B4 47 LD B,A ; Copy rest of buffer 06B5 7E NXTCHR: LD A,(HL) ; Get byte 06B6 B7 OR A ; End of line ? 06B7 CA C5 06 JP Z,ENDBUF ; Yes - Terminate buffer 06BA B8 CP B ; End of statement ? 06BB CA 9E 06 JP Z,MOVDIR ; Yes - Get next one 06BE 23 CPYLIT: INC HL ; Move up source string 06BF 12 LD (DE),A ; Save in destination 06C0 0C INC C ; Increment length 06C1 13 INC DE ; Move up destination 06C2 C3 B5 06 JP NXTCHR ; Repeat ; 06C5 21 A5 81 ENDBUF: LD HL,BUFFER-1 ; Point to start of buffer 06C8 12 LD (DE),A ; Mark end of buffer (A = 00) 06C9 13 INC DE 06CA 12 LD (DE),A ; A = 00 06CB 13 INC DE 06CC 12 LD (DE),A ; A = 00 06CD C9 RET ; 06CE 3A 89 81 DODEL: LD A,(NULFLG) ; Get null flag status 06D1 B7 OR A ; Is it zero? 06D2 3E 00 LD A,0 ; Zero A - Leave flags 06D4 32 89 81 LD (NULFLG),A ; Zero null flag 06D7 C2 E2 06 JP NZ,ECHDEL ; Set - Echo it 06DA 05 DEC B ; Decrement length 06DB CA FF 06 JP Z,GETLIN ; Get line again if empty 06DE CD 93 07 CALL OUTC ; Output null character 06E1 3E DB 3EH ; Skip "DEC B" 06E2 05 ECHDEL: DEC B ; Count bytes in buffer 06E3 2B DEC HL ; Back space buffer 06E4 CA F6 06 JP Z,OTKLN ; No buffer - Try again 06E7 7E LD A,(HL) ; Get deleted byte 06E8 CD 93 07 CALL OUTC ; Echo it 06EB C3 08 07 JP MORINP ; Get more input ; 06EE 05 DELCHR: DEC B ; Count bytes in buffer 06EF 2B DEC HL ; Back space buffer 06F0 CD 93 07 CALL OUTC ; Output character in A 06F3 C2 08 07 JP NZ,MORINP ; Not end - Get more 06F6 CD 93 07 OTKLN: CALL OUTC ; Output character in A 06F9 CD BA 0B KILIN: CALL PRCRLF ; Output CRLF 06FC C3 FF 06 JP TTYLIN ; Get line again ; 06FF GETLIN: 06FF 21 A6 81 TTYLIN: LD HL,BUFFER ; Get a line by character 0702 06 01 LD B,1 ; Set buffer as empty 0704 AF XOR A 0705 32 89 81 LD (NULFLG),A ; Clear null flag 0708 CD BD 07 MORINP: CALL CLOTST ; Get character and test ^O 070B 4F LD C,A ; Save character in C 070C FE 7F CP DEL ; Delete character? 070E CA CE 06 JP Z,DODEL ; Yes - Process it 0711 3A 89 81 LD A,(NULFLG) ; Get null flag 0714 B7 OR A ; Test null flag status 0715 CA 21 07 JP Z,PROCES ; Reset - Process character 0718 3E 00 LD A,0 ; Set a null 071A CD 93 07 CALL OUTC ; Output null 071D AF XOR A ; Clear A 071E 32 89 81 LD (NULFLG),A ; Reset null flag 0721 79 PROCES: LD A,C ; Get character 0722 FE 07 CP CTRLG ; Bell? 0724 CA 65 07 JP Z,PUTCTL ; Yes - Save it 0727 FE 03 CP CTRLC ; Is it control "C"? 0729 CC BA 0B CALL Z,PRCRLF ; Yes - Output CRLF 072C 37 SCF ; Flag break 072D C8 RET Z ; Return if control "C" 072E FE 0D CP CR ; Is it enter? 0730 CA B5 0B JP Z,ENDINP ; Yes - Terminate input 0733 FE 15 CP CTRLU ; Is it control "U"? 0735 CA F9 06 JP Z,KILIN ; Yes - Get another line 0738 FE 40 CP '@' ; Is it "kill line"? 073A CA F6 06 JP Z,OTKLN ; Yes - Kill line 073D FE 5F CP '_' ; Is it delete? 073F CA EE 06 JP Z,DELCHR ; Yes - Delete character 0742 FE 08 CP BKSP ; Is it backspace? 0744 CA EE 06 JP Z,DELCHR ; Yes - Delete character 0747 FE 12 CP CTRLR ; Is it control "R"? 0749 C2 60 07 JP NZ,PUTBUF ; No - Put in buffer 074C C5 PUSH BC ; Save buffer length 074D D5 PUSH DE ; Save DE 074E E5 PUSH HL ; Save buffer address 074F 36 00 LD (HL),0 ; Mark end of buffer 0751 CD 64 1D CALL OUTNCR ; Output and do CRLF 0754 21 A6 81 LD HL,BUFFER ; Point to buffer start 0757 CD 58 12 CALL PRS ; Output buffer 075A E1 POP HL ; Restore buffer address 075B D1 POP DE ; Restore DE 075C C1 POP BC ; Restore buffer length 075D C3 08 07 JP MORINP ; Get another character ; 0760 FE 20 PUTBUF: CP ' ' ; Is it a control code? 0762 DA 08 07 JP C,MORINP ; Yes - Ignore 0765 78 PUTCTL: LD A,B ; Get number of bytes in buffer 0766 FE 49 CP 72+1 ; Test for line overflow 0768 3E 07 LD A,CTRLG ; Set a bell 076A D2 7A 07 JP NC,OUTNBS ; Ring bell if buffer full 076D 79 LD A,C ; Get character 076E 71 LD (HL),C ; Save in buffer 076F 32 11 82 LD (LSTBIN),A ; Save last input byte 0772 23 INC HL ; Move up buffer 0773 04 INC B ; Increment length 0774 CD 93 07 OUTIT: CALL OUTC ; Output the character entered 0777 C3 08 07 JP MORINP ; Get another character ; 077A CD 93 07 OUTNBS: CALL OUTC ; Output bell and back over it 077D 3E 08 LD A,BKSP ; Set back space 077F C3 74 07 JP OUTIT ; Output it and get more ; 0782 7C CPDEHL: LD A,H ; Get H 0783 92 SUB D ; Compare with D 0784 C0 RET NZ ; Different - Exit 0785 7D LD A,L ; Get L 0786 93 SUB E ; Compare with E 0787 C9 RET ; Return status ; 0788 7E CHKSYN: LD A,(HL) ; Check syntax of character 0789 E3 EX (SP),HL ; Address of test byte 078A BE CP (HL) ; Same as in code string? 078B 23 INC HL ; Return address 078C E3 EX (SP),HL ; Put it back 078D CA 12 09 JP Z,GETCHR ; Yes - Get next character 0790 C3 BA 04 JP SNERR ; Different - ?SN Error ; 0793 F5 OUTC: PUSH AF ; Save character 0794 3A 8A 81 LD A,(CTLOFG) ; Get control "O" flag 0797 B7 OR A ; Is it set? 0798 C2 8D 12 JP NZ,POPAF ; Yes - don't output 079B F1 POP AF ; Restore character 079C C5 PUSH BC ; Save buffer length 079D F5 PUSH AF ; Save character 079E FE 20 CP ' ' ; Is it a control code? 07A0 DA B7 07 JP C,DINPOS ; Yes - Don't INC POS(X) 07A3 3A 87 81 LD A,(LWIDTH) ; Get line width 07A6 47 LD B,A ; To B 07A7 3A F0 81 LD A,(CURPOS) ; Get cursor position 07AA 04 INC B ; Width 255? 07AB CA B3 07 JP Z,INCLEN ; Yes - No width limit 07AE 05 DEC B ; Restore width 07AF B8 CP B ; At end of line? 07B0 CC BA 0B CALL Z,PRCRLF ; Yes - output CRLF 07B3 3C INCLEN: INC A ; Move on one character 07B4 32 F0 81 LD (CURPOS),A ; Save new position 07B7 F1 DINPOS: POP AF ; Restore character 07B8 C1 POP BC ; Restore buffer length 07B9 CD 4F 1D CALL MONOUT ; Send it 07BC C9 RET ; 07BD CD 17 1C CLOTST: CALL GETINP ; Get input character 07C0 E6 7F AND 01111111B ; Strip bit 7 07C2 FE 0F CP CTRLO ; Is it control "O"? 07C4 C0 RET NZ ; No don't flip flag 07C5 3A 8A 81 LD A,(CTLOFG) ; Get flag 07C8 2F CPL ; Flip it 07C9 32 8A 81 LD (CTLOFG),A ; Put it back 07CC AF XOR A ; Null character 07CD C9 RET ; 07CE CD DE 09 LIST: CALL ATOH ; ASCII number to DE 07D1 C0 RET NZ ; Return if anything extra 07D2 C1 POP BC ; Rubbish - Not needed 07D3 CD A6 05 CALL SRCHLN ; Search for line number in DE 07D6 C5 PUSH BC ; Save address of line 07D7 CD 24 08 CALL SETLIN ; Set up lines counter 07DA E1 LISTLP: POP HL ; Restore address of line 07DB 4E LD C,(HL) ; Get LSB of next line 07DC 23 INC HL 07DD 46 LD B,(HL) ; Get MSB of next line 07DE 23 INC HL 07DF 78 LD A,B ; BC = 0 (End of program)? 07E0 B1 OR C 07E1 CA 05 05 JP Z,PRNTOK ; Yes - Go to command mode 07E4 CD 2D 08 CALL COUNT ; Count lines 07E7 CD 3D 09 CALL TSTBRK ; Test for break key 07EA C5 PUSH BC ; Save address of next line 07EB CD BA 0B CALL PRCRLF ; Output CRLF 07EE 5E LD E,(HL) ; Get LSB of line number 07EF 23 INC HL 07F0 56 LD D,(HL) ; Get MSB of line number 07F1 23 INC HL 07F2 E5 PUSH HL ; Save address of line start 07F3 EB EX DE,HL ; Line number to HL 07F4 CD FB 18 CALL PRNTHL ; Output line number in decimal 07F7 3E 20 LD A,' ' ; Space after line number 07F9 E1 POP HL ; Restore start of line address 07FA CD 93 07 LSTLP2: CALL OUTC ; Output character in A 07FD 7E LSTLP3: LD A,(HL) ; Get next byte in line 07FE B7 OR A ; End of line? 07FF 23 INC HL ; To next byte in line 0800 CA DA 07 JP Z,LISTLP ; Yes - get next line 0803 F2 FA 07 JP P,LSTLP2 ; No token - output it 0806 D6 7F SUB ZEND-1 ; Find and output word 0808 4F LD C,A ; Token offset+1 to C 0809 11 47 02 LD DE,WORDS ; Reserved word list 080C 1A FNDTOK: LD A,(DE) ; Get character in list 080D 13 INC DE ; Move on to next 080E B7 OR A ; Is it start of word? 080F F2 0C 08 JP P,FNDTOK ; No - Keep looking for word 0812 0D DEC C ; Count words 0813 C2 0C 08 JP NZ,FNDTOK ; Not there - keep looking 0816 E6 7F OUTWRD: AND 01111111B ; Strip bit 7 0818 CD 93 07 CALL OUTC ; Output first character 081B 1A LD A,(DE) ; Get next character 081C 13 INC DE ; Move on to next 081D B7 OR A ; Is it end of word? 081E F2 16 08 JP P,OUTWRD ; No - output the rest 0821 C3 FD 07 JP LSTLP3 ; Next byte in line ; 0824 E5 SETLIN: PUSH HL ; Set up LINES counter 0825 2A 8D 81 LD HL,(LINESN) ; Get LINES number 0828 22 8B 81 LD (LINESC),HL ; Save in LINES counter 082B E1 POP HL 082C C9 RET ; 082D E5 COUNT: PUSH HL ; Save code string address 082E D5 PUSH DE 082F 2A 8B 81 LD HL,(LINESC) ; Get LINES counter 0832 11 FF FF LD DE,-1 0835 ED 5A ADC HL,DE ; Decrement 0837 22 8B 81 LD (LINESC),HL ; Put it back 083A D1 POP DE 083B E1 POP HL ; Restore code string address 083C F0 RET P ; Return if more lines to go 083D E5 PUSH HL ; Save code string address 083E 2A 8D 81 LD HL,(LINESN) ; Get LINES number 0841 22 8B 81 LD (LINESC),HL ; Reset LINES counter 0844 CD 17 1C CALL GETINP ; Get input character 0847 FE 03 CP CTRLC ; Is it control "C"? 0849 CA 50 08 JP Z,RSLNBK ; Yes - Reset LINES and break 084C E1 POP HL ; Restore code string address 084D C3 2D 08 JP COUNT ; Keep on counting ; 0850 2A 8D 81 RSLNBK: LD HL,(LINESN) ; Get LINES number 0853 22 8B 81 LD (LINESC),HL ; Reset LINES counter 0856 C3 81 01 JP BRKRET ; Go and output "Break" ; 0859 3E 64 FOR: LD A,64H ; Flag "FOR" assignment 085B 32 10 82 LD (FORFLG),A ; Save "FOR" flag 085E CD C0 0A CALL LET ; Set up initial index 0861 C1 POP BC ; Drop RETurn address 0862 E5 PUSH HL ; Save code string address 0863 CD A9 0A CALL DATA ; Get next statement address 0866 22 0C 82 LD (LOOPST),HL ; Save it for start of loop 0869 21 02 00 LD HL,2 ; Offset for "FOR" block 086C 39 ADD HL,SP ; Point to it 086D CD 67 04 FORSLP: CALL LOKFOR ; Look for existing "FOR" block 0870 D1 POP DE ; Get code string address 0871 C2 89 08 JP NZ,FORFND ; No nesting found 0874 09 ADD HL,BC ; Move into "FOR" block 0875 D5 PUSH DE ; Save code string address 0876 2B DEC HL 0877 56 LD D,(HL) ; Get MSB of loop statement 0878 2B DEC HL 0879 5E LD E,(HL) ; Get LSB of loop statement 087A 23 INC HL 087B 23 INC HL 087C E5 PUSH HL ; Save block address 087D 2A 0C 82 LD HL,(LOOPST) ; Get address of loop statement 0880 CD 82 07 CALL CPDEHL ; Compare the FOR loops 0883 E1 POP HL ; Restore block address 0884 C2 6D 08 JP NZ,FORSLP ; Different FORs - Find another 0887 D1 POP DE ; Restore code string address 0888 F9 LD SP,HL ; Remove all nested loops ; 0889 EB FORFND: EX DE,HL ; Code string address to HL 088A 0E 08 LD C,8 088C CD 97 04 CALL CHKSTK ; Check for 8 levels of stack 088F E5 PUSH HL ; Save code string address 0890 2A 0C 82 LD HL,(LOOPST) ; Get first statement of loop 0893 E3 EX (SP),HL ; Save and restore code string 0894 E5 PUSH HL ; Re-save code string address 0895 2A A1 81 LD HL,(LINEAT) ; Get current line number 0898 E3 EX (SP),HL ; Save and restore code string 0899 CD 82 0D CALL TSTNUM ; Make sure it's a number 089C CD 88 07 CALL CHKSYN ; Make sure "TO" is next 089F A6 DB ZTO ; "TO" token 08A0 CD 7F 0D CALL GETNUM ; Get "TO" expression value 08A3 E5 PUSH HL ; Save code string address 08A4 CD AD 17 CALL BCDEFP ; Move "TO" value to BCDE 08A7 E1 POP HL ; Restore code string address 08A8 C5 PUSH BC ; Save "TO" value in block 08A9 D5 PUSH DE 08AA 01 00 81 LD BC,8100H ; BCDE - 1 (default STEP) 08AD 51 LD D,C ; C=0 08AE 5A LD E,D ; D=0 08AF 7E LD A,(HL) ; Get next byte in code string 08B0 FE AB CP ZSTEP ; See if "STEP" is stated 08B2 3E 01 LD A,1 ; Sign of step = 1 08B4 C2 C5 08 JP NZ,SAVSTP ; No STEP given - Default to 1 08B7 CD 12 09 CALL GETCHR ; Jump over "STEP" token 08BA CD 7F 0D CALL GETNUM ; Get step value 08BD E5 PUSH HL ; Save code string address 08BE CD AD 17 CALL BCDEFP ; Move STEP to BCDE 08C1 CD 61 17 CALL TSTSGN ; Test sign of FPREG 08C4 E1 POP HL ; Restore code string address 08C5 C5 SAVSTP: PUSH BC ; Save the STEP value in block 08C6 D5 PUSH DE 08C7 F5 PUSH AF ; Save sign of STEP 08C8 33 INC SP ; Don't save flags 08C9 E5 PUSH HL ; Save code string address 08CA 2A 13 82 LD HL,(BRKLIN) ; Get address of index variable 08CD E3 EX (SP),HL ; Save and restore code string 08CE 06 81 PUTFID: LD B,ZFOR ; "FOR" block marker 08D0 C5 PUSH BC ; Save it 08D1 33 INC SP ; Don't save C ; 08D2 CD 3D 09 RUNCNT: CALL TSTBRK ; Execution driver - Test break 08D5 22 13 82 LD (BRKLIN),HL ; Save code address for break 08D8 7E LD A,(HL) ; Get next byte in code string 08D9 FE 3A CP ':' ; Multi statement line? 08DB CA F2 08 JP Z,EXCUTE ; Yes - Execute it 08DE B7 OR A ; End of line? 08DF C2 BA 04 JP NZ,SNERR ; No - Syntax error 08E2 23 INC HL ; Point to address of next line 08E3 7E LD A,(HL) ; Get LSB of line pointer 08E4 23 INC HL 08E5 B6 OR (HL) ; Is it zero (End of prog)? 08E6 CA 64 09 JP Z,ENDPRG ; Yes - Terminate execution 08E9 23 INC HL ; Point to line number 08EA 5E LD E,(HL) ; Get LSB of line number 08EB 23 INC HL 08EC 56 LD D,(HL) ; Get MSB of line number 08ED EB EX DE,HL ; Line number to HL 08EE 22 A1 81 LD (LINEAT),HL ; Save as current line number 08F1 EB EX DE,HL ; Line number back to DE 08F2 CD 12 09 EXCUTE: CALL GETCHR ; Get key word 08F5 11 D2 08 LD DE,RUNCNT ; Where to RETurn to 08F8 D5 PUSH DE ; Save for RETurn 08F9 C8 IFJMP: RET Z ; Go to RUNCNT if end of STMT 08FA D6 80 ONJMP: SUB ZEND ; Is it a token? 08FC DA C0 0A JP C,LET ; No - try to assign it 08FF FE 25 CP ZNEW+1-ZEND ; END to NEW ? 0901 D2 BA 04 JP NC,SNERR ; Not a key word - ?SN Error 0904 07 RLCA ; Double it 0905 4F LD C,A ; BC = Offset into table 0906 06 00 LD B,0 0908 EB EX DE,HL ; Save code string address 0909 21 62 03 LD HL,WORDTB ; Keyword address table 090C 09 ADD HL,BC ; Point to routine address 090D 4E LD C,(HL) ; Get LSB of routine address 090E 23 INC HL 090F 46 LD B,(HL) ; Get MSB of routine address 0910 C5 PUSH BC ; Save routine address 0911 EB EX DE,HL ; Restore code string address ; 0912 23 GETCHR: INC HL ; Point to next character 0913 7E LD A,(HL) ; Get next code string byte 0914 FE 3A CP ':' ; Z if ':' 0916 D0 RET NC ; NC if > "9" 0917 FE 20 CP ' ' 0919 CA 12 09 JP Z,GETCHR ; Skip over spaces 091C FE 30 CP '0' 091E 3F CCF ; NC if < '0' 091F 3C INC A ; Test for zero - Leave carry 0920 3D DEC A ; Z if Null 0921 C9 RET ; 0922 EB RESTOR: EX DE,HL ; Save code string address 0923 2A A3 81 LD HL,(BASTXT) ; Point to start of program 0926 CA 37 09 JP Z,RESTNL ; Just RESTORE - reset pointer 0929 EB EX DE,HL ; Restore code string address 092A CD DE 09 CALL ATOH ; Get line number to DE 092D E5 PUSH HL ; Save code string address 092E CD A6 05 CALL SRCHLN ; Search for line number in DE 0931 60 LD H,B ; HL = Address of line 0932 69 LD L,C 0933 D1 POP DE ; Restore code string address 0934 D2 7F 0A JP NC,ULERR ; ?UL Error if not found 0937 2B RESTNL: DEC HL ; Byte before DATA statement 0938 22 21 82 UPDATA: LD (NXTDAT),HL ; Update DATA pointer 093B EB EX DE,HL ; Restore code string address 093C C9 RET ; 093D DF TSTBRK: RST 18H ; Check input status 093E C8 RET Z ; No key, go back 093F D7 RST 10H ; Get the key into A 0940 FE 1B CP ESC ; Escape key? 0942 28 11 JR Z,BRK ; Yes, break 0944 FE 03 CP CTRLC ; 0946 28 0D JR Z,BRK ; Yes, break 0948 FE 13 CP CTRLS ; Stop scrolling? 094A C0 RET NZ ; Other key, ignore ; 094B D7 STALL: RST 10H ; Wait for key 094C FE 11 CP CTRLQ ; Resume scrolling? 094E C8 RET Z ; Release the chokehold 094F FE 03 CP CTRLC ; Second break? 0951 28 07 JR Z,STOP ; Break during hold exits prog 0953 18 F6 JR STALL ; Loop until or ; 0955 3E FF BRK LD A,0FFH ; Set BRKFLG 0957 32 92 81 LD (BRKFLG),A ; Store it ; 095A C0 STOP: RET NZ ; Exit if anything else 095B F6 DB 0F6H ; Flag "STOP" 095C C0 PEND: RET NZ ; Exit if anything else 095D 22 13 82 LD (BRKLIN),HL ; Save point of break 0960 21 DB 21H ; Skip "OR 11111111B" 0961 F6 FF INPBRK: OR 11111111B ; Flag "Break" wanted 0963 C1 POP BC ; Return not needed and more 0964 2A A1 81 ENDPRG: LD HL,(LINEAT) ; Get current line number 0967 F5 PUSH AF ; Save STOP / END status 0968 7D LD A,L ; Is it direct break? 0969 A4 AND H 096A 3C INC A ; Line is -1 if direct break 096B CA 77 09 JP Z,NOLIN ; Yes - No line number 096E 22 17 82 LD (ERRLIN),HL ; Save line of break 0971 2A 13 82 LD HL,(BRKLIN) ; Get point of break 0974 22 19 82 LD (CONTAD),HL ; Save point to CONTinue 0977 AF NOLIN: XOR A 0978 32 8A 81 LD (CTLOFG),A ; Enable output 097B CD AD 0B CALL STTLIN ; Start a new line 097E F1 POP AF ; Restore STOP / END status 097F 21 5D 04 LD HL,BRKMSG ; "Break" message 0982 C2 EE 04 JP NZ,ERRIN ; "in line" wanted? 0985 C3 05 05 JP PRNTOK ; Go to command mode ; 0988 2A 19 82 CONT: LD HL,(CONTAD) ; Get CONTinue address 098B 7C LD A,H ; Is it zero? 098C B5 OR L 098D 1E 20 LD E,CN ; ?CN Error 098F CA CE 04 JP Z,ERROR ; Yes - output "?CN Error" 0992 EB EX DE,HL ; Save code string address 0993 2A 17 82 LD HL,(ERRLIN) ; Get line of last break 0996 22 A1 81 LD (LINEAT),HL ; Set up current line number 0999 EB EX DE,HL ; Restore code string address 099A C9 RET ; CONTinue where left off ; 099B CD E0 14 NULL: CALL GETINT ; Get integer 0-255 099E C0 RET NZ ; Return if bad value 099F 32 86 81 LD (NULLS),A ; Set nulls number 09A2 C9 RET ; 09A3 E5 ACCSUM: PUSH HL ; Save address in array 09A4 2A 8F 81 LD HL,(CHKSUM) ; Get check sum 09A7 06 00 LD B,0 ; BC - Value of byte 09A9 4F LD C,A 09AA 09 ADD HL,BC ; Add byte to check sum 09AB 22 8F 81 LD (CHKSUM),HL ; Re-save check sum 09AE E1 POP HL ; Restore address in array 09AF C9 RET ; 09B0 7E CHKLTR: LD A,(HL) ; Get byte 09B1 FE 41 CP 'A' ; < 'a' ? 09B3 D8 RET C ; Carry set if not letter 09B4 FE 5B CP 'Z'+1 ; > 'z' ? 09B6 3F CCF 09B7 C9 RET ; Carry set if not letter ; 09B8 CD 12 09 FPSINT: CALL GETCHR ; Get next character 09BB CD 7F 0D POSINT: CALL GETNUM ; Get integer 0 to 32767 09BE CD 61 17 DEPINT: CALL TSTSGN ; Test sign of FPREG 09C1 FA D9 09 JP M,FCERR ; Negative - ?FC Error 09C4 3A 2C 82 DEINT: LD A,(FPEXP) ; Get integer value to DE 09C7 FE 90 CP 80H+16 ; Exponent in range (16 bits)? 09C9 DA 09 18 JP C,FPINT ; Yes - convert it 09CC 01 80 90 LD BC,9080H ; BCDE = -32768 09CF 11 00 00 LD DE,0000 09D2 E5 PUSH HL ; Save code string address 09D3 CD DC 17 CALL CMPNUM ; Compare FPREG with BCDE 09D6 E1 POP HL ; Restore code string address 09D7 51 LD D,C ; MSB to D 09D8 C8 RET Z ; Return if in range 09D9 1E 08 FCERR: LD E,FC ; ?FC Error 09DB C3 CE 04 JP ERROR ; Output error- ; 09DE 2B ATOH: DEC HL ; ASCII number to DE binary 09DF 11 00 00 GETLN: LD DE,0 ; Get number to DE 09E2 CD 12 09 GTLNLP: CALL GETCHR ; Get next character 09E5 D0 RET NC ; Exit if not a digit 09E6 E5 PUSH HL ; Save code string address 09E7 F5 PUSH AF ; Save digit 09E8 21 98 19 LD HL,65529/10 ; Largest number 65529 09EB CD 82 07 CALL CPDEHL ; Number in range? 09EE DA BA 04 JP C,SNERR ; No - ?SN Error 09F1 62 LD H,D ; HL = Number 09F2 6B LD L,E 09F3 19 ADD HL,DE ; Times 2 09F4 29 ADD HL,HL ; Times 4 09F5 19 ADD HL,DE ; Times 5 09F6 29 ADD HL,HL ; Times 10 09F7 F1 POP AF ; Restore digit 09F8 D6 30 SUB '0' ; Make it 0 to 9 09FA 5F LD E,A ; DE = Value of digit 09FB 16 00 LD D,0 09FD 19 ADD HL,DE ; Add to number 09FE EB EX DE,HL ; Number to DE 09FF E1 POP HL ; Restore code string address 0A00 C3 E2 09 JP GTLNLP ; Go to next character ; 0A03 CA D6 05 CLEAR: JP Z,INTVAR ; Just "CLEAR" Keep parameters 0A06 CD BB 09 CALL POSINT ; Get integer 0 to 32767 to DE 0A09 2B DEC HL ; Cancel increment 0A0A CD 12 09 CALL GETCHR ; Get next character 0A0D E5 PUSH HL ; Save code string address 0A0E 2A F4 81 LD HL,(LSTRAM) ; Get end of RAM 0A11 CA 26 0A JP Z,STORED ; No value given - Use stored 0A14 E1 POP HL ; Restore code string address 0A15 CD 88 07 CALL CHKSYN ; Check for comma 0A18 2C DB ',' 0A19 D5 PUSH DE ; Save number 0A1A CD BB 09 CALL POSINT ; Get integer 0 to 32767 0A1D 2B DEC HL ; Cancel increment 0A1E CD 12 09 CALL GETCHR ; Get next character 0A21 C2 BA 04 JP NZ,SNERR ; ?SN Error if more on line 0A24 E3 EX (SP),HL ; Save code string address 0A25 EB EX DE,HL ; Number to DE 0A26 7D STORED: LD A,L ; Get LSB of new RAM top 0A27 93 SUB E ; Subtract LSB of string space 0A28 5F LD E,A ; Save LSB 0A29 7C LD A,H ; Get MSB of new RAM top 0A2A 9A SBC A,D ; Subtract MSB of string space 0A2B 57 LD D,A ; Save MSB 0A2C DA AF 04 JP C,OMERR ; ?OM Error if not enough mem 0A2F E5 PUSH HL ; Save RAM top 0A30 2A 1B 82 LD HL,(PROGND) ; Get program end 0A33 01 28 00 LD BC,40 ; 40 Bytes minimum working RAM 0A36 09 ADD HL,BC ; Get lowest address 0A37 CD 82 07 CALL CPDEHL ; Enough memory? 0A3A D2 AF 04 JP NC,OMERR ; No - ?OM Error 0A3D EB EX DE,HL ; RAM top to HL 0A3E 22 9F 81 LD (STRSPC),HL ; Set new string space 0A41 E1 POP HL ; End of memory to use 0A42 22 F4 81 LD (LSTRAM),HL ; Set new top of RAM 0A45 E1 POP HL ; Restore code string address 0A46 C3 D6 05 JP INTVAR ; Initialise variables ; 0A49 CA D2 05 RUN: JP Z,RUNFST ; RUN from start if just RUN 0A4C CD D6 05 CALL INTVAR ; Initialise variables 0A4F 01 D2 08 LD BC,RUNCNT ; Execution driver loop 0A52 C3 65 0A JP RUNLIN ; RUN from line number ; 0A55 0E 03 GOSUB: LD C,3 ; 3 Levels of stack needed 0A57 CD 97 04 CALL CHKSTK ; Check for 3 levels of stack 0A5A C1 POP BC ; Get return address 0A5B E5 PUSH HL ; Save code string for RETURN 0A5C E5 PUSH HL ; And for GOSUB routine 0A5D 2A A1 81 LD HL,(LINEAT) ; Get current line 0A60 E3 EX (SP),HL ; Into stack - Code string out 0A61 3E 8C LD A,ZGOSUB ; "GOSUB" token 0A63 F5 PUSH AF ; Save token 0A64 33 INC SP ; Don't save flags ; 0A65 C5 RUNLIN: PUSH BC ; Save return address 0A66 CD DE 09 GOTO: CALL ATOH ; ASCII number to DE binary 0A69 CD AB 0A CALL REM ; Get end of line 0A6C E5 PUSH HL ; Save end of line 0A6D 2A A1 81 LD HL,(LINEAT) ; Get current line 0A70 CD 82 07 CALL CPDEHL ; Line after current? 0A73 E1 POP HL ; Restore end of line 0A74 23 INC HL ; Start of next line 0A75 DC A9 05 CALL C,SRCHLP ; Line is after current line 0A78 D4 A6 05 CALL NC,SRCHLN ; Line is before current line 0A7B 60 LD H,B ; Set up code string address 0A7C 69 LD L,C 0A7D 2B DEC HL ; Incremented after 0A7E D8 RET C ; Line found 0A7F 1E 0E ULERR: LD E,UL ; ?UL Error 0A81 C3 CE 04 JP ERROR ; Output error message ; 0A84 C0 RETURN: RET NZ ; Return if not just RETURN 0A85 16 FF LD D,-1 ; Flag "GOSUB" search 0A87 CD 63 04 CALL BAKSTK ; Look "GOSUB" block 0A8A F9 LD SP,HL ; Kill all FORs in subroutine 0A8B FE 8C CP ZGOSUB ; Test for "GOSUB" token 0A8D 1E 04 LD E,RG ; ?RG Error 0A8F C2 CE 04 JP NZ,ERROR ; Error if no "GOSUB" found 0A92 E1 POP HL ; Get RETURN line number 0A93 22 A1 81 LD (LINEAT),HL ; Save as current 0A96 23 INC HL ; Was it from direct statement? 0A97 7C LD A,H 0A98 B5 OR L ; Return to line 0A99 C2 A3 0A JP NZ,RETLIN ; No - Return to line 0A9C 3A 11 82 LD A,(LSTBIN) ; Any INPUT in subroutine? 0A9F B7 OR A ; If so buffer is corrupted 0AA0 C2 04 05 JP NZ,POPNOK ; Yes - Go to command mode 0AA3 21 D2 08 RETLIN: LD HL,RUNCNT ; Execution driver loop 0AA6 E3 EX (SP),HL ; Into stack - Code string out 0AA7 3E DB 3EH ; Skip "POP HL" 0AA8 E1 NXTDTA: POP HL ; Restore code string address ; 0AA9 01 3A DATA: DB 01H,3AH ; ':' End of statement 0AAB 0E 00 REM: LD C,0 ; 00 End of statement 0AAD 06 00 LD B,0 0AAF 79 NXTSTL: LD A,C ; Statement and byte 0AB0 48 LD C,B 0AB1 47 LD B,A ; Statement end byte 0AB2 7E NXTSTT: LD A,(HL) ; Get byte 0AB3 B7 OR A ; End of line? 0AB4 C8 RET Z ; Yes - Exit 0AB5 B8 CP B ; End of statement? 0AB6 C8 RET Z ; Yes - Exit 0AB7 23 INC HL ; Next byte 0AB8 FE 22 CP '"' ; Literal string? 0ABA CA AF 0A JP Z,NXTSTL ; Yes - Look for another '"' 0ABD C3 B2 0A JP NXTSTT ; Keep looking ; 0AC0 CD 75 0F LET: CALL GETVAR ; Get variable name 0AC3 CD 88 07 CALL CHKSYN ; Make sure "=" follows 0AC6 B4 DB ZEQUAL ; "=" token 0AC7 D5 PUSH DE ; Save address of variable 0AC8 3A F2 81 LD A,(TYPE) ; Get data type 0ACB F5 PUSH AF ; Save type 0ACC CD 91 0D CALL EVAL ; Evaluate expression 0ACF F1 POP AF ; Restore type 0AD0 E3 EX (SP),HL ; Save code - Get var addr 0AD1 22 13 82 LD (BRKLIN),HL ; Save address of variable 0AD4 1F RRA ; Adjust type 0AD5 CD 84 0D CALL CHKTYP ; Check types are the same 0AD8 CA 13 0B JP Z,LETNUM ; Numeric - Move value 0ADB E5 LETSTR: PUSH HL ; Save address of string var 0ADC 2A 29 82 LD HL,(FPREG) ; Pointer to string entry 0ADF E5 PUSH HL ; Save it on stack 0AE0 23 INC HL ; Skip over length 0AE1 23 INC HL 0AE2 5E LD E,(HL) ; LSB of string address 0AE3 23 INC HL 0AE4 56 LD D,(HL) ; MSB of string address 0AE5 2A A3 81 LD HL,(BASTXT) ; Point to start of program 0AE8 CD 82 07 CALL CPDEHL ; Is string before program? 0AEB D2 02 0B JP NC,CRESTR ; Yes - Create string entry 0AEE 2A 9F 81 LD HL,(STRSPC) ; Point to string space 0AF1 CD 82 07 CALL CPDEHL ; Is string literal in program? 0AF4 D1 POP DE ; Restore address of string 0AF5 D2 0A 0B JP NC,MVSTPT ; Yes - Set up pointer 0AF8 21 04 82 LD HL,TMPSTR ; Temporary string pool 0AFB CD 82 07 CALL CPDEHL ; Is string in temporary pool? 0AFE D2 0A 0B JP NC,MVSTPT ; No - Set up pointer 0B01 3E DB 3EH ; Skip "POP DE" 0B02 D1 CRESTR: POP DE ; Restore address of string 0B03 CD B9 13 CALL BAKTMP ; Back to last tmp-str entry 0B06 EB EX DE,HL ; Address of string entry 0B07 CD F2 11 CALL SAVSTR ; Save string in string area 0B0A CD B9 13 MVSTPT: CALL BAKTMP ; Back to last tmp-str entry 0B0D E1 POP HL ; Get string pointer 0B0E CD BC 17 CALL DETHL4 ; Move string pointer to var 0B11 E1 POP HL ; Restore code string address 0B12 C9 RET ; 0B13 E5 LETNUM: PUSH HL ; Save address of variable 0B14 CD B9 17 CALL FPTHL ; Move value to variable 0B17 D1 POP DE ; Restore address of variable 0B18 E1 POP HL ; Restore code string address 0B19 C9 RET ; 0B1A CD E0 14 ON: CALL GETINT ; Get integer 0-255 0B1D 7E LD A,(HL) ; Get "GOTO" or "GOSUB" token 0B1E 47 LD B,A ; Save in B 0B1F FE 8C CP ZGOSUB ; "GOSUB" token? 0B21 CA 29 0B JP Z,ONGO ; Yes - Find line number 0B24 CD 88 07 CALL CHKSYN ; Make sure it's "GOTO" 0B27 88 DB ZGOTO ; "GOTO" token 0B28 2B DEC HL ; Cancel increment 0B29 4B ONGO: LD C,E ; Integer of branch value 0B2A 0D ONGOLP: DEC C ; Count branches 0B2B 78 LD A,B ; Get "GOTO" or "GOSUB" token 0B2C CA FA 08 JP Z,ONJMP ; Go to that line if right one 0B2F CD DF 09 CALL GETLN ; Get line number to DE 0B32 FE 2C CP ',' ; Another line number? 0B34 C0 RET NZ ; No - Drop through 0B35 C3 2A 0B JP ONGOLP ; Yes - loop ; 0B38 CD 91 0D IF: CALL EVAL ; Evaluate expression 0B3B 7E LD A,(HL) ; Get token 0B3C FE 88 CP ZGOTO ; "GOTO" token? 0B3E CA 46 0B JP Z,IFGO ; Yes - Get line 0B41 CD 88 07 CALL CHKSYN ; Make sure it's "THEN" 0B44 A9 DB ZTHEN ; "THEN" token 0B45 2B DEC HL ; Cancel increment 0B46 CD 82 0D IFGO: CALL TSTNUM ; Make sure it's numeric 0B49 CD 61 17 CALL TSTSGN ; Test state of expression 0B4C CA AB 0A JP Z,REM ; False - Drop through 0B4F CD 12 09 CALL GETCHR ; Get next character 0B52 DA 66 0A JP C,GOTO ; Number - GOTO that line 0B55 C3 F9 08 JP IFJMP ; Otherwise do statement ; 0B58 2B MRPRNT: DEC HL ; DEC 'cos GETCHR INCs 0B59 CD 12 09 CALL GETCHR ; Get next character 0B5C CA BA 0B PRINT: JP Z,PRCRLF ; CRLF if just PRINT 0B5F C8 PRNTLP: RET Z ; End of list - Exit 0B60 FE A5 CP ZTAB ; "TAB(" token? 0B62 CA ED 0B JP Z,DOTAB ; Yes - Do TAB routine 0B65 FE A8 CP ZSPC ; "SPC(" token? 0B67 CA ED 0B JP Z,DOTAB ; Yes - Do SPC routine 0B6A E5 PUSH HL ; Save code string address 0B6B FE 2C CP ',' ; Comma? 0B6D CA D6 0B JP Z,DOCOM ; Yes - Move to next zone 0B70 FE 3B CP 59;";" ; Semi-colon? 0B72 CA 10 0C JP Z,NEXITM ; Do semi-colon routine 0B75 C1 POP BC ; Code string address to BC 0B76 CD 91 0D CALL EVAL ; Evaluate expression 0B79 E5 PUSH HL ; Save code string address 0B7A 3A F2 81 LD A,(TYPE) ; Get variable type 0B7D B7 OR A ; Is it a string variable? 0B7E C2 A6 0B JP NZ,PRNTST ; Yes - Output string contents 0B81 CD 06 19 CALL NUMASC ; Convert number to text 0B84 CD 16 12 CALL CRTST ; Create temporary string 0B87 36 20 LD (HL),' ' ; Followed by a space 0B89 2A 29 82 LD HL,(FPREG) ; Get length of output 0B8C 34 INC (HL) ; Plus 1 for the space 0B8D 2A 29 82 LD HL,(FPREG) ; < Not needed > 0B90 3A 87 81 LD A,(LWIDTH) ; Get width of line 0B93 47 LD B,A ; To B 0B94 04 INC B ; Width 255 (No limit)? 0B95 CA A2 0B JP Z,PRNTNB ; Yes - Output number string 0B98 04 INC B ; Adjust it 0B99 3A F0 81 LD A,(CURPOS) ; Get cursor position 0B9C 86 ADD A,(HL) ; Add length of string 0B9D 3D DEC A ; Adjust it 0B9E B8 CP B ; Will output fit on this line? 0B9F D4 BA 0B CALL NC,PRCRLF ; No - CRLF first 0BA2 CD 5B 12 PRNTNB: CALL PRS1 ; Output string at (HL) 0BA5 AF XOR A ; Skip CALL by setting 'z' flag 0BA6 C4 5B 12 PRNTST: CALL NZ,PRS1 ; Output string at (HL) 0BA9 E1 POP HL ; Restore code string address 0BAA C3 58 0B JP MRPRNT ; See if more to PRINT ; 0BAD 3A F0 81 STTLIN: LD A,(CURPOS) ; Make sure on new line 0BB0 B7 OR A ; Already at start? 0BB1 C8 RET Z ; Yes - Do nothing 0BB2 C3 BA 0B JP PRCRLF ; Start a new line ; 0BB5 36 00 ENDINP: LD (HL),0 ; Mark end of buffer 0BB7 21 A5 81 LD HL,BUFFER-1 ; Point to buffer 0BBA 3E 0D PRCRLF: LD A,CR ; Load a CR 0BBC CD 93 07 CALL OUTC ; Output character 0BBF 3E 0A LD A,LF ; Load a LF 0BC1 CD 93 07 CALL OUTC ; Output character 0BC4 AF DONULL: XOR A ; Set to position 0 0BC5 32 F0 81 LD (CURPOS),A ; Store it 0BC8 3A 86 81 LD A,(NULLS) ; Get number of nulls 0BCB 3D NULLP: DEC A ; Count them 0BCC C8 RET Z ; Return if done 0BCD F5 PUSH AF ; Save count 0BCE AF XOR A ; Load a null 0BCF CD 93 07 CALL OUTC ; Output it 0BD2 F1 POP AF ; Restore count 0BD3 C3 CB 0B JP NULLP ; Keep counting ; 0BD6 3A 88 81 DOCOM: LD A,(COMMAN) ; Get comma width 0BD9 47 LD B,A ; Save in B 0BDA 3A F0 81 LD A,(CURPOS) ; Get current position 0BDD B8 CP B ; Within the limit? 0BDE D4 BA 0B CALL NC,PRCRLF ; No - output CRLF 0BE1 D2 10 0C JP NC,NEXITM ; Get next item 0BE4 D6 0E ZONELP: SUB 14 ; Next zone of 14 characters 0BE6 D2 E4 0B JP NC,ZONELP ; Repeat if more zones 0BE9 2F CPL ; Number of spaces to output 0BEA C3 05 0C JP ASPCS ; Output them ; 0BED F5 DOTAB: PUSH AF ; Save token 0BEE CD DD 14 CALL FNDNUM ; Evaluate expression 0BF1 CD 88 07 CALL CHKSYN ; Make sure ")" follows 0BF4 29 DB ")" 0BF5 2B DEC HL ; Back space on to ")" 0BF6 F1 POP AF ; Restore token 0BF7 D6 A8 SUB ZSPC ; Was it "SPC(" ? 0BF9 E5 PUSH HL ; Save code string address 0BFA CA 00 0C JP Z,DOSPC ; Yes - Do 'E' spaces 0BFD 3A F0 81 LD A,(CURPOS) ; Get current position 0C00 2F DOSPC: CPL ; Number of spaces to print to 0C01 83 ADD A,E ; Total number to print 0C02 D2 10 0C JP NC,NEXITM ; TAB < Current POS(X) 0C05 3C ASPCS: INC A ; Output A spaces 0C06 47 LD B,A ; Save number to print 0C07 3E 20 LD A,' ' ; Space 0C09 CD 93 07 SPCLP: CALL OUTC ; Output character in A 0C0C 05 DEC B ; Count them 0C0D C2 09 0C JP NZ,SPCLP ; Repeat if more 0C10 E1 NEXITM: POP HL ; Restore code string address 0C11 CD 12 09 CALL GETCHR ; Get next character 0C14 C3 5F 0B JP PRNTLP ; More to print ; 0C17 3F 52 65 64 REDO: DB "?Redo from start",CR,LF,0 0C1B 6F 20 66 72 0C1F 6F 6D 20 73 0C23 74 61 72 74 0C27 0D 0A 00 ; 0C2A 3A 12 82 BADINP: LD A,(READFG) ; READ or INPUT? 0C2D B7 OR A 0C2E C2 B4 04 JP NZ,DATSNR ; READ - ?SN Error 0C31 C1 POP BC ; Throw away code string addr 0C32 21 17 0C LD HL,REDO ; "Redo from start" message 0C35 CD 58 12 CALL PRS ; Output string 0C38 C3 05 06 JP DOAGN ; Do last INPUT again ; 0C3B CD C3 11 INPUT: CALL IDTEST ; Test for illegal direct 0C3E 7E LD A,(HL) ; Get character after "INPUT" 0C3F FE 22 CP '"' ; Is there a prompt string? 0C41 3E 00 LD A,0 ; Clear A and leave flags 0C43 32 8A 81 LD (CTLOFG),A ; Enable output 0C46 C2 55 0C JP NZ,NOPMPT ; No prompt - get input 0C49 CD 17 12 CALL QTSTR ; Get string terminated by '"' 0C4C CD 88 07 CALL CHKSYN ; Check for ';' after prompt 0C4F 3B DB ';' 0C50 E5 PUSH HL ; Save code string address 0C51 CD 5B 12 CALL PRS1 ; Output prompt string 0C54 3E DB 3EH ; Skip "PUSH HL" 0C55 E5 NOPMPT: PUSH HL ; Save code string address 0C56 CD 09 06 CALL PROMPT ; Get input with "? " prompt 0C59 C1 POP BC ; Restore code string address 0C5A DA 61 09 JP C,INPBRK ; Break pressed - Exit 0C5D 23 INC HL ; Next byte 0C5E 7E LD A,(HL) ; Get it 0C5F B7 OR A ; End of line? 0C60 2B DEC HL ; Back again 0C61 C5 PUSH BC ; Re-save code string address 0C62 CA A8 0A JP Z,NXTDTA ; Yes - Find next DATA stmt 0C65 36 2C LD (HL),',' ; Store comma as separator 0C67 C3 6F 0C JP NXTITM ; Get next item ; 0C6A E5 READ: PUSH HL ; Save code string address 0C6B 2A 21 82 LD HL,(NXTDAT) ; Next DATA statement 0C6E F6 DB 0F6H ; Flag "READ" 0C6F AF NXTITM: XOR A ; Flag "INPUT" 0C70 32 12 82 LD (READFG),A ; Save "READ"/"INPUT" flag 0C73 E3 EX (SP),HL ; Get code str' , Save pointer 0C74 C3 7B 0C JP GTVLUS ; Get values ; 0C77 CD 88 07 NEDMOR: CALL CHKSYN ; Check for comma between items 0C7A 2C DB ',' 0C7B CD 75 0F GTVLUS: CALL GETVAR ; Get variable name 0C7E E3 EX (SP),HL ; Save code str" , Get pointer 0C7F D5 PUSH DE ; Save variable address 0C80 7E LD A,(HL) ; Get next "INPUT"/"DATA" byte 0C81 FE 2C CP ',' ; Comma? 0C83 CA A3 0C JP Z,ANTVLU ; Yes - Get another value 0C86 3A 12 82 LD A,(READFG) ; Is it READ? 0C89 B7 OR A 0C8A C2 10 0D JP NZ,FDTLP ; Yes - Find next DATA stmt 0C8D 3E 3F LD A,'?' ; More INPUT needed 0C8F CD 93 07 CALL OUTC ; Output character 0C92 CD 09 06 CALL PROMPT ; Get INPUT with prompt 0C95 D1 POP DE ; Variable address 0C96 C1 POP BC ; Code string address 0C97 DA 61 09 JP C,INPBRK ; Break pressed 0C9A 23 INC HL ; Point to next DATA byte 0C9B 7E LD A,(HL) ; Get byte 0C9C B7 OR A ; Is it zero (No input) ? 0C9D 2B DEC HL ; Back space INPUT pointer 0C9E C5 PUSH BC ; Save code string address 0C9F CA A8 0A JP Z,NXTDTA ; Find end of buffer 0CA2 D5 PUSH DE ; Save variable address 0CA3 3A F2 81 ANTVLU: LD A,(TYPE) ; Check data type 0CA6 B7 OR A ; Is it numeric? 0CA7 CA CD 0C JP Z,INPBIN ; Yes - Convert to binary 0CAA CD 12 09 CALL GETCHR ; Get next character 0CAD 57 LD D,A ; Save input character 0CAE 47 LD B,A ; Again 0CAF FE 22 CP '"' ; Start of literal sting? 0CB1 CA C1 0C JP Z,STRENT ; Yes - Create string entry 0CB4 3A 12 82 LD A,(READFG) ; "READ" or "INPUT" ? 0CB7 B7 OR A 0CB8 57 LD D,A ; Save 00 if "INPUT" 0CB9 CA BE 0C JP Z,ITMSEP ; "INPUT" - End with 00 0CBC 16 3A LD D,':' ; "DATA" - End with 00 or ':' 0CBE 06 2C ITMSEP: LD B,',' ; Item separator 0CC0 2B DEC HL ; Back space for DTSTR 0CC1 CD 1A 12 STRENT: CALL DTSTR ; Get string terminated by D 0CC4 EB EX DE,HL ; String address to DE 0CC5 21 D8 0C LD HL,LTSTND ; Where to go after LETSTR 0CC8 E3 EX (SP),HL ; Save HL , get input pointer 0CC9 D5 PUSH DE ; Save address of string 0CCA C3 DB 0A JP LETSTR ; Assign string to variable ; 0CCD CD 12 09 INPBIN: CALL GETCHR ; Get next character 0CD0 CD 68 18 CALL ASCTFP ; Convert ASCII to FP number 0CD3 E3 EX (SP),HL ; Save input ptr, Get var addr 0CD4 CD B9 17 CALL FPTHL ; Move FPREG to variable 0CD7 E1 POP HL ; Restore input pointer 0CD8 2B LTSTND: DEC HL ; DEC 'cos GETCHR INCs 0CD9 CD 12 09 CALL GETCHR ; Get next character 0CDC CA E4 0C JP Z,MORDT ; End of line - More needed? 0CDF FE 2C CP ',' ; Another value? 0CE1 C2 2A 0C JP NZ,BADINP ; No - Bad input 0CE4 E3 MORDT: EX (SP),HL ; Get code string address 0CE5 2B DEC HL ; DEC 'cos GETCHR INCs 0CE6 CD 12 09 CALL GETCHR ; Get next character 0CE9 C2 77 0C JP NZ,NEDMOR ; More needed - Get it 0CEC D1 POP DE ; Restore DATA pointer 0CED 3A 12 82 LD A,(READFG) ; "READ" or "INPUT" ? 0CF0 B7 OR A 0CF1 EB EX DE,HL ; DATA pointer to HL 0CF2 C2 38 09 JP NZ,UPDATA ; Update DATA pointer if "READ" 0CF5 D5 PUSH DE ; Save code string address 0CF6 B6 OR (HL) ; More input given? 0CF7 21 FF 0C LD HL,EXTIG ; "?Extra ignored" message 0CFA C4 58 12 CALL NZ,PRS ; Output string if extra given 0CFD E1 POP HL ; Restore code string address 0CFE C9 RET ; 0CFF 3F 45 78 74 EXTIG: DB "?Extra ignored",CR,LF,0 0D03 72 61 20 69 0D07 67 6E 6F 72 0D0B 65 64 0D 0A 0D0F 00 ; 0D10 CD A9 0A FDTLP: CALL DATA ; Get next statement 0D13 B7 OR A ; End of line? 0D14 C2 29 0D JP NZ,FANDT ; No - See if DATA statement 0D17 23 INC HL 0D18 7E LD A,(HL) ; End of program? 0D19 23 INC HL 0D1A B6 OR (HL) ; 00 00 Ends program 0D1B 1E 06 LD E,OD ; ?OD Error 0D1D CA CE 04 JP Z,ERROR ; Yes - Out of DATA 0D20 23 INC HL 0D21 5E LD E,(HL) ; LSB of line number 0D22 23 INC HL 0D23 56 LD D,(HL) ; MSB of line number 0D24 EB EX DE,HL 0D25 22 0E 82 LD (DATLIN),HL ; Set line of current DATA item 0D28 EB EX DE,HL 0D29 CD 12 09 FANDT: CALL GETCHR ; Get next character 0D2C FE 83 CP ZDATA ; "DATA" token 0D2E C2 10 0D JP NZ,FDTLP ; No "DATA" - Keep looking 0D31 C3 A3 0C JP ANTVLU ; Found - Convert input ; 0D34 11 00 00 NEXT: LD DE,0 ; In case no index given 0D37 C4 75 0F NEXT1: CALL NZ,GETVAR ; Get index address 0D3A 22 13 82 LD (BRKLIN),HL ; Save code string address 0D3D CD 63 04 CALL BAKSTK ; Look for "FOR" block 0D40 C2 C0 04 JP NZ,NFERR ; No "FOR" - ?NF Error 0D43 F9 LD SP,HL ; Clear nested loops 0D44 D5 PUSH DE ; Save index address 0D45 7E LD A,(HL) ; Get sign of STEP 0D46 23 INC HL 0D47 F5 PUSH AF ; Save sign of STEP 0D48 D5 PUSH DE ; Save index address 0D49 CD 9F 17 CALL PHLTFP ; Move index value to FPREG 0D4C E3 EX (SP),HL ; Save address of TO value 0D4D E5 PUSH HL ; Save address of index 0D4E CD 0C 15 CALL ADDPHL ; Add STEP to index value 0D51 E1 POP HL ; Restore address of index 0D52 CD B9 17 CALL FPTHL ; Move value to index variable 0D55 E1 POP HL ; Restore address of TO value 0D56 CD B0 17 CALL LOADFP ; Move TO value to BCDE 0D59 E5 PUSH HL ; Save address of line of FOR 0D5A CD DC 17 CALL CMPNUM ; Compare index with TO value 0D5D E1 POP HL ; Restore address of line num 0D5E C1 POP BC ; Address of sign of STEP 0D5F 90 SUB B ; Compare with expected sign 0D60 CD B0 17 CALL LOADFP ; BC = Loop stmt,DE = Line num 0D63 CA 6F 0D JP Z,KILFOR ; Loop finished - Terminate it 0D66 EB EX DE,HL ; Loop statement line number 0D67 22 A1 81 LD (LINEAT),HL ; Set loop line number 0D6A 69 LD L,C ; Set code string to loop 0D6B 60 LD H,B 0D6C C3 CE 08 JP PUTFID ; Put back "FOR" and continue ; 0D6F F9 KILFOR: LD SP,HL ; Remove "FOR" block 0D70 2A 13 82 LD HL,(BRKLIN) ; Code string after "NEXT" 0D73 7E LD A,(HL) ; Get next byte in code string 0D74 FE 2C CP ',' ; More NEXTs ? 0D76 C2 D2 08 JP NZ,RUNCNT ; No - Do next statement 0D79 CD 12 09 CALL GETCHR ; Position to index name 0D7C CD 37 0D CALL NEXT1 ; Re-enter NEXT routine ; < will not RETurn to here , Exit to RUNCNT or Loop > ; 0D7F CD 91 0D GETNUM: CALL EVAL ; Get a numeric expression 0D82 F6 TSTNUM: DB 0F6H ; Clear carry (numeric) 0D83 37 TSTSTR: SCF ; Set carry (string) 0D84 3A F2 81 CHKTYP: LD A,(TYPE) ; Check types match 0D87 8F ADC A,A ; Expected + actual 0D88 B7 OR A ; Clear carry , set parity 0D89 E8 RET PE ; Even parity - Types match 0D8A C3 CC 04 JP TMERR ; Different types - Error ; 0D8D CD 88 07 OPNPAR: CALL CHKSYN ; Make sure "(" follows 0D90 28 DB "(" 0D91 2B EVAL: DEC HL ; Evaluate expression & save 0D92 16 00 LD D,0 ; Precedence value 0D94 D5 EVAL1: PUSH DE ; Save precedence 0D95 0E 01 LD C,1 0D97 CD 97 04 CALL CHKSTK ; Check for 1 level of stack 0D9A CD 08 0E CALL OPRND ; Get next expression value 0D9D 22 15 82 EVAL2: LD (NXTOPR),HL ; Save address of next operator 0DA0 2A 15 82 EVAL3: LD HL,(NXTOPR) ; Restore address of next opr 0DA3 C1 POP BC ; Precedence value and operator 0DA4 78 LD A,B ; Get precedence value 0DA5 FE 78 CP 78H ; "AND" or "OR" ? 0DA7 D4 82 0D CALL NC,TSTNUM ; No - Make sure it's a number 0DAA 7E LD A,(HL) ; Get next operator / function 0DAB 16 00 LD D,0 ; Clear Last relation 0DAD D6 B3 RLTLP: SUB ZGTR ; ">" Token 0DAF DA C9 0D JP C,FOPRND ; + - * / ^ AND OR - Test it 0DB2 FE 03 CP ZLTH+1-ZGTR ; < = > 0DB4 D2 C9 0D JP NC,FOPRND ; Function - Call it 0DB7 FE 01 CP ZEQUAL-ZGTR ; "=" 0DB9 17 RLA ; <- Test for legal 0DBA AA XOR D ; <- combinations of < = > 0DBB BA CP D ; <- by combining last token 0DBC 57 LD D,A ; <- with current one 0DBD DA BA 04 JP C,SNERR ; Error if "<<' '==" or ">>" 0DC0 22 0A 82 LD (CUROPR),HL ; Save address of current token 0DC3 CD 12 09 CALL GETCHR ; Get next character 0DC6 C3 AD 0D JP RLTLP ; Treat the two as one ; 0DC9 7A FOPRND: LD A,D ; < = > found ? 0DCA B7 OR A 0DCB C2 F0 0E JP NZ,TSTRED ; Yes - Test for reduction 0DCE 7E LD A,(HL) ; Get operator token 0DCF 22 0A 82 LD (CUROPR),HL ; Save operator address 0DD2 D6 AC SUB ZPLUS ; Operator or function? 0DD4 D8 RET C ; Neither - Exit 0DD5 FE 07 CP ZOR+1-ZPLUS ; Is it + - * / ^ AND OR ? 0DD7 D0 RET NC ; No - Exit 0DD8 5F LD E,A ; Coded operator 0DD9 3A F2 81 LD A,(TYPE) ; Get data type 0DDC 3D DEC A ; FF = numeric , 00 = string 0DDD B3 OR E ; Combine with coded operator 0DDE 7B LD A,E ; Get coded operator 0DDF CA 4E 13 JP Z,CONCAT ; String concatenation 0DE2 07 RLCA ; Times 2 0DE3 83 ADD A,E ; Times 3 0DE4 5F LD E,A ; To DE (D is 0) 0DE5 21 AC 03 LD HL,PRITAB ; Precedence table 0DE8 19 ADD HL,DE ; To the operator concerned 0DE9 78 LD A,B ; Last operator precedence 0DEA 56 LD D,(HL) ; Get evaluation precedence 0DEB BA CP D ; Compare with eval precedence 0DEC D0 RET NC ; Exit if higher precedence 0DED 23 INC HL ; Point to routine address 0DEE CD 82 0D CALL TSTNUM ; Make sure it's a number ; 0DF1 C5 STKTHS: PUSH BC ; Save last precedence & token 0DF2 01 A0 0D LD BC,EVAL3 ; Where to go on prec' break 0DF5 C5 PUSH BC ; Save on stack for return 0DF6 43 LD B,E ; Save operator 0DF7 4A LD C,D ; Save precedence 0DF8 CD 92 17 CALL STAKFP ; Move value to stack 0DFB 58 LD E,B ; Restore operator 0DFC 51 LD D,C ; Restore precedence 0DFD 4E LD C,(HL) ; Get LSB of routine address 0DFE 23 INC HL 0DFF 46 LD B,(HL) ; Get MSB of routine address 0E00 23 INC HL 0E01 C5 PUSH BC ; Save routine address 0E02 2A 0A 82 LD HL,(CUROPR) ; Address of current operator 0E05 C3 94 0D JP EVAL1 ; Loop until prec' break ; 0E08 AF OPRND: XOR A ; Get operand routine 0E09 32 F2 81 LD (TYPE),A ; Set numeric expected 0E0C CD 12 09 CALL GETCHR ; Get next character 0E0F 1E 24 LD E,MO ; ?MO Error 0E11 CA CE 04 JP Z,ERROR ; No operand - Error 0E14 DA 68 18 JP C,ASCTFP ; Number - Get value 0E17 CD B0 09 CALL CHKLTR ; See if a letter 0E1A D2 6F 0E JP NC,CONVAR ; Letter - Find variable 0E1D FE 26 CP '&' ; &H = HEX, &B = BINARY 0E1F 20 12 JR NZ, NOTAMP 0E21 CD 12 09 CALL GETCHR ; Get next character 0E24 FE 48 CP 'H' ; Hex number indicated? [function added] 0E26 CA AC 1C JP Z,HEXTFP ; Convert Hex to FPREG 0E29 FE 42 CP 'B' ; Binary number indicated? [function added] 0E2B CA 1C 1D JP Z,BINTFP ; Convert Bin to FPREG 0E2E 1E 02 LD E,SN ; If neither then a ?SN Error 0E30 CA CE 04 JP Z,ERROR 0E33 FE AC NOTAMP: CP ZPLUS ; '+' Token ? 0E35 CA 08 0E JP Z,OPRND ; Yes - Look for operand 0E38 FE 2E CP '.' ; '.' ? 0E3A CA 68 18 JP Z,ASCTFP ; Yes - Create FP number 0E3D FE AD CP ZMINUS ; '-' Token ? 0E3F CA 5E 0E JP Z,MINUS ; Yes - Do minus 0E42 FE 22 CP '"' ; Literal string ? 0E44 CA 17 12 JP Z,QTSTR ; Get string terminated by '"' 0E47 FE AA CP ZNOT ; "NOT" Token ? 0E49 CA 50 0F JP Z,EVNOT ; Yes - Eval NOT expression 0E4C FE A7 CP ZFN ; "FN" Token ? 0E4E CA 7B 11 JP Z,DOFN ; Yes - Do FN routine 0E51 D6 B6 SUB ZSGN ; Is it a function? 0E53 D2 80 0E JP NC,FNOFST ; Yes - Evaluate function 0E56 CD 8D 0D EVLPAR: CALL OPNPAR ; Evaluate expression in "()" 0E59 CD 88 07 CALL CHKSYN ; Make sure ")" follows 0E5C 29 DB ")" 0E5D C9 RET ; 0E5E 16 7D MINUS: LD D,7DH ; '-' precedence 0E60 CD 94 0D CALL EVAL1 ; Evaluate until prec' break 0E63 2A 15 82 LD HL,(NXTOPR) ; Get next operator address 0E66 E5 PUSH HL ; Save next operator address 0E67 CD 8A 17 CALL INVSGN ; Negate value 0E6A CD 82 0D RETNUM: CALL TSTNUM ; Make sure it's a number 0E6D E1 POP HL ; Restore next operator address 0E6E C9 RET ; 0E6F CD 75 0F CONVAR: CALL GETVAR ; Get variable address to DE 0E72 E5 FRMEVL: PUSH HL ; Save code string address 0E73 EB EX DE,HL ; Variable address to HL 0E74 22 29 82 LD (FPREG),HL ; Save address of variable 0E77 3A F2 81 LD A,(TYPE) ; Get type 0E7A B7 OR A ; Numeric? 0E7B CC 9F 17 CALL Z,PHLTFP ; Yes - Move contents to FPREG 0E7E E1 POP HL ; Restore code string address 0E7F C9 RET ; 0E80 06 00 FNOFST: LD B,0 ; Get address of function 0E82 07 RLCA ; Double function offset 0E83 4F LD C,A ; BC = Offset in function table 0E84 C5 PUSH BC ; Save adjusted token value 0E85 CD 12 09 CALL GETCHR ; Get next character 0E88 79 LD A,C ; Get adjusted token value 0E89 FE 31 CP 2*(ZLEFT-ZSGN)-1; Adj' LEFT$,RIGHT$ or MID$ ? 0E8B DA A7 0E JP C,FNVAL ; No - Do function 0E8E CD 8D 0D CALL OPNPAR ; Evaluate expression (X,... 0E91 CD 88 07 CALL CHKSYN ; Make sure ',' follows 0E94 2C DB ',' 0E95 CD 83 0D CALL TSTSTR ; Make sure it's a string 0E98 EB EX DE,HL ; Save code string address 0E99 2A 29 82 LD HL,(FPREG) ; Get address of string 0E9C E3 EX (SP),HL ; Save address of string 0E9D E5 PUSH HL ; Save adjusted token value 0E9E EB EX DE,HL ; Restore code string address 0E9F CD E0 14 CALL GETINT ; Get integer 0-255 0EA2 EB EX DE,HL ; Save code string address 0EA3 E3 EX (SP),HL ; Save integer,HL = adj' token 0EA4 C3 AF 0E JP GOFUNC ; Jump to string function ; 0EA7 CD 56 0E FNVAL: CALL EVLPAR ; Evaluate expression 0EAA E3 EX (SP),HL ; HL = Adjusted token value 0EAB 11 6A 0E LD DE,RETNUM ; Return number from function 0EAE D5 PUSH DE ; Save on stack 0EAF 01 0F 02 GOFUNC: LD BC,FNCTAB ; Function routine addresses 0EB2 09 ADD HL,BC ; Point to right address 0EB3 4E LD C,(HL) ; Get LSB of address 0EB4 23 INC HL ; 0EB5 66 LD H,(HL) ; Get MSB of address 0EB6 69 LD L,C ; Address to HL 0EB7 E9 JP (HL) ; Jump to function ; 0EB8 15 SGNEXP: DEC D ; Dee to flag negative exponent 0EB9 FE AD CP ZMINUS ; '-' token ? 0EBB C8 RET Z ; Yes - Return 0EBC FE 2D CP '-' ; '-' ASCII ? 0EBE C8 RET Z ; Yes - Return 0EBF 14 INC D ; Inc to flag positive exponent 0EC0 FE 2B CP '+' ; '+' ASCII ? 0EC2 C8 RET Z ; Yes - Return 0EC3 FE AC CP ZPLUS ; '+' token ? 0EC5 C8 RET Z ; Yes - Return 0EC6 2B DEC HL ; DEC 'cos GETCHR INCs 0EC7 C9 RET ; Return "NZ" ; 0EC8 F6 POR: DB 0F6H ; Flag "OR" 0EC9 AF PAND: XOR A ; Flag "AND" 0ECA F5 PUSH AF ; Save "AND" / "OR" flag 0ECB CD 82 0D CALL TSTNUM ; Make sure it's a number 0ECE CD C4 09 CALL DEINT ; Get integer -32768 to 32767 0ED1 F1 POP AF ; Restore "AND" / "OR" flag 0ED2 EB EX DE,HL ; <- Get last 0ED3 C1 POP BC ; <- value 0ED4 E3 EX (SP),HL ; <- from 0ED5 EB EX DE,HL ; <- stack 0ED6 CD A2 17 CALL FPBCDE ; Move last value to FPREG 0ED9 F5 PUSH AF ; Save "AND" / "OR" flag 0EDA CD C4 09 CALL DEINT ; Get integer -32768 to 32767 0EDD F1 POP AF ; Restore "AND" / "OR" flag 0EDE C1 POP BC ; Get value 0EDF 79 LD A,C ; Get LSB 0EE0 21 39 11 LD HL,ACPASS ; Address of save AC as current 0EE3 C2 EB 0E JP NZ,POR1 ; Jump if OR 0EE6 A3 AND E ; "AND" LSBs 0EE7 4F LD C,A ; Save LSB 0EE8 78 LD A,B ; Get MBS 0EE9 A2 AND D ; "AND" MSBs 0EEA E9 JP (HL) ; Save AC as current (ACPASS) ; 0EEB B3 POR1: OR E ; "OR" LSBs 0EEC 4F LD C,A ; Save LSB 0EED 78 LD A,B ; Get MSB 0EEE B2 OR D ; "OR" MSBs 0EEF E9 JP (HL) ; Save AC as current (ACPASS) ; 0EF0 21 02 0F TSTRED: LD HL,CMPLOG ; Logical compare routine 0EF3 3A F2 81 LD A,(TYPE) ; Get data type 0EF6 1F RRA ; Carry set = string 0EF7 7A LD A,D ; Get last precedence value 0EF8 17 RLA ; Times 2 plus carry 0EF9 5F LD E,A ; To E 0EFA 16 64 LD D,64H ; Relational precedence 0EFC 78 LD A,B ; Get current precedence 0EFD BA CP D ; Compare with last 0EFE D0 RET NC ; Eval if last was rel' or log' 0EFF C3 F1 0D JP STKTHS ; Stack this one and get next ; 0F02 04 0F CMPLOG: DW CMPLG1 ; Compare two values / strings 0F04 79 CMPLG1: LD A,C ; Get data type 0F05 B7 OR A 0F06 1F RRA 0F07 C1 POP BC ; Get last expression to BCDE 0F08 D1 POP DE 0F09 F5 PUSH AF ; Save status 0F0A CD 84 0D CALL CHKTYP ; Check that types match 0F0D 21 46 0F LD HL,CMPRES ; Result to comparison 0F10 E5 PUSH HL ; Save for RETurn 0F11 CA DC 17 JP Z,CMPNUM ; Compare values if numeric 0F14 AF XOR A ; Compare two strings 0F15 32 F2 81 LD (TYPE),A ; Set type to numeric 0F18 D5 PUSH DE ; Save string name 0F19 CD 9B 13 CALL GSTRCU ; Get current string 0F1C 7E LD A,(HL) ; Get length of string 0F1D 23 INC HL 0F1E 23 INC HL 0F1F 4E LD C,(HL) ; Get LSB of address 0F20 23 INC HL 0F21 46 LD B,(HL) ; Get MSB of address 0F22 D1 POP DE ; Restore string name 0F23 C5 PUSH BC ; Save address of string 0F24 F5 PUSH AF ; Save length of string 0F25 CD 9F 13 CALL GSTRDE ; Get second string 0F28 CD B0 17 CALL LOADFP ; Get address of second string 0F2B F1 POP AF ; Restore length of string 1 0F2C 57 LD D,A ; Length to D 0F2D E1 POP HL ; Restore address of string 1 0F2E 7B CMPSTR: LD A,E ; Bytes of string 2 to do 0F2F B2 OR D ; Bytes of string 1 to do 0F30 C8 RET Z ; Exit if all bytes compared 0F31 7A LD A,D ; Get bytes of string 1 to do 0F32 D6 01 SUB 1 0F34 D8 RET C ; Exit if end of string 1 0F35 AF XOR A 0F36 BB CP E ; Bytes of string 2 to do 0F37 3C INC A 0F38 D0 RET NC ; Exit if end of string 2 0F39 15 DEC D ; Count bytes in string 1 0F3A 1D DEC E ; Count bytes in string 2 0F3B 0A LD A,(BC) ; Byte in string 2 0F3C BE CP (HL) ; Compare to byte in string 1 0F3D 23 INC HL ; Move up string 1 0F3E 03 INC BC ; Move up string 2 0F3F CA 2E 0F JP Z,CMPSTR ; Same - Try next bytes 0F42 3F CCF ; Flag difference (">" or "<") 0F43 C3 6C 17 JP FLGDIF ; "<" gives -1 , ">" gives +1 ; 0F46 3C CMPRES: INC A ; Increment current value 0F47 8F ADC A,A ; Double plus carry 0F48 C1 POP BC ; Get other value 0F49 A0 AND B ; Combine them 0F4A C6 FF ADD A,-1 ; Carry set if different 0F4C 9F SBC A,A ; 00 - Equal , FF - Different 0F4D C3 73 17 JP FLGREL ; Set current value & continue ; 0F50 16 5A EVNOT: LD D,5AH ; Precedence value for "NOT" 0F52 CD 94 0D CALL EVAL1 ; Eval until precedence break 0F55 CD 82 0D CALL TSTNUM ; Make sure it's a number 0F58 CD C4 09 CALL DEINT ; Get integer -32768 - 32767 0F5B 7B LD A,E ; Get LSB 0F5C 2F CPL ; Invert LSB 0F5D 4F LD C,A ; Save "NOT" of LSB 0F5E 7A LD A,D ; Get MSB 0F5F 2F CPL ; Invert MSB 0F60 CD 39 11 CALL ACPASS ; Save AC as current 0F63 C1 POP BC ; Clean up stack 0F64 C3 A0 0D JP EVAL3 ; Continue evaluation ; 0F67 2B DIMRET: DEC HL ; DEC 'cos GETCHR INCs 0F68 CD 12 09 CALL GETCHR ; Get next character 0F6B C8 RET Z ; End of DIM statement 0F6C CD 88 07 CALL CHKSYN ; Make sure ',' follows 0F6F 2C DB ',' 0F70 01 67 0F DIM: LD BC,DIMRET ; Return to "DIMRET" 0F73 C5 PUSH BC ; Save on stack 0F74 F6 DB 0F6H ; Flag "Create" variable 0F75 AF GETVAR: XOR A ; Find variable address,to DE 0F76 32 F1 81 LD (LCRFLG),A ; Set locate / create flag 0F79 46 LD B,(HL) ; Get First byte of name 0F7A CD B0 09 GTFNAM: CALL CHKLTR ; See if a letter 0F7D DA BA 04 JP C,SNERR ; ?SN Error if not a letter 0F80 AF XOR A 0F81 4F LD C,A ; Clear second byte of name 0F82 32 F2 81 LD (TYPE),A ; Set type to numeric 0F85 CD 12 09 CALL GETCHR ; Get next character 0F88 DA 91 0F JP C,SVNAM2 ; Numeric - Save in name 0F8B CD B0 09 CALL CHKLTR ; See if a letter 0F8E DA 9E 0F JP C,CHARTY ; Not a letter - Check type 0F91 4F SVNAM2: LD C,A ; Save second byte of name 0F92 CD 12 09 ENDNAM: CALL GETCHR ; Get next character 0F95 DA 92 0F JP C,ENDNAM ; Numeric - Get another 0F98 CD B0 09 CALL CHKLTR ; See if a letter 0F9B D2 92 0F JP NC,ENDNAM ; Letter - Get another 0F9E D6 24 CHARTY: SUB '$' ; String variable? 0FA0 C2 AD 0F JP NZ,NOTSTR ; No - Numeric variable 0FA3 3C INC A ; A = 1 (string type) 0FA4 32 F2 81 LD (TYPE),A ; Set type to string 0FA7 0F RRCA ; A = 80H , Flag for string 0FA8 81 ADD A,C ; 2nd byte of name has bit 7 on 0FA9 4F LD C,A ; Resave second byte on name 0FAA CD 12 09 CALL GETCHR ; Get next character 0FAD 3A 10 82 NOTSTR: LD A,(FORFLG) ; Array name needed ? 0FB0 3D DEC A 0FB1 CA 5A 10 JP Z,ARLDSV ; Yes - Get array name 0FB4 F2 BD 0F JP P,NSCFOR ; No array with "FOR" or "FN" 0FB7 7E LD A,(HL) ; Get byte again 0FB8 D6 28 SUB '(' ; Subscripted variable? 0FBA CA 32 10 JP Z,SBSCPT ; Yes - Sort out subscript ; 0FBD AF NSCFOR: XOR A ; Simple variable 0FBE 32 10 82 LD (FORFLG),A ; Clear "FOR" flag 0FC1 E5 PUSH HL ; Save code string address 0FC2 50 LD D,B ; DE = Variable name to find 0FC3 59 LD E,C 0FC4 2A 23 82 LD HL,(FNRGNM) ; FN argument name 0FC7 CD 82 07 CALL CPDEHL ; Is it the FN argument? 0FCA 11 25 82 LD DE,FNARG ; Point to argument value 0FCD CA A2 16 JP Z,POPHRT ; Yes - Return FN argument value 0FD0 2A 1D 82 LD HL,(VAREND) ; End of variables 0FD3 EB EX DE,HL ; Address of end of search 0FD4 2A 1B 82 LD HL,(PROGND) ; Start of variables address 0FD7 CD 82 07 FNDVAR: CALL CPDEHL ; End of variable list table? 0FDA CA F0 0F JP Z,CFEVAL ; Yes - Called from EVAL? 0FDD 79 LD A,C ; Get second byte of name 0FDE 96 SUB (HL) ; Compare with name in list 0FDF 23 INC HL ; Move on to first byte 0FE0 C2 E5 0F JP NZ,FNTHR ; Different - Find another 0FE3 78 LD A,B ; Get first byte of name 0FE4 96 SUB (HL) ; Compare with name in list 0FE5 23 FNTHR: INC HL ; Move on to LSB of value 0FE6 CA 24 10 JP Z,RETADR ; Found - Return address 0FE9 23 INC HL ; <- Skip 0FEA 23 INC HL ; <- over 0FEB 23 INC HL ; <- F.P. 0FEC 23 INC HL ; <- value 0FED C3 D7 0F JP FNDVAR ; Keep looking ; 0FF0 E1 CFEVAL: POP HL ; Restore code string address 0FF1 E3 EX (SP),HL ; Get return address 0FF2 D5 PUSH DE ; Save address of variable 0FF3 11 72 0E LD DE,FRMEVL ; Return address in EVAL 0FF6 CD 82 07 CALL CPDEHL ; Called from EVAL ? 0FF9 D1 POP DE ; Restore address of variable 0FFA CA 27 10 JP Z,RETNUL ; Yes - Return null variable 0FFD E3 EX (SP),HL ; Put back return 0FFE E5 PUSH HL ; Save code string address 0FFF C5 PUSH BC ; Save variable name 1000 01 06 00 LD BC,6 ; 2 byte name plus 4 byte data 1003 2A 1F 82 LD HL,(ARREND) ; End of arrays 1006 E5 PUSH HL ; Save end of arrays 1007 09 ADD HL,BC ; Move up 6 bytes 1008 C1 POP BC ; Source address in BC 1009 E5 PUSH HL ; Save new end address 100A CD 86 04 CALL MOVUP ; Move arrays up 100D E1 POP HL ; Restore new end address 100E 22 1F 82 LD (ARREND),HL ; Set new end address 1011 60 LD H,B ; End of variables to HL 1012 69 LD L,C 1013 22 1D 82 LD (VAREND),HL ; Set new end address ; 1016 2B ZEROLP: DEC HL ; Back through to zero variable 1017 36 00 LD (HL),0 ; Zero byte in variable 1019 CD 82 07 CALL CPDEHL ; Done them all? 101C C2 16 10 JP NZ,ZEROLP ; No - Keep on going 101F D1 POP DE ; Get variable name 1020 73 LD (HL),E ; Store second character 1021 23 INC HL 1022 72 LD (HL),D ; Store first character 1023 23 INC HL 1024 EB RETADR: EX DE,HL ; Address of variable in DE 1025 E1 POP HL ; Restore code string address 1026 C9 RET ; 1027 32 2C 82 RETNUL: LD (FPEXP),A ; Set result to zero 102A 21 56 04 LD HL,ZERBYT ; Also set a null string 102D 22 29 82 LD (FPREG),HL ; Save for EVAL 1030 E1 POP HL ; Restore code string address 1031 C9 RET ; 1032 E5 SBSCPT: PUSH HL ; Save code string address 1033 2A F1 81 LD HL,(LCRFLG) ; Locate/Create and Type 1036 E3 EX (SP),HL ; Save and get code string 1037 57 LD D,A ; Zero number of dimensions 1038 D5 SCPTLP: PUSH DE ; Save number of dimensions 1039 C5 PUSH BC ; Save array name 103A CD B8 09 CALL FPSINT ; Get subscript (0-32767) 103D C1 POP BC ; Restore array name 103E F1 POP AF ; Get number of dimensions 103F EB EX DE,HL 1040 E3 EX (SP),HL ; Save subscript value 1041 E5 PUSH HL ; Save LCRFLG and TYPE 1042 EB EX DE,HL 1043 3C INC A ; Count dimensions 1044 57 LD D,A ; Save in D 1045 7E LD A,(HL) ; Get next byte in code string 1046 FE 2C CP ',' ; Comma (more to come)? 1048 CA 38 10 JP Z,SCPTLP ; Yes - More subscripts 104B CD 88 07 CALL CHKSYN ; Make sure ")" follows 104E 29 DB ")" 104F 22 15 82 LD (NXTOPR),HL ; Save code string address 1052 E1 POP HL ; Get LCRFLG and TYPE 1053 22 F1 81 LD (LCRFLG),HL ; Restore Locate/create & type 1056 1E 00 LD E,0 ; Flag not CSAVE* or CLOAD* 1058 D5 PUSH DE ; Save number of dimensions (D) 1059 11 DB 11H ; Skip "PUSH HL" and "PUSH AF' ; 105A E5 ARLDSV: PUSH HL ; Save code string address 105B F5 PUSH AF ; A = 00 , Flags set = Z,N 105C 2A 1D 82 LD HL,(VAREND) ; Start of arrays 105F 3E DB 3EH ; Skip "ADD HL,DE" 1060 19 FNDARY: ADD HL,DE ; Move to next array start 1061 EB EX DE,HL 1062 2A 1F 82 LD HL,(ARREND) ; End of arrays 1065 EB EX DE,HL ; Current array pointer 1066 CD 82 07 CALL CPDEHL ; End of arrays found? 1069 CA 92 10 JP Z,CREARY ; Yes - Create array 106C 7E LD A,(HL) ; Get second byte of name 106D B9 CP C ; Compare with name given 106E 23 INC HL ; Move on 106F C2 74 10 JP NZ,NXTARY ; Different - Find next array 1072 7E LD A,(HL) ; Get first byte of name 1073 B8 CP B ; Compare with name given 1074 23 NXTARY: INC HL ; Move on 1075 5E LD E,(HL) ; Get LSB of next array address 1076 23 INC HL 1077 56 LD D,(HL) ; Get MSB of next array address 1078 23 INC HL 1079 C2 60 10 JP NZ,FNDARY ; Not found - Keep looking 107C 3A F1 81 LD A,(LCRFLG) ; Found Locate or Create it? 107F B7 OR A 1080 C2 C3 04 JP NZ,DDERR ; Create - ?DD Error 1083 F1 POP AF ; Locate - Get number of dim'ns 1084 44 LD B,H ; BC Points to array dim'ns 1085 4D LD C,L 1086 CA A2 16 JP Z,POPHRT ; Jump if array load/save 1089 96 SUB (HL) ; Same number of dimensions? 108A CA F0 10 JP Z,FINDEL ; Yes - Find element 108D 1E 10 BSERR: LD E,BS ; ?BS Error 108F C3 CE 04 JP ERROR ; Output error ; 1092 11 04 00 CREARY: LD DE,4 ; 4 Bytes per entry 1095 F1 POP AF ; Array to save or 0 dim'ns? 1096 CA D9 09 JP Z,FCERR ; Yes - ?FC Error 1099 71 LD (HL),C ; Save second byte of name 109A 23 INC HL 109B 70 LD (HL),B ; Save first byte of name 109C 23 INC HL 109D 4F LD C,A ; Number of dimensions to C 109E CD 97 04 CALL CHKSTK ; Check if enough memory 10A1 23 INC HL ; Point to number of dimensions 10A2 23 INC HL 10A3 22 0A 82 LD (CUROPR),HL ; Save address of pointer 10A6 71 LD (HL),C ; Set number of dimensions 10A7 23 INC HL 10A8 3A F1 81 LD A,(LCRFLG) ; Locate of Create? 10AB 17 RLA ; Carry set = Create 10AC 79 LD A,C ; Get number of dimensions 10AD 01 0B 00 CRARLP: LD BC,10+1 ; Default dimension size 10 10B0 D2 B5 10 JP NC,DEFSIZ ; Locate - Set default size 10B3 C1 POP BC ; Get specified dimension size 10B4 03 INC BC ; Include zero element 10B5 71 DEFSIZ: LD (HL),C ; Save LSB of dimension size 10B6 23 INC HL 10B7 70 LD (HL),B ; Save MSB of dimension size 10B8 23 INC HL 10B9 F5 PUSH AF ; Save num' of dim'ns an status 10BA E5 PUSH HL ; Save address of dim'n size 10BB CD 4D 18 CALL MLDEBC ; Multiply DE by BC to find 10BE EB EX DE,HL ; amount of mem needed (to DE) 10BF E1 POP HL ; Restore address of dimension 10C0 F1 POP AF ; Restore number of dimensions 10C1 3D DEC A ; Count them 10C2 C2 AD 10 JP NZ,CRARLP ; Do next dimension if more 10C5 F5 PUSH AF ; Save locate/create flag 10C6 42 LD B,D ; MSB of memory needed 10C7 4B LD C,E ; LSB of memory needed 10C8 EB EX DE,HL 10C9 19 ADD HL,DE ; Add bytes to array start 10CA DA AF 04 JP C,OMERR ; Too big - Error 10CD CD A0 04 CALL ENFMEM ; See if enough memory 10D0 22 1F 82 LD (ARREND),HL ; Save new end of array ; 10D3 2B ZERARY: DEC HL ; Back through array data 10D4 36 00 LD (HL),0 ; Set array element to zero 10D6 CD 82 07 CALL CPDEHL ; All elements zeroed? 10D9 C2 D3 10 JP NZ,ZERARY ; No - Keep on going 10DC 03 INC BC ; Number of bytes + 1 10DD 57 LD D,A ; A=0 10DE 2A 0A 82 LD HL,(CUROPR) ; Get address of array 10E1 5E LD E,(HL) ; Number of dimensions 10E2 EB EX DE,HL ; To HL 10E3 29 ADD HL,HL ; Two bytes per dimension size 10E4 09 ADD HL,BC ; Add number of bytes 10E5 EB EX DE,HL ; Bytes needed to DE 10E6 2B DEC HL 10E7 2B DEC HL 10E8 73 LD (HL),E ; Save LSB of bytes needed 10E9 23 INC HL 10EA 72 LD (HL),D ; Save MSB of bytes needed 10EB 23 INC HL 10EC F1 POP AF ; Locate / Create? 10ED DA 14 11 JP C,ENDDIM ; A is 0 , End if create 10F0 47 FINDEL: LD B,A ; Find array element 10F1 4F LD C,A 10F2 7E LD A,(HL) ; Number of dimensions 10F3 23 INC HL 10F4 16 DB 16H ; Skip "POP HL" 10F5 E1 FNDELP: POP HL ; Address of next dim' size 10F6 5E LD E,(HL) ; Get LSB of dim'n size 10F7 23 INC HL 10F8 56 LD D,(HL) ; Get MSB of dim'n size 10F9 23 INC HL 10FA E3 EX (SP),HL ; Save address - Get index 10FB F5 PUSH AF ; Save number of dim'ns 10FC CD 82 07 CALL CPDEHL ; Dimension too large? 10FF D2 8D 10 JP NC,BSERR ; Yes - ?BS Error 1102 E5 PUSH HL ; Save index 1103 CD 4D 18 CALL MLDEBC ; Multiply previous by size 1106 D1 POP DE ; Index supplied to DE 1107 19 ADD HL,DE ; Add index to pointer 1108 F1 POP AF ; Number of dimensions 1109 3D DEC A ; Count them 110A 44 LD B,H ; MSB of pointer 110B 4D LD C,L ; LSB of pointer 110C C2 F5 10 JP NZ,FNDELP ; More - Keep going 110F 29 ADD HL,HL ; 4 Bytes per element 1110 29 ADD HL,HL 1111 C1 POP BC ; Start of array 1112 09 ADD HL,BC ; Point to element 1113 EB EX DE,HL ; Address of element to DE 1114 2A 15 82 ENDDIM: LD HL,(NXTOPR) ; Got code string address 1117 C9 RET ; 1118 2A 1F 82 FRE: LD HL,(ARREND) ; Start of free memory 111B EB EX DE,HL ; To DE 111C 21 00 00 LD HL,0 ; End of free memory 111F 39 ADD HL,SP ; Current stack value 1120 3A F2 81 LD A,(TYPE) ; Dummy argument type 1123 B7 OR A 1124 CA 34 11 JP Z,FRENUM ; Numeric - Free variable space 1127 CD 9B 13 CALL GSTRCU ; Current string to pool 112A CD 9B 12 CALL GARBGE ; Garbage collection 112D 2A 9F 81 LD HL,(STRSPC) ; Bottom of string space in use 1130 EB EX DE,HL ; To DE 1131 2A 08 82 LD HL,(STRBOT) ; Bottom of string space 1134 7D FRENUM: LD A,L ; Get LSB of end 1135 93 SUB E ; Subtract LSB of beginning 1136 4F LD C,A ; Save difference if C 1137 7C LD A,H ; Get MSB of end 1138 9A SBC A,D ; Subtract MSB of beginning 1139 41 ACPASS: LD B,C ; Return integer AC 113A 50 ABPASS: LD D,B ; Return integer AB 113B 1E 00 LD E,0 113D 21 F2 81 LD HL,TYPE ; Point to type 1140 73 LD (HL),E ; Set type to numeric 1141 06 90 LD B,80H+16 ; 16 bit integer 1143 C3 78 17 JP RETINT ; Return the integr ; 1146 3A F0 81 POS: LD A,(CURPOS) ; Get cursor position 1149 47 PASSA: LD B,A ; Put A into AB 114A AF XOR A ; Zero A 114B C3 3A 11 JP ABPASS ; Return integer AB ; 114E CD D1 11 DEF: CALL CHEKFN ; Get "FN" and name 1151 CD C3 11 CALL IDTEST ; Test for illegal direct 1154 01 A9 0A LD BC,DATA ; To get next statement 1157 C5 PUSH BC ; Save address for RETurn 1158 D5 PUSH DE ; Save address of function ptr 1159 CD 88 07 CALL CHKSYN ; Make sure "(" follows 115C 28 DB "(" 115D CD 75 0F CALL GETVAR ; Get argument variable name 1160 E5 PUSH HL ; Save code string address 1161 EB EX DE,HL ; Argument address to HL 1162 2B DEC HL 1163 56 LD D,(HL) ; Get first byte of arg name 1164 2B DEC HL 1165 5E LD E,(HL) ; Get second byte of arg name 1166 E1 POP HL ; Restore code string address 1167 CD 82 0D CALL TSTNUM ; Make sure numeric argument 116A CD 88 07 CALL CHKSYN ; Make sure ")" follows 116D 29 DB ")" 116E CD 88 07 CALL CHKSYN ; Make sure "=" follows 1171 B4 DB ZEQUAL ; "=" token 1172 44 LD B,H ; Code string address to BC 1173 4D LD C,L 1174 E3 EX (SP),HL ; Save code str , Get FN ptr 1175 71 LD (HL),C ; Save LSB of FN code string 1176 23 INC HL 1177 70 LD (HL),B ; Save MSB of FN code string 1178 C3 10 12 JP SVSTAD ; Save address and do function ; 117B CD D1 11 DOFN: CALL CHEKFN ; Make sure FN follows 117E D5 PUSH DE ; Save function pointer address 117F CD 56 0E CALL EVLPAR ; Evaluate expression in "()" 1182 CD 82 0D CALL TSTNUM ; Make sure numeric result 1185 E3 EX (SP),HL ; Save code str , Get FN ptr 1186 5E LD E,(HL) ; Get LSB of FN code string 1187 23 INC HL 1188 56 LD D,(HL) ; Get MSB of FN code string 1189 23 INC HL 118A 7A LD A,D ; And function DEFined? 118B B3 OR E 118C CA C6 04 JP Z,UFERR ; No - ?UF Error 118F 7E LD A,(HL) ; Get LSB of argument address 1190 23 INC HL 1191 66 LD H,(HL) ; Get MSB of argument address 1192 6F LD L,A ; HL = Arg variable address 1193 E5 PUSH HL ; Save it 1194 2A 23 82 LD HL,(FNRGNM) ; Get old argument name 1197 E3 EX (SP),HL; ; Save old , Get new 1198 22 23 82 LD (FNRGNM),HL ; Set new argument name 119B 2A 27 82 LD HL,(FNARG+2) ; Get LSB,NLSB of old arg value 119E E5 PUSH HL ; Save it 119F 2A 25 82 LD HL,(FNARG) ; Get MSB,EXP of old arg value 11A2 E5 PUSH HL ; Save it 11A3 21 25 82 LD HL,FNARG ; HL = Value of argument 11A6 D5 PUSH DE ; Save FN code string address 11A7 CD B9 17 CALL FPTHL ; Move FPREG to argument 11AA E1 POP HL ; Get FN code string address 11AB CD 7F 0D CALL GETNUM ; Get value from function 11AE 2B DEC HL ; DEC 'cos GETCHR INCs 11AF CD 12 09 CALL GETCHR ; Get next character 11B2 C2 BA 04 JP NZ,SNERR ; Bad character in FN - Error 11B5 E1 POP HL ; Get MSB,EXP of old arg 11B6 22 25 82 LD (FNARG),HL ; Restore it 11B9 E1 POP HL ; Get LSB,NLSB of old arg 11BA 22 27 82 LD (FNARG+2),HL ; Restore it 11BD E1 POP HL ; Get name of old arg 11BE 22 23 82 LD (FNRGNM),HL ; Restore it 11C1 E1 POP HL ; Restore code string address 11C2 C9 RET ; 11C3 E5 IDTEST: PUSH HL ; Save code string address 11C4 2A A1 81 LD HL,(LINEAT) ; Get current line number 11C7 23 INC HL ; -1 means direct statement 11C8 7C LD A,H 11C9 B5 OR L 11CA E1 POP HL ; Restore code string address 11CB C0 RET NZ ; Return if in program 11CC 1E 16 LD E,ID ; ?ID Error 11CE C3 CE 04 JP ERROR ; 11D1 CD 88 07 CHEKFN: CALL CHKSYN ; Make sure FN follows 11D4 A7 DB ZFN ; "FN" token 11D5 3E 80 LD A,80H 11D7 32 10 82 LD (FORFLG),A ; Flag FN name to find 11DA B6 OR (HL) ; FN name has bit 7 set 11DB 47 LD B,A ; in first byte of name 11DC CD 7A 0F CALL GTFNAM ; Get FN name 11DF C3 82 0D JP TSTNUM ; Make sure numeric function ; 11E2 CD 82 0D STR: CALL TSTNUM ; Make sure it's a number 11E5 CD 06 19 CALL NUMASC ; Turn number into text 11E8 CD 16 12 STR1: CALL CRTST ; Create string entry for it 11EB CD 9B 13 CALL GSTRCU ; Current string to pool 11EE 01 F6 13 LD BC,TOPOOL ; Save in string pool 11F1 C5 PUSH BC ; Save address on stack ; 11F2 7E SAVSTR: LD A,(HL) ; Get string length 11F3 23 INC HL 11F4 23 INC HL 11F5 E5 PUSH HL ; Save pointer to string 11F6 CD 71 12 CALL TESTR ; See if enough string space 11F9 E1 POP HL ; Restore pointer to string 11FA 4E LD C,(HL) ; Get LSB of address 11FB 23 INC HL 11FC 46 LD B,(HL) ; Get MSB of address 11FD CD 0A 12 CALL CRTMST ; Create string entry 1200 E5 PUSH HL ; Save pointer to MSB of addr 1201 6F LD L,A ; Length of string 1202 CD 8E 13 CALL TOSTRA ; Move to string area 1205 D1 POP DE ; Restore pointer to MSB 1206 C9 RET ; 1207 CD 71 12 MKTMST: CALL TESTR ; See if enough string space 120A 21 04 82 CRTMST: LD HL,TMPSTR ; Temporary string 120D E5 PUSH HL ; Save it 120E 77 LD (HL),A ; Save length of string 120F 23 INC HL 1210 23 SVSTAD: INC HL 1211 73 LD (HL),E ; Save LSB of address 1212 23 INC HL 1213 72 LD (HL),D ; Save MSB of address 1214 E1 POP HL ; Restore pointer 1215 C9 RET ; 1216 2B CRTST: DEC HL ; DEC - INCed after 1217 06 22 QTSTR: LD B,'"' ; Terminating quote 1219 50 LD D,B ; Quote to D 121A E5 DTSTR: PUSH HL ; Save start 121B 0E FF LD C,-1 ; Set counter to -1 121D 23 QTSTLP: INC HL ; Move on 121E 7E LD A,(HL) ; Get byte 121F 0C INC C ; Count bytes 1220 B7 OR A ; End of line? 1221 CA 2C 12 JP Z,CRTSTE ; Yes - Create string entry 1224 BA CP D ; Terminator D found? 1225 CA 2C 12 JP Z,CRTSTE ; Yes - Create string entry 1228 B8 CP B ; Terminator B found? 1229 C2 1D 12 JP NZ,QTSTLP ; No - Keep looking 122C FE 22 CRTSTE: CP '"' ; End with '"'? 122E CC 12 09 CALL Z,GETCHR ; Yes - Get next character 1231 E3 EX (SP),HL ; Starting quote 1232 23 INC HL ; First byte of string 1233 EB EX DE,HL ; To DE 1234 79 LD A,C ; Get length 1235 CD 0A 12 CALL CRTMST ; Create string entry 1238 11 04 82 TSTOPL: LD DE,TMPSTR ; Temporary string 123B 2A F6 81 LD HL,(TMSTPT) ; Temporary string pool pointer 123E 22 29 82 LD (FPREG),HL ; Save address of string ptr 1241 3E 01 LD A,1 1243 32 F2 81 LD (TYPE),A ; Set type to string 1246 CD BC 17 CALL DETHL4 ; Move string to pool 1249 CD 82 07 CALL CPDEHL ; Out of string pool? 124C 22 F6 81 LD (TMSTPT),HL ; Save new pointer 124F E1 POP HL ; Restore code string address 1250 7E LD A,(HL) ; Get next code byte 1251 C0 RET NZ ; Return if pool OK 1252 1E 1E LD E,ST ; ?ST Error 1254 C3 CE 04 JP ERROR ; String pool overflow ; 1257 23 PRNUMS: INC HL ; Skip leading space 1258 CD 16 12 PRS: CALL CRTST ; Create string entry for it 125B CD 9B 13 PRS1: CALL GSTRCU ; Current string to pool 125E CD B0 17 CALL LOADFP ; Move string block to BCDE 1261 1C INC E ; Length + 1 1262 1D PRSLP: DEC E ; Count characters 1263 C8 RET Z ; End of string 1264 0A LD A,(BC) ; Get byte to output 1265 CD 93 07 CALL OUTC ; Output character in A 1268 FE 0D CP CR ; Return? 126A CC C4 0B CALL Z,DONULL ; Yes - Do nulls 126D 03 INC BC ; Next byte in string 126E C3 62 12 JP PRSLP ; More characters to output ; 1271 B7 TESTR: OR A ; Test if enough room 1272 0E DB 0EH ; No garbage collection done 1273 F1 GRBDON: POP AF ; Garbage collection done 1274 F5 PUSH AF ; Save status 1275 2A 9F 81 LD HL,(STRSPC) ; Bottom of string space in use 1278 EB EX DE,HL ; To DE 1279 2A 08 82 LD HL,(STRBOT) ; Bottom of string area 127C 2F CPL ; Negate length (Top down) 127D 4F LD C,A ; -Length to BC 127E 06 FF LD B,-1 ; BC = -ve length of string 1280 09 ADD HL,BC ; Add to bottom of space in use 1281 23 INC HL ; Plus one for 2's complement 1282 CD 82 07 CALL CPDEHL ; Below string RAM area? 1285 DA 8F 12 JP C,TESTOS ; Tidy up if not done else err 1288 22 08 82 LD (STRBOT),HL ; Save new bottom of area 128B 23 INC HL ; Point to first byte of string 128C EB EX DE,HL ; Address to DE 128D F1 POPAF: POP AF ; Throw away status push 128E C9 RET ; 128F F1 TESTOS: POP AF ; Garbage collect been done? 1290 1E 1A LD E,OS ; ?OS Error 1292 CA CE 04 JP Z,ERROR ; Yes - Not enough string apace 1295 BF CP A ; Flag garbage collect done 1296 F5 PUSH AF ; Save status 1297 01 73 12 LD BC,GRBDON ; Garbage collection done 129A C5 PUSH BC ; Save for RETurn 129B 2A F4 81 GARBGE: LD HL,(LSTRAM) ; Get end of RAM pointer 129E 22 08 82 GARBLP: LD (STRBOT),HL ; Reset string pointer 12A1 21 00 00 LD HL,0 12A4 E5 PUSH HL ; Flag no string found 12A5 2A 9F 81 LD HL,(STRSPC) ; Get bottom of string space 12A8 E5 PUSH HL ; Save bottom of string space 12A9 21 F8 81 LD HL,TMSTPL ; Temporary string pool 12AC EB GRBLP: EX DE,HL 12AD 2A F6 81 LD HL,(TMSTPT) ; Temporary string pool pointer 12B0 EB EX DE,HL 12B1 CD 82 07 CALL CPDEHL ; Temporary string pool done? 12B4 01 AC 12 LD BC,GRBLP ; Loop until string pool done 12B7 C2 00 13 JP NZ,STPOOL ; No - See if in string area 12BA 2A 1B 82 LD HL,(PROGND) ; Start of simple variables 12BD EB SMPVAR: EX DE,HL 12BE 2A 1D 82 LD HL,(VAREND) ; End of simple variables 12C1 EB EX DE,HL 12C2 CD 82 07 CALL CPDEHL ; All simple strings done? 12C5 CA D3 12 JP Z,ARRLP ; Yes - Do string arrays 12C8 7E LD A,(HL) ; Get type of variable 12C9 23 INC HL 12CA 23 INC HL 12CB B7 OR A ; "S" flag set if string 12CC CD 03 13 CALL STRADD ; See if string in string area 12CF C3 BD 12 JP SMPVAR ; Loop until simple ones done ; 12D2 C1 GNXARY: POP BC ; Scrap address of this array 12D3 EB ARRLP: EX DE,HL 12D4 2A 1F 82 LD HL,(ARREND) ; End of string arrays 12D7 EB EX DE,HL 12D8 CD 82 07 CALL CPDEHL ; All string arrays done? 12DB CA 29 13 JP Z,SCNEND ; Yes - Move string if found 12DE CD B0 17 CALL LOADFP ; Get array name to BCDE 12E1 7B LD A,E ; Get type of array 12E2 E5 PUSH HL ; Save address of num of dim'ns 12E3 09 ADD HL,BC ; Start of next array 12E4 B7 OR A ; Test type of array 12E5 F2 D2 12 JP P,GNXARY ; Numeric array - Ignore it 12E8 22 0A 82 LD (CUROPR),HL ; Save address of next array 12EB E1 POP HL ; Get address of num of dim'ns 12EC 4E LD C,(HL) ; BC = Number of dimensions 12ED 06 00 LD B,0 12EF 09 ADD HL,BC ; Two bytes per dimension size 12F0 09 ADD HL,BC 12F1 23 INC HL ; Plus one for number of dim'ns 12F2 EB GRBARY: EX DE,HL 12F3 2A 0A 82 LD HL,(CUROPR) ; Get address of next array 12F6 EB EX DE,HL 12F7 CD 82 07 CALL CPDEHL ; Is this array finished? 12FA CA D3 12 JP Z,ARRLP ; Yes - Get next one 12FD 01 F2 12 LD BC,GRBARY ; Loop until array all done 1300 C5 STPOOL: PUSH BC ; Save return address 1301 F6 80 OR 80H ; Flag string type 1303 7E STRADD: LD A,(HL) ; Get string length 1304 23 INC HL 1305 23 INC HL 1306 5E LD E,(HL) ; Get LSB of string address 1307 23 INC HL 1308 56 LD D,(HL) ; Get MSB of string address 1309 23 INC HL 130A F0 RET P ; Not a string - Return 130B B7 OR A ; Set flags on string length 130C C8 RET Z ; Null string - Return 130D 44 LD B,H ; Save variable pointer 130E 4D LD C,L 130F 2A 08 82 LD HL,(STRBOT) ; Bottom of new area 1312 CD 82 07 CALL CPDEHL ; String been done? 1315 60 LD H,B ; Restore variable pointer 1316 69 LD L,C 1317 D8 RET C ; String done - Ignore 1318 E1 POP HL ; Return address 1319 E3 EX (SP),HL ; Lowest available string area 131A CD 82 07 CALL CPDEHL ; String within string area? 131D E3 EX (SP),HL ; Lowest available string area 131E E5 PUSH HL ; Re-save return address 131F 60 LD H,B ; Restore variable pointer 1320 69 LD L,C 1321 D0 RET NC ; Outside string area - Ignore 1322 C1 POP BC ; Get return , Throw 2 away 1323 F1 POP AF ; 1324 F1 POP AF ; 1325 E5 PUSH HL ; Save variable pointer 1326 D5 PUSH DE ; Save address of current 1327 C5 PUSH BC ; Put back return address 1328 C9 RET ; Go to it ; 1329 D1 SCNEND: POP DE ; Addresses of strings 132A E1 POP HL ; 132B 7D LD A,L ; HL = 0 if no more to do 132C B4 OR H 132D C8 RET Z ; No more to do - Return 132E 2B DEC HL 132F 46 LD B,(HL) ; MSB of address of string 1330 2B DEC HL 1331 4E LD C,(HL) ; LSB of address of string 1332 E5 PUSH HL ; Save variable address 1333 2B DEC HL 1334 2B DEC HL 1335 6E LD L,(HL) ; HL = Length of string 1336 26 00 LD H,0 1338 09 ADD HL,BC ; Address of end of string+1 1339 50 LD D,B ; String address to DE 133A 59 LD E,C 133B 2B DEC HL ; Last byte in string 133C 44 LD B,H ; Address to BC 133D 4D LD C,L 133E 2A 08 82 LD HL,(STRBOT) ; Current bottom of string area 1341 CD 89 04 CALL MOVSTR ; Move string to new address 1344 E1 POP HL ; Restore variable address 1345 71 LD (HL),C ; Save new LSB of address 1346 23 INC HL 1347 70 LD (HL),B ; Save new MSB of address 1348 69 LD L,C ; Next string area+1 to HL 1349 60 LD H,B 134A 2B DEC HL ; Next string area address 134B C3 9E 12 JP GARBLP ; Look for more strings ; 134E C5 CONCAT: PUSH BC ; Save prec' opr & code string 134F E5 PUSH HL ; 1350 2A 29 82 LD HL,(FPREG) ; Get first string 1353 E3 EX (SP),HL ; Save first string 1354 CD 08 0E CALL OPRND ; Get second string 1357 E3 EX (SP),HL ; Restore first string 1358 CD 83 0D CALL TSTSTR ; Make sure it's a string 135B 7E LD A,(HL) ; Get length of second string 135C E5 PUSH HL ; Save first string 135D 2A 29 82 LD HL,(FPREG) ; Get second string 1360 E5 PUSH HL ; Save second string 1361 86 ADD A,(HL) ; Add length of second string 1362 1E 1C LD E,LS ; ?LS Error 1364 DA CE 04 JP C,ERROR ; String too long - Error 1367 CD 07 12 CALL MKTMST ; Make temporary string 136A D1 POP DE ; Get second string to DE 136B CD 9F 13 CALL GSTRDE ; Move to string pool if needed 136E E3 EX (SP),HL ; Get first string 136F CD 9E 13 CALL GSTRHL ; Move to string pool if needed 1372 E5 PUSH HL ; Save first string 1373 2A 06 82 LD HL,(TMPSTR+2) ; Temporary string address 1376 EB EX DE,HL ; To DE 1377 CD 85 13 CALL SSTSA ; First string to string area 137A CD 85 13 CALL SSTSA ; Second string to string area 137D 21 9D 0D LD HL,EVAL2 ; Return to evaluation loop 1380 E3 EX (SP),HL ; Save return,get code string 1381 E5 PUSH HL ; Save code string address 1382 C3 38 12 JP TSTOPL ; To temporary string to pool ; 1385 E1 SSTSA: POP HL ; Return address 1386 E3 EX (SP),HL ; Get string block,save return 1387 7E LD A,(HL) ; Get length of string 1388 23 INC HL 1389 23 INC HL 138A 4E LD C,(HL) ; Get LSB of string address 138B 23 INC HL 138C 46 LD B,(HL) ; Get MSB of string address 138D 6F LD L,A ; Length to L 138E 2C TOSTRA: INC L ; INC - DECed after 138F 2D TSALP: DEC L ; Count bytes moved 1390 C8 RET Z ; End of string - Return 1391 0A LD A,(BC) ; Get source 1392 12 LD (DE),A ; Save destination 1393 03 INC BC ; Next source 1394 13 INC DE ; Next destination 1395 C3 8F 13 JP TSALP ; Loop until string moved ; 1398 CD 83 0D GETSTR: CALL TSTSTR ; Make sure it's a string 139B 2A 29 82 GSTRCU: LD HL,(FPREG) ; Get current string 139E EB GSTRHL: EX DE,HL ; Save DE 139F CD B9 13 GSTRDE: CALL BAKTMP ; Was it last tmp-str? 13A2 EB EX DE,HL ; Restore DE 13A3 C0 RET NZ ; No - Return 13A4 D5 PUSH DE ; Save string 13A5 50 LD D,B ; String block address to DE 13A6 59 LD E,C 13A7 1B DEC DE ; Point to length 13A8 4E LD C,(HL) ; Get string length 13A9 2A 08 82 LD HL,(STRBOT) ; Current bottom of string area 13AC CD 82 07 CALL CPDEHL ; Last one in string area? 13AF C2 B7 13 JP NZ,POPHL ; No - Return 13B2 47 LD B,A ; Clear B (A=0) 13B3 09 ADD HL,BC ; Remove string from str' area 13B4 22 08 82 LD (STRBOT),HL ; Save new bottom of str' area 13B7 E1 POPHL: POP HL ; Restore string 13B8 C9 RET ; 13B9 2A F6 81 BAKTMP: LD HL,(TMSTPT) ; Get temporary string pool top 13BC 2B DEC HL ; Back 13BD 46 LD B,(HL) ; Get MSB of address 13BE 2B DEC HL ; Back 13BF 4E LD C,(HL) ; Get LSB of address 13C0 2B DEC HL ; Back 13C1 2B DEC HL ; Back 13C2 CD 82 07 CALL CPDEHL ; String last in string pool? 13C5 C0 RET NZ ; Yes - Leave it 13C6 22 F6 81 LD (TMSTPT),HL ; Save new string pool top 13C9 C9 RET ; 13CA 01 49 11 LEN: LD BC,PASSA ; To return integer A 13CD C5 PUSH BC ; Save address 13CE CD 98 13 GETLEN: CALL GETSTR ; Get string and its length 13D1 AF XOR A 13D2 57 LD D,A ; Clear D 13D3 32 F2 81 LD (TYPE),A ; Set type to numeric 13D6 7E LD A,(HL) ; Get length of string 13D7 B7 OR A ; Set status flags 13D8 C9 RET ; 13D9 01 49 11 ASC: LD BC,PASSA ; To return integer A 13DC C5 PUSH BC ; Save address 13DD CD CE 13 GTFLNM: CALL GETLEN ; Get length of string 13E0 CA D9 09 JP Z,FCERR ; Null string - Error 13E3 23 INC HL 13E4 23 INC HL 13E5 5E LD E,(HL) ; Get LSB of address 13E6 23 INC HL 13E7 56 LD D,(HL) ; Get MSB of address 13E8 1A LD A,(DE) ; Get first byte of string 13E9 C9 RET ; 13EA 3E 01 CHR: LD A,1 ; One character string 13EC CD 07 12 CALL MKTMST ; Make a temporary string 13EF CD E3 14 CALL MAKINT ; Make it integer A 13F2 2A 06 82 LD HL,(TMPSTR+2) ; Get address of string 13F5 73 LD (HL),E ; Save character 13F6 C1 TOPOOL: POP BC ; Clean up stack 13F7 C3 38 12 JP TSTOPL ; Temporary string to pool ; 13FA CD 93 14 LEFT: CALL LFRGNM ; Get number and ending ")" 13FD AF XOR A ; Start at first byte in string 13FE E3 RIGHT1: EX (SP),HL ; Save code string,Get string 13FF 4F LD C,A ; Starting position in string 1400 E5 MID1: PUSH HL ; Save string block address 1401 7E LD A,(HL) ; Get length of string 1402 B8 CP B ; Compare with number given 1403 DA 08 14 JP C,ALLFOL ; All following bytes required 1406 78 LD A,B ; Get new length 1407 11 DB 11H ; Skip "LD C,0" 1408 0E 00 ALLFOL: LD C,0 ; First byte of string 140A C5 PUSH BC ; Save position in string 140B CD 71 12 CALL TESTR ; See if enough string space 140E C1 POP BC ; Get position in string 140F E1 POP HL ; Restore string block address 1410 E5 PUSH HL ; And re-save it 1411 23 INC HL 1412 23 INC HL 1413 46 LD B,(HL) ; Get LSB of address 1414 23 INC HL 1415 66 LD H,(HL) ; Get MSB of address 1416 68 LD L,B ; HL = address of string 1417 06 00 LD B,0 ; BC = starting address 1419 09 ADD HL,BC ; Point to that byte 141A 44 LD B,H ; BC = source string 141B 4D LD C,L 141C CD 0A 12 CALL CRTMST ; Create a string entry 141F 6F LD L,A ; Length of new string 1420 CD 8E 13 CALL TOSTRA ; Move string to string area 1423 D1 POP DE ; Clear stack 1424 CD 9F 13 CALL GSTRDE ; Move to string pool if needed 1427 C3 38 12 JP TSTOPL ; Temporary string to pool ; 142A CD 93 14 RIGHT: CALL LFRGNM ; Get number and ending ")" 142D D1 POP DE ; Get string length 142E D5 PUSH DE ; And re-save 142F 1A LD A,(DE) ; Get length 1430 90 SUB B ; Move back N bytes 1431 C3 FE 13 JP RIGHT1 ; Go and get sub-string ; 1434 EB MID: EX DE,HL ; Get code string address 1435 7E LD A,(HL) ; Get next byte ',' or ")" 1436 CD 98 14 CALL MIDNUM ; Get number supplied 1439 04 INC B ; Is it character zero? 143A 05 DEC B 143B CA D9 09 JP Z,FCERR ; Yes - Error 143E C5 PUSH BC ; Save starting position 143F 1E FF LD E,255 ; All of string 1441 FE 29 CP ')' ; Any length given? 1443 CA 4D 14 JP Z,RSTSTR ; No - Rest of string 1446 CD 88 07 CALL CHKSYN ; Make sure ',' follows 1449 2C DB ',' 144A CD E0 14 CALL GETINT ; Get integer 0-255 144D CD 88 07 RSTSTR: CALL CHKSYN ; Make sure ")" follows 1450 29 DB ")" 1451 F1 POP AF ; Restore starting position 1452 E3 EX (SP),HL ; Get string,8ave code string 1453 01 00 14 LD BC,MID1 ; Continuation of MID$ routine 1456 C5 PUSH BC ; Save for return 1457 3D DEC A ; Starting position-1 1458 BE CP (HL) ; Compare with length 1459 06 00 LD B,0 ; Zero bytes length 145B D0 RET NC ; Null string if start past end 145C 4F LD C,A ; Save starting position-1 145D 7E LD A,(HL) ; Get length of string 145E 91 SUB C ; Subtract start 145F BB CP E ; Enough string for it? 1460 47 LD B,A ; Save maximum length available 1461 D8 RET C ; Truncate string if needed 1462 43 LD B,E ; Set specified length 1463 C9 RET ; Go and create string ; 1464 CD CE 13 VAL: CALL GETLEN ; Get length of string 1467 CA 81 15 JP Z,RESZER ; Result zero 146A 5F LD E,A ; Save length 146B 23 INC HL 146C 23 INC HL 146D 7E LD A,(HL) ; Get LSB of address 146E 23 INC HL 146F 66 LD H,(HL) ; Get MSB of address 1470 6F LD L,A ; HL = String address 1471 E5 PUSH HL ; Save string address 1472 19 ADD HL,DE 1473 46 LD B,(HL) ; Get end of string+1 byte 1474 72 LD (HL),D ; Zero it to terminate 1475 E3 EX (SP),HL ; Save string end,get start 1476 C5 PUSH BC ; Save end+1 byte 1477 7E LD A,(HL) ; Get starting byte 1478 FE 24 CP '$' ; Hex number indicated? [function added] 147A C2 82 14 JP NZ,VAL1 147D CD AC 1C CALL HEXTFP ; Convert Hex to FPREG 1480 18 0D JR VAL3 1482 FE 25 VAL1: CP '%' ; Binary number indicated? [function added] 1484 C2 8C 14 JP NZ,VAL2 1487 CD 1C 1D CALL BINTFP ; Convert Bin to FPREG 148A 18 03 JR VAL3 148C CD 68 18 VAL2: CALL ASCTFP ; Convert ASCII string to FP 148F C1 VAL3: POP BC ; Restore end+1 byte 1490 E1 POP HL ; Restore end+1 address 1491 70 LD (HL),B ; Put back original byte 1492 C9 RET ; 1493 EB LFRGNM: EX DE,HL ; Code string address to HL 1494 CD 88 07 CALL CHKSYN ; Make sure ")" follows 1497 29 DB ")" 1498 C1 MIDNUM: POP BC ; Get return address 1499 D1 POP DE ; Get number supplied 149A C5 PUSH BC ; Re-save return address 149B 43 LD B,E ; Number to B 149C C9 RET ; 149D CD E3 14 INP: CALL MAKINT ; Make it integer A 14A0 32 84 81 LD (INPORT),A ; Set input port 14A3 CD 83 81 CALL INPSUB ; Get input from port 14A6 C3 49 11 JP PASSA ; Return integer A ; 14A9 CD CD 14 POUT: CALL SETIO ; Set up port number 14AC C3 4B 81 JP OUTSUB ; Output data and return ; 14AF CD CD 14 WAIT: CALL SETIO ; Set up port number 14B2 F5 PUSH AF ; Save AND mask 14B3 1E 00 LD E,0 ; Assume zero if none given 14B5 2B DEC HL ; DEC 'cos GETCHR INCs 14B6 CD 12 09 CALL GETCHR ; Get next character 14B9 CA C3 14 JP Z,NOXOR ; No XOR byte given 14BC CD 88 07 CALL CHKSYN ; Make sure ',' follows 14BF 2C DB ',' 14C0 CD E0 14 CALL GETINT ; Get integer 0-255 to XOR with 14C3 C1 NOXOR: POP BC ; Restore AND mask 14C4 CD 83 81 WAITLP: CALL INPSUB ; Get input 14C7 AB XOR E ; Flip selected bits 14C8 A0 AND B ; Result non-zero? 14C9 CA C4 14 JP Z,WAITLP ; No = keep waiting 14CC C9 RET ; 14CD CD E0 14 SETIO: CALL GETINT ; Get integer 0-255 14D0 32 84 81 LD (INPORT),A ; Set input port 14D3 32 4C 81 LD (OTPORT),A ; Set output port 14D6 CD 88 07 CALL CHKSYN ; Make sure ',' follows 14D9 2C DB ',' 14DA C3 E0 14 JP GETINT ; Get integer 0-255 and return ; 14DD CD 12 09 FNDNUM: CALL GETCHR ; Get next character 14E0 CD 7F 0D GETINT: CALL GETNUM ; Get a number from 0 to 255 14E3 CD BE 09 MAKINT: CALL DEPINT ; Make sure value 0 - 255 14E6 7A LD A,D ; Get MSB of number 14E7 B7 OR A ; Zero? 14E8 C2 D9 09 JP NZ,FCERR ; No - Error 14EB 2B DEC HL ; DEC 'cos GETCHR INCs 14EC CD 12 09 CALL GETCHR ; Get next character 14EF 7B LD A,E ; Get number to A 14F0 C9 RET ; 14F1 CD C4 09 PEEK: CALL DEINT ; Get memory address 14F4 1A LD A,(DE) ; Get byte in memory 14F5 C3 49 11 JP PASSA ; Return integer A ; 14F8 CD 7F 0D POKE: CALL GETNUM ; Get memory address 14FB CD C4 09 CALL DEINT ; Get integer -32768 to 3276 14FE D5 PUSH DE ; Save memory address 14FF CD 88 07 CALL CHKSYN ; Make sure ',' follows 1502 2C DB ',' 1503 CD E0 14 CALL GETINT ; Get integer 0-255 1506 D1 POP DE ; Restore memory address 1507 12 LD (DE),A ; Load it into memory 1508 C9 RET ; 1509 21 DF 19 ROUND: LD HL,HALF ; Add 0.5 to FPREG 150C CD B0 17 ADDPHL: CALL LOADFP ; Load FP at (HL) to BCDE 150F C3 1B 15 JP FPADD ; Add BCDE to FPREG ; 1512 CD B0 17 SUBPHL: CALL LOADFP ; FPREG = -FPREG + number at HL 1515 21 DB 21H ; Skip "POP BC" and "POP DE" 1516 C1 PSUB: POP BC ; Get FP number from stack 1517 D1 POP DE 1518 CD 8A 17 SUBCDE: CALL INVSGN ; Negate FPREG 151B 78 FPADD: LD A,B ; Get FP exponent 151C B7 OR A ; Is number zero? 151D C8 RET Z ; Yes - Nothing to add 151E 3A 2C 82 LD A,(FPEXP) ; Get FPREG exponent 1521 B7 OR A ; Is this number zero? 1522 CA A2 17 JP Z,FPBCDE ; Yes - Move BCDE to FPREG 1525 90 SUB B ; BCDE number larger? 1526 D2 35 15 JP NC,NOSWAP ; No - Don't swap them 1529 2F CPL ; Two's complement 152A 3C INC A ; FP exponent 152B EB EX DE,HL 152C CD 92 17 CALL STAKFP ; Put FPREG on stack 152F EB EX DE,HL 1530 CD A2 17 CALL FPBCDE ; Move BCDE to FPREG 1533 C1 POP BC ; Restore number from stack 1534 D1 POP DE 1535 FE 19 NOSWAP: CP 24+1 ; Second number insignificant? 1537 D0 RET NC ; Yes - First number is result 1538 F5 PUSH AF ; Save number of bits to scale 1539 CD C7 17 CALL SIGNS ; Set MSBs & sign of result 153C 67 LD H,A ; Save sign of result 153D F1 POP AF ; Restore scaling factor 153E CD E0 15 CALL SCALE ; Scale BCDE to same exponent 1541 B4 OR H ; Result to be positive? 1542 21 29 82 LD HL,FPREG ; Point to FPREG 1545 F2 5B 15 JP P,MINCDE ; No - Subtract FPREG from CDE 1548 CD C0 15 CALL PLUCDE ; Add FPREG to CDE 154B D2 A1 15 JP NC,RONDUP ; No overflow - Round it up 154E 23 INC HL ; Point to exponent 154F 34 INC (HL) ; Increment it 1550 CA C9 04 JP Z,OVERR ; Number overflowed - Error 1553 2E 01 LD L,1 ; 1 bit to shift right 1555 CD F6 15 CALL SHRT1 ; Shift result right 1558 C3 A1 15 JP RONDUP ; Round it up ; 155B AF MINCDE: XOR A ; Clear A and carry 155C 90 SUB B ; Negate exponent 155D 47 LD B,A ; Re-save exponent 155E 7E LD A,(HL) ; Get LSB of FPREG 155F 9B SBC A, E ; Subtract LSB of BCDE 1560 5F LD E,A ; Save LSB of BCDE 1561 23 INC HL 1562 7E LD A,(HL) ; Get NMSB of FPREG 1563 9A SBC A,D ; Subtract NMSB of BCDE 1564 57 LD D,A ; Save NMSB of BCDE 1565 23 INC HL 1566 7E LD A,(HL) ; Get MSB of FPREG 1567 99 SBC A,C ; Subtract MSB of BCDE 1568 4F LD C,A ; Save MSB of BCDE 1569 DC CC 15 CONPOS: CALL C,COMPL ; Overflow - Make it positive ; 156C 68 BNORM: LD L,B ; L = Exponent 156D 63 LD H,E ; H = LSB 156E AF XOR A 156F 47 BNRMLP: LD B,A ; Save bit count 1570 79 LD A,C ; Get MSB 1571 B7 OR A ; Is it zero? 1572 C2 8E 15 JP NZ,PNORM ; No - Do it bit at a time 1575 4A LD C,D ; MSB = NMSB 1576 54 LD D,H ; NMSB= LSB 1577 65 LD H,L ; LSB = VLSB 1578 6F LD L,A ; VLSB= 0 1579 78 LD A,B ; Get exponent 157A D6 08 SUB 8 ; Count 8 bits 157C FE E0 CP 0E0H ; -24-8 Was number zero? 157E C2 6F 15 JP NZ,BNRMLP ; No - Keep normalising 1581 AF RESZER: XOR A ; Result is zero 1582 32 2C 82 SAVEXP: LD (FPEXP),A ; Save result as zero 1585 C9 RET ; 1586 05 NORMAL: DEC B ; Count bits 1587 29 ADD HL,HL ; Shift HL left 1588 7A LD A,D ; Get NMSB 1589 17 RLA ; Shift left with last bit 158A 57 LD D,A ; Save NMSB 158B 79 LD A,C ; Get MSB 158C 8F ADC A,A ; Shift left with last bit 158D 4F LD C,A ; Save MSB 158E F2 86 15 PNORM: JP P,NORMAL ; Not done - Keep going 1591 78 LD A,B ; Number of bits shifted 1592 5C LD E,H ; Save HL in EB 1593 45 LD B,L 1594 B7 OR A ; Any shifting done? 1595 CA A1 15 JP Z,RONDUP ; No - Round it up 1598 21 2C 82 LD HL,FPEXP ; Point to exponent 159B 86 ADD A,(HL) ; Add shifted bits 159C 77 LD (HL),A ; Re-save exponent 159D D2 81 15 JP NC,RESZER ; Underflow - Result is zero 15A0 C8 RET Z ; Result is zero 15A1 78 RONDUP: LD A,B ; Get VLSB of number 15A2 21 2C 82 RONDB: LD HL,FPEXP ; Point to exponent 15A5 B7 OR A ; Any rounding? 15A6 FC B3 15 CALL M,FPROND ; Yes - Round number up 15A9 46 LD B,(HL) ; B = Exponent 15AA 23 INC HL 15AB 7E LD A,(HL) ; Get sign of result 15AC E6 80 AND 10000000B ; Only bit 7 needed 15AE A9 XOR C ; Set correct sign 15AF 4F LD C,A ; Save correct sign in number 15B0 C3 A2 17 JP FPBCDE ; Move BCDE to FPREG ; 15B3 1C FPROND: INC E ; Round LSB 15B4 C0 RET NZ ; Return if ok 15B5 14 INC D ; Round NMSB 15B6 C0 RET NZ ; Return if ok 15B7 0C INC C ; Round MSB 15B8 C0 RET NZ ; Return if ok 15B9 0E 80 LD C,80H ; Set normal value 15BB 34 INC (HL) ; Increment exponent 15BC C0 RET NZ ; Return if ok 15BD C3 C9 04 JP OVERR ; Overflow error ; 15C0 7E PLUCDE: LD A,(HL) ; Get LSB of FPREG 15C1 83 ADD A,E ; Add LSB of BCDE 15C2 5F LD E,A ; Save LSB of BCDE 15C3 23 INC HL 15C4 7E LD A,(HL) ; Get NMSB of FPREG 15C5 8A ADC A,D ; Add NMSB of BCDE 15C6 57 LD D,A ; Save NMSB of BCDE 15C7 23 INC HL 15C8 7E LD A,(HL) ; Get MSB of FPREG 15C9 89 ADC A,C ; Add MSB of BCDE 15CA 4F LD C,A ; Save MSB of BCDE 15CB C9 RET ; 15CC 21 2D 82 COMPL: LD HL,SGNRES ; Sign of result 15CF 7E LD A,(HL) ; Get sign of result 15D0 2F CPL ; Negate it 15D1 77 LD (HL),A ; Put it back 15D2 AF XOR A 15D3 6F LD L,A ; Set L to zero 15D4 90 SUB B ; Negate exponent,set carry 15D5 47 LD B,A ; Re-save exponent 15D6 7D LD A,L ; Load zero 15D7 9B SBC A,E ; Negate LSB 15D8 5F LD E,A ; Re-save LSB 15D9 7D LD A,L ; Load zero 15DA 9A SBC A,D ; Negate NMSB 15DB 57 LD D,A ; Re-save NMSB 15DC 7D LD A,L ; Load zero 15DD 99 SBC A,C ; Negate MSB 15DE 4F LD C,A ; Re-save MSB 15DF C9 RET ; 15E0 06 00 SCALE: LD B,0 ; Clear underflow 15E2 D6 08 SCALLP: SUB 8 ; 8 bits (a whole byte)? 15E4 DA EF 15 JP C,SHRITE ; No - Shift right A bits 15E7 43 LD B,E ; <- Shift 15E8 5A LD E,D ; <- right 15E9 51 LD D,C ; <- eight 15EA 0E 00 LD C,0 ; <- bits 15EC C3 E2 15 JP SCALLP ; More bits to shift ; 15EF C6 09 SHRITE: ADD A,8+1 ; Adjust count 15F1 6F LD L,A ; Save bits to shift 15F2 AF SHRLP: XOR A ; Flag for all done 15F3 2D DEC L ; All shifting done? 15F4 C8 RET Z ; Yes - Return 15F5 79 LD A,C ; Get MSB 15F6 1F SHRT1: RRA ; Shift it right 15F7 4F LD C,A ; Re-save 15F8 7A LD A,D ; Get NMSB 15F9 1F RRA ; Shift right with last bit 15FA 57 LD D,A ; Re-save it 15FB 7B LD A,E ; Get LSB 15FC 1F RRA ; Shift right with last bit 15FD 5F LD E,A ; Re-save it 15FE 78 LD A,B ; Get underflow 15FF 1F RRA ; Shift right with last bit 1600 47 LD B,A ; Re-save underflow 1601 C3 F2 15 JP SHRLP ; More bits to do ; 1604 00 00 00 81 UNITY: DB 000H,000H,000H,081H ; 1.00000 ; 1608 03 LOGTAB: DB 3 ; Table used by LOG 1609 AA 56 19 80 DB 0AAH,056H,019H,080H ; 0.59898 160D F1 22 76 80 DB 0F1H,022H,076H,080H ; 0.96147 1611 45 AA 38 82 DB 045H,0AAH,038H,082H ; 2.88539 ; 1615 CD 61 17 LOG: CALL TSTSGN ; Test sign of value 1618 B7 OR A 1619 EA D9 09 JP PE,FCERR ; ?FC Error if <= zero 161C 21 2C 82 LD HL,FPEXP ; Point to exponent 161F 7E LD A,(HL) ; Get exponent 1620 01 35 80 LD BC,8035H ; BCDE = SQR(1/2) 1623 11 F3 04 LD DE,04F3H 1626 90 SUB B ; Scale value to be < 1 1627 F5 PUSH AF ; Save scale factor 1628 70 LD (HL),B ; Save new exponent 1629 D5 PUSH DE ; Save SQR(1/2) 162A C5 PUSH BC 162B CD 1B 15 CALL FPADD ; Add SQR(1/2) to value 162E C1 POP BC ; Restore SQR(1/2) 162F D1 POP DE 1630 04 INC B ; Make it SQR(2) 1631 CD B7 16 CALL DVBCDE ; Divide by SQR(2) 1634 21 04 16 LD HL,UNITY ; Point to 1. 1637 CD 12 15 CALL SUBPHL ; Subtract FPREG from 1 163A 21 08 16 LD HL,LOGTAB ; Coefficient table 163D CD A9 1A CALL SUMSER ; Evaluate sum of series 1640 01 80 80 LD BC,8080H ; BCDE = -0.5 1643 11 00 00 LD DE,0000H 1646 CD 1B 15 CALL FPADD ; Subtract 0.5 from FPREG 1649 F1 POP AF ; Restore scale factor 164A CD DC 18 CALL RSCALE ; Re-scale number 164D 01 31 80 MULLN2: LD BC,8031H ; BCDE = Ln(2) 1650 11 18 72 LD DE,7218H 1653 21 DB 21H ; Skip "POP BC" and "POP DE" ; 1654 C1 MULT: POP BC ; Get number from stack 1655 D1 POP DE 1656 CD 61 17 FPMULT: CALL TSTSGN ; Test sign of FPREG 1659 C8 RET Z ; Return zero if zero 165A 2E 00 LD L,0 ; Flag add exponents 165C CD 1F 17 CALL ADDEXP ; Add exponents 165F 79 LD A,C ; Get MSB of multiplier 1660 32 3B 82 LD (MULVAL),A ; Save MSB of multiplier 1663 EB EX DE,HL 1664 22 3C 82 LD (MULVAL+1),HL ; Save rest of multiplier 1667 01 00 00 LD BC,0 ; Partial product (BCDE) = zero 166A 50 LD D,B 166B 58 LD E,B 166C 21 6C 15 LD HL,BNORM ; Address of normalise 166F E5 PUSH HL ; Save for return 1670 21 78 16 LD HL,MULT8 ; Address of 8 bit multiply 1673 E5 PUSH HL ; Save for NMSB,MSB 1674 E5 PUSH HL ; 1675 21 29 82 LD HL,FPREG ; Point to number 1678 7E MULT8: LD A,(HL) ; Get LSB of number 1679 23 INC HL ; Point to NMSB 167A B7 OR A ; Test LSB 167B CA A4 16 JP Z,BYTSFT ; Zero - shift to next byte 167E E5 PUSH HL ; Save address of number 167F 2E 08 LD L,8 ; 8 bits to multiply by 1681 1F MUL8LP: RRA ; Shift LSB right 1682 67 LD H,A ; Save LSB 1683 79 LD A,C ; Get MSB 1684 D2 92 16 JP NC,NOMADD ; Bit was zero - Don't add 1687 E5 PUSH HL ; Save LSB and count 1688 2A 3C 82 LD HL,(MULVAL+1) ; Get LSB and NMSB 168B 19 ADD HL,DE ; Add NMSB and LSB 168C EB EX DE,HL ; Leave sum in DE 168D E1 POP HL ; Restore MSB and count 168E 3A 3B 82 LD A,(MULVAL) ; Get MSB of multiplier 1691 89 ADC A,C ; Add MSB 1692 1F NOMADD: RRA ; Shift MSB right 1693 4F LD C,A ; Re-save MSB 1694 7A LD A,D ; Get NMSB 1695 1F RRA ; Shift NMSB right 1696 57 LD D,A ; Re-save NMSB 1697 7B LD A,E ; Get LSB 1698 1F RRA ; Shift LSB right 1699 5F LD E,A ; Re-save LSB 169A 78 LD A,B ; Get VLSB 169B 1F RRA ; Shift VLSB right 169C 47 LD B,A ; Re-save VLSB 169D 2D DEC L ; Count bits multiplied 169E 7C LD A,H ; Get LSB of multiplier 169F C2 81 16 JP NZ,MUL8LP ; More - Do it 16A2 E1 POPHRT: POP HL ; Restore address of number 16A3 C9 RET ; 16A4 43 BYTSFT: LD B,E ; Shift partial product left 16A5 5A LD E,D 16A6 51 LD D,C 16A7 4F LD C,A 16A8 C9 RET ; 16A9 CD 92 17 DIV10: CALL STAKFP ; Save FPREG on stack 16AC 01 20 84 LD BC,8420H ; BCDE = 10. 16AF 11 00 00 LD DE,0000H 16B2 CD A2 17 CALL FPBCDE ; Move 10 to FPREG ; 16B5 C1 DIV: POP BC ; Get number from stack 16B6 D1 POP DE 16B7 CD 61 17 DVBCDE: CALL TSTSGN ; Test sign of FPREG 16BA CA BD 04 JP Z,DZERR ; Error if division by zero 16BD 2E FF LD L,-1 ; Flag subtract exponents 16BF CD 1F 17 CALL ADDEXP ; Subtract exponents 16C2 34 INC (HL) ; Add 2 to exponent to adjust 16C3 34 INC (HL) 16C4 2B DEC HL ; Point to MSB 16C5 7E LD A,(HL) ; Get MSB of dividend 16C6 32 57 81 LD (DIV3),A ; Save for subtraction 16C9 2B DEC HL 16CA 7E LD A,(HL) ; Get NMSB of dividend 16CB 32 53 81 LD (DIV2),A ; Save for subtraction 16CE 2B DEC HL 16CF 7E LD A,(HL) ; Get MSB of dividend 16D0 32 4F 81 LD (DIV1),A ; Save for subtraction 16D3 41 LD B,C ; Get MSB 16D4 EB EX DE,HL ; NMSB,LSB to HL 16D5 AF XOR A 16D6 4F LD C,A ; Clear MSB of quotient 16D7 57 LD D,A ; Clear NMSB of quotient 16D8 5F LD E,A ; Clear LSB of quotient 16D9 32 5A 81 LD (DIV4),A ; Clear overflow count 16DC E5 DIVLP: PUSH HL ; Save divisor 16DD C5 PUSH BC 16DE 7D LD A,L ; Get LSB of number 16DF CD 4E 81 CALL DIVSUP ; Subt' divisor from dividend 16E2 DE 00 SBC A,0 ; Count for overflows 16E4 3F CCF 16E5 D2 EF 16 JP NC,RESDIV ; Restore divisor if borrow 16E8 32 5A 81 LD (DIV4),A ; Re-save overflow count 16EB F1 POP AF ; Scrap divisor 16EC F1 POP AF 16ED 37 SCF ; Set carry to 16EE D2 DB 0D2H ; Skip "POP BC" and "POP HL" ; 16EF C1 RESDIV: POP BC ; Restore divisor 16F0 E1 POP HL 16F1 79 LD A,C ; Get MSB of quotient 16F2 3C INC A 16F3 3D DEC A 16F4 1F RRA ; Bit 0 to bit 7 16F5 FA A2 15 JP M,RONDB ; Done - Normalise result 16F8 17 RLA ; Restore carry 16F9 7B LD A,E ; Get LSB of quotient 16FA 17 RLA ; Double it 16FB 5F LD E,A ; Put it back 16FC 7A LD A,D ; Get NMSB of quotient 16FD 17 RLA ; Double it 16FE 57 LD D,A ; Put it back 16FF 79 LD A,C ; Get MSB of quotient 1700 17 RLA ; Double it 1701 4F LD C,A ; Put it back 1702 29 ADD HL,HL ; Double NMSB,LSB of divisor 1703 78 LD A,B ; Get MSB of divisor 1704 17 RLA ; Double it 1705 47 LD B,A ; Put it back 1706 3A 5A 81 LD A,(DIV4) ; Get VLSB of quotient 1709 17 RLA ; Double it 170A 32 5A 81 LD (DIV4),A ; Put it back 170D 79 LD A,C ; Get MSB of quotient 170E B2 OR D ; Merge NMSB 170F B3 OR E ; Merge LSB 1710 C2 DC 16 JP NZ,DIVLP ; Not done - Keep dividing 1713 E5 PUSH HL ; Save divisor 1714 21 2C 82 LD HL,FPEXP ; Point to exponent 1717 35 DEC (HL) ; Divide by 2 1718 E1 POP HL ; Restore divisor 1719 C2 DC 16 JP NZ,DIVLP ; Ok - Keep going 171C C3 C9 04 JP OVERR ; Overflow error ; 171F 78 ADDEXP: LD A,B ; Get exponent of dividend 1720 B7 OR A ; Test it 1721 CA 43 17 JP Z,OVTST3 ; Zero - Result zero 1724 7D LD A,L ; Get add/subtract flag 1725 21 2C 82 LD HL,FPEXP ; Point to exponent 1728 AE XOR (HL) ; Add or subtract it 1729 80 ADD A,B ; Add the other exponent 172A 47 LD B,A ; Save new exponent 172B 1F RRA ; Test exponent for overflow 172C A8 XOR B 172D 78 LD A,B ; Get exponent 172E F2 42 17 JP P,OVTST2 ; Positive - Test for overflow 1731 C6 80 ADD A,80H ; Add excess 128 1733 77 LD (HL),A ; Save new exponent 1734 CA A2 16 JP Z,POPHRT ; Zero - Result zero 1737 CD C7 17 CALL SIGNS ; Set MSBs and sign of result 173A 77 LD (HL),A ; Save new exponent 173B 2B DEC HL ; Point to MSB 173C C9 RET ; 173D CD 61 17 OVTST1: CALL TSTSGN ; Test sign of FPREG 1740 2F CPL ; Invert sign 1741 E1 POP HL ; Clean up stack 1742 B7 OVTST2: OR A ; Test if new exponent zero 1743 E1 OVTST3: POP HL ; Clear off return address 1744 F2 81 15 JP P,RESZER ; Result zero 1747 C3 C9 04 JP OVERR ; Overflow error ; 174A CD AD 17 MLSP10: CALL BCDEFP ; Move FPREG to BCDE 174D 78 LD A,B ; Get exponent 174E B7 OR A ; Is it zero? 174F C8 RET Z ; Yes - Result is zero 1750 C6 02 ADD A,2 ; Multiply by 4 1752 DA C9 04 JP C,OVERR ; Overflow - ?OV Error 1755 47 LD B,A ; Re-save exponent 1756 CD 1B 15 CALL FPADD ; Add BCDE to FPREG (Times 5) 1759 21 2C 82 LD HL,FPEXP ; Point to exponent 175C 34 INC (HL) ; Double number (Times 10) 175D C0 RET NZ ; Ok - Return 175E C3 C9 04 JP OVERR ; Overflow error ; 1761 3A 2C 82 TSTSGN: LD A,(FPEXP) ; Get sign of FPREG 1764 B7 OR A 1765 C8 RET Z ; RETurn if number is zero 1766 3A 2B 82 LD A,(FPREG+2) ; Get MSB of FPREG 1769 FE DB 0FEH ; Test sign 176A 2F RETREL: CPL ; Invert sign 176B 17 RLA ; Sign bit to carry 176C 9F FLGDIF: SBC A,A ; Carry to all bits of A 176D C0 RET NZ ; Return -1 if negative 176E 3C INC A ; Bump to +1 176F C9 RET ; Positive - Return +1 ; 1770 CD 61 17 SGN: CALL TSTSGN ; Test sign of FPREG 1773 06 88 FLGREL: LD B,80H+8 ; 8 bit integer in exponent 1775 11 00 00 LD DE,0 ; Zero NMSB and LSB 1778 21 2C 82 RETINT: LD HL,FPEXP ; Point to exponent 177B 4F LD C,A ; CDE = MSB,NMSB and LSB 177C 70 LD (HL),B ; Save exponent 177D 06 00 LD B,0 ; CDE = integer to normalise 177F 23 INC HL ; Point to sign of result 1780 36 80 LD (HL),80H ; Set sign of result 1782 17 RLA ; Carry = sign of integer 1783 C3 69 15 JP CONPOS ; Set sign of result ; 1786 CD 61 17 ABS: CALL TSTSGN ; Test sign of FPREG 1789 F0 RET P ; Return if positive 178A 21 2B 82 INVSGN: LD HL,FPREG+2 ; Point to MSB 178D 7E LD A,(HL) ; Get sign of mantissa 178E EE 80 XOR 80H ; Invert sign of mantissa 1790 77 LD (HL),A ; Re-save sign of mantissa 1791 C9 RET ; 1792 EB STAKFP: EX DE,HL ; Save code string address 1793 2A 29 82 LD HL,(FPREG) ; LSB,NLSB of FPREG 1796 E3 EX (SP),HL ; Stack them,get return 1797 E5 PUSH HL ; Re-save return 1798 2A 2B 82 LD HL,(FPREG+2) ; MSB and exponent of FPREG 179B E3 EX (SP),HL ; Stack them,get return 179C E5 PUSH HL ; Re-save return 179D EB EX DE,HL ; Restore code string address 179E C9 RET ; 179F CD B0 17 PHLTFP: CALL LOADFP ; Number at HL to BCDE 17A2 EB FPBCDE: EX DE,HL ; Save code string address 17A3 22 29 82 LD (FPREG),HL ; Save LSB,NLSB of number 17A6 60 LD H,B ; Exponent of number 17A7 69 LD L,C ; MSB of number 17A8 22 2B 82 LD (FPREG+2),HL ; Save MSB and exponent 17AB EB EX DE,HL ; Restore code string address 17AC C9 RET ; 17AD 21 29 82 BCDEFP: LD HL,FPREG ; Point to FPREG 17B0 5E LOADFP: LD E,(HL) ; Get LSB of number 17B1 23 INC HL 17B2 56 LD D,(HL) ; Get NMSB of number 17B3 23 INC HL 17B4 4E LD C,(HL) ; Get MSB of number 17B5 23 INC HL 17B6 46 LD B,(HL) ; Get exponent of number 17B7 23 INCHL: INC HL ; Used for conditional "INC HL" 17B8 C9 RET ; 17B9 11 29 82 FPTHL: LD DE,FPREG ; Point to FPREG 17BC 06 04 DETHL4: LD B,4 ; 4 bytes to move 17BE 1A DETHLB: LD A,(DE) ; Get source 17BF 77 LD (HL),A ; Save destination 17C0 13 INC DE ; Next source 17C1 23 INC HL ; Next destination 17C2 05 DEC B ; Count bytes 17C3 C2 BE 17 JP NZ,DETHLB ; Loop if more 17C6 C9 RET ; 17C7 21 2B 82 SIGNS: LD HL,FPREG+2 ; Point to MSB of FPREG 17CA 7E LD A,(HL) ; Get MSB 17CB 07 RLCA ; Old sign to carry 17CC 37 SCF ; Set MSBit 17CD 1F RRA ; Set MSBit of MSB 17CE 77 LD (HL),A ; Save new MSB 17CF 3F CCF ; Complement sign 17D0 1F RRA ; Old sign to carry 17D1 23 INC HL 17D2 23 INC HL 17D3 77 LD (HL),A ; Set sign of result 17D4 79 LD A,C ; Get MSB 17D5 07 RLCA ; Old sign to carry 17D6 37 SCF ; Set MSBit 17D7 1F RRA ; Set MSBit of MSB 17D8 4F LD C,A ; Save MSB 17D9 1F RRA 17DA AE XOR (HL) ; New sign of result 17DB C9 RET ; 17DC 78 CMPNUM: LD A,B ; Get exponent of number 17DD B7 OR A 17DE CA 61 17 JP Z,TSTSGN ; Zero - Test sign of FPREG 17E1 21 6A 17 LD HL,RETREL ; Return relation routine 17E4 E5 PUSH HL ; Save for return 17E5 CD 61 17 CALL TSTSGN ; Test sign of FPREG 17E8 79 LD A,C ; Get MSB of number 17E9 C8 RET Z ; FPREG zero - Number's MSB 17EA 21 2B 82 LD HL,FPREG+2 ; MSB of FPREG 17ED AE XOR (HL) ; Combine signs 17EE 79 LD A,C ; Get MSB of number 17EF F8 RET M ; Exit if signs different 17F0 CD F6 17 CALL CMPFP ; Compare FP numbers 17F3 1F RRA ; Get carry to sign 17F4 A9 XOR C ; Combine with MSB of number 17F5 C9 RET ; 17F6 23 CMPFP: INC HL ; Point to exponent 17F7 78 LD A,B ; Get exponent 17F8 BE CP (HL) ; Compare exponents 17F9 C0 RET NZ ; Different 17FA 2B DEC HL ; Point to MBS 17FB 79 LD A,C ; Get MSB 17FC BE CP (HL) ; Compare MSBs 17FD C0 RET NZ ; Different 17FE 2B DEC HL ; Point to NMSB 17FF 7A LD A,D ; Get NMSB 1800 BE CP (HL) ; Compare NMSBs 1801 C0 RET NZ ; Different 1802 2B DEC HL ; Point to LSB 1803 7B LD A,E ; Get LSB 1804 96 SUB (HL) ; Compare LSBs 1805 C0 RET NZ ; Different 1806 E1 POP HL ; Drop RETurn 1807 E1 POP HL ; Drop another RETurn 1808 C9 RET ; 1809 47 FPINT: LD B,A ; <- Move 180A 4F LD C,A ; <- exponent 180B 57 LD D,A ; <- to all 180C 5F LD E,A ; <- bits 180D B7 OR A ; Test exponent 180E C8 RET Z ; Zero - Return zero 180F E5 PUSH HL ; Save pointer to number 1810 CD AD 17 CALL BCDEFP ; Move FPREG to BCDE 1813 CD C7 17 CALL SIGNS ; Set MSBs & sign of result 1816 AE XOR (HL) ; Combine with sign of FPREG 1817 67 LD H,A ; Save combined signs 1818 FC 2D 18 CALL M,DCBCDE ; Negative - Decrement BCDE 181B 3E 98 LD A,80H+24 ; 24 bits 181D 90 SUB B ; Bits to shift 181E CD E0 15 CALL SCALE ; Shift BCDE 1821 7C LD A,H ; Get combined sign 1822 17 RLA ; Sign to carry 1823 DC B3 15 CALL C,FPROND ; Negative - Round number up 1826 06 00 LD B,0 ; Zero exponent 1828 DC CC 15 CALL C,COMPL ; If negative make positive 182B E1 POP HL ; Restore pointer to number 182C C9 RET ; 182D 1B DCBCDE: DEC DE ; Decrement BCDE 182E 7A LD A,D ; Test LSBs 182F A3 AND E 1830 3C INC A 1831 C0 RET NZ ; Exit if LSBs not FFFF 1832 0B DEC BC ; Decrement MSBs 1833 C9 RET ; 1834 21 2C 82 INT: LD HL,FPEXP ; Point to exponent 1837 7E LD A,(HL) ; Get exponent 1838 FE 98 CP 80H+24 ; Integer accuracy only? 183A 3A 29 82 LD A,(FPREG) ; Get LSB 183D D0 RET NC ; Yes - Already integer 183E 7E LD A,(HL) ; Get exponent 183F CD 09 18 CALL FPINT ; F.P to integer 1842 36 98 LD (HL),80H+24 ; Save 24 bit integer 1844 7B LD A,E ; Get LSB of number 1845 F5 PUSH AF ; Save LSB 1846 79 LD A,C ; Get MSB of number 1847 17 RLA ; Sign to carry 1848 CD 69 15 CALL CONPOS ; Set sign of result 184B F1 POP AF ; Restore LSB of number 184C C9 RET ; 184D 21 00 00 MLDEBC: LD HL,0 ; Clear partial product 1850 78 LD A,B ; Test multiplier 1851 B1 OR C 1852 C8 RET Z ; Return zero if zero 1853 3E 10 LD A,16 ; 16 bits 1855 29 MLDBLP: ADD HL,HL ; Shift P.P left 1856 DA 8D 10 JP C,BSERR ; ?BS Error if overflow 1859 EB EX DE,HL 185A 29 ADD HL,HL ; Shift multiplier left 185B EB EX DE,HL 185C D2 63 18 JP NC,NOMLAD ; Bit was zero - No add 185F 09 ADD HL,BC ; Add multiplicand 1860 DA 8D 10 JP C,BSERR ; ?BS Error if overflow 1863 3D NOMLAD: DEC A ; Count bits 1864 C2 55 18 JP NZ,MLDBLP ; More 1867 C9 RET ; 1868 FE 2D ASCTFP: CP '-' ; Negative? 186A F5 PUSH AF ; Save it and flags 186B CA 74 18 JP Z,CNVNUM ; Yes - Convert number 186E FE 2B CP '+' ; Positive? 1870 CA 74 18 JP Z,CNVNUM ; Yes - Convert number 1873 2B DEC HL ; DEC 'cos GETCHR INCs 1874 CD 81 15 CNVNUM: CALL RESZER ; Set result to zero 1877 47 LD B,A ; Digits after point counter 1878 57 LD D,A ; Sign of exponent 1879 5F LD E,A ; Exponent of ten 187A 2F CPL 187B 4F LD C,A ; Before or after point flag 187C CD 12 09 MANLP: CALL GETCHR ; Get next character 187F DA C5 18 JP C,ADDIG ; Digit - Add to number 1882 FE 2E CP '.' 1884 CA A0 18 JP Z,DPOINT ; '.' - Flag point 1887 FE 45 CP 'E' 1889 C2 A4 18 JP NZ,CONEXP ; Not 'E' - Scale number 188C CD 12 09 CALL GETCHR ; Get next character 188F CD B8 0E CALL SGNEXP ; Get sign of exponent 1892 CD 12 09 EXPLP: CALL GETCHR ; Get next character 1895 DA E7 18 JP C,EDIGIT ; Digit - Add to exponent 1898 14 INC D ; Is sign negative? 1899 C2 A4 18 JP NZ,CONEXP ; No - Scale number 189C AF XOR A 189D 93 SUB E ; Negate exponent 189E 5F LD E,A ; And re-save it 189F 0C INC C ; Flag end of number 18A0 0C DPOINT: INC C ; Flag point passed 18A1 CA 7C 18 JP Z,MANLP ; Zero - Get another digit 18A4 E5 CONEXP: PUSH HL ; Save code string address 18A5 7B LD A,E ; Get exponent 18A6 90 SUB B ; Subtract digits after point 18A7 F4 BD 18 SCALMI: CALL P,SCALPL ; Positive - Multiply number 18AA F2 B3 18 JP P,ENDCON ; Positive - All done 18AD F5 PUSH AF ; Save number of times to /10 18AE CD A9 16 CALL DIV10 ; Divide by 10 18B1 F1 POP AF ; Restore count 18B2 3C INC A ; Count divides ; 18B3 C2 A7 18 ENDCON: JP NZ,SCALMI ; More to do 18B6 D1 POP DE ; Restore code string address 18B7 F1 POP AF ; Restore sign of number 18B8 CC 8A 17 CALL Z,INVSGN ; Negative - Negate number 18BB EB EX DE,HL ; Code string address to HL 18BC C9 RET ; 18BD C8 SCALPL: RET Z ; Exit if no scaling needed 18BE F5 MULTEN: PUSH AF ; Save count 18BF CD 4A 17 CALL MLSP10 ; Multiply number by 10 18C2 F1 POP AF ; Restore count 18C3 3D DEC A ; Count multiplies 18C4 C9 RET ; 18C5 D5 ADDIG: PUSH DE ; Save sign of exponent 18C6 57 LD D,A ; Save digit 18C7 78 LD A,B ; Get digits after point 18C8 89 ADC A,C ; Add one if after point 18C9 47 LD B,A ; Re-save counter 18CA C5 PUSH BC ; Save point flags 18CB E5 PUSH HL ; Save code string address 18CC D5 PUSH DE ; Save digit 18CD CD 4A 17 CALL MLSP10 ; Multiply number by 10 18D0 F1 POP AF ; Restore digit 18D1 D6 30 SUB '0' ; Make it absolute 18D3 CD DC 18 CALL RSCALE ; Re-scale number 18D6 E1 POP HL ; Restore code string address 18D7 C1 POP BC ; Restore point flags 18D8 D1 POP DE ; Restore sign of exponent 18D9 C3 7C 18 JP MANLP ; Get another digit ; 18DC CD 92 17 RSCALE: CALL STAKFP ; Put number on stack 18DF CD 73 17 CALL FLGREL ; Digit to add to FPREG 18E2 C1 PADD: POP BC ; Restore number 18E3 D1 POP DE 18E4 C3 1B 15 JP FPADD ; Add BCDE to FPREG and return ; 18E7 7B EDIGIT: LD A,E ; Get digit 18E8 07 RLCA ; Times 2 18E9 07 RLCA ; Times 4 18EA 83 ADD A,E ; Times 5 18EB 07 RLCA ; Times 10 18EC 86 ADD A,(HL) ; Add next digit 18ED D6 30 SUB '0' ; Make it absolute 18EF 5F LD E,A ; Save new digit 18F0 C3 92 18 JP EXPLP ; Look for another digit ; 18F3 E5 LINEIN: PUSH HL ; Save code string address 18F4 21 52 04 LD HL,INMSG ; Output " in " 18F7 CD 58 12 CALL PRS ; Output string at HL 18FA E1 POP HL ; Restore code string address 18FB EB PRNTHL: EX DE,HL ; Code string address to DE 18FC AF XOR A 18FD 06 98 LD B,80H+24 ; 24 bits 18FF CD 78 17 CALL RETINT ; Return the integer 1902 21 57 12 LD HL,PRNUMS ; Print number string 1905 E5 PUSH HL ; Save for return 1906 21 2E 82 NUMASC: LD HL,PBUFF ; Convert number to ASCII 1909 E5 PUSH HL ; Save for return 190A CD 61 17 CALL TSTSGN ; Test sign of FPREG 190D 36 20 LD (HL),' ' ; Space at start 190F F2 14 19 JP P,SPCFST ; Positive - Space to start 1912 36 2D LD (HL),'-' ; '-' sign at start 1914 23 SPCFST: INC HL ; First byte of number 1915 36 30 LD (HL),'0' ; '0' if zero 1917 CA CA 19 JP Z,JSTZER ; Return '0' if zero 191A E5 PUSH HL ; Save buffer address 191B FC 8A 17 CALL M,INVSGN ; Negate FPREG if negative 191E AF XOR A ; Zero A 191F F5 PUSH AF ; Save it 1920 CD D0 19 CALL RNGTST ; Test number is in range 1923 01 43 91 SIXDIG: LD BC,9143H ; BCDE - 99999.9 1926 11 F8 4F LD DE,4FF8H 1929 CD DC 17 CALL CMPNUM ; Compare numbers 192C B7 OR A 192D E2 41 19 JP PO,INRNG ; > 99999.9 - Sort it out 1930 F1 POP AF ; Restore count 1931 CD BE 18 CALL MULTEN ; Multiply by ten 1934 F5 PUSH AF ; Re-save count 1935 C3 23 19 JP SIXDIG ; Test it again ; 1938 CD A9 16 GTSIXD: CALL DIV10 ; Divide by 10 193B F1 POP AF ; Get count 193C 3C INC A ; Count divides 193D F5 PUSH AF ; Re-save count 193E CD D0 19 CALL RNGTST ; Test number is in range 1941 CD 09 15 INRNG: CALL ROUND ; Add 0.5 to FPREG 1944 3C INC A 1945 CD 09 18 CALL FPINT ; F.P to integer 1948 CD A2 17 CALL FPBCDE ; Move BCDE to FPREG 194B 01 06 03 LD BC,0306H ; 1E+06 to 1E-03 range 194E F1 POP AF ; Restore count 194F 81 ADD A,C ; 6 digits before point 1950 3C INC A ; Add one 1951 FA 5D 19 JP M,MAKNUM ; Do it in 'E' form if < 1E-02 1954 FE 08 CP 6+1+1 ; More than 999999 ? 1956 D2 5D 19 JP NC,MAKNUM ; Yes - Do it in 'E' form 1959 3C INC A ; Adjust for exponent 195A 47 LD B,A ; Exponent of number 195B 3E 02 LD A,2 ; Make it zero after ; 195D 3D MAKNUM: DEC A ; Adjust for digits to do 195E 3D DEC A 195F E1 POP HL ; Restore buffer address 1960 F5 PUSH AF ; Save count 1961 11 E3 19 LD DE,POWERS ; Powers of ten 1964 05 DEC B ; Count digits before point 1965 C2 6E 19 JP NZ,DIGTXT ; Not zero - Do number 1968 36 2E LD (HL),'.' ; Save point 196A 23 INC HL ; Move on 196B 36 30 LD (HL),'0' ; Save zero 196D 23 INC HL ; Move on 196E 05 DIGTXT: DEC B ; Count digits before point 196F 36 2E LD (HL),'.' ; Save point in case 1971 CC B7 17 CALL Z,INCHL ; Last digit - move on 1974 C5 PUSH BC ; Save digits before point 1975 E5 PUSH HL ; Save buffer address 1976 D5 PUSH DE ; Save powers of ten 1977 CD AD 17 CALL BCDEFP ; Move FPREG to BCDE 197A E1 POP HL ; Powers of ten table 197B 06 2F LD B, '0'-1 ; ASCII '0' - 1 197D 04 TRYAGN: INC B ; Count subtractions 197E 7B LD A,E ; Get LSB 197F 96 SUB (HL) ; Subtract LSB 1980 5F LD E,A ; Save LSB 1981 23 INC HL 1982 7A LD A,D ; Get NMSB 1983 9E SBC A,(HL) ; Subtract NMSB 1984 57 LD D,A ; Save NMSB 1985 23 INC HL 1986 79 LD A,C ; Get MSB 1987 9E SBC A,(HL) ; Subtract MSB 1988 4F LD C,A ; Save MSB 1989 2B DEC HL ; Point back to start 198A 2B DEC HL 198B D2 7D 19 JP NC,TRYAGN ; No overflow - Try again 198E CD C0 15 CALL PLUCDE ; Restore number 1991 23 INC HL ; Start of next number 1992 CD A2 17 CALL FPBCDE ; Move BCDE to FPREG 1995 EB EX DE,HL ; Save point in table 1996 E1 POP HL ; Restore buffer address 1997 70 LD (HL),B ; Save digit in buffer 1998 23 INC HL ; And move on 1999 C1 POP BC ; Restore digit count 199A 0D DEC C ; Count digits 199B C2 6E 19 JP NZ,DIGTXT ; More - Do them 199E 05 DEC B ; Any decimal part? 199F CA AE 19 JP Z,DOEBIT ; No - Do 'E' bit 19A2 2B SUPTLZ: DEC HL ; Move back through buffer 19A3 7E LD A,(HL) ; Get character 19A4 FE 30 CP '0' ; '0' character? 19A6 CA A2 19 JP Z,SUPTLZ ; Yes - Look back for more 19A9 FE 2E CP '.' ; A decimal point? 19AB C4 B7 17 CALL NZ,INCHL ; Move back over digit ; 19AE F1 DOEBIT: POP AF ; Get 'E' flag 19AF CA CD 19 JP Z,NOENED ; No 'E' needed - End buffer 19B2 36 45 LD (HL),'E' ; Put 'E' in buffer 19B4 23 INC HL ; And move on 19B5 36 2B LD (HL),'+' ; Put '+' in buffer 19B7 F2 BE 19 JP P,OUTEXP ; Positive - Output exponent 19BA 36 2D LD (HL),'-' ; Put '-' in buffer 19BC 2F CPL ; Negate exponent 19BD 3C INC A 19BE 06 2F OUTEXP: LD B,'0'-1 ; ASCII '0' - 1 19C0 04 EXPTEN: INC B ; Count subtractions 19C1 D6 0A SUB 10 ; Tens digit 19C3 D2 C0 19 JP NC,EXPTEN ; More to do 19C6 C6 3A ADD A,'0'+10 ; Restore and make ASCII 19C8 23 INC HL ; Move on 19C9 70 LD (HL),B ; Save MSB of exponent 19CA 23 JSTZER: INC HL ; 19CB 77 LD (HL),A ; Save LSB of exponent 19CC 23 INC HL 19CD 71 NOENED: LD (HL),C ; Mark end of buffer 19CE E1 POP HL ; Restore code string address 19CF C9 RET ; 19D0 01 74 94 RNGTST: LD BC,9474H ; BCDE = 999999. 19D3 11 F7 23 LD DE,23F7H 19D6 CD DC 17 CALL CMPNUM ; Compare numbers 19D9 B7 OR A 19DA E1 POP HL ; Return address to HL 19DB E2 38 19 JP PO,GTSIXD ; Too big - Divide by ten 19DE E9 JP (HL) ; Otherwise return to caller ; 19DF 00 00 00 80 HALF: DB 00H,00H,00H,80H ; 0.5 ; 19E3 A0 86 01 POWERS: DB 0A0H,086H,001H ; 100000 19E6 10 27 00 DB 010H,027H,000H ; 10000 19E9 E8 03 00 DB 0E8H,003H,000H ; 1000 19EC 64 00 00 DB 064H,000H,000H ; 100 19EF 0A 00 00 DB 00AH,000H,000H ; 10 19F2 01 00 00 DB 001H,000H,000H ; 1 ; 19F5 21 8A 17 NEGAFT: LD HL,INVSGN ; Negate result 19F8 E3 EX (SP),HL ; To be done after caller 19F9 E9 JP (HL) ; Return to caller ; 19FA CD 92 17 SQR: CALL STAKFP ; Put value on stack 19FD 21 DF 19 LD HL,HALF ; Set power to 1/2 1A00 CD 9F 17 CALL PHLTFP ; Move 1/2 to FPREG ; 1A03 C1 POWER: POP BC ; Get base 1A04 D1 POP DE 1A05 CD 61 17 CALL TSTSGN ; Test sign of power 1A08 78 LD A,B ; Get exponent of base 1A09 CA 48 1A JP Z,EXP ; Make result 1 if zero 1A0C F2 13 1A JP P,POWER1 ; Positive base - Ok 1A0F B7 OR A ; Zero to negative power? 1A10 CA BD 04 JP Z,DZERR ; Yes - ?/0 Error 1A13 B7 POWER1: OR A ; Base zero? 1A14 CA 82 15 JP Z,SAVEXP ; Yes - Return zero 1A17 D5 PUSH DE ; Save base 1A18 C5 PUSH BC 1A19 79 LD A,C ; Get MSB of base 1A1A F6 7F OR 01111111B ; Get sign status 1A1C CD AD 17 CALL BCDEFP ; Move power to BCDE 1A1F F2 30 1A JP P,POWER2 ; Positive base - Ok 1A22 D5 PUSH DE ; Save power 1A23 C5 PUSH BC 1A24 CD 34 18 CALL INT ; Get integer of power 1A27 C1 POP BC ; Restore power 1A28 D1 POP DE 1A29 F5 PUSH AF ; MSB of base 1A2A CD DC 17 CALL CMPNUM ; Power an integer? 1A2D E1 POP HL ; Restore MSB of base 1A2E 7C LD A,H ; but don't affect flags 1A2F 1F RRA ; Exponent odd or even? 1A30 E1 POWER2: POP HL ; Restore MSB and exponent 1A31 22 2B 82 LD (FPREG+2),HL ; Save base in FPREG 1A34 E1 POP HL ; LSBs of base 1A35 22 29 82 LD (FPREG),HL ; Save in FPREG 1A38 DC F5 19 CALL C,NEGAFT ; Odd power - Negate result 1A3B CC 8A 17 CALL Z,INVSGN ; Negative base - Negate it 1A3E D5 PUSH DE ; Save power 1A3F C5 PUSH BC 1A40 CD 15 16 CALL LOG ; Get LOG of base 1A43 C1 POP BC ; Restore power 1A44 D1 POP DE 1A45 CD 56 16 CALL FPMULT ; Multiply LOG by power ; 1A48 CD 92 17 EXP: CALL STAKFP ; Put value on stack 1A4B 01 38 81 LD BC,08138H ; BCDE = 1/Ln(2) 1A4E 11 3B AA LD DE,0AA3BH 1A51 CD 56 16 CALL FPMULT ; Multiply value by 1/LN(2) 1A54 3A 2C 82 LD A,(FPEXP) ; Get exponent 1A57 FE 88 CP 80H+8 ; Is it in range? 1A59 D2 3D 17 JP NC,OVTST1 ; No - Test for overflow 1A5C CD 34 18 CALL INT ; Get INT of FPREG 1A5F C6 80 ADD A,80H ; For excess 128 1A61 C6 02 ADD A,2 ; Exponent > 126? 1A63 DA 3D 17 JP C,OVTST1 ; Yes - Test for overflow 1A66 F5 PUSH AF ; Save scaling factor 1A67 21 04 16 LD HL,UNITY ; Point to 1. 1A6A CD 0C 15 CALL ADDPHL ; Add 1 to FPREG 1A6D CD 4D 16 CALL MULLN2 ; Multiply by LN(2) 1A70 F1 POP AF ; Restore scaling factor 1A71 C1 POP BC ; Restore exponent 1A72 D1 POP DE 1A73 F5 PUSH AF ; Save scaling factor 1A74 CD 18 15 CALL SUBCDE ; Subtract exponent from FPREG 1A77 CD 8A 17 CALL INVSGN ; Negate result 1A7A 21 88 1A LD HL,EXPTAB ; Coefficient table 1A7D CD B8 1A CALL SMSER1 ; Sum the series 1A80 11 00 00 LD DE,0 ; Zero LSBs 1A83 C1 POP BC ; Scaling factor 1A84 4A LD C,D ; Zero MSB 1A85 C3 56 16 JP FPMULT ; Scale result to correct value ; 1A88 08 EXPTAB: DB 8 ; Table used by EXP 1A89 40 2E 94 74 DB 040H,02EH,094H,074H ; -1/7! (-1/5040) 1A8D 70 4F 2E 77 DB 070H,04FH,02EH,077H ; 1/6! ( 1/720) 1A91 6E 02 88 7A DB 06EH,002H,088H,07AH ; -1/5! (-1/120) 1A95 E6 A0 2A 7C DB 0E6H,0A0H,02AH,07CH ; 1/4! ( 1/24) 1A99 50 AA AA 7E DB 050H,0AAH,0AAH,07EH ; -1/3! (-1/6) 1A9D FF FF 7F 7F DB 0FFH,0FFH,07FH,07FH ; 1/2! ( 1/2) 1AA1 00 00 80 81 DB 000H,000H,080H,081H ; -1/1! (-1/1) 1AA5 00 00 00 81 DB 000H,000H,000H,081H ; 1/0! ( 1/1) ; 1AA9 CD 92 17 SUMSER: CALL STAKFP ; Put FPREG on stack 1AAC 11 54 16 LD DE,MULT ; Multiply by "X" 1AAF D5 PUSH DE ; To be done after 1AB0 E5 PUSH HL ; Save address of table 1AB1 CD AD 17 CALL BCDEFP ; Move FPREG to BCDE 1AB4 CD 56 16 CALL FPMULT ; Square the value 1AB7 E1 POP HL ; Restore address of table 1AB8 CD 92 17 SMSER1: CALL STAKFP ; Put value on stack 1ABB 7E LD A,(HL) ; Get number of coefficients 1ABC 23 INC HL ; Point to start of table 1ABD CD 9F 17 CALL PHLTFP ; Move coefficient to FPREG 1AC0 06 DB 06H ; Skip "POP AF" 1AC1 F1 SUMLP: POP AF ; Restore count 1AC2 C1 POP BC ; Restore number 1AC3 D1 POP DE 1AC4 3D DEC A ; Cont coefficients 1AC5 C8 RET Z ; All done 1AC6 D5 PUSH DE ; Save number 1AC7 C5 PUSH BC 1AC8 F5 PUSH AF ; Save count 1AC9 E5 PUSH HL ; Save address in table 1ACA CD 56 16 CALL FPMULT ; Multiply FPREG by BCDE 1ACD E1 POP HL ; Restore address in table 1ACE CD B0 17 CALL LOADFP ; Number at HL to BCDE 1AD1 E5 PUSH HL ; Save address in table 1AD2 CD 1B 15 CALL FPADD ; Add coefficient to FPREG 1AD5 E1 POP HL ; Restore address in table 1AD6 C3 C1 1A JP SUMLP ; More coefficients ; 1AD9 CD 61 17 RND: CALL TSTSGN ; Test sign of FPREG 1ADC 21 5E 81 LD HL,SEED+2 ; Random number seed 1ADF FA 3A 1B JP M,RESEED ; Negative - Re-seed 1AE2 21 7F 81 LD HL,LSTRND ; Last random number 1AE5 CD 9F 17 CALL PHLTFP ; Move last RND to FPREG 1AE8 21 5E 81 LD HL,SEED+2 ; Random number seed 1AEB C8 RET Z ; Return if RND(0) 1AEC 86 ADD A,(HL) ; Add (SEED)+2) 1AED E6 07 AND 00000111B ; 0 to 7 1AEF 06 00 LD B,0 1AF1 77 LD (HL),A ; Re-save seed 1AF2 23 INC HL ; Move to coefficient table 1AF3 87 ADD A,A ; 4 bytes 1AF4 87 ADD A,A ; per entry 1AF5 4F LD C,A ; BC = Offset into table 1AF6 09 ADD HL,BC ; Point to coefficient 1AF7 CD B0 17 CALL LOADFP ; Coefficient to BCDE 1AFA CD 56 16 CALL FPMULT ; ; Multiply FPREG by coefficient 1AFD 3A 5D 81 LD A,(SEED+1) ; Get (SEED+1) 1B00 3C INC A ; Add 1 1B01 E6 03 AND 00000011B ; 0 to 3 1B03 06 00 LD B,0 1B05 FE 01 CP 1 ; Is it zero? 1B07 88 ADC A,B ; Yes - Make it 1 1B08 32 5D 81 LD (SEED+1),A ; Re-save seed 1B0B 21 3E 1B LD HL,RNDTAB-4 ; Addition table 1B0E 87 ADD A,A ; 4 bytes 1B0F 87 ADD A,A ; per entry 1B10 4F LD C,A ; BC = Offset into table 1B11 09 ADD HL,BC ; Point to value 1B12 CD 0C 15 CALL ADDPHL ; Add value to FPREG 1B15 CD AD 17 RND1: CALL BCDEFP ; Move FPREG to BCDE 1B18 7B LD A,E ; Get LSB 1B19 59 LD E,C ; LSB = MSB 1B1A EE 4F XOR 01001111B ; Fiddle around 1B1C 4F LD C,A ; New MSB 1B1D 36 80 LD (HL),80H ; Set exponent 1B1F 2B DEC HL ; Point to MSB 1B20 46 LD B,(HL) ; Get MSB 1B21 36 80 LD (HL),80H ; Make value -0.5 1B23 21 5C 81 LD HL,SEED ; Random number seed 1B26 34 INC (HL) ; Count seed 1B27 7E LD A,(HL) ; Get seed 1B28 D6 AB SUB 171 ; Do it modulo 171 1B2A C2 31 1B JP NZ,RND2 ; Non-zero - Ok 1B2D 77 LD (HL),A ; Zero seed 1B2E 0C INC C ; Fillde about 1B2F 15 DEC D ; with the 1B30 1C INC E ; number 1B31 CD 6C 15 RND2: CALL BNORM ; Normalise number 1B34 21 7F 81 LD HL,LSTRND ; Save random number 1B37 C3 B9 17 JP FPTHL ; Move FPREG to last and return ; 1B3A 77 RESEED: LD (HL),A ; Re-seed random numbers 1B3B 2B DEC HL 1B3C 77 LD (HL),A 1B3D 2B DEC HL 1B3E 77 LD (HL),A 1B3F C3 15 1B JP RND1 ; Return RND seed ; 1B42 68 B1 46 68 RNDTAB: DB 068H,0B1H,046H,068H ; Table used by RND 1B46 99 E9 92 69 DB 099H,0E9H,092H,069H 1B4A 10 D1 75 68 DB 010H,0D1H,075H,068H ; 1B4E 21 98 1B COS: LD HL,HALFPI ; Point to PI/2 1B51 CD 0C 15 CALL ADDPHL ; Add it to PPREG 1B54 CD 92 17 SIN: CALL STAKFP ; Put angle on stack 1B57 01 49 83 LD BC,8349H ; BCDE = 2 PI 1B5A 11 DB 0F LD DE,0FDBH 1B5D CD A2 17 CALL FPBCDE ; Move 2 PI to FPREG 1B60 C1 POP BC ; Restore angle 1B61 D1 POP DE 1B62 CD B7 16 CALL DVBCDE ; Divide angle by 2 PI 1B65 CD 92 17 CALL STAKFP ; Put it on stack 1B68 CD 34 18 CALL INT ; Get INT of result 1B6B C1 POP BC ; Restore number 1B6C D1 POP DE 1B6D CD 18 15 CALL SUBCDE ; Make it 0 <= value < 1 1B70 21 9C 1B LD HL,QUARTR ; Point to 0.25 1B73 CD 12 15 CALL SUBPHL ; Subtract value from 0.25 1B76 CD 61 17 CALL TSTSGN ; Test sign of value 1B79 37 SCF ; Flag positive 1B7A F2 84 1B JP P,SIN1 ; Positive - Ok 1B7D CD 09 15 CALL ROUND ; Add 0.5 to value 1B80 CD 61 17 CALL TSTSGN ; Test sign of value 1B83 B7 OR A ; Flag negative 1B84 F5 SIN1: PUSH AF ; Save sign 1B85 F4 8A 17 CALL P,INVSGN ; Negate value if positive 1B88 21 9C 1B LD HL,QUARTR ; Point to 0.25 1B8B CD 0C 15 CALL ADDPHL ; Add 0.25 to value 1B8E F1 POP AF ; Restore sign 1B8F D4 8A 17 CALL NC,INVSGN ; Negative - Make positive 1B92 21 A0 1B LD HL,SINTAB ; Coefficient table 1B95 C3 A9 1A JP SUMSER ; Evaluate sum of series ; 1B98 DB 0F 49 81 HALFPI: DB 0DBH,00FH,049H,081H ; 1.5708 (PI/2) ; 1B9C 00 00 00 7F QUARTR: DB 000H,000H,000H,07FH ; 0.25 ; 1BA0 05 SINTAB: DB 5 ; Table used by SIN 1BA1 BA D7 1E 86 DB 0BAH,0D7H,01EH,086H ; 39.711 1BA5 64 26 99 87 DB 064H,026H,099H,087H ;-76.575 1BA9 58 34 23 87 DB 058H,034H,023H,087H ; 81.602 1BAD E0 5D A5 86 DB 0E0H,05DH,0A5H,086H ;-41.342 1BB1 DA 0F 49 83 DB 0DAH,00FH,049H,083H ; 6.2832 ; 1BB5 CD 92 17 TAN: CALL STAKFP ; Put angle on stack 1BB8 CD 54 1B CALL SIN ; Get SIN of angle 1BBB C1 POP BC ; Restore angle 1BBC E1 POP HL 1BBD CD 92 17 CALL STAKFP ; Save SIN of angle 1BC0 EB EX DE,HL ; BCDE = Angle 1BC1 CD A2 17 CALL FPBCDE ; Angle to FPREG 1BC4 CD 4E 1B CALL COS ; Get COS of angle 1BC7 C3 B5 16 JP DIV ; TAN = SIN / COS ; 1BCA CD 61 17 ATN: CALL TSTSGN ; Test sign of value 1BCD FC F5 19 CALL M,NEGAFT ; Negate result after if -ve 1BD0 FC 8A 17 CALL M,INVSGN ; Negate value if -ve 1BD3 3A 2C 82 LD A,(FPEXP) ; Get exponent 1BD6 FE 81 CP 81H ; Number less than 1? 1BD8 DA E7 1B JP C,ATN1 ; Yes - Get arc tangnt 1BDB 01 00 81 LD BC,8100H ; BCDE = 1 1BDE 51 LD D,C 1BDF 59 LD E,C 1BE0 CD B7 16 CALL DVBCDE ; Get reciprocal of number 1BE3 21 12 15 LD HL,SUBPHL ; Sub angle from PI/2 1BE6 E5 PUSH HL ; Save for angle > 1 1BE7 21 F1 1B ATN1: LD HL,ATNTAB ; Coefficient table 1BEA CD A9 1A CALL SUMSER ; Evaluate sum of series 1BED 21 98 1B LD HL,HALFPI ; PI/2 - angle in case > 1 1BF0 C9 RET ; Number > 1 - Sub from PI/2 ; 1BF1 09 ATNTAB: DB 9 ; Table used by ATN 1BF2 4A D7 3B 78 DB 04AH,0D7H,03BH,078H ; 1/17 1BF6 02 6E 84 7B DB 002H,06EH,084H,07BH ;-1/15 1BFA FE C1 2F 7C DB 0FEH,0C1H,02FH,07CH ; 1/13 1BFE 74 31 9A 7D DB 074H,031H,09AH,07DH ;-1/11 1C02 84 3D 5A 7D DB 084H,03DH,05AH,07DH ; 1/9 1C06 C8 7F 91 7E DB 0C8H,07FH,091H,07EH ;-1/7 1C0A E4 BB 4C 7E DB 0E4H,0BBH,04CH,07EH ; 1/5 1C0E 6C AA AA 7F DB 06CH,0AAH,0AAH,07FH ;-1/3 1C12 00 00 00 81 DB 000H,000H,000H,081H ; 1/1 ; 1C16 C9 ARET: RET ; A RETurn instruction ; 1C17 D7 GETINP: RST 10H ;input a character 1C18 C9 RET ; 1C19 CLS: 1C19 3E 0C LD A,CS ; ASCII Clear screen 1C1B C3 4F 1D JP MONOUT ; Output character ; 1C1E CD E0 14 WIDTH: CALL GETINT ; Get integer 0-255 1C21 7B LD A,E ; Width to A 1C22 32 87 81 LD (LWIDTH),A ; Set width 1C25 C9 RET ; 1C26 CD 7F 0D LINES: CALL GETNUM ; Get a number 1C29 CD C4 09 CALL DEINT ; Get integer -32768 to 32767 1C2C ED 53 8B 81 LD (LINESC),DE ; Set lines counter 1C30 ED 53 8D 81 LD (LINESN),DE ; Set lines number 1C34 C9 RET ; 1C35 CD C4 09 DEEK: CALL DEINT ; Get integer -32768 to 32767 1C38 D5 PUSH DE ; Save number 1C39 E1 POP HL ; Number to HL 1C3A 46 LD B,(HL) ; Get LSB of contents 1C3B 23 INC HL 1C3C 7E LD A,(HL) ; Get MSB of contents 1C3D C3 3A 11 JP ABPASS ; Return integer AB ; 1C40 CD 7F 0D DOKE: CALL GETNUM ; Get a number 1C43 CD C4 09 CALL DEINT ; Get integer -32768 to 32767 1C46 D5 PUSH DE ; Save address 1C47 CD 88 07 CALL CHKSYN ; Make sure ',' follows 1C4A 2C DB ',' 1C4B CD 7F 0D CALL GETNUM ; Get a number 1C4E CD C4 09 CALL DEINT ; Get integer -32768 to 32767 1C51 E3 EX (SP),HL ; Save value,get address 1C52 73 LD (HL),E ; Save LSB of value 1C53 23 INC HL 1C54 72 LD (HL),D ; Save MSB of value 1C55 E1 POP HL ; Restore code string address 1C56 C9 RET ; ; HEX$(nn) Convert 16 bit number to Hexadecimal string ; 1C57 CD 82 0D HEX: CALL TSTNUM ; Verify it's a number 1C5A CD C4 09 CALL DEINT ; Get integer -32768 to 32767 1C5D C5 PUSH BC ; Save contents of BC 1C5E 21 2E 82 LD HL,PBUFF 1C61 7A LD A,D ; Get high order into A 1C62 FE 00 CP 0 1C64 28 0C JR Z,HEX2 ; Skip output if both high digits are zero 1C66 CD 8F 1C CALL BYT2ASC ; Convert D to ASCII 1C69 78 LD A,B 1C6A FE 30 CP '0' 1C6C 28 02 JR Z,HEX1 ; Don't store high digit if zero 1C6E 70 LD (HL),B ; Store it to PBUFF 1C6F 23 INC HL ; Next location 1C70 71 HEX1: LD (HL),C ; Store C to PBUFF+1 1C71 23 INC HL ; Next location 1C72 7B HEX2: LD A,E ; Get lower byte 1C73 CD 8F 1C CALL BYT2ASC ; Convert E to ASCII 1C76 7A LD A,D 1C77 FE 00 CP 0 1C79 20 05 JR NZ,HEX3 ; If upper byte was not zero then always print lower byte 1C7B 78 LD A,B 1C7C FE 30 CP '0' ; If high digit of lower byte is zero then don't print 1C7E 28 02 JR Z,HEX4 1C80 70 HEX3: LD (HL),B ; to PBUFF+2 1C81 23 INC HL ; Next location 1C82 71 HEX4: LD (HL),C ; to PBUFF+3 1C83 23 INC HL ; PBUFF+4 to zero 1C84 AF XOR A ; Terminating character 1C85 77 LD (HL),A ; Store zero to terminate 1C86 23 INC HL ; Make sure PBUFF is terminated 1C87 77 LD (HL),A ; Store the double zero there 1C88 C1 POP BC ; Get BC back 1C89 21 2E 82 LD HL,PBUFF ; Reset to start of PBUFF 1C8C C3 E8 11 JP STR1 ; Convert the PBUFF to a string and return it ; 1C8F 47 BYT2ASC LD B,A ; Save original value 1C90 E6 0F AND 0FH ; Strip off upper nybble 1C92 FE 0A CP 0AH ; 0-9? 1C94 38 02 JR C,ADD30 ; If A-F, add 7 more 1C96 C6 07 ADD A,07H ; Bring value up to ASCII A-F 1C98 C6 30 ADD30 ADD A,30H ; And make ASCII 1C9A 4F LD C,A ; Save converted char to C 1C9B 78 LD A,B ; Retrieve original value 1C9C 0F RRCA ; and Rotate it right 1C9D 0F RRCA 1C9E 0F RRCA 1C9F 0F RRCA 1CA0 E6 0F AND 0FH ; Mask off upper nybble 1CA2 FE 0A CP 0AH ; 0-9? < A hex? 1CA4 38 02 JR C,ADD301 ; Skip Add 7 1CA6 C6 07 ADD A,07H ; Bring it up to ASCII A-F 1CA8 C6 30 ADD301 ADD A,30H ; And make it full ASCII 1CAA 47 LD B,A ; Store high order byte 1CAB C9 RET ; ; Convert "&Hnnnn" to FPREG ; Gets a character from (HL) checks for Hexadecimal ASCII numbers "&Hnnnn" ; Char is in A, NC if char is;<=>?@ A-z, CY is set if 0-9 1CAC EB HEXTFP EX DE,HL ; Move code string pointer to DE 1CAD 21 00 00 LD HL,0000H ; Zero out the value 1CB0 CD C5 1C CALL GETHEX ; Check the number for valid hex 1CB3 DA E5 1C JP C,HXERR ; First value wasn't hex, HX error 1CB6 18 05 JR HEXLP1 ; Convert first character 1CB8 CD C5 1C HEXLP CALL GETHEX ; Get second and addtional characters 1CBB 38 1F JR C,HEXIT ; Exit if not a hex character 1CBD 29 HEXLP1 ADD HL,HL ; Rotate 4 bits to the left 1CBE 29 ADD HL,HL 1CBF 29 ADD HL,HL 1CC0 29 ADD HL,HL 1CC1 B5 OR L ; Add in D0-D3 into L 1CC2 6F LD L,A ; Save new value 1CC3 18 F3 JR HEXLP ; And continue until all hex characters are in ; 1CC5 13 GETHEX INC DE ; Next location 1CC6 1A LD A,(DE) ; Load character at pointer 1CC7 FE 20 CP ' ' 1CC9 CA C5 1C JP Z,GETHEX ; Skip spaces 1CCC D6 30 SUB 30H ; Get absolute value 1CCE D8 RET C ; < "0", error 1CCF FE 0A CP 0AH 1CD1 38 05 JR C,NOSUB7 ; Is already in the range 0-9 1CD3 D6 07 SUB 07H ; Reduce to A-F 1CD5 FE 0A CP 0AH ; Value should be $0A-$0F at this point 1CD7 D8 RET C ; CY set if was : ; < = > ? @ 1CD8 FE 10 NOSUB7 CP 10H ; > Greater than "F"? 1CDA 3F CCF 1CDB C9 RET ; CY set if it wasn't valid hex 1CDC EB HEXIT EX DE,HL ; Value into DE, Code string into HL 1CDD 7A LD A,D ; Load DE into AC 1CDE 4B LD C,E ; For prep to 1CDF E5 PUSH HL 1CE0 CD 39 11 CALL ACPASS ; ACPASS to set AC as integer into FPREG 1CE3 E1 POP HL 1CE4 C9 RET ; 1CE5 1E 26 HXERR: LD E,HX ; ?HEX Error 1CE7 C3 CE 04 JP ERROR ; ; BIN$(NN) Convert integer to a 1-16 char binary string 1CEA CD 82 0D BIN: CALL TSTNUM ; Verify it's a number 1CED CD C4 09 CALL DEINT ; Get integer -32768 to 32767 1CF0 C5 BIN2: PUSH BC ; Save contents of BC 1CF1 21 2E 82 LD HL,PBUFF 1CF4 06 11 LD B,17 ; One higher than max char count 1CF6 ZEROSUP: ; Suppress leading zeros 1CF6 05 DEC B ; Max 16 chars 1CF7 78 LD A,B 1CF8 FE 01 CP 01H 1CFA 28 08 JR Z,BITOUT ; Always output at least one character 1CFC CB 13 RL E 1CFE CB 12 RL D 1D00 30 F4 JR NC,ZEROSUP 1D02 18 04 JR BITOUT2 1D04 BITOUT: 1D04 CB 13 RL E 1D06 CB 12 RL D ; Top bit now in carry 1D08 BITOUT2: 1D08 3E 30 LD A,'0' ; Char for '0' 1D0A CE 00 ADC A,0 ; If carry set then '0' --> '1' 1D0C 77 LD (HL),A 1D0D 23 INC HL 1D0E 05 DEC B 1D0F 20 F3 JR NZ,BITOUT 1D11 AF XOR A ; Terminating character 1D12 77 LD (HL),A ; Store zero to terminate 1D13 23 INC HL ; Make sure PBUFF is terminated 1D14 77 LD (HL),A ; Store the double zero there 1D15 C1 POP BC 1D16 21 2E 82 LD HL,PBUFF 1D19 C3 E8 11 JP STR1 ; ; Convert "&Bnnnn" to FPREG ; Gets a character from (HL) checks for Binary ASCII numbers "&Bnnnn" 1D1C EB BINTFP: EX DE,HL ; Move code string pointer to DE 1D1D 21 00 00 LD HL,0000H ; Zero out the value 1D20 CD 39 1D CALL CHKBIN ; Check the number for valid bin 1D23 DA 47 1D JP C,BINERR ; First value wasn't bin, HX error 1D26 D6 30 BINIT: SUB '0' 1D28 29 ADD HL,HL ; Rotate HL left 1D29 B5 OR L 1D2A 6F LD L,A 1D2B CD 39 1D CALL CHKBIN ; Get second and addtional characters 1D2E 30 F6 JR NC,BINIT ; Process if a bin character 1D30 EB EX DE,HL ; Value into DE, Code string into HL 1D31 7A LD A,D ; Load DE into AC 1D32 4B LD C,E ; For prep to 1D33 E5 PUSH HL 1D34 CD 39 11 CALL ACPASS ; ACPASS to set AC as integer into FPREG 1D37 E1 POP HL 1D38 C9 RET ; ; Char is in A, NC if char is 0 or 1 1D39 13 CHKBIN: INC DE 1D3A 1A LD A,(DE) 1D3B FE 20 CP ' ' 1D3D CA 39 1D JP Z,CHKBIN ; Skip spaces 1D40 FE 30 CP '0' ; Set C if < '0' 1D42 D8 RET C 1D43 FE 32 CP '2' 1D45 3F CCF ; Set C if > '1' 1D46 C9 RET ; 1D47 1E 28 BINERR: LD E,BN ; ?BIN Error 1D49 C3 CE 04 JP ERROR ; 1D4C C3 EB 00 JJUMP1: JP CSTART ; Go and initialise ; 1D4F C3 08 00 MONOUT: JP 0008H ; output a char ; 1D52 C3 00 00 MONITR: JP 0000H ; Restart (Normally Monitor Start) ; 1D55 3E 00 INITST: LD A,0 ; Clear break flag 1D57 32 92 81 LD (BRKFLG),A 1D5A C3 17 01 JP INIT ; 1D5D F5 TSTBIT: PUSH AF ; Save bit mask 1D5E A0 AND B ; Get common bits 1D5F C1 POP BC ; Restore bit mask 1D60 B8 CP B ; Same bit set? 1D61 3E 00 LD A,0 ; Return 0 in A 1D63 C9 RET ; 1D64 CD 93 07 OUTNCR: CALL OUTC ; Output character in A 1D67 C3 BA 0B JP PRCRLF ; Output CRLF ; ; ; 1D6A CLOCK: 1D6A 21 00 00 LD HL,0 ; Clock Entrance 1D6D 22 02 80 LD (MS),HL ; Clear MS 1D70 22 07 80 LD (DAY),HL ; Clear Day 1D73 AF XOR A 1D74 32 04 80 LD (SEC),A ; Clear Second 1D77 32 05 80 LD (MIN),A ; Clear Minute 1D7A 32 06 80 LD (HOR),A ; Clear Hour 1D7D 21 90 00 LD HL,VECTOR ; Set M2 Interrupt Table 1D80 7C LD A,H 1D81 ED 47 LD I,A ; Set M2 Upper Address 1D83 ED 5E IM 2 1D85 3E A7 LD A,0A7H ; Set Timer Mode 1D87 D3 10 OUT (CTC0),A 0000 if (HZ=12) LD A,240 ;10MHz 192, 12MHz 240 Set 5ms Interval else 1D89 3E C0 LD A,192 endif 1D8B D3 10 OUT (CTC0),A 1D8D 7D LD A,L ; M2 Lower Address 1D8E D3 10 OUT (CTC0),A 1D90 FB EI 1D91 C9 RET 1D92 F5 INTX: PUSH AF ; Timer Routine 1D93 C5 PUSH BC 1D94 E5 PUSH HL 1D95 2A 02 80 LD HL,(MS) 1D98 01 05 00 LD BC,5 1D9B 09 ADD HL,BC 1D9C 01 E8 03 LD BC,1000 1D9F 7C LD A,H 1DA0 B8 CP B 1DA1 20 3B JR NZ,INT9 1DA3 7D LD A,L 1DA4 B9 CP C 1DA5 20 37 JR NZ,INT9 1DA7 3A 04 80 LD A,(SEC) 1DAA 3C INC A 1DAB 32 04 80 LD (SEC),A 1DAE FE 3C CP 60 1DB0 20 29 JR NZ,INT8 1DB2 3A 05 80 LD A,(MIN) 1DB5 3C INC A 1DB6 32 05 80 LD (MIN),A 1DB9 FE 3C CP 60 1DBB 20 1A JR NZ,INT7 1DBD 3A 06 80 LD A,(HOR) 1DC0 3C INC A 1DC1 32 06 80 LD (HOR),A 1DC4 FE 18 CP 24 1DC6 20 0B JR NZ,INT6 1DC8 2A 07 80 LD HL,(DAY) 1DCB 23 INC HL 1DCC 22 07 80 LD (DAY),HL 1DCF AF INT5: XOR A 1DD0 32 06 80 LD (HOR),A 1DD3 AF INT6: XOR A 1DD4 32 05 80 LD (MIN),A 1DD7 AF INT7: XOR A 1DD8 32 04 80 LD (SEC),A 1DDB 21 00 00 INT8: LD HL,0 1DDE 22 02 80 INT9: LD (MS),HL 1DE1 E1 POP HL 1DE2 C1 POP BC 1DE3 F1 POP AF 1DE4 FB EI 1DE5 ED 4D RETI ; ; 1DE7 3E CF PIOINITA: LD A,0CFH ; Port A Mode 3 1DE9 D3 1D OUT (PIOA+1),A 1DEB 3A 08 80 LD A,(PADIR) ; I/O Direction 1DEE D3 1D OUT (PIOA+1),A 1DF0 3E 07 LD A,07H ; None Interrupt 1DF2 D3 1D OUT (PIOA+1),A 1DF4 C9 RET 1DF5 3E CF PIOINITB: LD A,0CFH ; Port B Mode 3 1DF7 D3 1F OUT (PIOB+1),A 1DF9 3A 0A 80 LD A,(PBDIR) ; I/O Direction 1DFC D3 1F OUT (PIOB+1),A 1DFE 3E 07 LD A,07H ; None Interrupt 1E00 D3 1F OUT (PIOB+1),A 1E02 C9 RET ; ; 1E03 CD E7 1D PA: CALL PIOINITA 1E06 3A 09 80 LD A,(PADT) 1E09 D3 1C OUT (PIOA),A 1E0B C9 RET 1E0C CD F5 1D PB: CALL PIOINITB 1E0F 3A 0B 80 LD A,(PBDT) 1E12 D3 1E OUT (PIOB),A 1E14 C9 RET 1E15 CD E0 14 PP: CALL GETINT 1E18 B7 OR A 1E19 28 0D JR Z,TORAM ;ROM to RAM 1E1B FE 01 CP 1H ;PIOA 1E1D 28 E4 JR Z,PA 1E1F FE 02 CP 2H ;PIOB 1E21 28 E9 JR Z,PB 1E23 FE 03 CP 3H 1E25 28 01 JR Z,TORAM 1E27 C9 RET 1E28 21 36 1E TORAM: LD HL,ONRAM 1E2B 11 00 C0 LD DE,0C000H 1E2E 01 10 00 LD BC,ONRAM1-ONRAM 1E31 ED B0 LDIR 1E33 C3 00 C0 JP 0C000H 1E36 3E 05 D3 1B ONRAM: DB 03EH,005H,0D3H,01BH 1E3A 3E EA D3 1B DB 03EH,0EAH,0D3H,01BH 1E3E 00 00 00 00 db 000H,000H,000H,000H 1E42 C3 00 00 00 DB 0C3H,000H,000H,000H 1E46 ONRAM1: ; ; 1E46 LOAD: 1E46 D5 PUSH DE 1E47 E5 PUSH HL 1E48 C5 PUSH BC 1E49 21 16 1F LD HL,HEXMSG ; Sign-on message 1E4C CD 58 12 CALL PRS ; Output string 1E4F D7 LCMD0: RST 10H 1E50 FE 03 CP CTRLC ; Is it control "C"? 1E52 CC BA 0B CALL Z,PRCRLF ; Yes - Output CRLF 1E55 37 SCF ; Flag break 1E56 CA 55 09 JP Z,BRK ; Return if control "C" 1E59 FE 3A CP ":" 1E5B 20 F2 JR NZ,LCMD0 1E5D 0E 00 LCMD1: LD C,0 1E5F D7 RST 10H ;Length 1E60 CD 32 1F CALL ATOH2 1E63 DA F8 1E JP C,HEXERR 1E66 87 ADD A,A 1E67 87 ADD A,A 1E68 87 ADD A,A 1E69 87 ADD A,A 1E6A 57 LD D,A 1E6B D7 RST 10H 1E6C CD 32 1F CALL ATOH2 1E6F DA F8 1E JP C,HEXERR 1E72 82 ADD A,D 1E73 47 LD B,A ;Save TXT Length 1E74 4F LD C,A 1E75 D7 RST 10H ;Address 1E76 CD 32 1F CALL ATOH2 1E79 DA F8 1E JP C,HEXERR 1E7C 87 ADD A,A 1E7D 87 ADD A,A 1E7E 87 ADD A,A 1E7F 87 ADD A,A 1E80 57 LD D,A 1E81 D7 RST 10H 1E82 CD 32 1F CALL ATOH2 1E85 DA F8 1E JP C,HEXERR 1E88 82 ADD A,D 1E89 67 LD H,A ;Set Upper Address 1E8A 81 ADD A,C 1E8B 4F LD C,A 1E8C D7 RST 10H 1E8D CD 32 1F CALL ATOH2 1E90 DA F8 1E JP C,HEXERR 1E93 87 ADD A,A 1E94 87 ADD A,A 1E95 87 ADD A,A 1E96 87 ADD A,A 1E97 57 LD D,A 1E98 D7 RST 10H 1E99 CD 32 1F CALL ATOH2 1E9C DA F8 1E JP C,HEXERR 1E9F 82 ADD A,D 1EA0 6F LD L,A ;Set Lower Address 1EA1 81 ADD A,C 1EA2 4F LD C,A 1EA3 D7 RST 10H 1EA4 CD 32 1F CALL ATOH2 1EA7 DA F8 1E JP C,HEXERR 1EAA 87 ADD A,A 1EAB 87 ADD A,A 1EAC 87 ADD A,A 1EAD 87 ADD A,A 1EAE 57 LD D,A ;Skip 1EAF D7 RST 10H 1EB0 CD 32 1F CALL ATOH2 1EB3 DA F8 1E JP C,HEXERR 1EB6 82 ADD A,D 1EB7 FE 01 CP 01H 1EB9 CA 03 1F JP Z,HEXEND 1EBC D7 LCMD3: RST 10H ;Data 1EBD CD 32 1F CALL ATOH2 1EC0 DA F8 1E JP C,HEXERR 1EC3 87 ADD A,A 1EC4 87 ADD A,A 1EC5 87 ADD A,A 1EC6 87 ADD A,A 1EC7 57 LD D,A 1EC8 D7 RST 10H 1EC9 CD 32 1F CALL ATOH2 1ECC DA F8 1E JP C,HEXERR 1ECF 82 ADD A,D 1ED0 77 LD (HL),A 1ED1 81 ADD A,C 1ED2 4F LD C,A 1ED3 23 INC HL 1ED4 10 E6 DJNZ LCMD3 1ED6 79 LD A,C 1ED7 2F CPL 1ED8 3C INC A 1ED9 4F LD C,A 1EDA D7 RST 10H 1EDB CD 32 1F CALL ATOH2 1EDE DA F8 1E JP C,HEXERR 1EE1 87 ADD A,A 1EE2 87 ADD A,A 1EE3 87 ADD A,A 1EE4 87 ADD A,A 1EE5 57 LD D,A 1EE6 D7 RST 10H 1EE7 CD 32 1F CALL ATOH2 1EEA DA F8 1E JP C,HEXERR 1EED 82 ADD A,D 1EEE B9 CP C 1EEF C2 F8 1E JP NZ,HEXERR 1EF2 3E 2A LD A,'*' ;+************ 1EF4 CF RST 08H 1EF5 C3 4F 1E JP LCMD0 1EF8 21 1F 1F HEXERR: LD HL,HEXMS1 ; Sign-on message 1EFB CD 58 12 CALL PRS ; Output string POP BC 1EFE E1 POP HL 1EFF D1 POP DE 1F00 C3 DE 00 JP COLD 1F03 D7 HEXEND: RST 10H 1F04 FE 0D CP 0DH 1F06 20 FB JR NZ,HEXEND 1F08 CD BA 0B CALL PRCRLF 1F0B 21 29 1F LD HL,HEXMS2 ; Sign-on message 1F0E CD 58 12 CALL PRS ; Output string POP BC 1F11 E1 POP HL 1F12 D1 POP DE 1F13 C3 DE 00 JP COLD 1F16 52 45 41 44 HEXMSG: DB 'READY' 1F1A 59 1F1B 0D 0A 00 00 DB cr,lf,0,0 1F1F 46 41 49 4C HEXMS1: DB 'FAILED' 1F23 45 44 1F25 0D 0A 00 00 DB cr,lf,0,0 1F29 45 4E 44 45 HEXMS2: DB 'ENDED' 1F2D 44 1F2E 0D 0A 00 00 DB cr,lf,0,0 1F32 FE 30 ATOH2: CP '0' 1F34 D8 RET C 1F35 FE 3A CP '9'+1 1F37 38 09 JR C,ATOHO 1F39 FE 41 CP 'A' 1F3B D8 RET C 1F3C FE 47 CP 'F'+1 1F3E 3F CCF 1F3F D8 RET C 1F40 C6 09 ADD A,09H 1F42 E6 0F ATOHO: AND 0FH 1F44 C9 RET 1F45 F5 WHTREG: PUSH AF 1F46 C5 PUSH BC 1F47 D5 PUSH DE 1F48 E5 PUSH HL 1F49 32 0D 80 LD (AFREG),A 1F4C ED 43 0F 80 LD (BCREG),BC 1F50 ED 53 11 80 LD (DEREG),DE 1F54 22 13 80 LD (HLREG),HL 1F57 E1 POP HL 1F58 D1 POP DE 1F59 C1 POP BC 1F5A F1 POP AF 1F5B C9 RET 1F5C BSRAM: ;0000H 1F5C F3 C3 A7 00 DB 0F3H, 0C3H, 0A7H, 000H, 0FFH, 0FFH, 0FFH, 0FFH, 0C3H, 072H, 000H, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH 1F60 FF FF FF FF 1F64 C3 72 00 FF 1F68 FF FF FF FF 1F6C C3 4C 00 FF DB 0C3H, 04CH, 000H, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0C3H, 07DH, 000H, 0F3H, 0F5H, 0C5H, 0D5H, 0E5H 1F70 FF FF FF FF 1F74 C3 7D 00 F3 1F78 F5 C5 D5 E5 1F7C DB 19 CB 47 DB 0DBH, 019H, 0CBH, 047H, 028H, 01FH, 0DBH, 018H, 057H, 03AH, 000H, 081H, 0FEH, 040H, 028H, 015H 1F80 28 1F DB 18 1F84 57 3A 00 81 1F88 FE 40 28 15 1F8C 3C 32 00 81 DB 03CH, 032H, 000H, 081H, 03AH, 002H, 081H, 04FH, 006H, 000H, 021H, 003H, 081H, 009H, 072H, 03CH 1F90 3A 02 81 4F 1F94 06 00 21 03 1F98 81 09 72 3C 1F9C E6 3F 32 02 DB 0E6H, 03FH, 032H, 002H, 081H, 0E1H, 0D1H, 0C1H, 0F1H, 0FBH, 0EDH, 04DH, 0C5H, 0D5H, 0E5H, 03AH 1FA0 81 E1 D1 C1 1FA4 F1 FB ED 4D 1FA8 C5 D5 E5 3A 1FAC 00 81 FE 00 DB 000H, 081H, 0FEH, 000H, 028H, 0F9H, 0F3H, 03DH, 032H, 000H, 081H, 03AH, 001H, 081H, 04FH, 006H 1FB0 28 F9 F3 3D 1FB4 32 00 81 3A 1FB8 01 81 4F 06 1FBC 00 21 03 81 DB 000H, 021H, 003H, 081H, 009H, 056H, 03CH, 0E6H, 03FH, 032H, 001H, 081H, 07AH, 0FBH, 0E1H, 0D1H 1FC0 09 56 3C E6 1FC4 3F 32 01 81 1FC8 7A FB E1 D1 1FCC C1 C9 F5 DB DB 0C1H, 0C9H, 0F5H, 0DBH, 019H, 0CBH, 057H, 028H, 0FAH, 0F1H, 0D3H, 018H, 0C9H, 03AH, 000H, 081H 1FD0 19 CB 57 28 1FD4 FA F1 D3 18 1FD8 C9 3A 00 81 1FDC FE 00 C9 FF DB 0FEH, 000H, 0C9H, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH 1FE0 FF FF FF FF 1FE4 FF FF FF FF 1FE8 FF FF FF FF 1FEC 7E 1D 00 00 DB 07EH, 01DH, 000H, 000H, 000H, 000H, 000H, 000H, 01BH, 000H, 018H, 001H, 010H, 004H, 044H, 005H 1FF0 00 00 00 00 1FF4 1B 00 18 01 1FF8 10 04 44 05 1FFC EA 03 C1 01 DB 0EAH, 003H, 0C1H, 001H, 000H, 002H, 098H, 031H, 0EDH, 080H, 0AFH, 032H, 000H, 081H, 032H, 001H 2000 00 02 98 31 2004 ED 80 AF 32 2008 00 81 32 01 200C 81 32 02 81 DB 081H, 032H, 002H, 081H, 03EH, 007H, 0D3H, 013H, 03EH, 004H, 0D3H, 013H, 006H, 009H, 00EH, 019H 2010 3E 07 D3 13 2014 3E 04 D3 13 2018 06 09 0E 19 201C 21 9A 00 ED DB 021H, 09AH, 000H, 0EDH, 0B3H, 006H, 004H, 00EH, 01BH, 021H, 0A3H, 000H, 0EDH, 0B3H, 021H, 098H 2020 B3 06 04 0E 2024 1B 21 A3 00 2028 ED B3 21 98 202C 00 7C ED 47 DB 000H, 07CH, 0EDH, 047H, 0EDH, 05EH, 0FBH, 0CDH, 056H, 01DH, 0C3H, 0DDH, 000H, 0C3H, 0E3H, 000H 2030 ED 5E FB CD 2034 56 1D C3 DD 2038 00 C3 E3 00 203C C3 6A 01 C3 DB 0C3H, 06AH, 001H, 0C3H, 0EAH, 000H, 0B0H, 009H, 026H, 011H, 021H, 045H, 021H, 0F9H, 03EH, 002H 2040 EA 00 B0 09 2044 26 11 21 45 2048 21 F9 3E 02 204C 32 00 20 AF DB 032H, 000H, 020H, 0AFH, 032H, 007H, 020H, 032H, 006H, 020H, 032H, 005H, 020H, 032H, 004H, 020H 2050 32 07 20 32 2054 06 20 32 05 2058 20 32 04 20 ;0100H 205C C3 41 1D 11 DB 0C3H, 041H, 01DH, 011H, 0D7H, 003H, 006H, 063H, 021H, 045H, 021H, 01AH, 077H, 023H, 013H, 005H 2060 D7 03 06 63 2064 21 45 21 1A 2068 77 23 13 05 206C C2 0B 01 F9 DB 0C2H, 00BH, 001H, 0F9H, 0CDH, 0D8H, 005H, 0CDH, 0A6H, 00BH, 032H, 0EFH, 021H, 032H, 03EH, 022H 2070 CD D8 05 CD 2074 A6 0B 32 EF 2078 21 32 3E 22 207C 21 A2 22 23 DB 021H, 0A2H, 022H, 023H, 07CH, 0B5H, 0CAH, 032H, 001H, 07EH, 047H, 02FH, 077H, 0BEH, 070H, 0CAH 2080 7C B5 CA 32 2084 01 7E 47 2F 2088 77 BE 70 CA 208C 23 01 2B 11 DB 023H, 001H, 02BH, 011H, 0A1H, 022H, 0CDH, 06EH, 007H, 0DAH, 073H, 001H, 011H, 0CEH, 0FFH, 022H 2090 A1 22 CD 6E 2094 07 DA 73 01 2098 11 CE FF 22 209C F4 21 19 22 DB 0F4H, 021H, 019H, 022H, 09FH, 021H, 0CDH, 0B3H, 005H, 02AH, 09FH, 021H, 011H, 0EFH, 0FFH, 019H 20A0 9F 21 CD B3 20A4 05 2A 9F 21 20A8 11 EF FF 19 20AC 11 3E 22 7D DB 011H, 03EH, 022H, 07DH, 093H, 06FH, 07CH, 09AH, 067H, 0E5H, 021H, 08BH, 001H, 0CDH, 044H, 012H 20B0 93 6F 7C 9A 20B4 67 E5 21 8B 20B8 01 CD 44 12 20BC E1 CD E7 18 DB 0E1H, 0CDH, 0E7H, 018H, 021H, 07CH, 001H, 0CDH, 044H, 012H, 031H, 0ABH, 021H, 0CDH, 0D8H, 005H 20C0 21 7C 01 CD 20C4 44 12 31 AB 20C8 21 CD D8 05 20CC C3 F1 04 21 DB 0C3H, 0F1H, 004H, 021H, 0C9H, 001H, 0CDH, 044H, 012H, 0C3H, 079H, 001H, 020H, 042H, 079H, 074H 20D0 C9 01 CD 44 20D4 12 C3 79 01 20D8 20 42 79 74 20DC 65 73 20 66 DB 065H, 073H, 020H, 066H, 072H, 065H, 065H, 00DH, 00AH, 000H, 000H, 05AH, 038H, 030H, 020H, 042H 20E0 72 65 65 0D 20E4 0A 00 00 5A 20E8 38 30 20 42 20EC 41 53 49 43 DB 041H, 053H, 049H, 043H, 020H, 056H, 065H, 072H, 020H, 034H, 02EH, 037H, 062H, 00DH, 00AH, 043H 20F0 20 56 65 72 20F4 20 34 2E 37 20F8 62 0D 0A 43 20FC 6F 70 79 72 DB 06FH, 070H, 079H, 072H, 069H, 067H, 068H, 074H, 020H, 028H, 043H, 029H, 020H, 031H, 039H, 037H 2100 69 67 68 74 2104 20 28 43 29 2108 20 31 39 37 210C 38 20 62 79 DB 038H, 020H, 062H, 079H, 020H, 04DH, 069H, 063H, 072H, 06FH, 073H, 06FH, 066H, 074H, 020H, 06FH 2110 20 4D 69 63 2114 72 6F 73 6F 2118 66 74 20 6F 211C 6E 20 52 41 DB 06EH, 020H, 052H, 041H, 04DH, 00DH, 00AH, 000H, 000H, 04DH, 065H, 06DH, 06FH, 072H, 079H, 020H 2120 4D 0D 0A 00 2124 00 4D 65 6D 2128 6F 72 79 20 212C 73 69 7A 65 DB 073H, 069H, 07AH, 065H, 020H, 06EH, 06FH, 074H, 020H, 065H, 06EH, 06FH, 075H, 067H, 068H, 00DH 2130 20 6E 6F 74 2134 20 65 6E 6F 2138 75 67 68 0D 213C 0A 54 68 65 DB 00AH, 054H, 068H, 065H, 020H, 073H, 079H, 073H, 074H, 065H, 06DH, 020H, 069H, 073H, 020H, 073H 2140 20 73 79 73 2144 74 65 6D 20 2148 69 73 20 73 214C 74 6F 70 70 DB 074H, 06FH, 070H, 070H, 065H, 064H, 02EH, 00DH, 00AH, 000H, 000H, 05CH, 017H, 020H, 018H, 072H 2150 65 64 2E 0D 2154 0A 00 00 5C 2158 17 20 18 72 ;0200H 215C 17 48 21 04 DB 017H, 048H, 021H, 004H, 011H, 089H, 014H, 032H, 011H, 0E6H, 019H, 0C5H, 01AH, 001H, 016H, 034H 2160 11 89 14 32 2164 11 E6 19 C5 2168 1A 01 16 34 216C 1A 3A 1B 40 DB 01AH, 03AH, 01BH, 040H, 01BH, 0A1H, 01BH, 0B6H, 01BH, 0DDH, 014H, 021H, 01CH, 096H, 021H, 0B6H 2170 1B A1 1B B6 2174 1B DD 14 21 2178 1C 96 21 B6 217C 13 CE 11 50 DB 013H, 0CEH, 011H, 050H, 014H, 0C5H, 013H, 0D6H, 013H, 043H, 01CH, 0D6H, 01CH, 0E6H, 013H, 016H 2180 14 C5 13 D6 2184 13 43 1C D6 2188 1C E6 13 16 218C 14 20 14 C5 DB 014H, 020H, 014H, 0C5H, 04EH, 044H, 0C6H, 04FH, 052H, 0CEH, 045H, 058H, 054H, 0C4H, 041H, 054H 2190 4E 44 C6 4F 2194 52 CE 45 58 2198 54 C4 41 54 219C 41 C9 4E 50 DB 041H, 0C9H, 04EH, 050H, 055H, 054H, 0C4H, 049H, 04DH, 0D2H, 045H, 041H, 044H, 0CCH, 045H, 054H 21A0 55 54 C4 49 21A4 4D D2 45 41 21A8 44 CC 45 54 21AC C7 4F 54 4F DB 0C7H, 04FH, 054H, 04FH, 0D2H, 055H, 04EH, 0C9H, 046H, 0D2H, 045H, 053H, 054H, 04FH, 052H, 045H 21B0 D2 55 4E C9 21B4 46 D2 45 53 21B8 54 4F 52 45 21BC C7 4F 53 55 DB 0C7H, 04FH, 053H, 055H, 042H, 0D2H, 045H, 054H, 055H, 052H, 04EH, 0D2H, 045H, 04DH, 0D3H, 054H 21C0 42 D2 45 54 21C4 55 52 4E D2 21C8 45 4D D3 54 21CC 4F 50 CF 55 DB 04FH, 050H, 0CFH, 055H, 054H, 0CFH, 04EH, 0CEH, 055H, 04CH, 04CH, 0D7H, 041H, 049H, 054H, 0C4H 21D0 54 CF 4E CE 21D4 55 4C 4C D7 21D8 41 49 54 C4 21DC 45 46 D0 4F DB 045H, 046H, 0D0H, 04FH, 04BH, 045H, 0C4H, 04FH, 04BH, 045H, 0D3H, 043H, 052H, 045H, 045H, 04EH 21E0 4B 45 C4 4F 21E4 4B 45 D3 43 21E8 52 45 45 4E 21EC CC 49 4E 45 DB 0CCH, 049H, 04EH, 045H, 053H, 0C3H, 04CH, 053H, 0D7H, 049H, 044H, 054H, 048H, 0CDH, 04FH, 04EH 21F0 53 C3 4C 53 21F4 D7 49 44 54 21F8 48 CD 4F 4E 21FC 49 54 4F 52 DB 049H, 054H, 04FH, 052H, 0D3H, 045H, 054H, 0D2H, 045H, 053H, 045H, 054H, 0D0H, 052H, 049H, 04EH 2200 D3 45 54 D2 2204 45 53 45 54 2208 D0 52 49 4E 220C 54 C3 4F 4E DB 054H, 0C3H, 04FH, 04EH, 054H, 0CCH, 049H, 053H, 054H, 0C3H, 04CH, 045H, 041H, 052H, 0D0H, 050H 2210 54 CC 49 53 2214 54 C3 4C 45 2218 41 52 D0 50 221C CC 4F 41 44 DB 0CCH, 04FH, 041H, 044H, 0CEH, 045H, 057H, 0D4H, 041H, 042H, 028H, 0D4H, 04FH, 0C6H, 04EH, 0D3H 2220 CE 45 57 D4 2224 41 42 28 D4 2228 4F C6 4E D3 222C 50 43 28 D4 DB 050H, 043H, 028H, 0D4H, 048H, 045H, 04EH, 0CEH, 04FH, 054H, 0D3H, 054H, 045H, 050H, 0ABH, 0ADH 2230 48 45 4E CE 2234 4F 54 D3 54 2238 45 50 AB AD 223C AA AF DE C1 DB 0AAH, 0AFH, 0DEH, 0C1H, 04EH, 044H, 0CFH, 052H, 0BEH, 0BDH, 0BCH, 0D3H, 047H, 04EH, 0C9H, 04EH 2240 4E 44 CF 52 2244 BE BD BC D3 2248 47 4E C9 4E 224C 54 C1 42 53 DB 054H, 0C1H, 042H, 053H, 0D5H, 053H, 052H, 0C6H, 052H, 045H, 0C9H, 04EH, 050H, 0D0H, 04FH, 053H 2250 D5 53 52 C6 2254 52 45 C9 4E 2258 50 D0 4F 53 ;0300H 225C D3 51 52 D2 DB 0D3H, 051H, 052H, 0D2H, 04EH, 044H, 0CCH, 04FH, 047H, 0C5H, 058H, 050H, 0C3H, 04FH, 053H, 0D3H 2260 4E 44 CC 4F 2264 47 C5 58 50 2268 C3 4F 53 D3 226C 49 4E D4 41 DB 049H, 04EH, 0D4H, 041H, 04EH, 0C1H, 054H, 04EH, 0D0H, 045H, 045H, 04BH, 0C4H, 045H, 045H, 04BH 2270 4E C1 54 4E 2274 D0 45 45 4B 2278 C4 45 45 4B 227C D0 4F 49 4E DB 0D0H, 04FH, 049H, 04EH, 054H, 0CCH, 045H, 04EH, 0D3H, 054H, 052H, 024H, 0D6H, 041H, 04CH, 0C1H 2280 54 CC 45 4E 2284 D3 54 52 24 2288 D6 41 4C C1 228C 53 43 C3 48 DB 053H, 043H, 0C3H, 048H, 052H, 024H, 0C8H, 045H, 058H, 024H, 0C2H, 049H, 04EH, 024H, 0CCH, 045H 2290 52 24 C8 45 2294 58 24 C2 49 2298 4E 24 CC 45 229C 46 54 24 D2 DB 046H, 054H, 024H, 0D2H, 049H, 047H, 048H, 054H, 024H, 0CDH, 049H, 044H, 024H, 080H, 048H, 009H 22A0 49 47 48 54 22A4 24 CD 49 44 22A8 24 80 48 09 22AC 45 08 20 0D DB 045H, 008H, 020H, 00DH, 095H, 00AH, 027H, 00CH, 05CH, 00FH, 056H, 00CH, 0ACH, 00AH, 052H, 00AH 22B0 95 0A 27 0C 22B4 5C 0F 56 0C 22B8 AC 0A 52 0A 22BC 35 0A 24 0B DB 035H, 00AH, 024H, 00BH, 00EH, 009H, 041H, 00AH, 070H, 00AH, 097H, 00AH, 046H, 009H, 095H, 014H 22C0 0E 09 41 0A 22C4 70 0A 97 0A 22C8 46 09 95 14 22CC 06 0B 87 09 DB 006H, 00BH, 087H, 009H, 09BH, 014H, 03AH, 011H, 0E4H, 014H, 02CH, 01CH, 097H, 00AH, 012H, 01CH 22D0 9B 14 3A 11 22D4 E4 14 2C 1C 22D8 97 0A 12 1C 22DC 05 1C 0A 1C DB 005H, 01CH, 00AH, 01CH, 03EH, 01DH, 099H, 021H, 09CH, 021H, 048H, 00BH, 074H, 009H, 0BAH, 007H 22E0 3E 1D 99 21 22E4 9C 21 48 0B 22E8 74 09 BA 07 22EC EF 09 01 1E DB 0EFH, 009H, 001H, 01EH, 01DH, 01EH, 0B2H, 005H, 079H, 0CEH, 018H, 079H, 002H, 015H, 07CH, 040H 22F0 1D 1E B2 05 22F4 79 CE 18 79 22F8 02 15 7C 40 22FC 16 7C A1 16 DB 016H, 07CH, 0A1H, 016H, 07FH, 0EFH, 019H, 050H, 0B5H, 00EH, 046H, 0B4H, 00EH, 04EH, 046H, 053H 2300 7F EF 19 50 2304 B5 0E 46 B4 2308 0E 4E 46 53 230C 4E 52 47 4F DB 04EH, 052H, 047H, 04FH, 044H, 046H, 043H, 04FH, 056H, 04FH, 04DH, 055H, 04CH, 042H, 053H, 044H 2310 44 46 43 4F 2314 56 4F 4D 55 2318 4C 42 53 44 231C 44 2F 30 49 DB 044H, 02FH, 030H, 049H, 044H, 054H, 04DH, 04FH, 053H, 04CH, 053H, 053H, 054H, 043H, 04EH, 055H 2320 44 54 4D 4F 2324 53 4C 53 53 2328 54 43 4E 55 232C 46 4D 4F 48 DB 046H, 04DH, 04FH, 048H, 058H, 042H, 04EH, 0C3H, 06AH, 001H, 0C3H, 0C5H, 009H, 0D3H, 000H, 0C9H 2330 58 42 4E C3 2334 6A 01 C3 C5 2338 09 D3 00 C9 233C D6 00 6F 7C DB 0D6H, 000H, 06FH, 07CH, 0DEH, 000H, 067H, 078H, 0DEH, 000H, 047H, 03EH, 000H, 0C9H, 000H, 000H 2340 DE 00 67 78 2344 DE 00 47 3E 2348 00 C9 00 00 234C 00 35 4A CA DB 000H, 035H, 04AH, 0CAH, 099H, 039H, 01CH, 076H, 098H, 022H, 095H, 0B3H, 098H, 00AH, 0DDH, 047H 2350 99 39 1C 76 2354 98 22 95 B3 2358 98 0A DD 47 ;0400H 235C 98 53 D1 99 DB 098H, 053H, 0D1H, 099H, 099H, 00AH, 01AH, 09FH, 098H, 065H, 0BCH, 0CDH, 098H, 0D6H, 077H, 03EH 2360 99 0A 1A 9F 2364 98 65 BC CD 2368 98 D6 77 3E 236C 98 52 C7 4F DB 098H, 052H, 0C7H, 04FH, 080H, 0DBH, 000H, 0C9H, 001H, 0FFH, 01CH, 000H, 000H, 014H, 000H, 014H 2370 80 DB 00 C9 2374 01 FF 1C 00 2378 00 14 00 14 237C 00 00 00 00 DB 000H, 000H, 000H, 000H, 000H, 0C3H, 0EBH, 006H, 0C3H, 000H, 000H, 0C3H, 000H, 000H, 0C3H, 000H 2380 00 C3 EB 06 2384 C3 00 00 C3 2388 00 00 C3 00 238C 00 A2 22 FE DB 000H, 0A2H, 022H, 0FEH, 0FFH, 03FH, 022H, 020H, 045H, 072H, 072H, 06FH, 072H, 000H, 020H, 069H 2390 FF 3F 22 20 2394 45 72 72 6F 2398 72 00 20 69 239C 6E 20 00 4F DB 06EH, 020H, 000H, 04FH, 06BH, 00DH, 00AH, 000H, 000H, 042H, 072H, 065H, 061H, 06BH, 000H, 021H 23A0 6B 0D 0A 00 23A4 00 42 72 65 23A8 61 6B 00 21 23AC 04 00 39 7E DB 004H, 000H, 039H, 07EH, 023H, 0FEH, 081H, 0C0H, 04EH, 023H, 046H, 023H, 0E5H, 069H, 060H, 07AH 23B0 23 FE 81 C0 23B4 4E 23 46 23 23B8 E5 69 60 7A 23BC B3 EB CA 69 DB 0B3H, 0EBH, 0CAH, 069H, 004H, 0EBH, 0CDH, 06EH, 007H, 001H, 00DH, 000H, 0E1H, 0C8H, 009H, 0C3H 23C0 04 EB CD 6E 23C4 07 01 0D 00 23C8 E1 C8 09 C3 23CC 53 04 CD 8C DB 053H, 004H, 0CDH, 08CH, 004H, 0C5H, 0E3H, 0C1H, 0CDH, 06EH, 007H, 07EH, 002H, 0C8H, 00BH, 02BH 23D0 04 C5 E3 C1 23D4 CD 6E 07 7E 23D8 02 C8 0B 2B 23DC C3 78 04 E5 DB 0C3H, 078H, 004H, 0E5H, 02AH, 01FH, 022H, 006H, 000H, 009H, 009H, 03EH, 0E5H, 03EH, 0D0H, 095H 23E0 2A 1F 22 06 23E4 00 09 09 3E 23E8 E5 3E D0 95 23EC 6F 3E FF 9C DB 06FH, 03EH, 0FFH, 09CH, 0DAH, 09BH, 004H, 067H, 039H, 0E1H, 0D8H, 01EH, 00CH, 0C3H, 0BAH, 004H 23F0 DA 9B 04 67 23F4 39 E1 D8 1E 23F8 0C C3 BA 04 23FC 2A 0E 22 22 DB 02AH, 00EH, 022H, 022H, 0A1H, 021H, 01EH, 002H, 001H, 01EH, 014H, 001H, 01EH, 000H, 001H, 01EH 2400 A1 21 1E 02 2404 01 1E 14 01 2408 1E 00 01 1E 240C 12 01 1E 22 DB 012H, 001H, 01EH, 022H, 001H, 01EH, 00AH, 001H, 01EH, 018H, 0CDH, 0D8H, 005H, 032H, 08AH, 021H 2410 01 1E 0A 01 2414 1E 18 CD D8 2418 05 32 8A 21 241C CD 99 0B 21 DB 0CDH, 099H, 00BH, 021H, 0ADH, 003H, 057H, 03EH, 03FH, 0CDH, 07FH, 007H, 019H, 07EH, 0CDH, 07FH 2420 AD 03 57 3E 2424 3F CD 7F 07 2428 19 7E CD 7F 242C 07 CD FE 08 DB 007H, 0CDH, 0FEH, 008H, 0CDH, 07FH, 007H, 021H, 037H, 004H, 0CDH, 044H, 012H, 02AH, 0A1H, 021H 2430 CD 7F 07 21 2434 37 04 CD 44 2438 12 2A A1 21 243C 11 FE FF CD DB 011H, 0FEH, 0FFH, 0CDH, 06EH, 007H, 0CAH, 0EAH, 000H, 07CH, 0A5H, 03CH, 0C4H, 0DFH, 018H, 03EH 2440 6E 07 CA EA 2444 00 7C A5 3C 2448 C4 DF 18 3E 244C C1 AF 32 8A DB 0C1H, 0AFH, 032H, 08AH, 021H, 0CDH, 099H, 00BH, 021H, 043H, 004H, 0CDH, 044H, 012H, 021H, 0FFH 2450 21 CD 99 0B 2454 21 43 04 CD 2458 44 12 21 FF ;0500H 245C FF 22 A1 21 DB 0FFH, 022H, 0A1H, 021H, 0CDH, 0EBH, 006H, 0DAH, 0FEH, 004H, 0CDH, 0FEH, 008H, 03CH, 03DH, 0CAH 2460 CD EB 06 DA 2464 FE 04 CD FE 2468 08 3C 3D CA 246C FE 04 F5 CD DB 0FEH, 004H, 0F5H, 0CDH, 0CAH, 009H, 0D5H, 0CDH, 002H, 006H, 047H, 0D1H, 0F1H, 0D2H, 0DEH, 008H 2470 CA 09 D5 CD 2474 02 06 47 D1 2478 F1 D2 DE 08 247C D5 C5 AF 32 DB 0D5H, 0C5H, 0AFH, 032H, 011H, 022H, 0CDH, 0FEH, 008H, 0B7H, 0F5H, 0CDH, 092H, 005H, 0DAH, 037H 2480 11 22 CD FE 2484 08 B7 F5 CD 2488 92 05 DA 37 248C 05 F1 F5 CA DB 005H, 0F1H, 0F5H, 0CAH, 06BH, 00AH, 0B7H, 0C5H, 0D2H, 04EH, 005H, 0EBH, 02AH, 01BH, 022H, 01AH 2490 6B 0A B7 C5 2494 D2 4E 05 EB 2498 2A 1B 22 1A 249C 02 03 13 CD DB 002H, 003H, 013H, 0CDH, 06EH, 007H, 0C2H, 03FH, 005H, 060H, 069H, 022H, 01BH, 022H, 0D1H, 0F1H 24A0 6E 07 C2 3F 24A4 05 60 69 22 24A8 1B 22 D1 F1 24AC CA 75 05 2A DB 0CAH, 075H, 005H, 02AH, 01BH, 022H, 0E3H, 0C1H, 009H, 0E5H, 0CDH, 072H, 004H, 0E1H, 022H, 01BH 24B0 1B 22 E3 C1 24B4 09 E5 CD 72 24B8 04 E1 22 1B 24BC 22 EB 74 D1 DB 022H, 0EBH, 074H, 0D1H, 023H, 023H, 073H, 023H, 072H, 023H, 011H, 0A6H, 021H, 01AH, 077H, 023H 24C0 23 23 73 23 24C4 72 23 11 A6 24C8 21 1A 77 23 24CC 13 B7 C2 6D DB 013H, 0B7H, 0C2H, 06DH, 005H, 0CDH, 0BEH, 005H, 023H, 0EBH, 062H, 06BH, 07EH, 023H, 0B6H, 0CAH 24D0 05 CD BE 05 24D4 23 EB 62 6B 24D8 7E 23 B6 CA 24DC FE 04 23 23 DB 0FEH, 004H, 023H, 023H, 023H, 0AFH, 0BEH, 023H, 0C2H, 086H, 005H, 0EBH, 073H, 023H, 072H, 0C3H 24E0 23 AF BE 23 24E4 C2 86 05 EB 24E8 73 23 72 C3 24EC 7A 05 2A A3 DB 07AH, 005H, 02AH, 0A3H, 021H, 044H, 04DH, 07EH, 023H, 0B6H, 02BH, 0C8H, 023H, 023H, 07EH, 023H 24F0 21 44 4D 7E 24F4 23 B6 2B C8 24F8 23 23 7E 23 24FC 66 6F CD 6E DB 066H, 06FH, 0CDH, 06EH, 007H, 060H, 069H, 07EH, 023H, 066H, 06FH, 03FH, 0C8H, 03FH, 0D0H, 0C3H 2500 07 60 69 7E 2504 23 66 6F 3F 2508 C8 3F D0 C3 250C 95 05 C0 2A DB 095H, 005H, 0C0H, 02AH, 0A3H, 021H, 0AFH, 077H, 023H, 077H, 023H, 022H, 01BH, 022H, 02AH, 0A3H 2510 A3 21 AF 77 2514 23 77 23 22 2518 1B 22 2A A3 251C 21 2B 22 13 DB 021H, 02BH, 022H, 013H, 022H, 02AH, 0F4H, 021H, 022H, 008H, 022H, 0AFH, 0CDH, 00EH, 009H, 02AH 2520 22 2A F4 21 2524 22 08 22 AF 2528 CD 0E 09 2A 252C 1B 22 22 1D DB 01BH, 022H, 022H, 01DH, 022H, 022H, 01FH, 022H, 0C1H, 02AH, 09FH, 021H, 0F9H, 021H, 0F8H, 021H 2530 22 22 1F 22 2534 C1 2A 9F 21 2538 F9 21 F8 21 253C 22 F6 21 AF DB 022H, 0F6H, 021H, 0AFH, 06FH, 067H, 022H, 019H, 022H, 032H, 010H, 022H, 022H, 023H, 022H, 0E5H 2540 6F 67 22 19 2544 22 32 10 22 2548 22 23 22 E5 254C C5 2A 13 22 DB 0C5H, 02AH, 013H, 022H, 0C9H, 03EH, 03FH, 0CDH, 07FH, 007H, 03EH, 020H, 0CDH, 07FH, 007H, 0C3H 2550 C9 3E 3F CD 2554 7F 07 3E 20 2558 CD 7F 07 C3 ;0600H 255C 93 21 AF 32 DB 093H, 021H, 0AFH, 032H, 0F3H, 021H, 00EH, 005H, 011H, 0A6H, 021H, 07EH, 0FEH, 020H, 0CAH, 08AH 2560 F3 21 0E 05 2564 11 A6 21 7E 2568 FE 20 CA 8A 256C 06 47 FE 22 DB 006H, 047H, 0FEH, 022H, 0CAH, 0AAH, 006H, 0B7H, 0CAH, 0B1H, 006H, 03AH, 0F3H, 021H, 0B7H, 07EH 2570 CA AA 06 B7 2574 CA B1 06 3A 2578 F3 21 B7 7E 257C C2 8A 06 FE DB 0C2H, 08AH, 006H, 0FEH, 03FH, 03EH, 09EH, 0CAH, 08AH, 006H, 07EH, 0FEH, 030H, 0DAH, 035H, 006H 2580 3F 3E 9E CA 2584 8A 06 7E FE 2588 30 DA 35 06 258C FE 3C DA 8A DB 0FEH, 03CH, 0DAH, 08AH, 006H, 0D5H, 011H, 032H, 002H, 0C5H, 001H, 086H, 006H, 0C5H, 006H, 07FH 2590 06 D5 11 32 2594 02 C5 01 86 2598 06 C5 06 7F 259C 7E FE 61 DA DB 07EH, 0FEH, 061H, 0DAH, 04EH, 006H, 0FEH, 07BH, 0D2H, 04EH, 006H, 0E6H, 05FH, 077H, 04EH, 0EBH 25A0 4E 06 FE 7B 25A4 D2 4E 06 E6 25A8 5F 77 4E EB 25AC 23 B6 F2 50 DB 023H, 0B6H, 0F2H, 050H, 006H, 004H, 07EH, 0E6H, 07FH, 0C8H, 0B9H, 0C2H, 050H, 006H, 0EBH, 0E5H 25B0 06 04 7E E6 25B4 7F C8 B9 C2 25B8 50 06 EB E5 25BC 13 1A B7 FA DB 013H, 01AH, 0B7H, 0FAH, 082H, 006H, 04FH, 078H, 0FEH, 088H, 0C2H, 071H, 006H, 0CDH, 0FEH, 008H 25C0 82 06 4F 78 25C4 FE 88 C2 71 25C8 06 CD FE 08 25CC 2B 23 7E FE DB 02BH, 023H, 07EH, 0FEH, 061H, 0DAH, 07AH, 006H, 0E6H, 05FH, 0B9H, 0CAH, 060H, 006H, 0E1H, 0C3H 25D0 61 DA 7A 06 25D4 E6 5F B9 CA 25D8 60 06 E1 C3 25DC 4E 06 48 F1 DB 04EH, 006H, 048H, 0F1H, 0EBH, 0C9H, 0EBH, 079H, 0C1H, 0D1H, 023H, 012H, 013H, 00CH, 0D6H, 03AH 25E0 EB C9 EB 79 25E4 C1 D1 23 12 25E8 13 0C D6 3A 25EC CA 98 06 FE DB 0CAH, 098H, 006H, 0FEH, 049H, 0C2H, 09BH, 006H, 032H, 0F3H, 021H, 0D6H, 054H, 0C2H, 00BH, 006H 25F0 49 C2 9B 06 25F4 32 F3 21 D6 25F8 54 C2 0B 06 25FC 47 7E B7 CA DB 047H, 07EH, 0B7H, 0CAH, 0B1H, 006H, 0B8H, 0CAH, 08AH, 006H, 023H, 012H, 00CH, 013H, 0C3H, 0A1H 2600 B1 06 B8 CA 2604 8A 06 23 12 2608 0C 13 C3 A1 260C 06 21 A5 21 DB 006H, 021H, 0A5H, 021H, 012H, 013H, 012H, 013H, 012H, 0C9H, 03AH, 089H, 021H, 0B7H, 03EH, 000H 2610 12 13 12 13 2614 12 C9 3A 89 2618 21 B7 3E 00 261C 32 89 21 C2 DB 032H, 089H, 021H, 0C2H, 0CEH, 006H, 005H, 0CAH, 0EBH, 006H, 0CDH, 07FH, 007H, 03EH, 005H, 02BH 2620 CE 06 05 CA 2624 EB 06 CD 7F 2628 07 3E 05 2B 262C CA E2 06 7E DB 0CAH, 0E2H, 006H, 07EH, 0CDH, 07FH, 007H, 0C3H, 0F4H, 006H, 005H, 02BH, 0CDH, 07FH, 007H, 0C2H 2630 CD 7F 07 C3 2634 F4 06 05 2B 2638 CD 7F 07 C2 263C F4 06 CD 7F DB 0F4H, 006H, 0CDH, 07FH, 007H, 0CDH, 0A6H, 00BH, 0C3H, 0EBH, 006H, 021H, 0A6H, 021H, 006H, 001H 2640 07 CD A6 0B 2644 C3 EB 06 21 2648 A6 21 06 01 264C AF 32 89 21 DB 0AFH, 032H, 089H, 021H, 0CDH, 0A9H, 007H, 04FH, 0FEH, 07FH, 0CAH, 0BAH, 006H, 03AH, 089H, 021H 2650 CD A9 07 4F 2654 FE 7F CA BA 2658 06 3A 89 21 ;0700H 265C B7 CA 0D 07 DB 0B7H, 0CAH, 00DH, 007H, 03EH, 000H, 0CDH, 07FH, 007H, 0AFH, 032H, 089H, 021H, 079H, 0FEH, 007H 2660 3E 00 CD 7F 2664 07 AF 32 89 2668 21 79 FE 07 266C CA 51 07 FE DB 0CAH, 051H, 007H, 0FEH, 003H, 0CCH, 0A6H, 00BH, 037H, 0C8H, 0FEH, 00DH, 0CAH, 0A1H, 00BH, 0FEH 2670 03 CC A6 0B 2674 37 C8 FE 0D 2678 CA A1 0B FE 267C 15 CA E5 06 DB 015H, 0CAH, 0E5H, 006H, 0FEH, 040H, 0CAH, 0E2H, 006H, 0FEH, 05FH, 0CAH, 0DAH, 006H, 0FEH, 008H 2680 FE 40 CA E2 2684 06 FE 5F CA 2688 DA 06 FE 08 268C CA DA 06 FE DB 0CAH, 0DAH, 006H, 0FEH, 012H, 0C2H, 04CH, 007H, 0C5H, 0D5H, 0E5H, 036H, 000H, 0CDH, 050H, 01DH 2690 12 C2 4C 07 2694 C5 D5 E5 36 2698 00 CD 50 1D 269C 21 A6 21 CD DB 021H, 0A6H, 021H, 0CDH, 044H, 012H, 0E1H, 0D1H, 0C1H, 0C3H, 0F4H, 006H, 0FEH, 020H, 0DAH, 0F4H 26A0 44 12 E1 D1 26A4 C1 C3 F4 06 26A8 FE 20 DA F4 26AC 06 78 FE 49 DB 006H, 078H, 0FEH, 049H, 03EH, 007H, 0D2H, 066H, 007H, 079H, 071H, 032H, 011H, 022H, 023H, 004H 26B0 3E 07 D2 66 26B4 07 79 71 32 26B8 11 22 23 04 26BC CD 7F 07 C3 DB 0CDH, 07FH, 007H, 0C3H, 0F4H, 006H, 0CDH, 07FH, 007H, 03EH, 008H, 0C3H, 060H, 007H, 07CH, 092H 26C0 F4 06 CD 7F 26C4 07 3E 08 C3 26C8 60 07 7C 92 26CC C0 7D 93 C9 DB 0C0H, 07DH, 093H, 0C9H, 07EH, 0E3H, 0BEH, 023H, 0E3H, 0CAH, 0FEH, 008H, 0C3H, 0A6H, 004H, 0F5H 26D0 7E E3 BE 23 26D4 E3 CA FE 08 26D8 C3 A6 04 F5 26DC 3A 8A 21 B7 DB 03AH, 08AH, 021H, 0B7H, 0C2H, 079H, 012H, 0F1H, 0C5H, 0F5H, 0FEH, 020H, 0DAH, 0A3H, 007H, 03AH 26E0 C2 79 12 F1 26E4 C5 F5 FE 20 26E8 DA A3 07 3A 26EC 87 21 47 3A DB 087H, 021H, 047H, 03AH, 0F0H, 021H, 004H, 0CAH, 09FH, 007H, 005H, 0B8H, 0CCH, 0A6H, 00BH, 03CH 26F0 F0 21 04 CA 26F4 9F 07 05 B8 26F8 CC A6 0B 3C 26FC 32 F0 21 F1 DB 032H, 0F0H, 021H, 0F1H, 0C1H, 0CDH, 03BH, 01DH, 0C9H, 0CDH, 003H, 01CH, 0E6H, 07FH, 0FEH, 00FH 2700 C1 CD 3B 1D 2704 C9 CD 03 1C 2708 E6 7F FE 0F 270C C0 3A 8A 21 DB 0C0H, 03AH, 08AH, 021H, 02FH, 032H, 08AH, 021H, 0AFH, 0C9H, 0CDH, 0CAH, 009H, 0C0H, 0C1H, 0CDH 2710 2F 32 8A 21 2714 AF C9 CD CA 2718 09 C0 C1 CD 271C 92 05 C5 CD DB 092H, 005H, 0C5H, 0CDH, 010H, 008H, 0E1H, 04EH, 023H, 046H, 023H, 078H, 0B1H, 0CAH, 0F1H, 004H 2720 10 08 E1 4E 2724 23 46 23 78 2728 B1 CA F1 04 272C CD 19 08 CD DB 0CDH, 019H, 008H, 0CDH, 029H, 009H, 0C5H, 0CDH, 0A6H, 00BH, 05EH, 023H, 056H, 023H, 0E5H, 0EBH 2730 29 09 C5 CD 2734 A6 0B 5E 23 2738 56 23 E5 EB 273C CD E7 18 3E DB 0CDH, 0E7H, 018H, 03EH, 020H, 0E1H, 0CDH, 07FH, 007H, 07EH, 0B7H, 023H, 0CAH, 0C6H, 007H, 0F2H 2740 20 E1 CD 7F 2744 07 7E B7 23 2748 CA C6 07 F2 274C E6 07 D6 7F DB 0E6H, 007H, 0D6H, 07FH, 04FH, 011H, 033H, 002H, 01AH, 013H, 0B7H, 0F2H, 0F8H, 007H, 00DH, 0C2H 2750 4F 11 33 02 2754 1A 13 B7 F2 2758 F8 07 0D C2 ;0800H 275C F8 07 E6 7F DB 0F8H, 007H, 0E6H, 07FH, 0CDH, 07FH, 007H, 01AH, 013H, 0B7H, 0F2H, 002H, 008H, 0C3H, 0E9H, 007H 2760 CD 7F 07 1A 2764 13 B7 F2 02 2768 08 C3 E9 07 276C E5 2A 8D 21 DB 0E5H, 02AH, 08DH, 021H, 022H, 08BH, 021H, 0E1H, 0C9H, 0E5H, 0D5H, 02AH, 08BH, 021H, 011H, 0FFH 2770 22 8B 21 E1 2774 C9 E5 D5 2A 2778 8B 21 11 FF 277C FF ED 5A 22 DB 0FFH, 0EDH, 05AH, 022H, 08BH, 021H, 0D1H, 0E1H, 0F0H, 0E5H, 02AH, 08DH, 021H, 022H, 08BH, 021H 2780 8B 21 D1 E1 2784 F0 E5 2A 8D 2788 21 22 8B 21 278C CD 03 1C FE DB 0CDH, 003H, 01CH, 0FEH, 003H, 0CAH, 03CH, 008H, 0E1H, 0C3H, 019H, 008H, 02AH, 08DH, 021H, 022H 2790 03 CA 3C 08 2794 E1 C3 19 08 2798 2A 8D 21 22 279C 8B 21 C3 6D DB 08BH, 021H, 0C3H, 06DH, 001H, 03EH, 064H, 032H, 010H, 022H, 0CDH, 0ACH, 00AH, 0C1H, 0E5H, 0CDH 27A0 01 3E 64 32 27A4 10 22 CD AC 27A8 0A C1 E5 CD 27AC 95 0A 22 0C DB 095H, 00AH, 022H, 00CH, 022H, 021H, 002H, 000H, 039H, 0CDH, 053H, 004H, 0D1H, 0C2H, 075H, 008H 27B0 22 21 02 00 27B4 39 CD 53 04 27B8 D1 C2 75 08 27BC 09 D5 2B 56 DB 009H, 0D5H, 02BH, 056H, 02BH, 05EH, 023H, 023H, 0E5H, 02AH, 00CH, 022H, 0CDH, 06EH, 007H, 0E1H 27C0 2B 5E 23 23 27C4 E5 2A 0C 22 27C8 CD 6E 07 E1 27CC C2 59 08 D1 DB 0C2H, 059H, 008H, 0D1H, 0F9H, 0EBH, 00EH, 008H, 0CDH, 083H, 004H, 0E5H, 02AH, 00CH, 022H, 0E3H 27D0 F9 EB 0E 08 27D4 CD 83 04 E5 27D8 2A 0C 22 E3 27DC E5 2A A1 21 DB 0E5H, 02AH, 0A1H, 021H, 0E3H, 0CDH, 06EH, 00DH, 0CDH, 074H, 007H, 0A6H, 0CDH, 06BH, 00DH, 0E5H 27E0 E3 CD 6E 0D 27E4 CD 74 07 A6 27E8 CD 6B 0D E5 27EC CD 99 17 E1 DB 0CDH, 099H, 017H, 0E1H, 0C5H, 0D5H, 001H, 000H, 081H, 051H, 05AH, 07EH, 0FEH, 0ABH, 03EH, 001H 27F0 C5 D5 01 00 27F4 81 51 5A 7E 27F8 FE AB 3E 01 27FC C2 B1 08 CD DB 0C2H, 0B1H, 008H, 0CDH, 0FEH, 008H, 0CDH, 06BH, 00DH, 0E5H, 0CDH, 099H, 017H, 0CDH, 04DH, 017H 2800 FE 08 CD 6B 2804 0D E5 CD 99 2808 17 CD 4D 17 280C E1 C5 D5 F5 DB 0E1H, 0C5H, 0D5H, 0F5H, 033H, 0E5H, 02AH, 013H, 022H, 0E3H, 006H, 081H, 0C5H, 033H, 0CDH, 029H 2810 33 E5 2A 13 2814 22 E3 06 81 2818 C5 33 CD 29 281C 09 22 13 22 DB 009H, 022H, 013H, 022H, 07EH, 0FEH, 03AH, 0CAH, 0DEH, 008H, 0B7H, 0C2H, 0A6H, 004H, 023H, 07EH 2820 7E FE 3A CA 2824 DE 08 B7 C2 2828 A6 04 23 7E 282C 23 B6 CA 50 DB 023H, 0B6H, 0CAH, 050H, 009H, 023H, 05EH, 023H, 056H, 0EBH, 022H, 0A1H, 021H, 0EBH, 0CDH, 0FEH 2830 09 23 5E 23 2834 56 EB 22 A1 2838 21 EB CD FE 283C 08 11 BE 08 DB 008H, 011H, 0BEH, 008H, 0D5H, 0C8H, 0D6H, 080H, 0DAH, 0ACH, 00AH, 0FEH, 025H, 0D2H, 0A6H, 004H 2840 D5 C8 D6 80 2844 DA AC 0A FE 2848 25 D2 A6 04 284C 07 4F 06 00 DB 007H, 04FH, 006H, 000H, 0EBH, 021H, 04EH, 003H, 009H, 04EH, 023H, 046H, 0C5H, 0EBH, 023H, 07EH 2850 EB 21 4E 03 2854 09 4E 23 46 2858 C5 EB 23 7E ;0900H 285C FE 3A D0 FE DB 0FEH, 03AH, 0D0H, 0FEH, 020H, 0CAH, 0FEH, 008H, 0FEH, 030H, 03FH, 03CH, 03DH, 0C9H, 0EBH, 02AH 2860 20 CA FE 08 2864 FE 30 3F 3C 2868 3D C9 EB 2A 286C A3 21 CA 23 DB 0A3H, 021H, 0CAH, 023H, 009H, 0EBH, 0CDH, 0CAH, 009H, 0E5H, 0CDH, 092H, 005H, 060H, 069H, 0D1H 2870 09 EB CD CA 2874 09 E5 CD 92 2878 05 60 69 D1 287C D2 6B 0A 2B DB 0D2H, 06BH, 00AH, 02BH, 022H, 021H, 022H, 0EBH, 0C9H, 0DFH, 0C8H, 0D7H, 0FEH, 01BH, 028H, 011H 2880 22 21 22 EB 2884 C9 DF C8 D7 2888 FE 1B 28 11 288C FE 03 28 0D DB 0FEH, 003H, 028H, 00DH, 0FEH, 013H, 0C0H, 0D7H, 0FEH, 011H, 0C8H, 0FEH, 003H, 028H, 007H, 018H 2890 FE 13 C0 D7 2894 FE 11 C8 FE 2898 03 28 07 18 289C F6 3E FF 32 DB 0F6H, 03EH, 0FFH, 032H, 092H, 021H, 0C0H, 0F6H, 0C0H, 022H, 013H, 022H, 021H, 0F6H, 0FFH, 0C1H 28A0 92 21 C0 F6 28A4 C0 22 13 22 28A8 21 F6 FF C1 28AC 2A A1 21 F5 DB 02AH, 0A1H, 021H, 0F5H, 07DH, 0A4H, 03CH, 0CAH, 063H, 009H, 022H, 017H, 022H, 02AH, 013H, 022H 28B0 7D A4 3C CA 28B4 63 09 22 17 28B8 22 2A 13 22 28BC 22 19 22 AF DB 022H, 019H, 022H, 0AFH, 032H, 08AH, 021H, 0CDH, 099H, 00BH, 0F1H, 021H, 049H, 004H, 0C2H, 0DAH 28C0 32 8A 21 CD 28C4 99 0B F1 21 28C8 49 04 C2 DA 28CC 04 C3 F1 04 DB 004H, 0C3H, 0F1H, 004H, 02AH, 019H, 022H, 07CH, 0B5H, 01EH, 020H, 0CAH, 0BAH, 004H, 0EBH, 02AH 28D0 2A 19 22 7C 28D4 B5 1E 20 CA 28D8 BA 04 EB 2A 28DC 17 22 22 A1 DB 017H, 022H, 022H, 0A1H, 021H, 0EBH, 0C9H, 0CDH, 0CCH, 014H, 0C0H, 032H, 086H, 021H, 0C9H, 0E5H 28E0 21 EB C9 CD 28E4 CC 14 C0 32 28E8 86 21 C9 E5 28EC 2A 8F 21 06 DB 02AH, 08FH, 021H, 006H, 000H, 04FH, 009H, 022H, 08FH, 021H, 0E1H, 0C9H, 07EH, 0FEH, 041H, 0D8H 28F0 00 4F 09 22 28F4 8F 21 E1 C9 28F8 7E FE 41 D8 28FC FE 5B 3F C9 DB 0FEH, 05BH, 03FH, 0C9H, 0CDH, 0FEH, 008H, 0CDH, 06BH, 00DH, 0CDH, 04DH, 017H, 0FAH, 0C5H, 009H 2900 CD FE 08 CD 2904 6B 0D CD 4D 2908 17 FA C5 09 290C 3A 2C 22 FE DB 03AH, 02CH, 022H, 0FEH, 090H, 0DAH, 0F5H, 017H, 001H, 080H, 090H, 011H, 000H, 000H, 0E5H, 0CDH 2910 90 DA F5 17 2914 01 80 90 11 2918 00 00 E5 CD 291C C8 17 E1 51 DB 0C8H, 017H, 0E1H, 051H, 0C8H, 01EH, 008H, 0C3H, 0BAH, 004H, 02BH, 011H, 000H, 000H, 0CDH, 0FEH 2920 C8 1E 08 C3 2924 BA 04 2B 11 2928 00 00 CD FE 292C 08 D0 E5 F5 DB 008H, 0D0H, 0E5H, 0F5H, 021H, 098H, 019H, 0CDH, 06EH, 007H, 0DAH, 0A6H, 004H, 062H, 06BH, 019H 2930 21 98 19 CD 2934 6E 07 DA A6 2938 04 62 6B 19 293C 29 19 29 F1 DB 029H, 019H, 029H, 0F1H, 0D6H, 030H, 05FH, 016H, 000H, 019H, 0EBH, 0E1H, 0C3H, 0CEH, 009H, 0CAH 2940 D6 30 5F 16 2944 00 19 EB E1 2948 C3 CE 09 CA 294C C2 05 CD A7 DB 0C2H, 005H, 0CDH, 0A7H, 009H, 02BH, 0CDH, 0FEH, 008H, 0E5H, 02AH, 0F4H, 021H, 0CAH, 012H, 00AH 2950 09 2B CD FE 2954 08 E5 2A F4 2958 21 CA 12 0A ;0A00H 295C E1 CD 74 07 DB 0E1H, 0CDH, 074H, 007H, 02CH, 0D5H, 0CDH, 0A7H, 009H, 02BH, 0CDH, 0FEH, 008H, 0C2H, 0A6H, 004H 2960 2C D5 CD A7 2964 09 2B CD FE 2968 08 C2 A6 04 296C E3 EB 7D 93 DB 0E3H, 0EBH, 07DH, 093H, 05FH, 07CH, 09AH, 057H, 0DAH, 09BH, 004H, 0E5H, 02AH, 01BH, 022H, 001H 2970 5F 7C 9A 57 2974 DA 9B 04 E5 2978 2A 1B 22 01 297C 28 00 09 CD DB 028H, 000H, 009H, 0CDH, 06EH, 007H, 0D2H, 09BH, 004H, 0EBH, 022H, 09FH, 021H, 0E1H, 022H, 0F4H 2980 6E 07 D2 9B 2984 04 EB 22 9F 2988 21 E1 22 F4 298C 21 E1 C3 C2 DB 021H, 0E1H, 0C3H, 0C2H, 005H, 0CAH, 0BEH, 005H, 0CDH, 0C2H, 005H, 001H, 0BEH, 008H, 0C3H, 051H 2990 05 CA BE 05 2994 CD C2 05 01 2998 BE 08 C3 51 299C 0A 0E 03 CD DB 00AH, 00EH, 003H, 0CDH, 083H, 004H, 0C1H, 0E5H, 0E5H, 02AH, 0A1H, 021H, 0E3H, 03EH, 08CH, 0F5H 29A0 83 04 C1 E5 29A4 E5 2A A1 21 29A8 E3 3E 8C F5 29AC 33 C5 CD CA DB 033H, 0C5H, 0CDH, 0CAH, 009H, 0CDH, 097H, 00AH, 0E5H, 02AH, 0A1H, 021H, 0CDH, 06EH, 007H, 0E1H 29B0 09 CD 97 0A 29B4 E5 2A A1 21 29B8 CD 6E 07 E1 29BC 23 DC 95 05 DB 023H, 0DCH, 095H, 005H, 0D4H, 092H, 005H, 060H, 069H, 02BH, 0D8H, 01EH, 00EH, 0C3H, 0BAH, 004H 29C0 D4 92 05 60 29C4 69 2B D8 1E 29C8 0E C3 BA 04 29CC C0 16 FF CD DB 0C0H, 016H, 0FFH, 0CDH, 04FH, 004H, 0F9H, 0FEH, 08CH, 01EH, 004H, 0C2H, 0BAH, 004H, 0E1H, 022H 29D0 4F 04 F9 FE 29D4 8C 1E 04 C2 29D8 BA 04 E1 22 29DC A1 21 23 7C DB 0A1H, 021H, 023H, 07CH, 0B5H, 0C2H, 08FH, 00AH, 03AH, 011H, 022H, 0B7H, 0C2H, 0F0H, 004H, 021H 29E0 B5 C2 8F 0A 29E4 3A 11 22 B7 29E8 C2 F0 04 21 29EC BE 08 E3 3E DB 0BEH, 008H, 0E3H, 03EH, 0E1H, 001H, 03AH, 00EH, 000H, 006H, 000H, 079H, 048H, 047H, 07EH, 0B7H 29F0 E1 01 3A 0E 29F4 00 06 00 79 29F8 48 47 7E B7 29FC C8 B8 C8 23 DB 0C8H, 0B8H, 0C8H, 023H, 0FEH, 022H, 0CAH, 09BH, 00AH, 0C3H, 09EH, 00AH, 0CDH, 061H, 00FH, 0CDH 2A00 FE 22 CA 9B 2A04 0A C3 9E 0A 2A08 CD 61 0F CD 2A0C 74 07 B4 D5 DB 074H, 007H, 0B4H, 0D5H, 03AH, 0F2H, 021H, 0F5H, 0CDH, 07DH, 00DH, 0F1H, 0E3H, 022H, 013H, 022H 2A10 3A F2 21 F5 2A14 CD 7D 0D F1 2A18 E3 22 13 22 2A1C 1F CD 70 0D DB 01FH, 0CDH, 070H, 00DH, 0CAH, 0FFH, 00AH, 0E5H, 02AH, 029H, 022H, 0E5H, 023H, 023H, 05EH, 023H 2A20 CA FF 0A E5 2A24 2A 29 22 E5 2A28 23 23 5E 23 2A2C 56 2A A3 21 DB 056H, 02AH, 0A3H, 021H, 0CDH, 06EH, 007H, 0D2H, 0EEH, 00AH, 02AH, 09FH, 021H, 0CDH, 06EH, 007H 2A30 CD 6E 07 D2 2A34 EE 0A 2A 9F 2A38 21 CD 6E 07 2A3C D1 D2 F6 0A DB 0D1H, 0D2H, 0F6H, 00AH, 021H, 004H, 022H, 0CDH, 06EH, 007H, 0D2H, 0F6H, 00AH, 03EH, 0D1H, 0CDH 2A40 21 04 22 CD 2A44 6E 07 D2 F6 2A48 0A 3E D1 CD 2A4C A5 13 EB CD DB 0A5H, 013H, 0EBH, 0CDH, 0DEH, 011H, 0CDH, 0A5H, 013H, 0E1H, 0CDH, 0A8H, 017H, 0E1H, 0C9H, 0E5H 2A50 DE 11 CD A5 2A54 13 E1 CD A8 2A58 17 E1 C9 E5 ;0B00H 2A5C CD A5 17 D1 DB 0CDH, 0A5H, 017H, 0D1H, 0E1H, 0C9H, 0CDH, 0CCH, 014H, 07EH, 047H, 0FEH, 08CH, 0CAH, 015H, 00BH 2A60 E1 C9 CD CC 2A64 14 7E 47 FE 2A68 8C CA 15 0B 2A6C CD 74 07 88 DB 0CDH, 074H, 007H, 088H, 02BH, 04BH, 00DH, 078H, 0CAH, 0E6H, 008H, 0CDH, 0CBH, 009H, 0FEH, 02CH 2A70 2B 4B 0D 78 2A74 CA E6 08 CD 2A78 CB 09 FE 2C 2A7C C0 C3 16 0B DB 0C0H, 0C3H, 016H, 00BH, 0CDH, 07DH, 00DH, 07EH, 0FEH, 088H, 0CAH, 032H, 00BH, 0CDH, 074H, 007H 2A80 CD 7D 0D 7E 2A84 FE 88 CA 32 2A88 0B CD 74 07 2A8C A9 2B CD 6E DB 0A9H, 02BH, 0CDH, 06EH, 00DH, 0CDH, 04DH, 017H, 0CAH, 097H, 00AH, 0CDH, 0FEH, 008H, 0DAH, 052H 2A90 0D CD 4D 17 2A94 CA 97 0A CD 2A98 FE 08 DA 52 2A9C 0A C3 E5 08 DB 00AH, 0C3H, 0E5H, 008H, 02BH, 0CDH, 0FEH, 008H, 0CAH, 0A6H, 00BH, 0C8H, 0FEH, 0A5H, 0CAH, 0D9H 2AA0 2B CD FE 08 2AA4 CA A6 0B C8 2AA8 FE A5 CA D9 2AAC 0B FE A8 CA DB 00BH, 0FEH, 0A8H, 0CAH, 0D9H, 00BH, 0E5H, 0FEH, 02CH, 0CAH, 0C2H, 00BH, 0FEH, 03BH, 0CAH, 0FCH 2AB0 D9 0B E5 FE 2AB4 2C CA C2 0B 2AB8 FE 3B CA FC 2ABC 0B C1 CD 7D DB 00BH, 0C1H, 0CDH, 07DH, 00DH, 0E5H, 03AH, 0F2H, 021H, 0B7H, 0C2H, 092H, 00BH, 0CDH, 0F2H, 018H 2AC0 0D E5 3A F2 2AC4 21 B7 C2 92 2AC8 0B CD F2 18 2ACC CD 02 12 36 DB 0CDH, 002H, 012H, 036H, 020H, 02AH, 029H, 022H, 034H, 02AH, 029H, 022H, 03AH, 087H, 021H, 047H 2AD0 20 2A 29 22 2AD4 34 2A 29 22 2AD8 3A 87 21 47 2ADC 04 CA 8E 0B DB 004H, 0CAH, 08EH, 00BH, 004H, 03AH, 0F0H, 021H, 086H, 03DH, 0B8H, 0D4H, 0A6H, 00BH, 0CDH, 047H 2AE0 04 3A F0 21 2AE4 86 3D B8 D4 2AE8 A6 0B CD 47 2AEC 12 AF C4 47 DB 012H, 0AFH, 0C4H, 047H, 012H, 0E1H, 0C3H, 044H, 00BH, 03AH, 0F0H, 021H, 0B7H, 0C8H, 0C3H, 0A6H 2AF0 12 E1 C3 44 2AF4 0B 3A F0 21 2AF8 B7 C8 C3 A6 2AFC 0B 36 00 21 DB 00BH, 036H, 000H, 021H, 0A5H, 021H, 03EH, 00DH, 0CDH, 07FH, 007H, 03EH, 00AH, 0CDH, 07FH, 007H 2B00 A5 21 3E 0D 2B04 CD 7F 07 3E 2B08 0A CD 7F 07 2B0C AF 32 F0 21 DB 0AFH, 032H, 0F0H, 021H, 03AH, 086H, 021H, 03DH, 0C8H, 0F5H, 0AFH, 0CDH, 07FH, 007H, 0F1H, 0C3H 2B10 3A 86 21 3D 2B14 C8 F5 AF CD 2B18 7F 07 F1 C3 2B1C B7 0B 3A 88 DB 0B7H, 00BH, 03AH, 088H, 021H, 047H, 03AH, 0F0H, 021H, 0B8H, 0D4H, 0A6H, 00BH, 0D2H, 0FCH, 00BH 2B20 21 47 3A F0 2B24 21 B8 D4 A6 2B28 0B D2 FC 0B 2B2C D6 0E D2 D0 DB 0D6H, 00EH, 0D2H, 0D0H, 00BH, 02FH, 0C3H, 0F1H, 00BH, 0F5H, 0CDH, 0C9H, 014H, 0CDH, 074H, 007H 2B30 0B 2F C3 F1 2B34 0B F5 CD C9 2B38 14 CD 74 07 2B3C 29 2B F1 D6 DB 029H, 02BH, 0F1H, 0D6H, 0A8H, 0E5H, 0CAH, 0ECH, 00BH, 03AH, 0F0H, 021H, 02FH, 083H, 0D2H, 0FCH 2B40 A8 E5 CA EC 2B44 0B 3A F0 21 2B48 2F 83 D2 FC 2B4C 0B 3C 47 3E DB 00BH, 03CH, 047H, 03EH, 020H, 0CDH, 07FH, 007H, 005H, 0C2H, 0F5H, 00BH, 0E1H, 0CDH, 0FEH, 008H 2B50 20 CD 7F 07 2B54 05 C2 F5 0B 2B58 E1 CD FE 08 ;0C00H 2B5C C3 4B 0B 3F DB 0C3H, 04BH, 00BH, 03FH, 052H, 065H, 064H, 06FH, 020H, 066H, 072H, 06FH, 06DH, 020H, 073H, 074H 2B60 52 65 64 6F 2B64 20 66 72 6F 2B68 6D 20 73 74 2B6C 61 72 74 0D DB 061H, 072H, 074H, 00DH, 00AH, 000H, 03AH, 012H, 022H, 0B7H, 0C2H, 0A0H, 004H, 0C1H, 021H, 003H 2B70 0A 00 3A 12 2B74 22 B7 C2 A0 2B78 04 C1 21 03 2B7C 0C CD 44 12 DB 00CH, 0CDH, 044H, 012H, 0C3H, 0F1H, 005H, 0CDH, 0AFH, 011H, 07EH, 0FEH, 022H, 03EH, 000H, 032H 2B80 C3 F1 05 CD 2B84 AF 11 7E FE 2B88 22 3E 00 32 2B8C 8A 21 C2 41 DB 08AH, 021H, 0C2H, 041H, 00CH, 0CDH, 003H, 012H, 0CDH, 074H, 007H, 03BH, 0E5H, 0CDH, 047H, 012H 2B90 0C CD 03 12 2B94 CD 74 07 3B 2B98 E5 CD 47 12 2B9C 3E E5 CD F5 DB 03EH, 0E5H, 0CDH, 0F5H, 005H, 0C1H, 0DAH, 04DH, 009H, 023H, 07EH, 0B7H, 02BH, 0C5H, 0CAH, 094H 2BA0 05 C1 DA 4D 2BA4 09 23 7E B7 2BA8 2B C5 CA 94 2BAC 0A 36 2C C3 DB 00AH, 036H, 02CH, 0C3H, 05BH, 00CH, 0E5H, 02AH, 021H, 022H, 0F6H, 0AFH, 032H, 012H, 022H, 0E3H 2BB0 5B 0C E5 2A 2BB4 21 22 F6 AF 2BB8 32 12 22 E3 2BBC C3 67 0C CD DB 0C3H, 067H, 00CH, 0CDH, 074H, 007H, 02CH, 0CDH, 061H, 00FH, 0E3H, 0D5H, 07EH, 0FEH, 02CH, 0CAH 2BC0 74 07 2C CD 2BC4 61 0F E3 D5 2BC8 7E FE 2C CA 2BCC 8F 0C 3A 12 DB 08FH, 00CH, 03AH, 012H, 022H, 0B7H, 0C2H, 0FCH, 00CH, 03EH, 03FH, 0CDH, 07FH, 007H, 0CDH, 0F5H 2BD0 22 B7 C2 FC 2BD4 0C 3E 3F CD 2BD8 7F 07 CD F5 2BDC 05 D1 C1 DA DB 005H, 0D1H, 0C1H, 0DAH, 04DH, 009H, 023H, 07EH, 0B7H, 02BH, 0C5H, 0CAH, 094H, 00AH, 0D5H, 03AH 2BE0 4D 09 23 7E 2BE4 B7 2B C5 CA 2BE8 94 0A D5 3A 2BEC F2 21 B7 CA DB 0F2H, 021H, 0B7H, 0CAH, 0B9H, 00CH, 0CDH, 0FEH, 008H, 057H, 047H, 0FEH, 022H, 0CAH, 0ADH, 00CH 2BF0 B9 0C CD FE 2BF4 08 57 47 FE 2BF8 22 CA AD 0C 2BFC 3A 12 22 B7 DB 03AH, 012H, 022H, 0B7H, 057H, 0CAH, 0AAH, 00CH, 016H, 03AH, 006H, 02CH, 02BH, 0CDH, 006H, 012H 2C00 57 CA AA 0C 2C04 16 3A 06 2C 2C08 2B CD 06 12 2C0C EB 21 C4 0C DB 0EBH, 021H, 0C4H, 00CH, 0E3H, 0D5H, 0C3H, 0C7H, 00AH, 0CDH, 0FEH, 008H, 0CDH, 054H, 018H, 0E3H 2C10 E3 D5 C3 C7 2C14 0A CD FE 08 2C18 CD 54 18 E3 2C1C CD A5 17 E1 DB 0CDH, 0A5H, 017H, 0E1H, 02BH, 0CDH, 0FEH, 008H, 0CAH, 0D0H, 00CH, 0FEH, 02CH, 0C2H, 016H, 00CH 2C20 2B CD FE 08 2C24 CA D0 0C FE 2C28 2C C2 16 0C 2C2C E3 2B CD FE DB 0E3H, 02BH, 0CDH, 0FEH, 008H, 0C2H, 063H, 00CH, 0D1H, 03AH, 012H, 022H, 0B7H, 0EBH, 0C2H, 024H 2C30 08 C2 63 0C 2C34 D1 3A 12 22 2C38 B7 EB C2 24 2C3C 09 D5 B6 21 DB 009H, 0D5H, 0B6H, 021H, 0EBH, 00CH, 0C4H, 044H, 012H, 0E1H, 0C9H, 03FH, 045H, 078H, 074H, 072H 2C40 EB 0C C4 44 2C44 12 E1 C9 3F 2C48 45 78 74 72 2C4C 61 20 69 67 DB 061H, 020H, 069H, 067H, 06EH, 06FH, 072H, 065H, 064H, 00DH, 00AH, 000H, 0CDH, 095H, 00AH, 0B7H 2C50 6E 6F 72 65 2C54 64 0D 0A 00 2C58 CD 95 0A B7 ;0D00H 2C5C C2 15 0D 23 DB 0C2H, 015H, 00DH, 023H, 07EH, 023H, 0B6H, 01EH, 006H, 0CAH, 0BAH, 004H, 023H, 05EH, 023H, 056H 2C60 7E 23 B6 1E 2C64 06 CA BA 04 2C68 23 5E 23 56 2C6C EB 22 0E 22 DB 0EBH, 022H, 00EH, 022H, 0EBH, 0CDH, 0FEH, 008H, 0FEH, 083H, 0C2H, 0FCH, 00CH, 0C3H, 08FH, 00CH 2C70 EB CD FE 08 2C74 FE 83 C2 FC 2C78 0C C3 8F 0C 2C7C 11 00 00 C4 DB 011H, 000H, 000H, 0C4H, 061H, 00FH, 022H, 013H, 022H, 0CDH, 04FH, 004H, 0C2H, 0ACH, 004H, 0F9H 2C80 61 0F 22 13 2C84 22 CD 4F 04 2C88 C2 AC 04 F9 2C8C D5 7E 23 F5 DB 0D5H, 07EH, 023H, 0F5H, 0D5H, 0CDH, 08BH, 017H, 0E3H, 0E5H, 0CDH, 0F8H, 014H, 0E1H, 0CDH, 0A5H 2C90 D5 CD 8B 17 2C94 E3 E5 CD F8 2C98 14 E1 CD A5 2C9C 17 E1 CD 9C DB 017H, 0E1H, 0CDH, 09CH, 017H, 0E5H, 0CDH, 0C8H, 017H, 0E1H, 0C1H, 090H, 0CDH, 09CH, 017H, 0CAH 2CA0 17 E5 CD C8 2CA4 17 E1 C1 90 2CA8 CD 9C 17 CA 2CAC 5B 0D EB 22 DB 05BH, 00DH, 0EBH, 022H, 0A1H, 021H, 069H, 060H, 0C3H, 0BAH, 008H, 0F9H, 02AH, 013H, 022H, 07EH 2CB0 A1 21 69 60 2CB4 C3 BA 08 F9 2CB8 2A 13 22 7E 2CBC FE 2C C2 BE DB 0FEH, 02CH, 0C2H, 0BEH, 008H, 0CDH, 0FEH, 008H, 0CDH, 023H, 00DH, 0CDH, 07DH, 00DH, 0F6H, 037H 2CC0 08 CD FE 08 2CC4 CD 23 0D CD 2CC8 7D 0D F6 37 2CCC 3A F2 21 8F DB 03AH, 0F2H, 021H, 08FH, 0B7H, 0E8H, 0C3H, 0B8H, 004H, 0CDH, 074H, 007H, 028H, 02BH, 016H, 000H 2CD0 B7 E8 C3 B8 2CD4 04 CD 74 07 2CD8 28 2B 16 00 2CDC D5 0E 01 CD DB 0D5H, 00EH, 001H, 0CDH, 083H, 004H, 0CDH, 0F4H, 00DH, 022H, 015H, 022H, 02AH, 015H, 022H, 0C1H 2CE0 83 04 CD F4 2CE4 0D 22 15 22 2CE8 2A 15 22 C1 2CEC 78 FE 78 D4 DB 078H, 0FEH, 078H, 0D4H, 06EH, 00DH, 07EH, 016H, 000H, 0D6H, 0B3H, 0DAH, 0B5H, 00DH, 0FEH, 003H 2CF0 6E 0D 7E 16 2CF4 00 D6 B3 DA 2CF8 B5 0D FE 03 2CFC D2 B5 0D FE DB 0D2H, 0B5H, 00DH, 0FEH, 001H, 017H, 0AAH, 0BAH, 057H, 0DAH, 0A6H, 004H, 022H, 00AH, 022H, 0CDH 2D00 01 17 AA BA 2D04 57 DA A6 04 2D08 22 0A 22 CD 2D0C FE 08 C3 99 DB 0FEH, 008H, 0C3H, 099H, 00DH, 07AH, 0B7H, 0C2H, 0DCH, 00EH, 07EH, 022H, 00AH, 022H, 0D6H, 0ACH 2D10 0D 7A B7 C2 2D14 DC 0E 7E 22 2D18 0A 22 D6 AC 2D1C D8 FE 07 D0 DB 0D8H, 0FEH, 007H, 0D0H, 05FH, 03AH, 0F2H, 021H, 03DH, 0B3H, 07BH, 0CAH, 03AH, 013H, 007H, 083H 2D20 5F 3A F2 21 2D24 3D B3 7B CA 2D28 3A 13 07 83 2D2C 5F 21 98 03 DB 05FH, 021H, 098H, 003H, 019H, 078H, 056H, 0BAH, 0D0H, 023H, 0CDH, 06EH, 00DH, 0C5H, 001H, 08CH 2D30 19 78 56 BA 2D34 D0 23 CD 6E 2D38 0D C5 01 8C 2D3C 0D C5 43 4A DB 00DH, 0C5H, 043H, 04AH, 0CDH, 07EH, 017H, 058H, 051H, 04EH, 023H, 046H, 023H, 0C5H, 02AH, 00AH 2D40 CD 7E 17 58 2D44 51 4E 23 46 2D48 23 C5 2A 0A 2D4C 22 C3 80 0D DB 022H, 0C3H, 080H, 00DH, 0AFH, 032H, 0F2H, 021H, 0CDH, 0FEH, 008H, 01EH, 024H, 0CAH, 0BAH, 004H 2D50 AF 32 F2 21 2D54 CD FE 08 1E 2D58 24 CA BA 04 ;0E00H 2D5C DA 54 18 CD DB 0DAH, 054H, 018H, 0CDH, 09CH, 009H, 0D2H, 05BH, 00EH, 0FEH, 026H, 020H, 012H, 0CDH, 0FEH, 008H 2D60 9C 09 D2 5B 2D64 0E FE 26 20 2D68 12 CD FE 08 2D6C FE 48 CA 98 DB 0FEH, 048H, 0CAH, 098H, 01CH, 0FEH, 042H, 0CAH, 008H, 01DH, 01EH, 002H, 0CAH, 0BAH, 004H, 0FEH 2D70 1C FE 42 CA 2D74 08 1D 1E 02 2D78 CA BA 04 FE 2D7C AC CA F4 0D DB 0ACH, 0CAH, 0F4H, 00DH, 0FEH, 02EH, 0CAH, 054H, 018H, 0FEH, 0ADH, 0CAH, 04AH, 00EH, 0FEH, 022H 2D80 FE 2E CA 54 2D84 18 FE AD CA 2D88 4A 0E FE 22 2D8C CA 03 12 FE DB 0CAH, 003H, 012H, 0FEH, 0AAH, 0CAH, 03CH, 00FH, 0FEH, 0A7H, 0CAH, 067H, 011H, 0D6H, 0B6H, 0D2H 2D90 AA CA 3C 0F 2D94 FE A7 CA 67 2D98 11 D6 B6 D2 2D9C 6C 0E CD 79 DB 06CH, 00EH, 0CDH, 079H, 00DH, 0CDH, 074H, 007H, 029H, 0C9H, 016H, 07DH, 0CDH, 080H, 00DH, 02AH 2DA0 0D CD 74 07 2DA4 29 C9 16 7D 2DA8 CD 80 0D 2A 2DAC 15 22 E5 CD DB 015H, 022H, 0E5H, 0CDH, 076H, 017H, 0CDH, 06EH, 00DH, 0E1H, 0C9H, 0CDH, 061H, 00FH, 0E5H, 0EBH 2DB0 76 17 CD 6E 2DB4 0D E1 C9 CD 2DB8 61 0F E5 EB 2DBC 22 29 22 3A DB 022H, 029H, 022H, 03AH, 0F2H, 021H, 0B7H, 0CCH, 08BH, 017H, 0E1H, 0C9H, 006H, 000H, 007H, 04FH 2DC0 F2 21 B7 CC 2DC4 8B 17 E1 C9 2DC8 06 00 07 4F 2DCC C5 CD FE 08 DB 0C5H, 0CDH, 0FEH, 008H, 079H, 0FEH, 031H, 0DAH, 093H, 00EH, 0CDH, 079H, 00DH, 0CDH, 074H, 007H 2DD0 79 FE 31 DA 2DD4 93 0E CD 79 2DD8 0D CD 74 07 2DDC 2C CD 6F 0D DB 02CH, 0CDH, 06FH, 00DH, 0EBH, 02AH, 029H, 022H, 0E3H, 0E5H, 0EBH, 0CDH, 0CCH, 014H, 0EBH, 0E3H 2DE0 EB 2A 29 22 2DE4 E3 E5 EB CD 2DE8 CC 14 EB E3 2DEC C3 9B 0E CD DB 0C3H, 09BH, 00EH, 0CDH, 042H, 00EH, 0E3H, 011H, 056H, 00EH, 0D5H, 001H, 0FBH, 001H, 009H, 04EH 2DF0 42 0E E3 11 2DF4 56 0E D5 01 2DF8 FB 01 09 4E 2DFC 23 66 69 E9 DB 023H, 066H, 069H, 0E9H, 015H, 0FEH, 0ADH, 0C8H, 0FEH, 02DH, 0C8H, 014H, 0FEH, 02BH, 0C8H, 0FEH 2E00 15 FE AD C8 2E04 FE 2D C8 14 2E08 FE 2B C8 FE 2E0C AC C8 2B C9 DB 0ACH, 0C8H, 02BH, 0C9H, 0F6H, 0AFH, 0F5H, 0CDH, 06EH, 00DH, 0CDH, 0B0H, 009H, 0F1H, 0EBH, 0C1H 2E10 F6 AF F5 CD 2E14 6E 0D CD B0 2E18 09 F1 EB C1 2E1C E3 EB CD 8E DB 0E3H, 0EBH, 0CDH, 08EH, 017H, 0F5H, 0CDH, 0B0H, 009H, 0F1H, 0C1H, 079H, 021H, 025H, 011H, 0C2H 2E20 17 F5 CD B0 2E24 09 F1 C1 79 2E28 21 25 11 C2 2E2C D7 0E A3 4F DB 0D7H, 00EH, 0A3H, 04FH, 078H, 0A2H, 0E9H, 0B3H, 04FH, 078H, 0B2H, 0E9H, 021H, 0EEH, 00EH, 03AH 2E30 78 A2 E9 B3 2E34 4F 78 B2 E9 2E38 21 EE 0E 3A 2E3C F2 21 1F 7A DB 0F2H, 021H, 01FH, 07AH, 017H, 05FH, 016H, 064H, 078H, 0BAH, 0D0H, 0C3H, 0DDH, 00DH, 0F0H, 00EH 2E40 17 5F 16 64 2E44 78 BA D0 C3 2E48 DD 0D F0 0E 2E4C 79 B7 1F C1 DB 079H, 0B7H, 01FH, 0C1H, 0D1H, 0F5H, 0CDH, 070H, 00DH, 021H, 032H, 00FH, 0E5H, 0CAH, 0C8H, 017H 2E50 D1 F5 CD 70 2E54 0D 21 32 0F 2E58 E5 CA C8 17 ;0F00H 2E5C AF 32 F2 21 DB 0AFH, 032H, 0F2H, 021H, 0D5H, 0CDH, 087H, 013H, 07EH, 023H, 023H, 04EH, 023H, 046H, 0D1H, 0C5H 2E60 D5 CD 87 13 2E64 7E 23 23 4E 2E68 23 46 D1 C5 2E6C F5 CD 8B 13 DB 0F5H, 0CDH, 08BH, 013H, 0CDH, 09CH, 017H, 0F1H, 057H, 0E1H, 07BH, 0B2H, 0C8H, 07AH, 0D6H, 001H 2E70 CD 9C 17 F1 2E74 57 E1 7B B2 2E78 C8 7A D6 01 2E7C D8 AF BB 3C DB 0D8H, 0AFH, 0BBH, 03CH, 0D0H, 015H, 01DH, 00AH, 0BEH, 023H, 003H, 0CAH, 01AH, 00FH, 03FH, 0C3H 2E80 D0 15 1D 0A 2E84 BE 23 03 CA 2E88 1A 0F 3F C3 2E8C 58 17 3C 8F DB 058H, 017H, 03CH, 08FH, 0C1H, 0A0H, 0C6H, 0FFH, 09FH, 0C3H, 05FH, 017H, 016H, 05AH, 0CDH, 080H 2E90 C1 A0 C6 FF 2E94 9F C3 5F 17 2E98 16 5A CD 80 2E9C 0D CD 6E 0D DB 00DH, 0CDH, 06EH, 00DH, 0CDH, 0B0H, 009H, 07BH, 02FH, 04FH, 07AH, 02FH, 0CDH, 025H, 011H, 0C1H 2EA0 CD B0 09 7B 2EA4 2F 4F 7A 2F 2EA8 CD 25 11 C1 2EAC C3 8C 0D 2B DB 0C3H, 08CH, 00DH, 02BH, 0CDH, 0FEH, 008H, 0C8H, 0CDH, 074H, 007H, 02CH, 001H, 053H, 00FH, 0C5H 2EB0 CD FE 08 C8 2EB4 CD 74 07 2C 2EB8 01 53 0F C5 2EBC F6 AF 32 F1 DB 0F6H, 0AFH, 032H, 0F1H, 021H, 046H, 0CDH, 09CH, 009H, 0DAH, 0A6H, 004H, 0AFH, 04FH, 032H, 0F2H 2EC0 21 46 CD 9C 2EC4 09 DA A6 04 2EC8 AF 4F 32 F2 2ECC 21 CD FE 08 DB 021H, 0CDH, 0FEH, 008H, 0DAH, 07DH, 00FH, 0CDH, 09CH, 009H, 0DAH, 08AH, 00FH, 04FH, 0CDH, 0FEH 2ED0 DA 7D 0F CD 2ED4 9C 09 DA 8A 2ED8 0F 4F CD FE 2EDC 08 DA 7E 0F DB 008H, 0DAH, 07EH, 00FH, 0CDH, 09CH, 009H, 0D2H, 07EH, 00FH, 0D6H, 024H, 0C2H, 099H, 00FH, 03CH 2EE0 CD 9C 09 D2 2EE4 7E 0F D6 24 2EE8 C2 99 0F 3C 2EEC 32 F2 21 0F DB 032H, 0F2H, 021H, 00FH, 081H, 04FH, 0CDH, 0FEH, 008H, 03AH, 010H, 022H, 03DH, 0CAH, 046H, 010H 2EF0 81 4F CD FE 2EF4 08 3A 10 22 2EF8 3D CA 46 10 2EFC F2 A9 0F 7E DB 0F2H, 0A9H, 00FH, 07EH, 0D6H, 028H, 0CAH, 01EH, 010H, 0AFH, 032H, 010H, 022H, 0E5H, 050H, 059H 2F00 D6 28 CA 1E 2F04 10 AF 32 10 2F08 22 E5 50 59 2F0C 2A 23 22 CD DB 02AH, 023H, 022H, 0CDH, 06EH, 007H, 011H, 025H, 022H, 0CAH, 08EH, 016H, 02AH, 01DH, 022H, 0EBH 2F10 6E 07 11 25 2F14 22 CA 8E 16 2F18 2A 1D 22 EB 2F1C 2A 1B 22 CD DB 02AH, 01BH, 022H, 0CDH, 06EH, 007H, 0CAH, 0DCH, 00FH, 079H, 096H, 023H, 0C2H, 0D1H, 00FH, 078H 2F20 6E 07 CA DC 2F24 0F 79 96 23 2F28 C2 D1 0F 78 2F2C 96 23 CA 10 DB 096H, 023H, 0CAH, 010H, 010H, 023H, 023H, 023H, 023H, 0C3H, 0C3H, 00FH, 0E1H, 0E3H, 0D5H, 011H 2F30 10 23 23 23 2F34 23 C3 C3 0F 2F38 E1 E3 D5 11 2F3C 5E 0E CD 6E DB 05EH, 00EH, 0CDH, 06EH, 007H, 0D1H, 0CAH, 013H, 010H, 0E3H, 0E5H, 0C5H, 001H, 006H, 000H, 02AH 2F40 07 D1 CA 13 2F44 10 E3 E5 C5 2F48 01 06 00 2A 2F4C 1F 22 E5 09 DB 01FH, 022H, 0E5H, 009H, 0C1H, 0E5H, 0CDH, 072H, 004H, 0E1H, 022H, 01FH, 022H, 060H, 069H, 022H 2F50 C1 E5 CD 72 2F54 04 E1 22 1F 2F58 22 60 69 22 ;1000H 2F5C 1D 22 2B 36 DB 01DH, 022H, 02BH, 036H, 000H, 0CDH, 06EH, 007H, 0C2H, 002H, 010H, 0D1H, 073H, 023H, 072H, 023H 2F60 00 CD 6E 07 2F64 C2 02 10 D1 2F68 73 23 72 23 2F6C EB E1 C9 32 DB 0EBH, 0E1H, 0C9H, 032H, 02CH, 022H, 021H, 042H, 004H, 022H, 029H, 022H, 0E1H, 0C9H, 0E5H, 02AH 2F70 2C 22 21 42 2F74 04 22 29 22 2F78 E1 C9 E5 2A 2F7C F1 21 E3 57 DB 0F1H, 021H, 0E3H, 057H, 0D5H, 0C5H, 0CDH, 0A4H, 009H, 0C1H, 0F1H, 0EBH, 0E3H, 0E5H, 0EBH, 03CH 2F80 D5 C5 CD A4 2F84 09 C1 F1 EB 2F88 E3 E5 EB 3C 2F8C 57 7E FE 2C DB 057H, 07EH, 0FEH, 02CH, 0CAH, 024H, 010H, 0CDH, 074H, 007H, 029H, 022H, 015H, 022H, 0E1H, 022H 2F90 CA 24 10 CD 2F94 74 07 29 22 2F98 15 22 E1 22 2F9C F1 21 1E 00 DB 0F1H, 021H, 01EH, 000H, 0D5H, 011H, 0E5H, 0F5H, 02AH, 01DH, 022H, 03EH, 019H, 0EBH, 02AH, 01FH 2FA0 D5 11 E5 F5 2FA4 2A 1D 22 3E 2FA8 19 EB 2A 1F 2FAC 22 EB CD 6E DB 022H, 0EBH, 0CDH, 06EH, 007H, 0CAH, 07EH, 010H, 07EH, 0B9H, 023H, 0C2H, 060H, 010H, 07EH, 0B8H 2FB0 07 CA 7E 10 2FB4 7E B9 23 C2 2FB8 60 10 7E B8 2FBC 23 5E 23 56 DB 023H, 05EH, 023H, 056H, 023H, 0C2H, 04CH, 010H, 03AH, 0F1H, 021H, 0B7H, 0C2H, 0AFH, 004H, 0F1H 2FC0 23 C2 4C 10 2FC4 3A F1 21 B7 2FC8 C2 AF 04 F1 2FCC 44 4D CA 8E DB 044H, 04DH, 0CAH, 08EH, 016H, 096H, 0CAH, 0DCH, 010H, 01EH, 010H, 0C3H, 0BAH, 004H, 011H, 004H 2FD0 16 96 CA DC 2FD4 10 1E 10 C3 2FD8 BA 04 11 04 2FDC 00 F1 CA C5 DB 000H, 0F1H, 0CAH, 0C5H, 009H, 071H, 023H, 070H, 023H, 04FH, 0CDH, 083H, 004H, 023H, 023H, 022H 2FE0 09 71 23 70 2FE4 23 4F CD 83 2FE8 04 23 23 22 2FEC 0A 22 71 23 DB 00AH, 022H, 071H, 023H, 03AH, 0F1H, 021H, 017H, 079H, 001H, 00BH, 000H, 0D2H, 0A1H, 010H, 0C1H 2FF0 3A F1 21 17 2FF4 79 01 0B 00 2FF8 D2 A1 10 C1 2FFC 03 71 23 70 DB 003H, 071H, 023H, 070H, 023H, 0F5H, 0E5H, 0CDH, 039H, 018H, 0EBH, 0E1H, 0F1H, 03DH, 0C2H, 099H 3000 23 F5 E5 CD 3004 39 18 EB E1 3008 F1 3D C2 99 300C 10 F5 42 4B DB 010H, 0F5H, 042H, 04BH, 0EBH, 019H, 0DAH, 09BH, 004H, 0CDH, 08CH, 004H, 022H, 01FH, 022H, 02BH 3010 EB 19 DA 9B 3014 04 CD 8C 04 3018 22 1F 22 2B 301C 36 00 CD 6E DB 036H, 000H, 0CDH, 06EH, 007H, 0C2H, 0BFH, 010H, 003H, 057H, 02AH, 00AH, 022H, 05EH, 0EBH, 029H 3020 07 C2 BF 10 3024 03 57 2A 0A 3028 22 5E EB 29 302C 09 EB 2B 2B DB 009H, 0EBH, 02BH, 02BH, 073H, 023H, 072H, 023H, 0F1H, 0DAH, 000H, 011H, 047H, 04FH, 07EH, 023H 3030 73 23 72 23 3034 F1 DA 00 11 3038 47 4F 7E 23 303C 16 E1 5E 23 DB 016H, 0E1H, 05EH, 023H, 056H, 023H, 0E3H, 0F5H, 0CDH, 06EH, 007H, 0D2H, 079H, 010H, 0E5H, 0CDH 3040 56 23 E3 F5 3044 CD 6E 07 D2 3048 79 10 E5 CD 304C 39 18 D1 19 DB 039H, 018H, 0D1H, 019H, 0F1H, 03DH, 044H, 04DH, 0C2H, 0E1H, 010H, 029H, 029H, 0C1H, 009H, 0EBH 3050 F1 3D 44 4D 3054 C2 E1 10 29 3058 29 C1 09 EB ;1100H 305C 2A 15 22 C9 DB 02AH, 015H, 022H, 0C9H, 02AH, 01FH, 022H, 0EBH, 021H, 000H, 000H, 039H, 03AH, 0F2H, 021H, 0B7H 3060 2A 1F 22 EB 3064 21 00 00 39 3068 3A F2 21 B7 306C CA 20 11 CD DB 0CAH, 020H, 011H, 0CDH, 087H, 013H, 0CDH, 087H, 012H, 02AH, 09FH, 021H, 0EBH, 02AH, 008H, 022H 3070 87 13 CD 87 3074 12 2A 9F 21 3078 EB 2A 08 22 307C 7D 93 4F 7C DB 07DH, 093H, 04FH, 07CH, 09AH, 041H, 050H, 01EH, 000H, 021H, 0F2H, 021H, 073H, 006H, 090H, 0C3H 3080 9A 41 50 1E 3084 00 21 F2 21 3088 73 06 90 C3 308C 64 17 3A F0 DB 064H, 017H, 03AH, 0F0H, 021H, 047H, 0AFH, 0C3H, 026H, 011H, 0CDH, 0BDH, 011H, 0CDH, 0AFH, 011H 3090 21 47 AF C3 3094 26 11 CD BD 3098 11 CD AF 11 309C 01 95 0A C5 DB 001H, 095H, 00AH, 0C5H, 0D5H, 0CDH, 074H, 007H, 028H, 0CDH, 061H, 00FH, 0E5H, 0EBH, 02BH, 056H 30A0 D5 CD 74 07 30A4 28 CD 61 0F 30A8 E5 EB 2B 56 30AC 2B 5E E1 CD DB 02BH, 05EH, 0E1H, 0CDH, 06EH, 00DH, 0CDH, 074H, 007H, 029H, 0CDH, 074H, 007H, 0B4H, 044H, 04DH 30B0 6E 0D CD 74 30B4 07 29 CD 74 30B8 07 B4 44 4D 30BC E3 71 23 70 DB 0E3H, 071H, 023H, 070H, 0C3H, 0FCH, 011H, 0CDH, 0BDH, 011H, 0D5H, 0CDH, 042H, 00EH, 0CDH, 06EH 30C0 C3 FC 11 CD 30C4 BD 11 D5 CD 30C8 42 0E CD 6E 30CC 0D E3 5E 23 DB 00DH, 0E3H, 05EH, 023H, 056H, 023H, 07AH, 0B3H, 0CAH, 0B2H, 004H, 07EH, 023H, 066H, 06FH, 0E5H 30D0 56 23 7A B3 30D4 CA B2 04 7E 30D8 23 66 6F E5 30DC 2A 23 22 E3 DB 02AH, 023H, 022H, 0E3H, 022H, 023H, 022H, 02AH, 027H, 022H, 0E5H, 02AH, 025H, 022H, 0E5H, 021H 30E0 22 23 22 2A 30E4 27 22 E5 2A 30E8 25 22 E5 21 30EC 25 22 D5 CD DB 025H, 022H, 0D5H, 0CDH, 0A5H, 017H, 0E1H, 0CDH, 06BH, 00DH, 02BH, 0CDH, 0FEH, 008H, 0C2H, 0A6H 30F0 A5 17 E1 CD 30F4 6B 0D 2B CD 30F8 FE 08 C2 A6 30FC 04 E1 22 25 DB 004H, 0E1H, 022H, 025H, 022H, 0E1H, 022H, 027H, 022H, 0E1H, 022H, 023H, 022H, 0E1H, 0C9H, 0E5H 3100 22 E1 22 27 3104 22 E1 22 23 3108 22 E1 C9 E5 310C 2A A1 21 23 DB 02AH, 0A1H, 021H, 023H, 07CH, 0B5H, 0E1H, 0C0H, 01EH, 016H, 0C3H, 0BAH, 004H, 0CDH, 074H, 007H 3110 7C B5 E1 C0 3114 1E 16 C3 BA 3118 04 CD 74 07 311C A7 3E 80 32 DB 0A7H, 03EH, 080H, 032H, 010H, 022H, 0B6H, 047H, 0CDH, 066H, 00FH, 0C3H, 06EH, 00DH, 0CDH, 06EH 3120 10 22 B6 47 3124 CD 66 0F C3 3128 6E 0D CD 6E 312C 0D CD F2 18 DB 00DH, 0CDH, 0F2H, 018H, 0CDH, 002H, 012H, 0CDH, 087H, 013H, 001H, 0E2H, 013H, 0C5H, 07EH, 023H 3130 CD 02 12 CD 3134 87 13 01 E2 3138 13 C5 7E 23 313C 23 E5 CD 5D DB 023H, 0E5H, 0CDH, 05DH, 012H, 0E1H, 04EH, 023H, 046H, 0CDH, 0F6H, 011H, 0E5H, 06FH, 0CDH, 07AH 3140 12 E1 4E 23 3144 46 CD F6 11 3148 E5 6F CD 7A 314C 13 D1 C9 CD DB 013H, 0D1H, 0C9H, 0CDH, 05DH, 012H, 021H, 004H, 022H, 0E5H, 077H, 023H, 023H, 073H, 023H, 072H 3150 5D 12 21 04 3154 22 E5 77 23 3158 23 73 23 72 ;1200H 315C E1 C9 2B 06 DB 0E1H, 0C9H, 02BH, 006H, 022H, 050H, 0E5H, 00EH, 0FFH, 023H, 07EH, 00CH, 0B7H, 0CAH, 018H, 012H 3160 22 50 E5 0E 3164 FF 23 7E 0C 3168 B7 CA 18 12 316C BA CA 18 12 DB 0BAH, 0CAH, 018H, 012H, 0B8H, 0C2H, 009H, 012H, 0FEH, 022H, 0CCH, 0FEH, 008H, 0E3H, 023H, 0EBH 3170 B8 C2 09 12 3174 FE 22 CC FE 3178 08 E3 23 EB 317C 79 CD F6 11 DB 079H, 0CDH, 0F6H, 011H, 011H, 004H, 022H, 02AH, 0F6H, 021H, 022H, 029H, 022H, 03EH, 001H, 032H 3180 11 04 22 2A 3184 F6 21 22 29 3188 22 3E 01 32 318C F2 21 CD A8 DB 0F2H, 021H, 0CDH, 0A8H, 017H, 0CDH, 06EH, 007H, 022H, 0F6H, 021H, 0E1H, 07EH, 0C0H, 01EH, 01EH 3190 17 CD 6E 07 3194 22 F6 21 E1 3198 7E C0 1E 1E 319C C3 BA 04 23 DB 0C3H, 0BAH, 004H, 023H, 0CDH, 002H, 012H, 0CDH, 087H, 013H, 0CDH, 09CH, 017H, 01CH, 01DH, 0C8H 31A0 CD 02 12 CD 31A4 87 13 CD 9C 31A8 17 1C 1D C8 31AC 0A CD 7F 07 DB 00AH, 0CDH, 07FH, 007H, 0FEH, 00DH, 0CCH, 0B0H, 00BH, 003H, 0C3H, 04EH, 012H, 0B7H, 00EH, 0F1H 31B0 FE 0D CC B0 31B4 0B 03 C3 4E 31B8 12 B7 0E F1 31BC F5 2A 9F 21 DB 0F5H, 02AH, 09FH, 021H, 0EBH, 02AH, 008H, 022H, 02FH, 04FH, 006H, 0FFH, 009H, 023H, 0CDH, 06EH 31C0 EB 2A 08 22 31C4 2F 4F 06 FF 31C8 09 23 CD 6E 31CC 07 DA 7B 12 DB 007H, 0DAH, 07BH, 012H, 022H, 008H, 022H, 023H, 0EBH, 0F1H, 0C9H, 0F1H, 01EH, 01AH, 0CAH, 0BAH 31D0 22 08 22 23 31D4 EB F1 C9 F1 31D8 1E 1A CA BA 31DC 04 BF F5 01 DB 004H, 0BFH, 0F5H, 001H, 05FH, 012H, 0C5H, 02AH, 0F4H, 021H, 022H, 008H, 022H, 021H, 000H, 000H 31E0 5F 12 C5 2A 31E4 F4 21 22 08 31E8 22 21 00 00 31EC E5 2A 9F 21 DB 0E5H, 02AH, 09FH, 021H, 0E5H, 021H, 0F8H, 021H, 0EBH, 02AH, 0F6H, 021H, 0EBH, 0CDH, 06EH, 007H 31F0 E5 21 F8 21 31F4 EB 2A F6 21 31F8 EB CD 6E 07 31FC 01 98 12 C2 DB 001H, 098H, 012H, 0C2H, 0ECH, 012H, 02AH, 01BH, 022H, 0EBH, 02AH, 01DH, 022H, 0EBH, 0CDH, 06EH 3200 EC 12 2A 1B 3204 22 EB 2A 1D 3208 22 EB CD 6E 320C 07 CA BF 12 DB 007H, 0CAH, 0BFH, 012H, 07EH, 023H, 023H, 0B7H, 0CDH, 0EFH, 012H, 0C3H, 0A9H, 012H, 0C1H, 0EBH 3210 7E 23 23 B7 3214 CD EF 12 C3 3218 A9 12 C1 EB 321C 2A 1F 22 EB DB 02AH, 01FH, 022H, 0EBH, 0CDH, 06EH, 007H, 0CAH, 015H, 013H, 0CDH, 09CH, 017H, 07BH, 0E5H, 009H 3220 CD 6E 07 CA 3224 15 13 CD 9C 3228 17 7B E5 09 322C B7 F2 BE 12 DB 0B7H, 0F2H, 0BEH, 012H, 022H, 00AH, 022H, 0E1H, 04EH, 006H, 000H, 009H, 009H, 023H, 0EBH, 02AH 3230 22 0A 22 E1 3234 4E 06 00 09 3238 09 23 EB 2A 323C 0A 22 EB CD DB 00AH, 022H, 0EBH, 0CDH, 06EH, 007H, 0CAH, 0BFH, 012H, 001H, 0DEH, 012H, 0C5H, 0F6H, 080H, 07EH 3240 6E 07 CA BF 3244 12 01 DE 12 3248 C5 F6 80 7E 324C 23 23 5E 23 DB 023H, 023H, 05EH, 023H, 056H, 023H, 0F0H, 0B7H, 0C8H, 044H, 04DH, 02AH, 008H, 022H, 0CDH, 06EH 3250 56 23 F0 B7 3254 C8 44 4D 2A 3258 08 22 CD 6E ;1300H 325C 07 60 69 D8 DB 007H, 060H, 069H, 0D8H, 0E1H, 0E3H, 0CDH, 06EH, 007H, 0E3H, 0E5H, 060H, 069H, 0D0H, 0C1H, 0F1H 3260 E1 E3 CD 6E 3264 07 E3 E5 60 3268 69 D0 C1 F1 326C F1 E5 D5 C5 DB 0F1H, 0E5H, 0D5H, 0C5H, 0C9H, 0D1H, 0E1H, 07DH, 0B4H, 0C8H, 02BH, 046H, 02BH, 04EH, 0E5H, 02BH 3270 C9 D1 E1 7D 3274 B4 C8 2B 46 3278 2B 4E E5 2B 327C 2B 6E 26 00 DB 02BH, 06EH, 026H, 000H, 009H, 050H, 059H, 02BH, 044H, 04DH, 02AH, 008H, 022H, 0CDH, 075H, 004H 3280 09 50 59 2B 3284 44 4D 2A 08 3288 22 CD 75 04 328C E1 71 23 70 DB 0E1H, 071H, 023H, 070H, 069H, 060H, 02BH, 0C3H, 08AH, 012H, 0C5H, 0E5H, 02AH, 029H, 022H, 0E3H 3290 69 60 2B C3 3294 8A 12 C5 E5 3298 2A 29 22 E3 329C CD F4 0D E3 DB 0CDH, 0F4H, 00DH, 0E3H, 0CDH, 06FH, 00DH, 07EH, 0E5H, 02AH, 029H, 022H, 0E5H, 086H, 01EH, 01CH 32A0 CD 6F 0D 7E 32A4 E5 2A 29 22 32A8 E5 86 1E 1C 32AC DA BA 04 CD DB 0DAH, 0BAH, 004H, 0CDH, 0F3H, 011H, 0D1H, 0CDH, 08BH, 013H, 0E3H, 0CDH, 08AH, 013H, 0E5H, 02AH 32B0 F3 11 D1 CD 32B4 8B 13 E3 CD 32B8 8A 13 E5 2A 32BC 06 22 EB CD DB 006H, 022H, 0EBH, 0CDH, 071H, 013H, 0CDH, 071H, 013H, 021H, 089H, 00DH, 0E3H, 0E5H, 0C3H, 024H 32C0 71 13 CD 71 32C4 13 21 89 0D 32C8 E3 E5 C3 24 32CC 12 E1 E3 7E DB 012H, 0E1H, 0E3H, 07EH, 023H, 023H, 04EH, 023H, 046H, 06FH, 02CH, 02DH, 0C8H, 00AH, 012H, 003H 32D0 23 23 4E 23 32D4 46 6F 2C 2D 32D8 C8 0A 12 03 32DC 13 C3 7B 13 DB 013H, 0C3H, 07BH, 013H, 0CDH, 06FH, 00DH, 02AH, 029H, 022H, 0EBH, 0CDH, 0A5H, 013H, 0EBH, 0C0H 32E0 CD 6F 0D 2A 32E4 29 22 EB CD 32E8 A5 13 EB C0 32EC D5 50 59 1B DB 0D5H, 050H, 059H, 01BH, 04EH, 02AH, 008H, 022H, 0CDH, 06EH, 007H, 0C2H, 0A3H, 013H, 047H, 009H 32F0 4E 2A 08 22 32F4 CD 6E 07 C2 32F8 A3 13 47 09 32FC 22 08 22 E1 DB 022H, 008H, 022H, 0E1H, 0C9H, 02AH, 0F6H, 021H, 02BH, 046H, 02BH, 04EH, 02BH, 02BH, 0CDH, 06EH 3300 C9 2A F6 21 3304 2B 46 2B 4E 3308 2B 2B CD 6E 330C 07 C0 22 F6 DB 007H, 0C0H, 022H, 0F6H, 021H, 0C9H, 001H, 035H, 011H, 0C5H, 0CDH, 084H, 013H, 0AFH, 057H, 032H 3310 21 C9 01 35 3314 11 C5 CD 84 3318 13 AF 57 32 331C F2 21 7E B7 DB 0F2H, 021H, 07EH, 0B7H, 0C9H, 001H, 035H, 011H, 0C5H, 0CDH, 0BAH, 013H, 0CAH, 0C5H, 009H, 023H 3320 C9 01 35 11 3324 C5 CD BA 13 3328 CA C5 09 23 332C 23 5E 23 56 DB 023H, 05EH, 023H, 056H, 01AH, 0C9H, 03EH, 001H, 0CDH, 0F3H, 011H, 0CDH, 0CFH, 014H, 02AH, 006H 3330 1A C9 3E 01 3334 CD F3 11 CD 3338 CF 14 2A 06 333C 22 73 C1 C3 DB 022H, 073H, 0C1H, 0C3H, 024H, 012H, 0CDH, 07FH, 014H, 0AFH, 0E3H, 04FH, 0E5H, 07EH, 0B8H, 0DAH 3340 24 12 CD 7F 3344 14 AF E3 4F 3348 E5 7E B8 DA 334C F4 13 78 11 DB 0F4H, 013H, 078H, 011H, 00EH, 000H, 0C5H, 0CDH, 05DH, 012H, 0C1H, 0E1H, 0E5H, 023H, 023H, 046H 3350 0E 00 C5 CD 3354 5D 12 C1 E1 3358 E5 23 23 46 ;1400H 335C 23 66 68 06 DB 023H, 066H, 068H, 006H, 000H, 009H, 044H, 04DH, 0CDH, 0F6H, 011H, 06FH, 0CDH, 07AH, 013H, 0D1H 3360 00 09 44 4D 3364 CD F6 11 6F 3368 CD 7A 13 D1 336C CD 8B 13 C3 DB 0CDH, 08BH, 013H, 0C3H, 024H, 012H, 0CDH, 07FH, 014H, 0D1H, 0D5H, 01AH, 090H, 0C3H, 0EAH, 013H 3370 24 12 CD 7F 3374 14 D1 D5 1A 3378 90 C3 EA 13 337C EB 7E CD 84 DB 0EBH, 07EH, 0CDH, 084H, 014H, 004H, 005H, 0CAH, 0C5H, 009H, 0C5H, 01EH, 0FFH, 0FEH, 029H, 0CAH 3380 14 04 05 CA 3384 C5 09 C5 1E 3388 FF FE 29 CA 338C 39 14 CD 74 DB 039H, 014H, 0CDH, 074H, 007H, 02CH, 0CDH, 0CCH, 014H, 0CDH, 074H, 007H, 029H, 0F1H, 0E3H, 001H 3390 07 2C CD CC 3394 14 CD 74 07 3398 29 F1 E3 01 339C EC 13 C5 3D DB 0ECH, 013H, 0C5H, 03DH, 0BEH, 006H, 000H, 0D0H, 04FH, 07EH, 091H, 0BBH, 047H, 0D8H, 043H, 0C9H 33A0 BE 06 00 D0 33A4 4F 7E 91 BB 33A8 47 D8 43 C9 33AC CD BA 13 CA DB 0CDH, 0BAH, 013H, 0CAH, 06DH, 015H, 05FH, 023H, 023H, 07EH, 023H, 066H, 06FH, 0E5H, 019H, 046H 33B0 6D 15 5F 23 33B4 23 7E 23 66 33B8 6F E5 19 46 33BC 72 E3 C5 7E DB 072H, 0E3H, 0C5H, 07EH, 0FEH, 024H, 0C2H, 06EH, 014H, 0CDH, 098H, 01CH, 018H, 00DH, 0FEH, 025H 33C0 FE 24 C2 6E 33C4 14 CD 98 1C 33C8 18 0D FE 25 33CC C2 78 14 CD DB 0C2H, 078H, 014H, 0CDH, 008H, 01DH, 018H, 003H, 0CDH, 054H, 018H, 0C1H, 0E1H, 070H, 0C9H, 0EBH 33D0 08 1D 18 03 33D4 CD 54 18 C1 33D8 E1 70 C9 EB 33DC CD 74 07 29 DB 0CDH, 074H, 007H, 029H, 0C1H, 0D1H, 0C5H, 043H, 0C9H, 0CDH, 0CFH, 014H, 032H, 084H, 021H, 0CDH 33E0 C1 D1 C5 43 33E4 C9 CD CF 14 33E8 32 84 21 CD 33EC 83 21 C3 35 DB 083H, 021H, 0C3H, 035H, 011H, 0CDH, 0B9H, 014H, 0C3H, 04BH, 021H, 0CDH, 0B9H, 014H, 0F5H, 01EH 33F0 11 CD B9 14 33F4 C3 4B 21 CD 33F8 B9 14 F5 1E 33FC 00 2B CD FE DB 000H, 02BH, 0CDH, 0FEH, 008H, 0CAH, 0AFH, 014H, 0CDH, 074H, 007H, 02CH, 0CDH, 0CCH, 014H, 0C1H 3400 08 CA AF 14 3404 CD 74 07 2C 3408 CD CC 14 C1 340C CD 83 21 AB DB 0CDH, 083H, 021H, 0ABH, 0A0H, 0CAH, 0B0H, 014H, 0C9H, 0CDH, 0CCH, 014H, 032H, 084H, 021H, 032H 3410 A0 CA B0 14 3414 C9 CD CC 14 3418 32 84 21 32 341C 4C 21 CD 74 DB 04CH, 021H, 0CDH, 074H, 007H, 02CH, 0C3H, 0CCH, 014H, 0CDH, 0FEH, 008H, 0CDH, 06BH, 00DH, 0CDH 3420 07 2C C3 CC 3424 14 CD FE 08 3428 CD 6B 0D CD 342C AA 09 7A B7 DB 0AAH, 009H, 07AH, 0B7H, 0C2H, 0C5H, 009H, 02BH, 0CDH, 0FEH, 008H, 07BH, 0C9H, 0CDH, 0B0H, 009H 3430 C2 C5 09 2B 3434 CD FE 08 7B 3438 C9 CD B0 09 343C 1A C3 35 11 DB 01AH, 0C3H, 035H, 011H, 0CDH, 06BH, 00DH, 0CDH, 0B0H, 009H, 0D5H, 0CDH, 074H, 007H, 02CH, 0CDH 3440 CD 6B 0D CD 3444 B0 09 D5 CD 3448 74 07 2C CD 344C CC 14 D1 12 DB 0CCH, 014H, 0D1H, 012H, 0C9H, 021H, 0CBH, 019H, 0CDH, 09CH, 017H, 0C3H, 007H, 015H, 0CDH, 09CH 3450 C9 21 CB 19 3454 CD 9C 17 C3 3458 07 15 CD 9C ;1500H 345C 17 21 C1 D1 DB 017H, 021H, 0C1H, 0D1H, 0CDH, 076H, 017H, 078H, 0B7H, 0C8H, 03AH, 02CH, 022H, 0B7H, 0CAH, 08EH 3460 CD 76 17 78 3464 B7 C8 3A 2C 3468 22 B7 CA 8E 346C 17 90 D2 21 DB 017H, 090H, 0D2H, 021H, 015H, 02FH, 03CH, 0EBH, 0CDH, 07EH, 017H, 0EBH, 0CDH, 08EH, 017H, 0C1H 3470 15 2F 3C EB 3474 CD 7E 17 EB 3478 CD 8E 17 C1 347C D1 FE 19 D0 DB 0D1H, 0FEH, 019H, 0D0H, 0F5H, 0CDH, 0B3H, 017H, 067H, 0F1H, 0CDH, 0CCH, 015H, 0B4H, 021H, 029H 3480 F5 CD B3 17 3484 67 F1 CD CC 3488 15 B4 21 29 348C 22 F2 47 15 DB 022H, 0F2H, 047H, 015H, 0CDH, 0ACH, 015H, 0D2H, 08DH, 015H, 023H, 034H, 0CAH, 0B5H, 004H, 02EH 3490 CD AC 15 D2 3494 8D 15 23 34 3498 CA B5 04 2E 349C 01 CD E2 15 DB 001H, 0CDH, 0E2H, 015H, 0C3H, 08DH, 015H, 0AFH, 090H, 047H, 07EH, 09BH, 05FH, 023H, 07EH, 09AH 34A0 C3 8D 15 AF 34A4 90 47 7E 9B 34A8 5F 23 7E 9A 34AC 57 23 7E 99 DB 057H, 023H, 07EH, 099H, 04FH, 0DCH, 0B8H, 015H, 068H, 063H, 0AFH, 047H, 079H, 0B7H, 0C2H, 07AH 34B0 4F DC B8 15 34B4 68 63 AF 47 34B8 79 B7 C2 7A 34BC 15 4A 54 65 DB 015H, 04AH, 054H, 065H, 06FH, 078H, 0D6H, 008H, 0FEH, 0E0H, 0C2H, 05BH, 015H, 0AFH, 032H, 02CH 34C0 6F 78 D6 08 34C4 FE E0 C2 5B 34C8 15 AF 32 2C 34CC 22 C9 05 29 DB 022H, 0C9H, 005H, 029H, 07AH, 017H, 057H, 079H, 08FH, 04FH, 0F2H, 072H, 015H, 078H, 05CH, 045H 34D0 7A 17 57 79 34D4 8F 4F F2 72 34D8 15 78 5C 45 34DC B7 CA 8D 15 DB 0B7H, 0CAH, 08DH, 015H, 021H, 02CH, 022H, 086H, 077H, 0D2H, 06DH, 015H, 0C8H, 078H, 021H, 02CH 34E0 21 2C 22 86 34E4 77 D2 6D 15 34E8 C8 78 21 2C 34EC 22 B7 FC 9F DB 022H, 0B7H, 0FCH, 09FH, 015H, 046H, 023H, 07EH, 0E6H, 080H, 0A9H, 04FH, 0C3H, 08EH, 017H, 01CH 34F0 15 46 23 7E 34F4 E6 80 A9 4F 34F8 C3 8E 17 1C 34FC C0 14 C0 0C DB 0C0H, 014H, 0C0H, 00CH, 0C0H, 00EH, 080H, 034H, 0C0H, 0C3H, 0B5H, 004H, 07EH, 083H, 05FH, 023H 3500 C0 0E 80 34 3504 C0 C3 B5 04 3508 7E 83 5F 23 350C 7E 8A 57 23 DB 07EH, 08AH, 057H, 023H, 07EH, 089H, 04FH, 0C9H, 021H, 02DH, 022H, 07EH, 02FH, 077H, 0AFH, 06FH 3510 7E 89 4F C9 3514 21 2D 22 7E 3518 2F 77 AF 6F 351C 90 47 7D 9B DB 090H, 047H, 07DH, 09BH, 05FH, 07DH, 09AH, 057H, 07DH, 099H, 04FH, 0C9H, 006H, 000H, 0D6H, 008H 3520 5F 7D 9A 57 3524 7D 99 4F C9 3528 06 00 D6 08 352C DA DB 15 43 DB 0DAH, 0DBH, 015H, 043H, 05AH, 051H, 00EH, 000H, 0C3H, 0CEH, 015H, 0C6H, 009H, 06FH, 0AFH, 02DH 3530 5A 51 0E 00 3534 C3 CE 15 C6 3538 09 6F AF 2D 353C C8 79 1F 4F DB 0C8H, 079H, 01FH, 04FH, 07AH, 01FH, 057H, 07BH, 01FH, 05FH, 078H, 01FH, 047H, 0C3H, 0DEH, 015H 3540 7A 1F 57 7B 3544 1F 5F 78 1F 3548 47 C3 DE 15 354C 00 00 00 81 DB 000H, 000H, 000H, 081H, 003H, 0AAH, 056H, 019H, 080H, 0F1H, 022H, 076H, 080H, 045H, 0AAH, 038H 3550 03 AA 56 19 3554 80 F1 22 76 3558 80 45 AA 38 ;1600H 355C 82 CD 4D 17 DB 082H, 0CDH, 04DH, 017H, 0B7H, 0EAH, 0C5H, 009H, 021H, 02CH, 022H, 07EH, 001H, 035H, 080H, 011H 3560 B7 EA C5 09 3564 21 2C 22 7E 3568 01 35 80 11 356C F3 04 90 F5 DB 0F3H, 004H, 090H, 0F5H, 070H, 0D5H, 0C5H, 0CDH, 007H, 015H, 0C1H, 0D1H, 004H, 0CDH, 0A3H, 016H 3570 70 D5 C5 CD 3574 07 15 C1 D1 3578 04 CD A3 16 357C 21 F0 15 CD DB 021H, 0F0H, 015H, 0CDH, 0FEH, 014H, 021H, 0F4H, 015H, 0CDH, 095H, 01AH, 001H, 080H, 080H, 011H 3580 FE 14 21 F4 3584 15 CD 95 1A 3588 01 80 80 11 358C 00 00 CD 07 DB 000H, 000H, 0CDH, 007H, 015H, 0F1H, 0CDH, 0C8H, 018H, 001H, 031H, 080H, 011H, 018H, 072H, 021H 3590 15 F1 CD C8 3594 18 01 31 80 3598 11 18 72 21 359C C1 D1 CD 4D DB 0C1H, 0D1H, 0CDH, 04DH, 017H, 0C8H, 02EH, 000H, 0CDH, 00BH, 017H, 079H, 032H, 03BH, 022H, 0EBH 35A0 17 C8 2E 00 35A4 CD 0B 17 79 35A8 32 3B 22 EB 35AC 22 3C 22 01 DB 022H, 03CH, 022H, 001H, 000H, 000H, 050H, 058H, 021H, 058H, 015H, 0E5H, 021H, 064H, 016H, 0E5H 35B0 00 00 50 58 35B4 21 58 15 E5 35B8 21 64 16 E5 35BC E5 21 29 22 DB 0E5H, 021H, 029H, 022H, 07EH, 023H, 0B7H, 0CAH, 090H, 016H, 0E5H, 02EH, 008H, 01FH, 067H, 079H 35C0 7E 23 B7 CA 35C4 90 16 E5 2E 35C8 08 1F 67 79 35CC D2 7E 16 E5 DB 0D2H, 07EH, 016H, 0E5H, 02AH, 03CH, 022H, 019H, 0EBH, 0E1H, 03AH, 03BH, 022H, 089H, 01FH, 04FH 35D0 2A 3C 22 19 35D4 EB E1 3A 3B 35D8 22 89 1F 4F 35DC 7A 1F 57 7B DB 07AH, 01FH, 057H, 07BH, 01FH, 05FH, 078H, 01FH, 047H, 02DH, 07CH, 0C2H, 06DH, 016H, 0E1H, 0C9H 35E0 1F 5F 78 1F 35E4 47 2D 7C C2 35E8 6D 16 E1 C9 35EC 43 5A 51 4F DB 043H, 05AH, 051H, 04FH, 0C9H, 0CDH, 07EH, 017H, 001H, 020H, 084H, 011H, 000H, 000H, 0CDH, 08EH 35F0 C9 CD 7E 17 35F4 01 20 84 11 35F8 00 00 CD 8E 35FC 17 C1 D1 CD DB 017H, 0C1H, 0D1H, 0CDH, 04DH, 017H, 0CAH, 0A9H, 004H, 02EH, 0FFH, 0CDH, 00BH, 017H, 034H, 034H 3600 4D 17 CA A9 3604 04 2E FF CD 3608 0B 17 34 34 360C 2B 7E 32 57 DB 02BH, 07EH, 032H, 057H, 021H, 02BH, 07EH, 032H, 053H, 021H, 02BH, 07EH, 032H, 04FH, 021H, 041H 3610 21 2B 7E 32 3614 53 21 2B 7E 3618 32 4F 21 41 361C EB AF 4F 57 DB 0EBH, 0AFH, 04FH, 057H, 05FH, 032H, 05AH, 021H, 0E5H, 0C5H, 07DH, 0CDH, 04EH, 021H, 0DEH, 000H 3620 5F 32 5A 21 3624 E5 C5 7D CD 3628 4E 21 DE 00 362C 3F D2 DB 16 DB 03FH, 0D2H, 0DBH, 016H, 032H, 05AH, 021H, 0F1H, 0F1H, 037H, 0D2H, 0C1H, 0E1H, 079H, 03CH, 03DH 3630 32 5A 21 F1 3634 F1 37 D2 C1 3638 E1 79 3C 3D 363C 1F FA 8E 15 DB 01FH, 0FAH, 08EH, 015H, 017H, 07BH, 017H, 05FH, 07AH, 017H, 057H, 079H, 017H, 04FH, 029H, 078H 3640 17 7B 17 5F 3644 7A 17 57 79 3648 17 4F 29 78 364C 17 47 3A 5A DB 017H, 047H, 03AH, 05AH, 021H, 017H, 032H, 05AH, 021H, 079H, 0B2H, 0B3H, 0C2H, 0C8H, 016H, 0E5H 3650 21 17 32 5A 3654 21 79 B2 B3 3658 C2 C8 16 E5 ;1700H 365C 21 2C 22 35 DB 021H, 02CH, 022H, 035H, 0E1H, 0C2H, 0C8H, 016H, 0C3H, 0B5H, 004H, 078H, 0B7H, 0CAH, 02FH, 017H 3660 E1 C2 C8 16 3664 C3 B5 04 78 3668 B7 CA 2F 17 366C 7D 21 2C 22 DB 07DH, 021H, 02CH, 022H, 0AEH, 080H, 047H, 01FH, 0A8H, 078H, 0F2H, 02EH, 017H, 0C6H, 080H, 077H 3670 AE 80 47 1F 3674 A8 78 F2 2E 3678 17 C6 80 77 367C CA 8E 16 CD DB 0CAH, 08EH, 016H, 0CDH, 0B3H, 017H, 077H, 02BH, 0C9H, 0CDH, 04DH, 017H, 02FH, 0E1H, 0B7H, 0E1H 3680 B3 17 77 2B 3684 C9 CD 4D 17 3688 2F E1 B7 E1 368C F2 6D 15 C3 DB 0F2H, 06DH, 015H, 0C3H, 0B5H, 004H, 0CDH, 099H, 017H, 078H, 0B7H, 0C8H, 0C6H, 002H, 0DAH, 0B5H 3690 B5 04 CD 99 3694 17 78 B7 C8 3698 C6 02 DA B5 369C 04 47 CD 07 DB 004H, 047H, 0CDH, 007H, 015H, 021H, 02CH, 022H, 034H, 0C0H, 0C3H, 0B5H, 004H, 03AH, 02CH, 022H 36A0 15 21 2C 22 36A4 34 C0 C3 B5 36A8 04 3A 2C 22 36AC B7 C8 3A 2B DB 0B7H, 0C8H, 03AH, 02BH, 022H, 0FEH, 02FH, 017H, 09FH, 0C0H, 03CH, 0C9H, 0CDH, 04DH, 017H, 006H 36B0 22 FE 2F 17 36B4 9F C0 3C C9 36B8 CD 4D 17 06 36BC 88 11 00 00 DB 088H, 011H, 000H, 000H, 021H, 02CH, 022H, 04FH, 070H, 006H, 000H, 023H, 036H, 080H, 017H, 0C3H 36C0 21 2C 22 4F 36C4 70 06 00 23 36C8 36 80 17 C3 36CC 55 15 CD 4D DB 055H, 015H, 0CDH, 04DH, 017H, 0F0H, 021H, 02BH, 022H, 07EH, 0EEH, 080H, 077H, 0C9H, 0EBH, 02AH 36D0 17 F0 21 2B 36D4 22 7E EE 80 36D8 77 C9 EB 2A 36DC 29 22 E3 E5 DB 029H, 022H, 0E3H, 0E5H, 02AH, 02BH, 022H, 0E3H, 0E5H, 0EBH, 0C9H, 0CDH, 09CH, 017H, 0EBH, 022H 36E0 2A 2B 22 E3 36E4 E5 EB C9 CD 36E8 9C 17 EB 22 36EC 29 22 60 69 DB 029H, 022H, 060H, 069H, 022H, 02BH, 022H, 0EBH, 0C9H, 021H, 029H, 022H, 05EH, 023H, 056H, 023H 36F0 22 2B 22 EB 36F4 C9 21 29 22 36F8 5E 23 56 23 36FC 4E 23 46 23 DB 04EH, 023H, 046H, 023H, 0C9H, 011H, 029H, 022H, 006H, 004H, 01AH, 077H, 013H, 023H, 005H, 0C2H 3700 C9 11 29 22 3704 06 04 1A 77 3708 13 23 05 C2 370C AA 17 C9 21 DB 0AAH, 017H, 0C9H, 021H, 02BH, 022H, 07EH, 007H, 037H, 01FH, 077H, 03FH, 01FH, 023H, 023H, 077H 3710 2B 22 7E 07 3714 37 1F 77 3F 3718 1F 23 23 77 371C 79 07 37 1F DB 079H, 007H, 037H, 01FH, 04FH, 01FH, 0AEH, 0C9H, 078H, 0B7H, 0CAH, 04DH, 017H, 021H, 056H, 017H 3720 4F 1F AE C9 3724 78 B7 CA 4D 3728 17 21 56 17 372C E5 CD 4D 17 DB 0E5H, 0CDH, 04DH, 017H, 079H, 0C8H, 021H, 02BH, 022H, 0AEH, 079H, 0F8H, 0CDH, 0E2H, 017H, 01FH 3730 79 C8 21 2B 3734 22 AE 79 F8 3738 CD E2 17 1F 373C A9 C9 23 78 DB 0A9H, 0C9H, 023H, 078H, 0BEH, 0C0H, 02BH, 079H, 0BEH, 0C0H, 02BH, 07AH, 0BEH, 0C0H, 02BH, 07BH 3740 BE C0 2B 79 3744 BE C0 2B 7A 3748 BE C0 2B 7B 374C 96 C0 E1 E1 DB 096H, 0C0H, 0E1H, 0E1H, 0C9H, 047H, 04FH, 057H, 05FH, 0B7H, 0C8H, 0E5H, 0CDH, 099H, 017H, 0CDH 3750 C9 47 4F 57 3754 5F B7 C8 E5 3758 CD 99 17 CD ;1800H 375C B3 17 AE 67 DB 0B3H, 017H, 0AEH, 067H, 0FCH, 019H, 018H, 03EH, 098H, 090H, 0CDH, 0CCH, 015H, 07CH, 017H, 0DCH 3760 FC 19 18 3E 3764 98 90 CD CC 3768 15 7C 17 DC 376C 9F 15 06 00 DB 09FH, 015H, 006H, 000H, 0DCH, 0B8H, 015H, 0E1H, 0C9H, 01BH, 07AH, 0A3H, 03CH, 0C0H, 00BH, 0C9H 3770 DC B8 15 E1 3774 C9 1B 7A A3 3778 3C C0 0B C9 377C 21 2C 22 7E DB 021H, 02CH, 022H, 07EH, 0FEH, 098H, 03AH, 029H, 022H, 0D0H, 07EH, 0CDH, 0F5H, 017H, 036H, 098H 3780 FE 98 3A 29 3784 22 D0 7E CD 3788 F5 17 36 98 378C 7B F5 79 17 DB 07BH, 0F5H, 079H, 017H, 0CDH, 055H, 015H, 0F1H, 0C9H, 021H, 000H, 000H, 078H, 0B1H, 0C8H, 03EH 3790 CD 55 15 F1 3794 C9 21 00 00 3798 78 B1 C8 3E 379C 10 29 DA 79 DB 010H, 029H, 0DAH, 079H, 010H, 0EBH, 029H, 0EBH, 0D2H, 04FH, 018H, 009H, 0DAH, 079H, 010H, 03DH 37A0 10 EB 29 EB 37A4 D2 4F 18 09 37A8 DA 79 10 3D 37AC C2 41 18 C9 DB 0C2H, 041H, 018H, 0C9H, 0FEH, 02DH, 0F5H, 0CAH, 060H, 018H, 0FEH, 02BH, 0CAH, 060H, 018H, 02BH 37B0 FE 2D F5 CA 37B4 60 18 FE 2B 37B8 CA 60 18 2B 37BC CD 6D 15 47 DB 0CDH, 06DH, 015H, 047H, 057H, 05FH, 02FH, 04FH, 0CDH, 0FEH, 008H, 0DAH, 0B1H, 018H, 0FEH, 02EH 37C0 57 5F 2F 4F 37C4 CD FE 08 DA 37C8 B1 18 FE 2E 37CC CA 8C 18 FE DB 0CAH, 08CH, 018H, 0FEH, 045H, 0C2H, 090H, 018H, 0CDH, 0FEH, 008H, 0CDH, 0A4H, 00EH, 0CDH, 0FEH 37D0 45 C2 90 18 37D4 CD FE 08 CD 37D8 A4 0E CD FE 37DC 08 DA D3 18 DB 008H, 0DAH, 0D3H, 018H, 014H, 0C2H, 090H, 018H, 0AFH, 093H, 05FH, 00CH, 00CH, 0CAH, 068H, 018H 37E0 14 C2 90 18 37E4 AF 93 5F 0C 37E8 0C CA 68 18 37EC E5 7B 90 F4 DB 0E5H, 07BH, 090H, 0F4H, 0A9H, 018H, 0F2H, 09FH, 018H, 0F5H, 0CDH, 095H, 016H, 0F1H, 03CH, 0C2H 37F0 A9 18 F2 9F 37F4 18 F5 CD 95 37F8 16 F1 3C C2 37FC 93 18 D1 F1 DB 093H, 018H, 0D1H, 0F1H, 0CCH, 076H, 017H, 0EBH, 0C9H, 0C8H, 0F5H, 0CDH, 036H, 017H, 0F1H, 03DH 3800 CC 76 17 EB 3804 C9 C8 F5 CD 3808 36 17 F1 3D 380C C9 D5 57 78 DB 0C9H, 0D5H, 057H, 078H, 089H, 047H, 0C5H, 0E5H, 0D5H, 0CDH, 036H, 017H, 0F1H, 0D6H, 030H, 0CDH 3810 89 47 C5 E5 3814 D5 CD 36 17 3818 F1 D6 30 CD 381C C8 18 E1 C1 DB 0C8H, 018H, 0E1H, 0C1H, 0D1H, 0C3H, 068H, 018H, 0CDH, 07EH, 017H, 0CDH, 05FH, 017H, 0C1H, 0D1H 3820 D1 C3 68 18 3824 CD 7E 17 CD 3828 5F 17 C1 D1 382C C3 07 15 7B DB 0C3H, 007H, 015H, 07BH, 007H, 007H, 083H, 007H, 086H, 0D6H, 030H, 05FH, 0C3H, 07EH, 018H, 0E5H 3830 07 07 83 07 3834 86 D6 30 5F 3838 C3 7E 18 E5 383C 21 3E 04 CD DB 021H, 03EH, 004H, 0CDH, 044H, 012H, 0E1H, 0EBH, 0AFH, 006H, 098H, 0CDH, 064H, 017H, 021H, 043H 3840 44 12 E1 EB 3844 AF 06 98 CD 3848 64 17 21 43 384C 12 E5 21 2E DB 012H, 0E5H, 021H, 02EH, 022H, 0E5H, 0CDH, 04DH, 017H, 036H, 020H, 0F2H, 000H, 019H, 036H, 02DH 3850 22 E5 CD 4D 3854 17 36 20 F2 3858 00 19 36 2D ;1900H 385C 23 36 30 CA DB 023H, 036H, 030H, 0CAH, 0B6H, 019H, 0E5H, 0FCH, 076H, 017H, 0AFH, 0F5H, 0CDH, 0BCH, 019H, 001H 3860 B6 19 E5 FC 3864 76 17 AF F5 3868 CD BC 19 01 386C 43 91 11 F8 DB 043H, 091H, 011H, 0F8H, 04FH, 0CDH, 0C8H, 017H, 0B7H, 0E2H, 02DH, 019H, 0F1H, 0CDH, 0AAH, 018H 3870 4F CD C8 17 3874 B7 E2 2D 19 3878 F1 CD AA 18 387C F5 C3 0F 19 DB 0F5H, 0C3H, 00FH, 019H, 0CDH, 095H, 016H, 0F1H, 03CH, 0F5H, 0CDH, 0BCH, 019H, 0CDH, 0F5H, 014H 3880 CD 95 16 F1 3884 3C F5 CD BC 3888 19 CD F5 14 388C 3C CD F5 17 DB 03CH, 0CDH, 0F5H, 017H, 0CDH, 08EH, 017H, 001H, 006H, 003H, 0F1H, 081H, 03CH, 0FAH, 049H, 019H 3890 CD 8E 17 01 3894 06 03 F1 81 3898 3C FA 49 19 389C FE 08 D2 49 DB 0FEH, 008H, 0D2H, 049H, 019H, 03CH, 047H, 03EH, 002H, 03DH, 03DH, 0E1H, 0F5H, 011H, 0CFH, 019H 38A0 19 3C 47 3E 38A4 02 3D 3D E1 38A8 F5 11 CF 19 38AC 05 C2 5A 19 DB 005H, 0C2H, 05AH, 019H, 036H, 02EH, 023H, 036H, 030H, 023H, 005H, 036H, 02EH, 0CCH, 0A3H, 017H 38B0 36 2E 23 36 38B4 30 23 05 36 38B8 2E CC A3 17 38BC C5 E5 D5 CD DB 0C5H, 0E5H, 0D5H, 0CDH, 099H, 017H, 0E1H, 006H, 02FH, 004H, 07BH, 096H, 05FH, 023H, 07AH, 09EH 38C0 99 17 E1 06 38C4 2F 04 7B 96 38C8 5F 23 7A 9E 38CC 57 23 79 9E DB 057H, 023H, 079H, 09EH, 04FH, 02BH, 02BH, 0D2H, 069H, 019H, 0CDH, 0ACH, 015H, 023H, 0CDH, 08EH 38D0 4F 2B 2B D2 38D4 69 19 CD AC 38D8 15 23 CD 8E 38DC 17 EB E1 70 DB 017H, 0EBH, 0E1H, 070H, 023H, 0C1H, 00DH, 0C2H, 05AH, 019H, 005H, 0CAH, 09AH, 019H, 02BH, 07EH 38E0 23 C1 0D C2 38E4 5A 19 05 CA 38E8 9A 19 2B 7E 38EC FE 30 CA 8E DB 0FEH, 030H, 0CAH, 08EH, 019H, 0FEH, 02EH, 0C4H, 0A3H, 017H, 0F1H, 0CAH, 0B9H, 019H, 036H, 045H 38F0 19 FE 2E C4 38F4 A3 17 F1 CA 38F8 B9 19 36 45 38FC 23 36 2B F2 DB 023H, 036H, 02BH, 0F2H, 0AAH, 019H, 036H, 02DH, 02FH, 03CH, 006H, 02FH, 004H, 0D6H, 00AH, 0D2H 3900 AA 19 36 2D 3904 2F 3C 06 2F 3908 04 D6 0A D2 390C AC 19 C6 3A DB 0ACH, 019H, 0C6H, 03AH, 023H, 070H, 023H, 077H, 023H, 071H, 0E1H, 0C9H, 001H, 074H, 094H, 011H 3910 23 70 23 77 3914 23 71 E1 C9 3918 01 74 94 11 391C F7 23 CD C8 DB 0F7H, 023H, 0CDH, 0C8H, 017H, 0B7H, 0E1H, 0E2H, 024H, 019H, 0E9H, 000H, 000H, 000H, 080H, 0A0H 3920 17 B7 E1 E2 3924 24 19 E9 00 3928 00 00 80 A0 392C 86 01 10 27 DB 086H, 001H, 010H, 027H, 000H, 0E8H, 003H, 000H, 064H, 000H, 000H, 00AH, 000H, 000H, 001H, 000H 3930 00 E8 03 00 3934 64 00 00 0A 3938 00 00 01 00 393C 00 21 76 17 DB 000H, 021H, 076H, 017H, 0E3H, 0E9H, 0CDH, 07EH, 017H, 021H, 0CBH, 019H, 0CDH, 08BH, 017H, 0C1H 3940 E3 E9 CD 7E 3944 17 21 CB 19 3948 CD 8B 17 C1 394C D1 CD 4D 17 DB 0D1H, 0CDH, 04DH, 017H, 078H, 0CAH, 034H, 01AH, 0F2H, 0FFH, 019H, 0B7H, 0CAH, 0A9H, 004H, 0B7H 3950 78 CA 34 1A 3954 F2 FF 19 B7 3958 CA A9 04 B7 ;1A00H 395C CA 6E 15 D5 DB 0CAH, 06EH, 015H, 0D5H, 0C5H, 079H, 0F6H, 07FH, 0CDH, 099H, 017H, 0F2H, 01CH, 01AH, 0D5H, 0C5H 3960 C5 79 F6 7F 3964 CD 99 17 F2 3968 1C 1A D5 C5 396C CD 20 18 C1 DB 0CDH, 020H, 018H, 0C1H, 0D1H, 0F5H, 0CDH, 0C8H, 017H, 0E1H, 07CH, 01FH, 0E1H, 022H, 02BH, 022H 3970 D1 F5 CD C8 3974 17 E1 7C 1F 3978 E1 22 2B 22 397C E1 22 29 22 DB 0E1H, 022H, 029H, 022H, 0DCH, 0E1H, 019H, 0CCH, 076H, 017H, 0D5H, 0C5H, 0CDH, 001H, 016H, 0C1H 3980 DC E1 19 CC 3984 76 17 D5 C5 3988 CD 01 16 C1 398C D1 CD 42 16 DB 0D1H, 0CDH, 042H, 016H, 0CDH, 07EH, 017H, 001H, 038H, 081H, 011H, 03BH, 0AAH, 0CDH, 042H, 016H 3990 CD 7E 17 01 3994 38 81 11 3B 3998 AA CD 42 16 399C 3A 2C 22 FE DB 03AH, 02CH, 022H, 0FEH, 088H, 0D2H, 029H, 017H, 0CDH, 020H, 018H, 0C6H, 080H, 0C6H, 002H, 0DAH 39A0 88 D2 29 17 39A4 CD 20 18 C6 39A8 80 C6 02 DA 39AC 29 17 F5 21 DB 029H, 017H, 0F5H, 021H, 0F0H, 015H, 0CDH, 0F8H, 014H, 0CDH, 039H, 016H, 0F1H, 0C1H, 0D1H, 0F5H 39B0 F0 15 CD F8 39B4 14 CD 39 16 39B8 F1 C1 D1 F5 39BC CD 04 15 CD DB 0CDH, 004H, 015H, 0CDH, 076H, 017H, 021H, 074H, 01AH, 0CDH, 0A4H, 01AH, 011H, 000H, 000H, 0C1H 39C0 76 17 21 74 39C4 1A CD A4 1A 39C8 11 00 00 C1 39CC 4A C3 42 16 DB 04AH, 0C3H, 042H, 016H, 008H, 040H, 02EH, 094H, 074H, 070H, 04FH, 02EH, 077H, 06EH, 002H, 088H 39D0 08 40 2E 94 39D4 74 70 4F 2E 39D8 77 6E 02 88 39DC 7A E6 A0 2A DB 07AH, 0E6H, 0A0H, 02AH, 07CH, 050H, 0AAH, 0AAH, 07EH, 0FFH, 0FFH, 07FH, 07FH, 000H, 000H, 080H 39E0 7C 50 AA AA 39E4 7E FF FF 7F 39E8 7F 00 00 80 39EC 81 00 00 00 DB 081H, 000H, 000H, 000H, 081H, 0CDH, 07EH, 017H, 011H, 040H, 016H, 0D5H, 0E5H, 0CDH, 099H, 017H 39F0 81 CD 7E 17 39F4 11 40 16 D5 39F8 E5 CD 99 17 39FC CD 42 16 E1 DB 0CDH, 042H, 016H, 0E1H, 0CDH, 07EH, 017H, 07EH, 023H, 0CDH, 08BH, 017H, 006H, 0F1H, 0C1H, 0D1H 3A00 CD 7E 17 7E 3A04 23 CD 8B 17 3A08 06 F1 C1 D1 3A0C 3D C8 D5 C5 DB 03DH, 0C8H, 0D5H, 0C5H, 0F5H, 0E5H, 0CDH, 042H, 016H, 0E1H, 0CDH, 09CH, 017H, 0E5H, 0CDH, 007H 3A10 F5 E5 CD 42 3A14 16 E1 CD 9C 3A18 17 E5 CD 07 3A1C 15 E1 C3 AD DB 015H, 0E1H, 0C3H, 0ADH, 01AH, 0CDH, 04DH, 017H, 021H, 05EH, 021H, 0FAH, 026H, 01BH, 021H, 07FH 3A20 1A CD 4D 17 3A24 21 5E 21 FA 3A28 26 1B 21 7F 3A2C 21 CD 8B 17 DB 021H, 0CDH, 08BH, 017H, 021H, 05EH, 021H, 0C8H, 086H, 0E6H, 007H, 006H, 000H, 077H, 023H, 087H 3A30 21 5E 21 C8 3A34 86 E6 07 06 3A38 00 77 23 87 3A3C 87 4F 09 CD DB 087H, 04FH, 009H, 0CDH, 09CH, 017H, 0CDH, 042H, 016H, 03AH, 05DH, 021H, 03CH, 0E6H, 003H, 006H 3A40 9C 17 CD 42 3A44 16 3A 5D 21 3A48 3C E6 03 06 3A4C 00 FE 01 88 DB 000H, 0FEH, 001H, 088H, 032H, 05DH, 021H, 021H, 02AH, 01BH, 087H, 087H, 04FH, 009H, 0CDH, 0F8H 3A50 32 5D 21 21 3A54 2A 1B 87 87 3A58 4F 09 CD F8 ;1B00H 3A5C 14 CD 99 17 DB 014H, 0CDH, 099H, 017H, 07BH, 059H, 0EEH, 04FH, 04FH, 036H, 080H, 02BH, 046H, 036H, 080H, 021H 3A60 7B 59 EE 4F 3A64 4F 36 80 2B 3A68 46 36 80 21 3A6C 5C 21 34 7E DB 05CH, 021H, 034H, 07EH, 0D6H, 0ABH, 0C2H, 01DH, 01BH, 077H, 00CH, 015H, 01CH, 0CDH, 058H, 015H 3A70 D6 AB C2 1D 3A74 1B 77 0C 15 3A78 1C CD 58 15 3A7C 21 7F 21 C3 DB 021H, 07FH, 021H, 0C3H, 0A5H, 017H, 077H, 02BH, 077H, 02BH, 077H, 0C3H, 001H, 01BH, 068H, 0B1H 3A80 A5 17 77 2B 3A84 77 2B 77 C3 3A88 01 1B 68 B1 3A8C 46 68 99 E9 DB 046H, 068H, 099H, 0E9H, 092H, 069H, 010H, 0D1H, 075H, 068H, 021H, 084H, 01BH, 0CDH, 0F8H, 014H 3A90 92 69 10 D1 3A94 75 68 21 84 3A98 1B CD F8 14 3A9C CD 7E 17 01 DB 0CDH, 07EH, 017H, 001H, 049H, 083H, 011H, 0DBH, 00FH, 0CDH, 08EH, 017H, 0C1H, 0D1H, 0CDH, 0A3H 3AA0 49 83 11 DB 3AA4 0F CD 8E 17 3AA8 C1 D1 CD A3 3AAC 16 CD 7E 17 DB 016H, 0CDH, 07EH, 017H, 0CDH, 020H, 018H, 0C1H, 0D1H, 0CDH, 004H, 015H, 021H, 088H, 01BH, 0CDH 3AB0 CD 20 18 C1 3AB4 D1 CD 04 15 3AB8 21 88 1B CD 3ABC FE 14 CD 4D DB 0FEH, 014H, 0CDH, 04DH, 017H, 037H, 0F2H, 070H, 01BH, 0CDH, 0F5H, 014H, 0CDH, 04DH, 017H, 0B7H 3AC0 17 37 F2 70 3AC4 1B CD F5 14 3AC8 CD 4D 17 B7 3ACC F5 F4 76 17 DB 0F5H, 0F4H, 076H, 017H, 021H, 088H, 01BH, 0CDH, 0F8H, 014H, 0F1H, 0D4H, 076H, 017H, 021H, 08CH 3AD0 21 88 1B CD 3AD4 F8 14 F1 D4 3AD8 76 17 21 8C 3ADC 1B C3 95 1A DB 01BH, 0C3H, 095H, 01AH, 0DBH, 00FH, 049H, 081H, 000H, 000H, 000H, 07FH, 005H, 0BAH, 0D7H, 01EH 3AE0 DB 0F 49 81 3AE4 00 00 00 7F 3AE8 05 BA D7 1E 3AEC 86 64 26 99 DB 086H, 064H, 026H, 099H, 087H, 058H, 034H, 023H, 087H, 0E0H, 05DH, 0A5H, 086H, 0DAH, 00FH, 049H 3AF0 87 58 34 23 3AF4 87 E0 5D A5 3AF8 86 DA 0F 49 3AFC 83 CD 7E 17 DB 083H, 0CDH, 07EH, 017H, 0CDH, 040H, 01BH, 0C1H, 0E1H, 0CDH, 07EH, 017H, 0EBH, 0CDH, 08EH, 017H 3B00 CD 40 1B C1 3B04 E1 CD 7E 17 3B08 EB CD 8E 17 3B0C CD 3A 1B C3 DB 0CDH, 03AH, 01BH, 0C3H, 0A1H, 016H, 0CDH, 04DH, 017H, 0FCH, 0E1H, 019H, 0FCH, 076H, 017H, 03AH 3B10 A1 16 CD 4D 3B14 17 FC E1 19 3B18 FC 76 17 3A 3B1C 2C 22 FE 81 DB 02CH, 022H, 0FEH, 081H, 0DAH, 0D3H, 01BH, 001H, 000H, 081H, 051H, 059H, 0CDH, 0A3H, 016H, 021H 3B20 DA D3 1B 01 3B24 00 81 51 59 3B28 CD A3 16 21 3B2C FE 14 E5 21 DB 0FEH, 014H, 0E5H, 021H, 0DDH, 01BH, 0CDH, 095H, 01AH, 021H, 084H, 01BH, 0C9H, 009H, 04AH, 0D7H 3B30 DD 1B CD 95 3B34 1A 21 84 1B 3B38 C9 09 4A D7 3B3C 3B 78 02 6E DB 03BH, 078H, 002H, 06EH, 084H, 07BH, 0FEH, 0C1H, 02FH, 07CH, 074H, 031H, 09AH, 07DH, 084H, 03DH 3B40 84 7B FE C1 3B44 2F 7C 74 31 3B48 9A 7D 84 3D 3B4C 5A 7D C8 7F DB 05AH, 07DH, 0C8H, 07FH, 091H, 07EH, 0E4H, 0BBH, 04CH, 07EH, 06CH, 0AAH, 0AAH, 07FH, 000H, 000H 3B50 91 7E E4 BB 3B54 4C 7E 6C AA 3B58 AA 7F 00 00 ;1C00H 3B5C 00 81 C9 D7 DB 000H, 081H, 0C9H, 0D7H, 0C9H, 03EH, 00CH, 0C3H, 03BH, 01DH, 0CDH, 0CCH, 014H, 07BH, 032H, 087H 3B60 C9 3E 0C C3 3B64 3B 1D CD CC 3B68 14 7B 32 87 3B6C 21 C9 CD 6B DB 021H, 0C9H, 0CDH, 06BH, 00DH, 0CDH, 0B0H, 009H, 0EDH, 053H, 08BH, 021H, 0EDH, 053H, 08DH, 021H 3B70 0D CD B0 09 3B74 ED 53 8B 21 3B78 ED 53 8D 21 3B7C C9 CD B0 09 DB 0C9H, 0CDH, 0B0H, 009H, 0D5H, 0E1H, 046H, 023H, 07EH, 0C3H, 026H, 011H, 0CDH, 06BH, 00DH, 0CDH 3B80 D5 E1 46 23 3B84 7E C3 26 11 3B88 CD 6B 0D CD 3B8C B0 09 D5 CD DB 0B0H, 009H, 0D5H, 0CDH, 074H, 007H, 02CH, 0CDH, 06BH, 00DH, 0CDH, 0B0H, 009H, 0E3H, 073H, 023H 3B90 74 07 2C CD 3B94 6B 0D CD B0 3B98 09 E3 73 23 3B9C 72 E1 C9 CD DB 072H, 0E1H, 0C9H, 0CDH, 06EH, 00DH, 0CDH, 0B0H, 009H, 0C5H, 021H, 02EH, 022H, 07AH, 0FEH, 000H 3BA0 6E 0D CD B0 3BA4 09 C5 21 2E 3BA8 22 7A FE 00 3BAC 28 0C CD 7B DB 028H, 00CH, 0CDH, 07BH, 01CH, 078H, 0FEH, 030H, 028H, 002H, 070H, 023H, 071H, 023H, 07BH, 0CDH 3BB0 1C 78 FE 30 3BB4 28 02 70 23 3BB8 71 23 7B CD 3BBC 7B 1C 7A FE DB 07BH, 01CH, 07AH, 0FEH, 000H, 020H, 005H, 078H, 0FEH, 030H, 028H, 002H, 070H, 023H, 071H, 023H 3BC0 00 20 05 78 3BC4 FE 30 28 02 3BC8 70 23 71 23 3BCC AF 77 23 77 DB 0AFH, 077H, 023H, 077H, 0C1H, 021H, 02EH, 022H, 0C3H, 0D4H, 011H, 047H, 0E6H, 00FH, 0FEH, 00AH 3BD0 C1 21 2E 22 3BD4 C3 D4 11 47 3BD8 E6 0F FE 0A 3BDC 38 02 C6 07 DB 038H, 002H, 0C6H, 007H, 0C6H, 030H, 04FH, 078H, 00FH, 00FH, 00FH, 00FH, 0E6H, 00FH, 0FEH, 00AH 3BE0 C6 30 4F 78 3BE4 0F 0F 0F 0F 3BE8 E6 0F FE 0A 3BEC 38 02 C6 07 DB 038H, 002H, 0C6H, 007H, 0C6H, 030H, 047H, 0C9H, 0EBH, 021H, 000H, 000H, 0CDH, 0B1H, 01CH, 0DAH 3BF0 C6 30 47 C9 3BF4 EB 21 00 00 3BF8 CD B1 1C DA 3BFC D1 1C 18 05 DB 0D1H, 01CH, 018H, 005H, 0CDH, 0B1H, 01CH, 038H, 01FH, 029H, 029H, 029H, 029H, 0B5H, 06FH, 018H 3C00 CD B1 1C 38 3C04 1F 29 29 29 3C08 29 B5 6F 18 3C0C F3 13 1A FE DB 0F3H, 013H, 01AH, 0FEH, 020H, 0CAH, 0B1H, 01CH, 0D6H, 030H, 0D8H, 0FEH, 00AH, 038H, 005H, 0D6H 3C10 20 CA B1 1C 3C14 D6 30 D8 FE 3C18 0A 38 05 D6 3C1C 07 FE 0A D8 DB 007H, 0FEH, 00AH, 0D8H, 0FEH, 010H, 03FH, 0C9H, 0EBH, 07AH, 04BH, 0E5H, 0CDH, 025H, 011H, 0E1H 3C20 FE 10 3F C9 3C24 EB 7A 4B E5 3C28 CD 25 11 E1 3C2C C9 1E 26 C3 DB 0C9H, 01EH, 026H, 0C3H, 0BAH, 004H, 0CDH, 06EH, 00DH, 0CDH, 0B0H, 009H, 0C5H, 021H, 02EH, 022H 3C30 BA 04 CD 6E 3C34 0D CD B0 09 3C38 C5 21 2E 22 3C3C 06 11 05 78 DB 006H, 011H, 005H, 078H, 0FEH, 001H, 028H, 008H, 0CBH, 013H, 0CBH, 012H, 030H, 0F4H, 018H, 004H 3C40 FE 01 28 08 3C44 CB 13 CB 12 3C48 30 F4 18 04 3C4C CB 13 CB 12 DB 0CBH, 013H, 0CBH, 012H, 03EH, 030H, 0CEH, 000H, 077H, 023H, 005H, 020H, 0F3H, 0AFH, 077H, 023H 3C50 3E 30 CE 00 3C54 77 23 05 20 3C58 F3 AF 77 23 ;1D00H 3C5C 77 C1 21 2E DB 077H, 0C1H, 021H, 02EH, 022H, 0C3H, 0D4H, 011H, 0EBH, 021H, 000H, 000H, 0CDH, 025H, 01DH, 0DAH 3C60 22 C3 D4 11 3C64 EB 21 00 00 3C68 CD 25 1D DA 3C6C 33 1D D6 30 DB 033H, 01DH, 0D6H, 030H, 029H, 0B5H, 06FH, 0CDH, 025H, 01DH, 030H, 0F6H, 0EBH, 07AH, 04BH, 0E5H 3C70 29 B5 6F CD 3C74 25 1D 30 F6 3C78 EB 7A 4B E5 3C7C CD 25 11 E1 DB 0CDH, 025H, 011H, 0E1H, 0C9H, 013H, 01AH, 0FEH, 020H, 0CAH, 025H, 01DH, 0FEH, 030H, 0D8H, 0FEH 3C80 C9 13 1A FE 3C84 20 CA 25 1D 3C88 FE 30 D8 FE 3C8C 32 3F C9 1E DB 032H, 03FH, 0C9H, 01EH, 028H, 0C3H, 0BAH, 004H, 0C3H, 0EAH, 000H, 0C3H, 008H, 000H, 0C3H, 000H 3C90 28 C3 BA 04 3C94 C3 EA 00 C3 3C98 08 00 C3 00 3C9C 00 3E 00 32 DB 000H, 03EH, 000H, 032H, 092H, 021H, 0C3H, 003H, 001H, 0F5H, 0A0H, 0C1H, 0B8H, 03EH, 000H, 0C9H 3CA0 92 21 C3 03 3CA4 01 F5 A0 C1 3CA8 B8 3E 00 C9 3CAC CD 7F 07 C3 DB 0CDH, 07FH, 007H, 0C3H, 0A6H, 00BH, 021H, 000H, 000H, 022H, 002H, 020H, 022H, 007H, 020H, 0AFH 3CB0 A6 0B 21 00 3CB4 00 22 02 20 3CB8 22 07 20 AF 3CBC 32 04 20 32 DB 032H, 004H, 020H, 032H, 005H, 020H, 032H, 006H, 020H, 021H, 090H, 000H, 07CH, 0EDH, 047H, 0EDH 3CC0 05 20 32 06 3CC4 20 21 90 00 3CC8 7C ED 47 ED 3CCC 5E 3E A7 D3 DB 05EH, 03EH, 0A7H, 0D3H, 010H, 03EH, 0C0H, 0D3H, 010H, 07DH, 0D3H, 010H, 0FBH, 0C9H, 0F5H, 0C5H 3CD0 10 3E C0 D3 3CD4 10 7D D3 10 3CD8 FB C9 F5 C5 3CDC E5 2A 02 20 DB 0E5H, 02AH, 002H, 020H, 001H, 005H, 000H, 009H, 001H, 0E8H, 003H, 07CH, 0B8H, 020H, 03BH, 07DH 3CE0 01 05 00 09 3CE4 01 E8 03 7C 3CE8 B8 20 3B 7D 3CEC B9 20 37 3A DB 0B9H, 020H, 037H, 03AH, 004H, 020H, 03CH, 032H, 004H, 020H, 0FEH, 03CH, 020H, 029H, 03AH, 005H 3CF0 04 20 3C 32 3CF4 04 20 FE 3C 3CF8 20 29 3A 05 3CFC 20 3C 32 05 DB 020H, 03CH, 032H, 005H, 020H, 0FEH, 03CH, 020H, 01AH, 03AH, 006H, 020H, 03CH, 032H, 006H, 020H 3D00 20 FE 3C 20 3D04 1A 3A 06 20 3D08 3C 32 06 20 3D0C FE 18 20 0B DB 0FEH, 018H, 020H, 00BH, 02AH, 007H, 020H, 023H, 022H, 007H, 020H, 0AFH, 032H, 006H, 020H, 0AFH 3D10 2A 07 20 23 3D14 22 07 20 AF 3D18 32 06 20 AF 3D1C 32 05 20 AF DB 032H, 005H, 020H, 0AFH, 032H, 004H, 020H, 021H, 000H, 000H, 022H, 002H, 020H, 0E1H, 0C1H, 0F1H 3D20 32 04 20 21 3D24 00 00 22 02 3D28 20 E1 C1 F1 3D2C FB ED 4D 3E DB 0FBH, 0EDH, 04DH, 03EH, 0CFH, 0D3H, 01DH, 03AH, 008H, 020H, 0D3H, 01DH, 03EH, 007H, 0D3H, 01DH 3D30 CF D3 1D 3A 3D34 08 20 D3 1D 3D38 3E 07 D3 1D 3D3C C9 3E CF D3 DB 0C9H, 03EH, 0CFH, 0D3H, 01FH, 03AH, 00AH, 020H, 0D3H, 01FH, 03EH, 007H, 0D3H, 01FH, 0C9H, 0CDH 3D40 1F 3A 0A 20 3D44 D3 1F 3E 07 3D48 D3 1F C9 CD 3D4C D3 1D 3A 09 DB 0D3H, 01DH, 03AH, 009H, 020H, 0D3H, 01CH, 0C9H, 0CDH, 0E1H, 01DH, 03AH, 00BH, 020H, 0D3H, 01EH 3D50 20 D3 1C C9 3D54 CD E1 1D 3A 3D58 0B 20 D3 1E ;1E00H 3D5C C9 CD CC 14 DB 0C9H, 0CDH, 0CCH, 014H, 0B7H, 028H, 00BH, 0FEH, 001H, 028H, 0E4H, 0FEH, 002H, 028H, 0E9H, 0FEH 3D60 B7 28 0B FE 3D64 01 28 E4 FE 3D68 02 28 E9 FE 3D6C 03 C9 3E 05 DB 003H, 0C9H, 03EH, 005H, 0D3H, 01BH, 03EH, 06AH, 0D3H, 01BH, 0C3H, 000H, 000H, 0D5H, 0E5H, 0C5H 3D70 D3 1B 3E 6A 3D74 D3 1B C3 00 3D78 00 D5 E5 C5 3D7C 21 ED 1E CD DB 021H, 0EDH, 01EH, 0CDH, 044H, 012H, 0D7H, 0FEH, 003H, 0CCH, 0A6H, 00BH, 037H, 0CAH, 041H, 009H 3D80 44 12 D7 FE 3D84 03 CC A6 0B 3D88 37 CA 41 09 3D8C FE 3A 20 F2 DB 0FEH, 03AH, 020H, 0F2H, 00EH, 000H, 0D7H, 0CDH, 009H, 01FH, 0DAH, 0CFH, 01EH, 087H, 087H, 087H 3D90 0E 00 D7 CD 3D94 09 1F DA CF 3D98 1E 87 87 87 3D9C 87 57 D7 CD DB 087H, 057H, 0D7H, 0CDH, 009H, 01FH, 0DAH, 0CFH, 01EH, 082H, 047H, 04FH, 0D7H, 0CDH, 009H, 01FH 3DA0 09 1F DA CF 3DA4 1E 82 47 4F 3DA8 D7 CD 09 1F 3DAC DA CF 1E 87 DB 0DAH, 0CFH, 01EH, 087H, 087H, 087H, 087H, 057H, 0D7H, 0CDH, 009H, 01FH, 0DAH, 0CFH, 01EH, 082H 3DB0 87 87 87 57 3DB4 D7 CD 09 1F 3DB8 DA CF 1E 82 3DBC 67 81 4F D7 DB 067H, 081H, 04FH, 0D7H, 0CDH, 009H, 01FH, 0DAH, 0CFH, 01EH, 087H, 087H, 087H, 087H, 057H, 0D7H 3DC0 CD 09 1F DA 3DC4 CF 1E 87 87 3DC8 87 87 57 D7 3DCC CD 09 1F DA DB 0CDH, 009H, 01FH, 0DAH, 0CFH, 01EH, 082H, 06FH, 081H, 04FH, 0D7H, 0CDH, 009H, 01FH, 0DAH, 0CFH 3DD0 CF 1E 82 6F 3DD4 81 4F D7 CD 3DD8 09 1F DA CF 3DDC 1E 87 87 87 DB 01EH, 087H, 087H, 087H, 087H, 057H, 0D7H, 0CDH, 009H, 01FH, 0DAH, 0CFH, 01EH, 082H, 0FEH, 001H 3DE0 87 57 D7 CD 3DE4 09 1F DA CF 3DE8 1E 82 FE 01 3DEC CA DA 1E D7 DB 0CAH, 0DAH, 01EH, 0D7H, 0CDH, 009H, 01FH, 0DAH, 0CFH, 01EH, 087H, 087H, 087H, 087H, 057H, 0D7H 3DF0 CD 09 1F DA 3DF4 CF 1E 87 87 3DF8 87 87 57 D7 3DFC CD 09 1F DA DB 0CDH, 009H, 01FH, 0DAH, 0CFH, 01EH, 082H, 077H, 081H, 04FH, 023H, 010H, 0E6H, 079H, 02FH, 03CH 3E00 CF 1E 82 77 3E04 81 4F 23 10 3E08 E6 79 2F 3C 3E0C 4F D7 CD 09 DB 04FH, 0D7H, 0CDH, 009H, 01FH, 0DAH, 0CFH, 01EH, 087H, 087H, 087H, 087H, 057H, 0D7H, 0CDH, 009H 3E10 1F DA CF 1E 3E14 87 87 87 87 3E18 57 D7 CD 09 3E1C 1F DA CF 1E DB 01FH, 0DAH, 0CFH, 01EH, 082H, 0B9H, 0C2H, 0CFH, 01EH, 03EH, 02AH, 0CFH, 0C3H, 026H, 01EH, 021H 3E20 82 B9 C2 CF 3E24 1E 3E 2A CF 3E28 C3 26 1E 21 3E2C F6 1E CD 44 DB 0F6H, 01EH, 0CDH, 044H, 012H, 0E1H, 0D1H, 0C3H, 0DDH, 000H, 0D7H, 0FEH, 00DH, 020H, 0FBH, 0CDH 3E30 12 E1 D1 C3 3E34 DD 00 D7 FE 3E38 0D 20 FB CD 3E3C A6 0B 21 00 DB 0A6H, 00BH, 021H, 000H, 01FH, 0CDH, 044H, 012H, 0E1H, 0D1H, 0C3H, 0DDH, 000H, 052H, 045H, 041H 3E40 1F CD 44 12 3E44 E1 D1 C3 DD 3E48 00 52 45 41 3E4C 44 59 0D 0A DB 044H, 059H, 00DH, 00AH, 000H, 000H, 046H, 041H, 049H, 04CH, 045H, 044H, 00DH, 00AH, 000H, 000H 3E50 00 00 46 41 3E54 49 4C 45 44 3E58 0D 0A 00 00 ;1F00H 3E5C 45 4E 44 45 DB 045H, 04EH, 044H, 045H, 044H, 00DH, 00AH, 000H, 000H, 0FEH, 030H, 0D8H, 0FEH, 03AH, 038H, 009H 3E60 44 0D 0A 00 3E64 00 FE 30 D8 3E68 FE 3A 38 09 3E6C FE 41 D8 FE DB 0FEH, 041H, 0D8H, 0FEH, 047H, 03FH, 0D8H, 0C6H, 009H, 0E6H, 00FH, 0C9H, 0F5H, 0C5H, 0D5H, 0E5H 3E70 47 3F D8 C6 3E74 09 E6 0F C9 3E78 F5 C5 D5 E5 3E7C 32 0D 20 ED DB 032H, 00DH, 020H, 0EDH, 043H, 00FH, 020H, 0EDH, 053H, 011H, 020H, 022H, 013H, 020H, 0E1H, 0D1H 3E80 43 0F 20 ED 3E84 53 11 20 22 3E88 13 20 E1 D1 3E8C C1 F1 C9 FF DB 0C1H, 0F1H, 0C9H, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH 3E90 FF FF FF FF 3E94 FF FF FF FF 3E98 FF FF FF FF 3E9C FF FF FF FF DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH 3EA0 FF FF FF FF 3EA4 FF FF FF FF 3EA8 FF FF FF FF 3EAC BSRAM1: 3EAC END