gcl0x {-----------------------------------------------------------------------+ | | | Micro-Soft's 6502 BASIC for Gigatron | | | | Based on https://github.com/mist64/msbasic | | | +-----------------------------------------------------------------------} { -------------------------- ### MS BASIC ### 3839 BYTES FREE READY. -------------------------- Open issues: XXX SAVE/LOAD with SD card Implemented: - 9 digit floating point (40 bits) - Simple line editing with blinking cursor - Strings,LEFT$(), MID$(), ... - Multidimensional arrays - Break with Ctrl-C - INPUT and GET work as expected - POS() and TAB() - TIME and TIME$, wrapping after 23:59:59 - SAVE to BabelFish - 64K support - Pi symbol and constant: use backtick key (`) or CHR$(255) - Ctrl-G, CHR$(7) a.k.a. "BEL" makes a sound - WAIT-6502 Easter Egg Restrictions: - Uses ROM v4 or later (for v6502 of course) - 11 text rows instead of 15, also on 64K - Stack space is limited: - GOSUB depth is about 8 levels - FOR-TO-NEXT nesting upto three levels - When sending a program from Pluggy McPlugface, you must update BabelFish to get an adjusted typing rate (MSBASIC needs time for tokenising) - No file commands (OPEN, CLOSE, PRINT#, INPUT#, GET#, CMD) - No SYS command Memory map: $30 - $37 GCL variables ($30 p, $32 CharOut, $34 j, $36 i) $38 - $a7 MS BASIC variables, relocated for Gigatron $a8 - $ff Stack (88 bytes) $100 Video indirection table (modified) $200 - Version check / TI$ and floating point buffer $218 - $235f (6502) Microsoft BASIC version 2 (Commodore PET) $2360 - $70ff Video RAM for 11 text rows: 11*7+1 = 78 pages $2400 - Setup / Input buffer $2500 - Setup (cont'd) $2600 - Main vCPU loop (BRK call handling); DrawChar $2700 - CharOut $2800 - Newline $2900 - ControlCode $2a00 - (6502) WAITKEY $2b00 - (6502) CHROUT $2c00 - (6502) GETIN $2d00 - (6502) ISCNTC $2e00 - (6502) CLALL $2f00 - (6502) LINEEDIT $3000 - (6502) SAVE $3100 - SaveChar $3200 - (6502) LOAD $7100 - $7fff Free RAM giving 3840 bytes user space } _TISTR0=$200 {Timer high byte} _TISTR1=$201 {Timer middle byte} _TISTR2=$202 {Timer low byte} _TISTR3=$203 {Value of [frameCount] at last update} {-----------------------------------------------------------------------+ | Version check | +-----------------------------------------------------------------------} *=$200 \romType, \romTypeValue_ROMv4- {Version check >= ROMv4} [if<0 do _frameCount _vPCH: loop] {Apps/Smallest/Smallest.gcl} \Setup call {Remainder is in the flanks of screen memory} { !!! This section must end before $218 !!! } {-----------------------------------------------------------------------+ | Microsoft BASIC | +-----------------------------------------------------------------------} { v v v v v v v v v v v v Insert BASIC image here v v v v v v v v v v v v } { Generated by: cd asm && ./make.sh } _COLD_START=$00228D _LIST=$00079C _STOP=$000926 _INPUTFLG=$000043 _TMPZP=$00003E *=$218 #$27 #$09 #$3e #$08 #$90 #$0d #$e6 #$09 #$51 #$0c #$c5 #$10 #$7f #$0c #$93 #$0a #$93 #$09 #$6b #$09 #$16 #$0a #$16 #$09 #$76 #$09 #$c0 #$09 #$29 #$0a #$25 #$09 #$39 #$0a #$71 #$18 #$ff #$31 #$ff #$2f #$6d #$0f #$ee #$13 #$68 #$18 #$78 #$0b #$51 #$09 #$9b #$07 #$5d #$07 #$3f #$0c #$41 #$07 #$b1 #$1c #$44 #$1d #$d0 #$1c #$38 #$00 #$b8 #$13 #$d9 #$13 #$ca #$1f #$eb #$20 #$62 #$1a #$46 #$20 #$40 #$21 #$47 #$21 #$90 #$21 #$fe #$21 #$4a #$18 #$b8 #$17 #$a1 #$14 #$e9 #$17 #$c7 #$17 #$28 #$17 #$3c #$17 #$68 #$17 #$73 #$17 #$79 #$e1 #$18 #$79 #$97 #$18 #$7b #$a2 #$1a #$7b #$89 #$1b #$7f #$d3 #$1f #$50 #$2d #$10 #$46 #$2a #$10 #$7d #$0c #$20 #$5a #$39 #$0f #$64 #$5a #$10 #$45 #$4e #$c4 #$46 #$4f #$d2 #$4e #$45 #$58 #$d4 #$44 #$41 #$54 #$c1 #$49 #$4e #$50 #$55 #$d4 #$44 #$49 #$cd #$52 #$45 #$41 #$c4 #$4c #$45 #$d4 #$47 #$4f #$54 #$cf #$52 #$55 #$ce #$49 #$c6 #$52 #$45 #$53 #$54 #$4f #$52 #$c5 #$47 #$4f #$53 #$55 #$c2 #$52 #$45 #$54 #$55 #$52 #$ce #$52 #$45 #$cd #$53 #$54 #$4f #$d0 #$4f #$ce #$57 #$41 #$49 #$d4 #$4c #$4f #$41 #$c4 #$53 #$41 #$56 #$c5 #$56 #$45 #$52 #$49 #$46 #$d9 #$44 #$45 #$c6 #$50 #$4f #$4b #$c5 #$50 #$52 #$49 #$4e #$d4 #$43 #$4f #$4e *=$300 #$d4 #$4c #$49 #$53 #$d4 #$43 #$4c #$d2 #$47 #$45 #$d4 #$4e #$45 #$d7 #$54 #$41 #$42 #$a8 #$54 #$cf #$46 #$ce #$53 #$50 #$43 #$a8 #$54 #$48 #$45 #$ce #$4e #$4f #$d4 #$53 #$54 #$45 #$d0 #$ab #$ad #$aa #$af #$de #$41 #$4e #$c4 #$4f #$d2 #$be #$bd #$bc #$53 #$47 #$ce #$49 #$4e #$d4 #$41 #$42 #$d3 #$55 #$53 #$d2 #$46 #$52 #$c5 #$50 #$4f #$d3 #$53 #$51 #$d2 #$52 #$4e #$c4 #$4c #$4f #$c7 #$45 #$58 #$d0 #$43 #$4f #$d3 #$53 #$49 #$ce #$54 #$41 #$ce #$41 #$54 #$ce #$50 #$45 #$45 #$cb #$4c #$45 #$ce #$53 #$54 #$52 #$a4 #$56 #$41 #$cc #$41 #$53 #$c3 #$43 #$48 #$52 #$a4 #$4c #$45 #$46 #$54 #$a4 #$52 #$49 #$47 #$48 #$54 #$a4 #$4d #$49 #$44 #$a4 #$47 #$cf #$00 #$4e #$45 #$58 #$54 #$20 #$57 #$49 #$54 #$48 #$4f #$55 #$54 #$20 #$46 #$4f #$d2 #$53 #$59 #$4e #$54 #$41 #$d8 #$52 #$45 #$54 #$55 #$52 #$4e #$20 #$57 #$49 #$54 #$48 #$4f #$55 #$54 #$20 #$47 #$4f #$53 #$55 #$c2 #$4f #$55 #$54 #$20 #$4f #$46 #$20 #$44 #$41 #$54 #$c1 #$49 #$4c #$4c #$45 #$47 #$41 #$4c #$20 #$51 #$55 #$41 #$4e #$54 #$49 #$54 #$d9 #$4f #$56 #$45 #$52 #$46 #$4c #$4f #$d7 #$4f #$55 #$54 #$20 #$4f #$46 #$20 #$4d #$45 #$4d #$4f #$52 #$d9 #$55 #$4e #$44 #$45 #$46 #$27 #$44 #$20 #$53 #$54 #$41 #$54 #$45 #$4d #$45 #$4e #$d4 #$42 #$41 #$44 #$20 #$53 #$55 #$42 #$53 #$43 #$52 #$49 #$50 #$d4 #$52 #$45 #$44 #$49 #$4d *=$400 #$27 #$44 #$20 #$41 #$52 #$52 #$41 #$d9 #$44 #$49 #$56 #$49 #$53 #$49 #$4f #$4e #$20 #$42 #$59 #$20 #$5a #$45 #$52 #$cf #$49 #$4c #$4c #$45 #$47 #$41 #$4c #$20 #$44 #$49 #$52 #$45 #$43 #$d4 #$54 #$59 #$50 #$45 #$20 #$4d #$49 #$53 #$4d #$41 #$54 #$43 #$c8 #$53 #$54 #$52 #$49 #$4e #$47 #$20 #$54 #$4f #$4f #$20 #$4c #$4f #$4e #$c7 #$46 #$4f #$52 #$4d #$55 #$4c #$41 #$20 #$54 #$4f #$4f #$20 #$43 #$4f #$4d #$50 #$4c #$45 #$d8 #$43 #$41 #$4e #$27 #$54 #$20 #$43 #$4f #$4e #$54 #$49 #$4e #$55 #$c5 #$55 #$4e #$44 #$45 #$46 #$27 #$44 #$20 #$46 #$55 #$4e #$43 #$54 #$49 #$4f #$ce #$20 #$00 #$2e #$38 #$4c #$cc #$0f #$a0 #$1b #$18 #$88 #$69 #$06 #$90 #$fb #$60 #$20 #$45 #$52 #$52 #$4f #$52 #$00 #$20 #$49 #$4e #$20 #$00 #$0d #$0a #$52 #$45 #$41 #$44 #$59 #$2e #$0d #$0a #$00 #$0d #$0a #$42 #$52 #$45 #$41 #$4b #$00 #$ba #$e8 #$e8 #$e8 #$e8 #$b5 #$01 #$c9 #$81 #$d0 #$1d #$a5 #$7c #$d0 #$08 #$b5 #$02 #$85 #$7b #$b5 #$03 #$85 #$7c #$d5 #$03 #$d0 #$06 #$a5 #$7b #$d5 #$02 #$f0 #$07 #$8a #$18 #$69 #$12 #$aa #$d0 #$dd #$60 #$20 #$1b #$05 #$85 #$63 #$84 #$64 #$38 #$a5 #$8d #$e5 #$92 #$85 #$54 #$a8 #$a5 #$8e #$e5 #$93 #$aa #$e8 #$98 #$f0 #$23 #$a5 #$8d #$38 #$e5 #$54 #$85 #$8d #$b0 #$03 #$c6 #$8e #$38 #$a5 #$8b #$e5 #$54 #$85 #$8b #$b0 #$08 #$c6 #$8c #$90 #$04 #$b1 #$8d #$91 #$8b #$88 *=$500 #$d0 #$f9 #$b1 #$8d #$91 #$8b #$c6 #$8e #$c6 #$8c #$ca #$d0 #$f2 #$60 #$0a #$69 #$b2 #$b0 #$35 #$85 #$54 #$ba #$e4 #$54 #$90 #$2e #$60 #$c4 #$66 #$90 #$28 #$d0 #$04 #$c5 #$65 #$90 #$22 #$48 #$a2 #$09 #$98 #$48 #$b5 #$8a #$ca #$10 #$fa #$20 #$62 #$15 #$a2 #$f7 #$68 #$95 #$94 #$e8 #$30 #$fa #$68 #$a8 #$68 #$c4 #$66 #$90 #$06 #$d0 #$05 #$c5 #$65 #$b0 #$01 #$60 #$a2 #$4d #$46 #$45 #$20 #$ac #$0b #$20 #$0f #$0c #$bd #$83 #$03 #$48 #$29 #$7f #$20 #$11 #$0c #$e8 #$68 #$10 #$f3 #$20 #$7a #$07 #$a9 #$83 #$a0 #$04 #$20 #$ef #$0b #$a4 #$6c #$c8 #$f0 #$03 #$20 #$3a #$1e #$46 #$45 #$a9 #$8f #$a0 #$04 #$20 #$ef #$0b #$20 #$57 #$06 #$86 #$a6 #$84 #$a7 #$20 #$6b #$22 #$aa #$f0 #$f3 #$a2 #$ff #$86 #$6c #$90 #$06 #$20 #$7e #$06 #$4c #$de #$08 #$20 #$5a #$0a #$20 #$7e #$06 #$84 #$3d #$20 #$13 #$07 #$90 #$44 #$a0 #$01 #$b1 #$92 #$85 #$55 #$a5 #$5f #$85 #$54 #$a5 #$93 #$85 #$57 #$a5 #$92 #$88 #$f1 #$92 #$18 #$65 #$5f #$85 #$5f #$85 #$56 #$a5 #$60 #$69 #$ff #$85 #$60 #$e5 #$93 #$aa #$38 #$a5 #$92 #$e5 #$5f #$a8 #$b0 #$03 #$e8 #$c6 #$57 #$18 #$65 #$54 #$90 #$03 #$c6 #$55 #$18 #$b1 #$54 #$91 #$56 #$c8 #$d0 #$f9 #$e6 #$55 #$e6 #$57 #$ca #$d0 #$f2 #$20 #$59 #$07 #$20 #$2a #$06 #$ad #$05 #$24 #$f0 #$8b #$18 #$a5 #$5f #$85 #$8d #$65 #$3d #$85 #$8b #$a4 #$60 #$84 #$8e #$90 #$01 #$c8 #$84 *=$600 #$8c #$20 #$cb #$04 #$a5 #$46 #$a4 #$47 #$8d #$03 #$24 #$8c #$04 #$24 #$a5 #$63 #$a4 #$64 #$85 #$5f #$84 #$60 #$a4 #$3d #$88 #$b9 #$01 #$24 #$91 #$92 #$88 #$10 #$f8 #$20 #$59 #$07 #$20 #$2a #$06 #$4c #$7a #$05 #$a5 #$5d #$a4 #$5e #$85 #$54 #$84 #$55 #$18 #$a0 #$01 #$b1 #$54 #$f0 #$1d #$a0 #$04 #$c8 #$b1 #$54 #$d0 #$fb #$c8 #$98 #$65 #$54 #$aa #$a0 #$00 #$91 #$54 #$a5 #$55 #$69 #$00 #$c8 #$91 #$54 #$86 #$54 #$85 #$55 #$90 #$dd #$60 #$a2 #$00 #$20 #$6e #$06 #$c9 #$0d #$f0 #$0b #$20 #$00 #$2f #$f0 #$f4 #$9d #$05 #$24 #$e8 #$d0 #$ee #$4c #$a3 #$0b #$20 #$00 #$2c #$c9 #$0f #$d0 #$08 #$48 #$a5 #$45 #$49 #$ff #$85 #$45 #$68 #$60 #$a6 #$a6 #$a0 #$04 #$84 #$41 #$bd #$00 #$24 #$10 #$07 #$c9 #$ff #$f0 #$3e #$e8 #$d0 #$f4 #$c9 #$20 #$f0 #$37 #$85 #$3c #$c9 #$22 #$f0 #$56 #$24 #$41 #$70 #$2d #$c9 #$3f #$d0 #$04 #$a9 #$97 #$d0 #$25 #$c9 #$30 #$90 #$04 #$c9 #$3c #$90 #$1d #$84 #$a4 #$a0 #$00 #$84 #$3d #$88 #$86 #$a6 #$ca #$c8 #$e8 #$bd #$00 #$24 #$38 #$f9 #$9e #$02 #$f0 #$f5 #$c9 #$80 #$d0 #$30 #$05 #$3d #$a4 #$a4 #$e8 #$c8 #$99 #$00 #$24 #$b9 #$00 #$24 #$f0 #$36 #$38 #$e9 #$3a #$f0 #$04 #$c9 #$49 #$d0 #$02 #$85 #$41 #$38 #$e9 #$54 #$d0 #$9f #$85 #$3c #$bd #$00 #$24 #$f0 #$df #$c5 #$3c #$f0 #$db #$c8 #$99 #$00 #$24 #$e8 #$d0 #$f0 #$a6 #$a6 #$e6 #$3d #$c8 #$b9 #$9d #$02 #$10 *=$700 #$fa #$b9 #$9e #$02 #$d0 #$b4 #$bd #$00 #$24 #$10 #$be #$99 #$02 #$24 #$a9 #$04 #$85 #$a6 #$60 #$a5 #$5d #$a6 #$5e #$a0 #$01 #$85 #$92 #$86 #$93 #$b1 #$92 #$f0 #$1f #$c8 #$c8 #$a5 #$47 #$d1 #$92 #$90 #$18 #$f0 #$03 #$88 #$d0 #$09 #$a5 #$46 #$88 #$d1 #$92 #$90 #$0c #$f0 #$0a #$88 #$b1 #$92 #$aa #$88 #$b1 #$92 #$b0 #$d7 #$18 #$60 #$d0 #$fd #$a9 #$00 #$a8 #$91 #$5d #$c8 #$91 #$5d #$a5 #$5d #$18 #$69 #$02 #$85 #$5f #$a5 #$5e #$69 #$00 #$85 #$60 #$20 #$8e #$07 #$a9 #$00 #$d0 #$2d #$a5 #$69 #$a4 #$6a #$85 #$65 #$84 #$66 #$20 #$00 #$2e #$a5 #$5f #$a4 #$60 #$85 #$61 #$84 #$62 #$85 #$63 #$84 #$64 #$20 #$17 #$09 #$a2 #$4b #$86 #$48 #$68 #$a8 #$68 #$a2 #$ff #$9a #$48 #$98 #$48 #$a9 #$00 #$85 #$70 #$85 #$42 #$60 #$18 #$a5 #$5d #$69 #$ff #$85 #$a6 #$a5 #$5e #$69 #$ff #$85 #$a7 #$60 #$90 #$06 #$f0 #$04 #$c9 #$a5 #$d0 #$e9 #$20 #$5a #$0a #$20 #$13 #$07 #$20 #$71 #$22 #$f0 #$0c #$c9 #$a5 #$d0 #$8e #$20 #$6b #$22 #$20 #$5a #$0a #$d0 #$86 #$68 #$68 #$a5 #$46 #$05 #$47 #$d0 #$06 #$a9 #$ff #$85 #$46 #$85 #$47 #$a0 #$01 #$84 #$41 #$b1 #$92 #$f0 #$43 #$20 #$00 #$2d #$20 #$ac #$0b #$c8 #$b1 #$92 #$aa #$c8 #$b1 #$92 #$c5 #$47 #$d0 #$04 #$e4 #$46 #$f0 #$02 #$b0 #$2c #$84 #$7b #$20 #$45 #$1e #$a9 #$20 #$a4 #$7b #$29 #$7f #$20 #$11 #$0c #$c9 #$22 #$d0 #$06 #$a5 #$41 #$49 #$ff #$85 #$41 *=$800 #$c8 #$f0 #$11 #$b1 #$92 #$d0 #$10 #$a8 #$b1 #$92 #$aa #$c8 #$b1 #$92 #$86 #$92 #$85 #$93 #$d0 #$b5 #$4c #$71 #$05 #$10 #$da #$c9 #$ff #$f0 #$d6 #$24 #$41 #$30 #$d2 #$38 #$e9 #$7f #$aa #$84 #$7b #$a0 #$ff #$ca #$f0 #$08 #$c8 #$b9 #$9e #$02 #$10 #$fa #$30 #$f5 #$c8 #$b9 #$9e #$02 #$30 #$b5 #$20 #$11 #$0c #$d0 #$f5 #$a9 #$80 #$85 #$42 #$20 #$94 #$0a #$20 #$a2 #$04 #$d0 #$05 #$8a #$69 #$0f #$aa #$9a #$68 #$68 #$a9 #$09 #$20 #$0e #$05 #$20 #$f5 #$09 #$18 #$98 #$65 #$a6 #$48 #$a5 #$a7 #$69 #$00 #$48 #$a5 #$6c #$48 #$a5 #$6b #$48 #$a9 #$9e #$20 #$65 #$0f #$20 #$f9 #$0d #$20 #$f6 #$0d #$a5 #$99 #$09 #$7f #$25 #$95 #$85 #$95 #$a9 #$88 #$a0 #$08 #$85 #$54 #$84 #$55 #$4c #$af #$0e #$a9 #$34 #$a0 #$1a #$20 #$1a #$1c #$20 #$71 #$22 #$c9 #$a3 #$d0 #$06 #$20 #$6b #$22 #$20 #$f6 #$0d #$20 #$a3 #$1c #$20 #$a4 #$0e #$a5 #$7c #$48 #$a5 #$7b #$48 #$a9 #$81 #$48 #$20 #$00 #$2d #$a5 #$a6 #$a4 #$a7 #$c0 #$24 #$ea #$f0 #$04 #$85 #$6f #$84 #$70 #$a0 #$00 #$b1 #$a6 #$d0 #$40 #$a0 #$02 #$b1 #$a6 #$18 #$d0 #$03 #$4c #$42 #$09 #$c8 #$b1 #$a6 #$85 #$6b #$c8 #$b1 #$a6 #$85 #$6c #$98 #$65 #$a6 #$85 #$a6 #$90 #$02 #$e6 #$a7 #$20 #$6b #$22 #$20 #$e7 #$08 #$4c #$ab #$08 #$f0 #$3c #$e9 #$80 #$90 #$11 #$c9 #$1d #$b0 #$17 #$0a #$a8 #$b9 #$19 #$02 #$48 #$b9 #$18 #$02 #$48 #$4c #$6b #$22 #$4c #$94 *=$900 #$0a #$c9 #$3a #$f0 #$d9 #$4c #$6e #$0f #$c9 #$45 #$d0 #$f9 #$20 #$6b #$22 #$a9 #$9e #$20 #$65 #$0f #$4c #$94 #$09 #$38 #$a5 #$5d #$e9 #$01 #$a4 #$5e #$b0 #$01 #$88 #$85 #$73 #$84 #$74 #$60 #$b0 #$01 #$18 #$d0 #$40 #$a5 #$a6 #$a4 #$a7 #$a6 #$6c #$e8 #$f0 #$0c #$85 #$6f #$84 #$70 #$a5 #$6b #$a4 #$6c #$85 #$6d #$84 #$6e #$68 #$68 #$a9 #$9a #$a0 #$04 #$a2 #$00 #$86 #$45 #$90 #$03 #$4c #$66 #$05 #$4c #$71 #$05 #$d0 #$17 #$a2 #$d2 #$a4 #$70 #$d0 #$03 #$4c #$4a #$05 #$a5 #$6f #$85 #$a6 #$84 #$a7 #$a5 #$6d #$a4 #$6e #$85 #$6b #$84 #$6c #$60 #$d0 #$03 #$4c #$59 #$07 #$20 #$60 #$07 #$4c #$8b #$09 #$a9 #$03 #$20 #$0e #$05 #$a5 #$a7 #$48 #$a5 #$a6 #$48 #$a5 #$6c #$48 #$a5 #$6b #$48 #$a9 #$8c #$48 #$20 #$71 #$22 #$20 #$94 #$09 #$4c #$ab #$08 #$20 #$5a #$0a #$20 #$f8 #$09 #$a5 #$6c #$c5 #$47 #$b0 #$0b #$98 #$38 #$65 #$a6 #$a6 #$a7 #$90 #$07 #$e8 #$b0 #$04 #$a5 #$5d #$a6 #$5e #$20 #$17 #$07 #$90 #$1e #$a5 #$92 #$e9 #$01 #$85 #$a6 #$a5 #$93 #$e9 #$00 #$85 #$a7 #$60 #$d0 #$fd #$a9 #$ff #$85 #$7c #$20 #$a2 #$04 #$9a #$c9 #$8c #$f0 #$0b #$a2 #$16 #$2c #$a2 #$5a #$4c #$4a #$05 #$4c #$6e #$0f #$68 #$68 #$85 #$6b #$68 #$85 #$6c #$68 #$85 #$a6 #$68 #$85 #$a7 #$20 #$f5 #$09 #$98 #$18 #$65 #$a6 #$85 #$a6 #$90 #$02 #$e6 #$a7 #$60 #$a2 #$3a #$2c #$a2 #$00 #$86 #$3b #$a0 #$00 #$84 #$3c *=$a00 #$a5 #$3c #$a6 #$3b #$85 #$3b #$86 #$3c #$b1 #$a6 #$f0 #$e8 #$c5 #$3c #$f0 #$e4 #$c8 #$c9 #$22 #$d0 #$f3 #$f0 #$e9 #$20 #$0a #$0e #$20 #$71 #$22 #$c9 #$88 #$f0 #$05 #$a9 #$a1 #$20 #$65 #$0f #$a5 #$94 #$d0 #$05 #$20 #$f8 #$09 #$f0 #$bb #$20 #$71 #$22 #$b0 #$03 #$4c #$94 #$09 #$4c #$e7 #$08 #$20 #$da #$17 #$48 #$c9 #$8c #$f0 #$04 #$c9 #$88 #$d0 #$91 #$c6 #$98 #$d0 #$04 #$68 #$4c #$e9 #$08 #$20 #$6b #$22 #$20 #$5a #$0a #$c9 #$2c #$f0 #$ee #$68 #$60 #$a2 #$00 #$86 #$46 #$86 #$47 #$b0 #$f7 #$e9 #$2f #$85 #$3b #$a5 #$47 #$85 #$54 #$c9 #$19 #$b0 #$d4 #$a5 #$46 #$0a #$26 #$54 #$0a #$26 #$54 #$65 #$46 #$85 #$46 #$a5 #$54 #$65 #$47 #$85 #$47 #$06 #$46 #$26 #$47 #$a5 #$46 #$65 #$3b #$85 #$46 #$90 #$02 #$e6 #$47 #$20 #$6b #$22 #$4c #$60 #$0a #$20 #$d0 #$10 #$85 #$7b #$84 #$7c #$a9 #$ac #$20 #$65 #$0f #$a5 #$40 #$48 #$a5 #$3f #$48 #$20 #$0a #$0e #$68 #$2a #$20 #$fc #$0d #$d0 #$18 #$68 #$10 #$12 #$20 #$93 #$1c #$20 #$fd #$11 #$a0 #$00 #$a5 #$97 #$91 #$7b #$c8 #$a5 #$98 #$91 #$7b #$60 #$4c #$48 #$1c #$68 #$a4 #$7c #$c0 #$1f #$d0 #$50 #$20 #$e2 #$16 #$c9 #$06 #$d0 #$41 #$a0 #$00 #$84 #$94 #$84 #$99 #$84 #$a4 #$20 #$10 #$0b #$20 #$5a #$1b #$e6 #$a4 #$a4 #$a4 #$20 #$10 #$0b #$20 #$84 #$1c #$aa #$f0 #$05 #$e8 #$8a #$20 #$65 #$1b #$a4 #$a4 #$c8 #$c0 #$06 #$d0 #$df #$20 #$5a #$1b *=$b00 #$20 #$13 #$1d #$a2 #$02 #$78 #$b5 #$96 #$9d #$00 #$02 #$ca #$10 #$f8 #$58 #$60 #$b1 #$54 #$20 #$7d #$22 #$90 #$03 #$4c #$82 #$12 #$e9 #$2f #$4c #$f6 #$1d #$a0 #$02 #$b1 #$97 #$c5 #$66 #$90 #$17 #$d0 #$07 #$88 #$b1 #$97 #$c5 #$65 #$90 #$0e #$a4 #$98 #$c4 #$60 #$90 #$08 #$d0 #$0d #$a5 #$97 #$c5 #$5f #$b0 #$07 #$a5 #$97 #$a4 #$98 #$4c #$5b #$0b #$a0 #$00 #$b1 #$97 #$20 #$b1 #$14 #$a5 #$83 #$a4 #$84 #$85 #$a2 #$84 #$a3 #$20 #$b6 #$16 #$a9 #$94 #$a0 #$00 #$85 #$83 #$84 #$84 #$20 #$17 #$17 #$a0 #$00 #$b1 #$83 #$91 #$7b #$c8 #$b1 #$83 #$91 #$7b #$c8 #$b1 #$83 #$91 #$7b #$60 #$20 #$f2 #$0b #$20 #$71 #$22 #$f0 #$31 #$f0 #$3b #$c9 #$9d #$f0 #$49 #$c9 #$a0 #$18 #$f0 #$44 #$c9 #$2c #$f0 #$2f #$c9 #$3b #$f0 #$56 #$20 #$0a #$0e #$24 #$3f #$30 #$de #$20 #$55 #$1e #$20 #$c3 #$14 #$20 #$f2 #$0b #$20 #$0c #$0c #$d0 #$d3 #$a9 #$00 #$9d #$05 #$24 #$a2 #$04 #$a0 #$24 #$a9 #$0d #$20 #$11 #$0c #$a9 #$0a #$20 #$11 #$0c #$49 #$ff #$60 #$a5 #$30 #$20 #$7a #$04 #$98 #$38 #$e9 #$0a #$b0 #$fc #$49 #$ff #$69 #$01 #$d0 #$15 #$08 #$20 #$d7 #$17 #$c9 #$29 #$d0 #$5b #$28 #$90 #$0b #$a5 #$30 #$20 #$7a #$04 #$8a #$e5 #$2b #$90 #$05 #$aa #$e8 #$ca #$d0 #$06 #$20 #$6b #$22 #$4c #$7b #$0b #$20 #$0c #$0c #$d0 #$f2 #$20 #$c3 #$14 #$20 #$e2 #$16 #$aa #$a0 #$00 #$e8 #$ca #$f0 #$bc #$b1 #$54 #$20 #$11 *=$c00 #$0c #$c8 #$c9 #$0d #$d0 #$f3 #$20 #$b6 #$0b #$4c #$f9 #$0b #$a9 #$20 #$2c #$a9 #$3f #$24 #$45 #$30 #$03 #$20 #$00 #$2b #$29 #$ff #$60 #$a5 #$43 #$f0 #$11 #$30 #$04 #$a0 #$ff #$d0 #$04 #$a5 #$71 #$a4 #$72 #$85 #$6b #$84 #$6c #$4c #$6e #$0f #$a9 #$7e #$a0 #$0d #$20 #$ef #$0b #$a5 #$6f #$a4 #$70 #$85 #$a6 #$84 #$a7 #$60 #$20 #$e2 #$13 #$a2 #$06 #$a0 #$24 #$a9 #$00 #$8d #$06 #$24 #$a9 #$40 #$20 #$89 #$0c #$60 #$46 #$45 #$c9 #$22 #$d0 #$0b #$20 #$23 #$0f #$a9 #$3b #$20 #$65 #$0f #$20 #$f2 #$0b #$20 #$e2 #$13 #$a9 #$2c #$8d #$04 #$24 #$20 #$77 #$0c #$ad #$05 #$24 #$d0 #$14 #$18 #$4c #$38 #$09 #$20 #$0f #$0c #$20 #$0c #$0c #$4c #$57 #$06 #$a6 #$73 #$a4 #$74 #$a9 #$98 #$2c #$a9 #$00 #$85 #$43 #$86 #$75 #$84 #$76 #$20 #$d0 #$10 #$85 #$7b #$84 #$7c #$a5 #$a6 #$a4 #$a7 #$85 #$7d #$84 #$7e #$a6 #$75 #$a4 #$76 #$86 #$a6 #$84 #$a7 #$20 #$71 #$22 #$d0 #$1c #$24 #$43 #$50 #$0c #$20 #$00 #$2c #$8d #$05 #$24 #$a2 #$04 #$a0 #$24 #$d0 #$08 #$30 #$71 #$20 #$0f #$0c #$20 #$77 #$0c #$86 #$a6 #$84 #$a7 #$20 #$6b #$22 #$24 #$3f #$10 #$31 #$24 #$43 #$50 #$09 #$e8 #$86 #$a6 #$a9 #$00 #$85 #$3b #$f0 #$0c #$85 #$3b #$c9 #$22 #$f0 #$07 #$a9 #$3a #$85 #$3b #$a9 #$2c #$18 #$85 #$3c #$a5 #$a6 #$a4 #$a7 #$69 #$00 #$90 #$01 #$c8 #$20 #$c9 #$14 #$20 #$1f #$18 #$20 #$c9 #$0a #$4c #$07 #$0d #$20 *=$d00 #$6b #$1d #$a5 #$40 #$20 #$b1 #$0a #$20 #$71 #$22 #$f0 #$07 #$c9 #$2c #$f0 #$03 #$4c #$1b #$0c #$a5 #$a6 #$a4 #$a7 #$85 #$75 #$84 #$76 #$a5 #$7d #$a4 #$7e #$85 #$a6 #$84 #$a7 #$20 #$71 #$22 #$f0 #$2c #$20 #$63 #$0f #$4c #$8f #$0c #$20 #$f5 #$09 #$c8 #$aa #$d0 #$12 #$a2 #$2a #$c8 #$b1 #$a6 #$f0 #$69 #$c8 #$b1 #$a6 #$85 #$71 #$c8 #$b1 #$a6 #$c8 #$85 #$72 #$b1 #$a6 #$aa #$20 #$ea #$09 #$e0 #$83 #$d0 #$dd #$4c #$c7 #$0c #$a5 #$75 #$a4 #$76 #$a6 #$43 #$10 #$03 #$4c #$21 #$09 #$a0 #$00 #$b1 #$75 #$f0 #$07 #$a9 #$6d #$a0 #$0d #$4c #$ef #$0b #$60 #$3f #$45 #$58 #$54 #$52 #$41 #$20 #$49 #$47 #$4e #$4f #$52 #$45 #$44 #$0d #$0a #$00 #$3f #$52 #$45 #$44 #$4f #$20 #$46 #$52 #$4f #$4d #$20 #$53 #$54 #$41 #$52 #$54 #$0d #$0a #$00 #$d0 #$04 #$a0 #$00 #$f0 #$03 #$20 #$d0 #$10 #$85 #$7b #$84 #$7c #$20 #$a2 #$04 #$f0 #$04 #$a2 #$00 #$f0 #$60 #$9a #$8a #$18 #$69 #$04 #$48 #$69 #$06 #$85 #$56 #$68 #$a0 #$00 #$20 #$1a #$1c #$ba #$b5 #$09 #$85 #$99 #$a5 #$7b #$a4 #$7c #$20 #$df #$18 #$20 #$48 #$1c #$a0 #$00 #$20 #$d5 #$1c #$ba #$38 #$f5 #$09 #$f0 #$13 #$b5 #$0f #$85 #$6b #$b5 #$10 #$85 #$6c #$b5 #$12 #$85 #$a6 #$b5 #$11 #$85 #$a7 #$4c #$ab #$08 #$8a #$69 #$11 #$aa #$9a #$20 #$71 #$22 #$c9 #$2c #$d0 #$f1 #$20 #$6b #$22 #$20 #$97 #$0d #$20 #$0a #$0e #$18 #$24 #$38 #$24 #$3f #$30 #$03 *=$e00 #$b0 #$03 #$60 #$b0 #$fd #$a2 #$a3 #$4c #$4a #$05 #$a6 #$a6 #$d0 #$02 #$c6 #$a7 #$c6 #$a6 #$a2 #$00 #$24 #$48 #$8a #$48 #$a9 #$01 #$20 #$0e #$05 #$20 #$ef #$0e #$a9 #$00 #$85 #$7f #$20 #$71 #$22 #$38 #$e9 #$ab #$90 #$17 #$c9 #$03 #$b0 #$13 #$c9 #$01 #$2a #$49 #$01 #$45 #$7f #$c5 #$7f #$90 #$61 #$85 #$7f #$20 #$6b #$22 #$4c #$27 #$0e #$a6 #$7f #$d0 #$2c #$b0 #$7b #$69 #$07 #$90 #$77 #$65 #$3f #$d0 #$03 #$4c #$79 #$16 #$69 #$ff #$85 #$54 #$0a #$65 #$54 #$a8 #$68 #$d9 #$80 #$02 #$b0 #$67 #$20 #$f9 #$0d #$48 #$20 #$8c #$0e #$68 #$a4 #$7d #$10 #$17 #$aa #$f0 #$56 #$d0 #$5f #$46 #$3f #$8a #$2a #$a6 #$a6 #$d0 #$02 #$c6 #$a7 #$c6 #$a6 #$a0 #$1b #$85 #$7f #$d0 #$d7 #$d9 #$80 #$02 #$b0 #$48 #$90 #$d9 #$b9 #$82 #$02 #$48 #$b9 #$81 #$02 #$48 #$20 #$9f #$0e #$a5 #$7f #$4c #$15 #$0e #$4c #$6e #$0f #$a5 #$99 #$be #$80 #$02 #$a8 #$68 #$85 #$54 #$e6 #$54 #$68 #$85 #$55 #$98 #$48 #$20 #$93 #$1c #$a5 #$98 #$48 #$a5 #$97 #$48 #$a5 #$96 #$48 #$a5 #$95 #$48 #$a5 #$94 #$48 #$6c #$54 #$00 #$a0 #$ff #$68 #$f0 #$23 #$c9 #$64 #$f0 #$03 #$20 #$f9 #$0d #$84 #$7d #$68 #$4a #$85 #$44 #$68 #$85 #$9c #$68 #$85 #$9d #$68 #$85 #$9e #$68 #$85 #$9f #$68 #$85 #$a0 #$68 #$85 #$a1 #$45 #$99 #$85 #$a2 #$a5 #$94 #$60 #$a9 #$00 #$85 #$3f #$20 #$6b #$22 #$b0 #$03 #$4c #$6b #$1d #$20 #$5a #$11 #$b0 #$7a *=$f00 #$c9 #$ff #$d0 #$0f #$a9 #$0e #$a0 #$0f #$20 #$1a #$1c #$4c #$6b #$22 #$82 #$49 #$0f #$da #$a1 #$c9 #$2e #$f0 #$e1 #$c9 #$a5 #$f0 #$58 #$c9 #$a4 #$f0 #$d4 #$c9 #$22 #$d0 #$0f #$a5 #$a6 #$a4 #$a7 #$69 #$00 #$90 #$01 #$c8 #$20 #$c3 #$14 #$4c #$1f #$18 #$c9 #$a2 #$d0 #$13 #$a0 #$18 #$d0 #$3b #$20 #$fd #$11 #$a5 #$98 #$49 #$ff #$a8 #$a5 #$97 #$49 #$ff #$4c #$cc #$13 #$c9 #$9f #$d0 #$03 #$4c #$30 #$14 #$c9 #$ae #$90 #$03 #$4c #$ec #$0f #$20 #$60 #$0f #$20 #$0a #$0e #$a9 #$29 #$2c #$a9 #$28 #$2c #$a9 #$2c #$a0 #$00 #$d1 #$a6 #$d0 #$03 #$4c #$6b #$22 #$a2 #$10 #$4c #$4a #$05 #$a0 #$15 #$68 #$68 #$4c #$66 #$0e #$20 #$d0 #$10 #$85 #$97 #$84 #$98 #$a5 #$77 #$a4 #$78 #$a6 #$3f #$f0 #$21 #$a2 #$00 #$86 #$a3 #$c9 #$54 #$d0 #$18 #$c0 #$c9 #$d0 #$14 #$20 #$73 #$04 #$84 #$91 #$88 #$84 #$a4 #$a0 #$06 #$84 #$90 #$a0 #$24 #$20 #$e0 #$1e #$4c #$ab #$14 #$60 #$a6 #$40 #$10 #$0d #$a0 #$00 #$b1 #$97 #$aa #$c8 #$b1 #$97 #$a8 #$8a #$4c #$cc #$13 #$c9 #$54 #$d0 #$19 #$c0 #$49 #$d0 #$22 #$20 #$73 #$04 #$98 #$a2 #$a0 #$4c #$c7 #$1c #$a9 #$fe #$a0 #$01 #$78 #$20 #$1a #$1c #$58 #$84 #$95 #$60 #$c9 #$53 #$d0 #$09 #$c0 #$54 #$d0 #$05 #$a5 #$19 #$4c #$b4 #$1c #$a5 #$97 #$a4 #$98 #$4c #$1a #$1c #$0a #$48 #$aa #$20 #$6b #$22 #$e0 #$83 #$90 #$20 #$20 #$60 #$0f #$20 #$0a #$0e #$20 #$63 #$0f #$20 *=$1000 #$fb #$0d #$68 #$aa #$a5 #$98 #$48 #$a5 #$97 #$48 #$8a #$48 #$20 #$da #$17 #$68 #$a8 #$8a #$48 #$4c #$1b #$10 #$20 #$57 #$0f #$68 #$a8 #$b9 #$f6 #$01 #$85 #$88 #$b9 #$f7 #$01 #$85 #$89 #$20 #$87 #$00 #$4c #$f9 #$0d #$a0 #$ff #$2c #$a0 #$00 #$84 #$3d #$20 #$fd #$11 #$a5 #$97 #$45 #$3d #$85 #$3b #$a5 #$98 #$45 #$3d #$85 #$3c #$20 #$74 #$1c #$20 #$fd #$11 #$a5 #$98 #$45 #$3d #$25 #$3c #$45 #$3d #$a8 #$a5 #$97 #$45 #$3d #$25 #$3b #$45 #$3d #$4c #$cc #$13 #$20 #$fc #$0d #$b0 #$13 #$a5 #$a1 #$09 #$7f #$25 #$9d #$85 #$9d #$a9 #$9c #$a0 #$00 #$20 #$d3 #$1c #$aa #$4c #$a6 #$10 #$a9 #$00 #$85 #$3f #$c6 #$7f #$20 #$e2 #$16 #$85 #$94 #$86 #$95 #$84 #$96 #$a5 #$9f #$a4 #$a0 #$20 #$e6 #$16 #$86 #$9f #$84 #$a0 #$aa #$38 #$e5 #$94 #$f0 #$08 #$a9 #$01 #$90 #$04 #$a6 #$94 #$a9 #$ff #$85 #$99 #$a0 #$ff #$e8 #$c8 #$ca #$d0 #$07 #$a6 #$99 #$30 #$0f #$18 #$90 #$0c #$b1 #$9f #$d1 #$95 #$f0 #$ef #$a2 #$ff #$b0 #$02 #$a2 #$01 #$e8 #$8a #$2a #$25 #$44 #$f0 #$02 #$a9 #$ff #$4c #$b4 #$1c #$20 #$63 #$0f #$aa #$20 #$d5 #$10 #$20 #$71 #$22 #$d0 #$f4 #$60 #$a2 #$00 #$20 #$71 #$22 #$86 #$3e #$85 #$77 #$20 #$71 #$22 #$20 #$5a #$11 #$b0 #$03 #$4c #$6e #$0f #$a2 #$00 #$86 #$3f #$86 #$40 #$20 #$6b #$22 #$90 #$05 #$20 #$5a #$11 #$90 #$0b #$aa #$20 #$6b #$22 #$90 #$fb #$20 #$5a #$11 #$b0 #$f6 #$c9 *=$1100 #$24 #$d0 #$06 #$a9 #$ff #$85 #$3f #$d0 #$10 #$c9 #$25 #$d0 #$13 #$a5 #$42 #$d0 #$d0 #$a9 #$80 #$85 #$40 #$05 #$77 #$85 #$77 #$8a #$09 #$80 #$aa #$20 #$6b #$22 #$86 #$78 #$38 #$05 #$42 #$e9 #$28 #$d0 #$03 #$4c #$0f #$12 #$a9 #$00 #$85 #$42 #$a5 #$5f #$a6 #$60 #$a0 #$00 #$86 #$93 #$85 #$92 #$e4 #$62 #$d0 #$04 #$c5 #$61 #$f0 #$22 #$a5 #$77 #$d1 #$92 #$d0 #$08 #$a5 #$78 #$c8 #$d1 #$92 #$f0 #$7d #$88 #$18 #$a5 #$92 #$69 #$07 #$90 #$e1 #$e8 #$d0 #$dc #$c9 #$41 #$90 #$05 #$e9 #$5b #$38 #$e9 #$a5 #$60 #$68 #$48 #$c9 #$7c #$d0 #$05 #$a9 #$8b #$a0 #$1f #$60 #$a5 #$77 #$a4 #$78 #$c9 #$54 #$d0 #$0b #$c0 #$c9 #$f0 #$ef #$c0 #$49 #$d0 #$03 #$4c #$6e #$0f #$c9 #$53 #$d0 #$04 #$c0 #$54 #$f0 #$f5 #$a5 #$61 #$a4 #$62 #$85 #$92 #$84 #$93 #$a5 #$63 #$a4 #$64 #$85 #$8d #$84 #$8e #$18 #$69 #$07 #$90 #$01 #$c8 #$85 #$8b #$84 #$8c #$20 #$cb #$04 #$a5 #$8b #$a4 #$8c #$c8 #$85 #$61 #$84 #$62 #$a0 #$00 #$a5 #$77 #$91 #$92 #$c8 #$a5 #$78 #$91 #$92 #$a9 #$00 #$c8 #$91 #$92 #$c8 #$91 #$92 #$c8 #$91 #$92 #$c8 #$91 #$92 #$c8 #$91 #$92 #$a5 #$92 #$18 #$69 #$02 #$a4 #$93 #$90 #$01 #$c8 #$85 #$79 #$84 #$7a #$60 #$a5 #$3d #$0a #$69 #$05 #$65 #$92 #$a4 #$93 #$90 #$01 #$c8 #$85 #$8b #$84 #$8c #$60 #$90 #$80 #$00 #$00 #$20 #$6b #$22 #$20 #$0a #$0e #$20 #$f9 #$0d #$a5 #$99 #$30 #$0d #$a5 #$94 #$c9 *=$1200 #$90 #$90 #$09 #$a9 #$ec #$a0 #$11 #$20 #$d3 #$1c #$d0 #$76 #$4c #$13 #$1d #$a5 #$3e #$05 #$40 #$48 #$a5 #$3f #$48 #$a0 #$00 #$98 #$48 #$a5 #$78 #$48 #$a5 #$77 #$48 #$20 #$f0 #$11 #$68 #$85 #$77 #$68 #$85 #$78 #$68 #$a8 #$ba #$b5 #$02 #$48 #$b5 #$01 #$48 #$a5 #$97 #$95 #$02 #$a5 #$98 #$95 #$01 #$c8 #$20 #$71 #$22 #$c9 #$2c #$f0 #$d6 #$84 #$3d #$20 #$5d #$0f #$68 #$85 #$3f #$68 #$85 #$40 #$29 #$7f #$85 #$3e #$a6 #$61 #$a5 #$62 #$86 #$92 #$85 #$93 #$c5 #$64 #$d0 #$04 #$e4 #$63 #$f0 #$39 #$a0 #$00 #$b1 #$92 #$c8 #$c5 #$77 #$d0 #$06 #$a5 #$78 #$d1 #$92 #$f0 #$16 #$c8 #$b1 #$92 #$18 #$65 #$92 #$aa #$c8 #$b1 #$92 #$65 #$93 #$90 #$d7 #$a2 #$6b #$2c #$a2 #$35 #$4c #$4a #$05 #$a2 #$78 #$a5 #$3e #$d0 #$f7 #$20 #$db #$11 #$a5 #$3d #$a0 #$04 #$d1 #$92 #$d0 #$e7 #$4c #$25 #$13 #$20 #$db #$11 #$20 #$1b #$05 #$a9 #$00 #$a8 #$85 #$a5 #$a2 #$05 #$a5 #$77 #$91 #$92 #$10 #$01 #$ca #$c8 #$a5 #$78 #$91 #$92 #$10 #$02 #$ca #$ca #$86 #$a4 #$a5 #$3d #$c8 #$c8 #$c8 #$91 #$92 #$a2 #$0b #$a9 #$00 #$24 #$3e #$50 #$08 #$68 #$18 #$69 #$01 #$aa #$68 #$69 #$00 #$c8 #$91 #$92 #$c8 #$8a #$91 #$92 #$20 #$87 #$13 #$86 #$a4 #$85 #$a5 #$a4 #$54 #$c6 #$3d #$d0 #$dc #$65 #$8c #$b0 #$5d #$85 #$8c #$a8 #$8a #$65 #$8b #$90 #$03 #$c8 #$f0 #$52 #$20 #$1b #$05 #$85 #$63 #$84 #$64 #$a9 #$00 #$e6 #$a5 #$a4 *=$1300 #$a4 #$f0 #$05 #$88 #$91 #$8b #$d0 #$fb #$c6 #$8c #$c6 #$a5 #$d0 #$f5 #$e6 #$8c #$38 #$a5 #$63 #$e5 #$92 #$a0 #$02 #$91 #$92 #$a5 #$64 #$c8 #$e5 #$93 #$91 #$92 #$a5 #$3e #$d0 #$62 #$c8 #$b1 #$92 #$85 #$3d #$a9 #$00 #$85 #$a4 #$85 #$a5 #$c8 #$68 #$aa #$85 #$97 #$68 #$85 #$98 #$d1 #$92 #$90 #$0e #$d0 #$06 #$c8 #$8a #$d1 #$92 #$90 #$07 #$4c #$7f #$12 #$4c #$48 #$05 #$c8 #$a5 #$a5 #$05 #$a4 #$18 #$f0 #$0a #$20 #$87 #$13 #$8a #$65 #$97 #$aa #$98 #$a4 #$54 #$65 #$98 #$86 #$a4 #$c6 #$3d #$d0 #$ca #$85 #$a5 #$a2 #$05 #$a5 #$77 #$10 #$01 #$ca #$a5 #$78 #$10 #$02 #$ca #$ca #$86 #$5a #$a9 #$00 #$20 #$90 #$13 #$8a #$65 #$8b #$85 #$79 #$98 #$65 #$8c #$85 #$7a #$a8 #$a5 #$79 #$60 #$84 #$54 #$b1 #$92 #$85 #$5a #$88 #$b1 #$92 #$85 #$5b #$a9 #$10 #$85 #$90 #$a2 #$00 #$a0 #$00 #$8a #$0a #$aa #$98 #$2a #$a8 #$b0 #$a4 #$06 #$a4 #$26 #$a5 #$90 #$0b #$18 #$8a #$65 #$5a #$aa #$98 #$65 #$5b #$a8 #$b0 #$93 #$c6 #$90 #$d0 #$e3 #$60 #$a5 #$3f #$f0 #$03 #$20 #$e2 #$16 #$20 #$62 #$15 #$38 #$a5 #$65 #$e5 #$63 #$a8 #$a5 #$66 #$e5 #$64 #$a2 #$00 #$86 #$3f #$85 #$95 #$84 #$96 #$a2 #$90 #$4c #$bc #$1c #$a5 #$30 #$20 #$7a #$04 #$a9 #$00 #$f0 #$ea #$a6 #$6c #$e8 #$d0 #$9f #$a2 #$95 #$2c #$a2 #$e0 #$4c #$4a #$05 #$20 #$1d #$14 #$20 #$e2 #$13 #$20 #$60 #$0f #$a9 #$80 #$85 #$42 #$20 #$d0 #$10 #$20 *=$1400 #$f9 #$0d #$20 #$5d #$0f #$a9 #$ac #$20 #$65 #$0f #$48 #$a5 #$7a #$48 #$a5 #$79 #$48 #$a5 #$a7 #$48 #$a5 #$a6 #$48 #$20 #$e7 #$09 #$4c #$8b #$14 #$a9 #$9f #$20 #$65 #$0f #$09 #$80 #$85 #$42 #$20 #$d7 #$10 #$85 #$81 #$84 #$82 #$4c #$f9 #$0d #$20 #$1d #$14 #$a5 #$82 #$48 #$a5 #$81 #$48 #$20 #$57 #$0f #$20 #$f9 #$0d #$68 #$85 #$81 #$68 #$85 #$82 #$a0 #$02 #$b1 #$81 #$85 #$79 #$aa #$c8 #$b1 #$81 #$f0 #$99 #$85 #$7a #$c8 #$b1 #$79 #$48 #$88 #$10 #$fa #$a4 #$7a #$20 #$4c #$1c #$a5 #$a7 #$48 #$a5 #$a6 #$48 #$b1 #$81 #$85 #$a6 #$c8 #$b1 #$81 #$85 #$a7 #$a5 #$7a #$48 #$a5 #$79 #$48 #$20 #$f6 #$0d #$68 #$85 #$81 #$68 #$85 #$82 #$20 #$71 #$22 #$f0 #$03 #$4c #$6e #$0f #$68 #$85 #$a6 #$68 #$85 #$a7 #$a0 #$00 #$68 #$91 #$81 #$68 #$c8 #$91 #$81 #$68 #$c8 #$91 #$81 #$68 #$c8 #$91 #$81 #$68 #$c8 #$91 #$81 #$60 #$20 #$f9 #$0d #$a0 #$00 #$20 #$57 #$1e #$68 #$68 #$a9 #$04 #$a0 #$02 #$d0 #$12 #$a6 #$97 #$a4 #$98 #$86 #$83 #$84 #$84 #$20 #$30 #$15 #$86 #$95 #$84 #$96 #$85 #$94 #$60 #$a2 #$22 #$86 #$3b #$86 #$3c #$85 #$a2 #$84 #$a3 #$85 #$95 #$84 #$96 #$a0 #$ff #$c8 #$b1 #$a2 #$f0 #$0c #$c5 #$3b #$f0 #$04 #$c5 #$3c #$d0 #$f3 #$c9 #$22 #$f0 #$01 #$18 #$84 #$94 #$98 #$65 #$a2 #$85 #$a4 #$a6 #$a3 #$90 #$01 #$e8 #$86 #$a5 #$a5 #$a3 #$f0 #$04 #$c9 #$24 #$d0 #$0b #$98 #$20 #$b1 #$14 #$a6 *=$1500 #$a2 #$a4 #$a3 #$20 #$c4 #$16 #$a6 #$48 #$e0 #$54 #$d0 #$05 #$a2 #$bf #$4c #$4a #$05 #$a5 #$94 #$95 #$00 #$a5 #$95 #$95 #$01 #$a5 #$96 #$95 #$02 #$a0 #$00 #$86 #$97 #$84 #$98 #$84 #$a3 #$88 #$84 #$3f #$86 #$49 #$e8 #$e8 #$e8 #$86 #$48 #$60 #$46 #$41 #$48 #$49 #$ff #$38 #$65 #$65 #$a4 #$66 #$b0 #$01 #$88 #$c4 #$64 #$90 #$11 #$d0 #$04 #$c5 #$63 #$90 #$0b #$85 #$65 #$84 #$66 #$85 #$67 #$84 #$68 #$aa #$68 #$60 #$a2 #$4d #$a5 #$41 #$30 #$b6 #$20 #$62 #$15 #$a9 #$80 #$85 #$41 #$68 #$d0 #$d0 #$a6 #$69 #$a5 #$6a #$86 #$65 #$85 #$66 #$a0 #$00 #$84 #$82 #$84 #$81 #$a5 #$63 #$a6 #$64 #$85 #$92 #$86 #$93 #$a9 #$4b #$a2 #$00 #$85 #$54 #$86 #$55 #$c5 #$48 #$f0 #$05 #$20 #$03 #$16 #$f0 #$f7 #$a9 #$07 #$85 #$86 #$a5 #$5f #$a6 #$60 #$85 #$54 #$86 #$55 #$e4 #$62 #$d0 #$04 #$c5 #$61 #$f0 #$05 #$20 #$f9 #$15 #$f0 #$f3 #$85 #$8b #$86 #$8c #$a9 #$03 #$85 #$86 #$a5 #$8b #$a6 #$8c #$e4 #$64 #$d0 #$07 #$c5 #$63 #$d0 #$03 #$4c #$42 #$16 #$85 #$54 #$86 #$55 #$a0 #$00 #$b1 #$54 #$aa #$c8 #$b1 #$54 #$08 #$c8 #$b1 #$54 #$65 #$8b #$85 #$8b #$c8 #$b1 #$54 #$65 #$8c #$85 #$8c #$28 #$10 #$d3 #$8a #$30 #$d0 #$c8 #$b1 #$54 #$a0 #$00 #$0a #$69 #$05 #$65 #$54 #$85 #$54 #$90 #$02 #$e6 #$55 #$a6 #$55 #$e4 #$8c #$d0 #$04 #$c5 #$8b #$f0 #$ba #$20 #$03 #$16 #$f0 #$f3 #$b1 #$54 #$30 #$35 #$c8 #$b1 #$54 *=$1600 #$10 #$30 #$c8 #$b1 #$54 #$f0 #$2b #$c8 #$b1 #$54 #$aa #$c8 #$b1 #$54 #$c5 #$66 #$90 #$06 #$d0 #$1e #$e4 #$65 #$b0 #$1a #$c5 #$93 #$90 #$16 #$d0 #$04 #$e4 #$92 #$90 #$10 #$86 #$92 #$85 #$93 #$a5 #$54 #$a6 #$55 #$85 #$81 #$86 #$82 #$a5 #$86 #$85 #$88 #$a5 #$86 #$18 #$65 #$54 #$85 #$54 #$90 #$02 #$e6 #$55 #$a6 #$55 #$a0 #$00 #$60 #$a5 #$82 #$05 #$81 #$f0 #$f5 #$a5 #$88 #$29 #$04 #$4a #$a8 #$85 #$88 #$b1 #$81 #$65 #$92 #$85 #$8d #$a5 #$93 #$69 #$00 #$85 #$8e #$a5 #$65 #$a6 #$66 #$85 #$8b #$86 #$8c #$20 #$d2 #$04 #$a4 #$88 #$c8 #$a5 #$8b #$91 #$81 #$aa #$e6 #$8c #$a5 #$8c #$c8 #$91 #$81 #$4c #$66 #$15 #$a5 #$98 #$48 #$a5 #$97 #$48 #$20 #$ef #$0e #$20 #$fb #$0d #$68 #$85 #$a2 #$68 #$85 #$a3 #$a0 #$00 #$b1 #$a2 #$18 #$71 #$97 #$90 #$05 #$a2 #$b0 #$4c #$4a #$05 #$20 #$b1 #$14 #$20 #$b6 #$16 #$a5 #$83 #$a4 #$84 #$20 #$e6 #$16 #$20 #$c8 #$16 #$a5 #$a2 #$a4 #$a3 #$20 #$e6 #$16 #$20 #$06 #$15 #$4c #$24 #$0e #$a0 #$00 #$b1 #$a2 #$48 #$c8 #$b1 #$a2 #$aa #$c8 #$b1 #$a2 #$a8 #$68 #$86 #$54 #$84 #$55 #$a8 #$f0 #$0a #$48 #$88 #$b1 #$54 #$91 #$67 #$98 #$d0 #$f8 #$68 #$18 #$65 #$67 #$85 #$67 #$90 #$02 #$e6 #$68 #$60 #$20 #$fb #$0d #$a5 #$97 #$a4 #$98 #$85 #$54 #$84 #$55 #$20 #$17 #$17 #$08 #$a0 #$00 #$b1 #$54 #$48 #$c8 #$b1 #$54 #$aa #$c8 #$b1 #$54 #$a8 #$68 #$28 #$d0 #$13 #$c4 *=$1700 #$66 #$d0 #$0f #$e4 #$65 #$d0 #$0b #$48 #$18 #$65 #$65 #$85 #$65 #$90 #$02 #$e6 #$66 #$68 #$86 #$54 #$84 #$55 #$60 #$c4 #$4a #$d0 #$0c #$c5 #$49 #$d0 #$08 #$85 #$48 #$e9 #$03 #$85 #$49 #$a0 #$00 #$60 #$20 #$dd #$17 #$8a #$48 #$a9 #$01 #$20 #$b9 #$14 #$68 #$a0 #$00 #$91 #$95 #$68 #$68 #$4c #$06 #$15 #$20 #$9d #$17 #$d1 #$83 #$98 #$90 #$04 #$b1 #$83 #$aa #$98 #$48 #$8a #$48 #$20 #$b9 #$14 #$a5 #$83 #$a4 #$84 #$20 #$e6 #$16 #$68 #$a8 #$68 #$18 #$65 #$54 #$85 #$54 #$90 #$02 #$e6 #$55 #$98 #$20 #$c8 #$16 #$4c #$06 #$15 #$20 #$9d #$17 #$18 #$f1 #$83 #$49 #$ff #$4c #$42 #$17 #$a9 #$ff #$85 #$98 #$20 #$71 #$22 #$c9 #$29 #$f0 #$06 #$20 #$63 #$0f #$20 #$da #$17 #$20 #$9d #$17 #$f0 #$4b #$ca #$8a #$48 #$18 #$a2 #$00 #$f1 #$83 #$b0 #$b6 #$49 #$ff #$c5 #$98 #$90 #$b1 #$a5 #$98 #$b0 #$ad #$20 #$5d #$0f #$68 #$a8 #$68 #$85 #$88 #$68 #$68 #$68 #$aa #$68 #$85 #$83 #$68 #$85 #$84 #$a5 #$88 #$48 #$98 #$48 #$a0 #$00 #$8a #$60 #$20 #$be #$17 #$4c #$de #$13 #$20 #$df #$16 #$a2 #$00 #$86 #$3f #$a8 #$60 #$20 #$be #$17 #$f0 #$08 #$a0 #$00 #$b1 #$54 #$a8 #$4c #$de #$13 #$4c #$82 #$12 #$20 #$6b #$22 #$20 #$f6 #$0d #$20 #$f6 #$11 #$a6 #$97 #$d0 #$f0 #$a6 #$98 #$4c #$71 #$22 #$20 #$be #$17 #$d0 #$03 #$4c #$6f #$19 #$a6 #$a6 #$a4 #$a7 #$86 #$a4 #$84 #$a5 #$a6 #$54 #$86 #$a6 #$18 #$65 #$54 *=$1800 #$85 #$56 #$a6 #$55 #$86 #$a7 #$90 #$01 #$e8 #$86 #$57 #$a0 #$00 #$b1 #$56 #$48 #$a9 #$00 #$91 #$56 #$20 #$71 #$22 #$20 #$6b #$1d #$68 #$a0 #$00 #$91 #$56 #$a6 #$a4 #$a4 #$a5 #$86 #$a6 #$84 #$a7 #$60 #$20 #$f6 #$0d #$20 #$34 #$18 #$20 #$63 #$0f #$4c #$da #$17 #$a5 #$99 #$30 #$9c #$a5 #$94 #$c9 #$91 #$b0 #$96 #$20 #$13 #$1d #$a5 #$97 #$a4 #$98 #$84 #$46 #$85 #$47 #$60 #$a5 #$47 #$48 #$a5 #$46 #$48 #$20 #$34 #$18 #$a0 #$00 #$ea #$ea #$ea #$ea #$ea #$ea #$ea #$ea #$b1 #$46 #$a8 #$68 #$85 #$46 #$68 #$85 #$47 #$4c #$de #$13 #$20 #$28 #$18 #$8a #$a0 #$00 #$91 #$46 #$60 #$20 #$28 #$18 #$86 #$7b #$a2 #$00 #$20 #$71 #$22 #$f0 #$29 #$20 #$2e #$18 #$86 #$7c #$a0 #$00 #$b1 #$46 #$45 #$7c #$25 #$7b #$f0 #$f8 #$60 #$a9 #$89 #$a0 #$1f #$4c #$df #$18 #$20 #$04 #$1b #$a5 #$99 #$49 #$ff #$85 #$99 #$45 #$a1 #$85 #$a2 #$a5 #$94 #$4c #$e2 #$18 #$a5 #$46 #$49 #$e8 #$d0 #$08 #$a2 #$14 #$45 #$47 #$49 #$1c #$f0 #$0e #$a5 #$46 #$c9 #$66 #$d0 #$c6 #$a5 #$47 #$e9 #$19 #$d0 #$c0 #$a2 #$0a #$bd #$e9 #$21 #$29 #$3f #$49 #$20 #$18 #$69 #$20 #$20 #$00 #$2b #$ca #$49 #$21 #$d0 #$ee #$c6 #$7b #$d0 #$e8 #$60 #$20 #$11 #$1a #$90 #$3c #$20 #$04 #$1b #$d0 #$03 #$4c #$74 #$1c #$a6 #$a3 #$86 #$89 #$a2 #$9c #$a5 #$9c #$a8 #$f0 #$9b #$38 #$e5 #$94 #$f0 #$24 #$90 #$12 #$84 #$94 #$a4 #$a1 #$84 #$99 #$49 *=$1900 #$ff #$69 #$00 #$a0 #$00 #$84 #$89 #$a2 #$94 #$d0 #$04 #$a0 #$00 #$84 #$a3 #$c9 #$f9 #$30 #$c7 #$a8 #$a5 #$a3 #$56 #$01 #$20 #$28 #$1a #$24 #$a2 #$10 #$57 #$a0 #$94 #$e0 #$9c #$f0 #$02 #$a0 #$9c #$38 #$49 #$ff #$65 #$89 #$85 #$a3 #$b9 #$04 #$00 #$f5 #$04 #$85 #$98 #$b9 #$03 #$00 #$f5 #$03 #$85 #$97 #$b9 #$02 #$00 #$f5 #$02 #$85 #$96 #$b9 #$01 #$00 #$f5 #$01 #$85 #$95 #$b0 #$03 #$20 #$bf #$19 #$a0 #$00 #$98 #$18 #$a6 #$95 #$d0 #$4a #$a6 #$96 #$86 #$95 #$a6 #$97 #$86 #$96 #$a6 #$98 #$86 #$97 #$a6 #$a3 #$86 #$98 #$84 #$a3 #$69 #$08 #$c9 #$20 #$d0 #$e4 #$a9 #$00 #$85 #$94 #$85 #$99 #$60 #$65 #$89 #$85 #$a3 #$a5 #$98 #$65 #$a0 #$85 #$98 #$a5 #$97 #$65 #$9f #$85 #$97 #$a5 #$96 #$65 #$9e #$85 #$96 #$a5 #$95 #$65 #$9d #$85 #$95 #$4c #$ae #$19 #$69 #$01 #$06 #$a3 #$26 #$98 #$26 #$97 #$26 #$96 #$26 #$95 #$10 #$f2 #$38 #$e5 #$94 #$b0 #$c7 #$49 #$ff #$69 #$01 #$85 #$94 #$90 #$0e #$e6 #$94 #$f0 #$42 #$66 #$95 #$66 #$96 #$66 #$97 #$66 #$98 #$66 #$a3 #$60 #$a5 #$99 #$49 #$ff #$85 #$99 #$a5 #$95 #$49 #$ff #$85 #$95 #$a5 #$96 #$49 #$ff #$85 #$96 #$a5 #$97 #$49 #$ff #$85 #$97 #$a5 #$98 #$49 #$ff #$85 #$98 #$a5 #$a3 #$49 #$ff #$85 #$a3 #$e6 #$a3 #$d0 #$0e #$e6 #$98 #$d0 #$0a #$e6 #$97 #$d0 #$06 #$e6 #$96 #$d0 #$02 #$e6 #$95 #$60 #$a2 #$45 #$4c #$4a #$05 #$a2 #$57 #$b4 #$04 #$84 *=$1a00 #$a3 #$b4 #$03 #$94 #$04 #$b4 #$02 #$94 #$03 #$b4 #$01 #$94 #$02 #$a4 #$9b #$94 #$01 #$69 #$08 #$30 #$e8 #$f0 #$e6 #$e9 #$08 #$a8 #$a5 #$a3 #$b0 #$14 #$16 #$01 #$90 #$02 #$f6 #$01 #$76 #$01 #$76 #$01 #$76 #$02 #$76 #$03 #$76 #$04 #$6a #$c8 #$d0 #$ec #$18 #$60 #$81 #$00 #$00 #$00 #$00 #$03 #$7f #$5e #$56 #$cb #$79 #$80 #$13 #$9b #$0b #$64 #$80 #$76 #$38 #$93 #$16 #$82 #$38 #$aa #$3b #$20 #$80 #$35 #$04 #$f3 #$34 #$81 #$35 #$04 #$f3 #$34 #$80 #$80 #$00 #$00 #$00 #$80 #$31 #$72 #$17 #$f8 #$20 #$a3 #$1c #$f0 #$02 #$10 #$03 #$4c #$82 #$12 #$a5 #$94 #$e9 #$7f #$48 #$a9 #$80 #$85 #$94 #$a9 #$4e #$a0 #$1a #$20 #$df #$18 #$a9 #$53 #$a0 #$1a #$20 #$87 #$1b #$a9 #$34 #$a0 #$1a #$20 #$95 #$18 #$a9 #$39 #$a0 #$1a #$20 #$99 #$20 #$a9 #$58 #$a0 #$1a #$20 #$df #$18 #$68 #$20 #$f6 #$1d #$a9 #$5d #$a0 #$1a #$20 #$04 #$1b #$d0 #$03 #$4c #$03 #$1b #$20 #$2f #$1b #$a9 #$00 #$85 #$58 #$85 #$59 #$85 #$5a #$85 #$5b #$a5 #$a3 #$20 #$d1 #$1a #$a5 #$98 #$20 #$d1 #$1a #$a5 #$97 #$20 #$d1 #$1a #$a5 #$96 #$20 #$d1 #$1a #$a5 #$95 #$20 #$d6 #$1a #$4c #$07 #$1c #$d0 #$03 #$4c #$fb #$19 #$4a #$09 #$80 #$a8 #$90 #$19 #$18 #$a5 #$5b #$65 #$a0 #$85 #$5b #$a5 #$5a #$65 #$9f #$85 #$5a #$a5 #$59 #$65 #$9e #$85 #$59 #$a5 #$58 #$65 #$9d #$85 #$58 #$66 #$58 #$66 #$59 #$66 #$5a #$66 #$5b #$66 #$a3 #$98 *=$1b00 #$4a #$d0 #$d6 #$60 #$85 #$54 #$84 #$55 #$a0 #$04 #$b1 #$54 #$85 #$a0 #$88 #$b1 #$54 #$85 #$9f #$88 #$b1 #$54 #$85 #$9e #$88 #$b1 #$54 #$85 #$a1 #$45 #$99 #$85 #$a2 #$a5 #$a1 #$09 #$80 #$85 #$9d #$88 #$b1 #$54 #$85 #$9c #$a5 #$94 #$60 #$a5 #$9c #$f0 #$1f #$18 #$65 #$94 #$90 #$04 #$30 #$1d #$18 #$2c #$10 #$14 #$69 #$80 #$85 #$94 #$d0 #$03 #$4c #$73 #$19 #$a5 #$a2 #$85 #$99 #$60 #$a5 #$99 #$49 #$ff #$30 #$05 #$68 #$68 #$4c #$6f #$19 #$4c #$f6 #$19 #$20 #$84 #$1c #$aa #$f0 #$10 #$18 #$69 #$02 #$b0 #$f2 #$a2 #$00 #$86 #$a2 #$20 #$ef #$18 #$e6 #$94 #$f0 #$e7 #$60 #$84 #$20 #$00 #$00 #$00 #$20 #$84 #$1c #$a9 #$71 #$a0 #$1b #$a2 #$00 #$86 #$a2 #$20 #$1a #$1c #$4c #$8a #$1b #$20 #$04 #$1b #$f0 #$76 #$20 #$93 #$1c #$a9 #$00 #$38 #$e5 #$94 #$85 #$94 #$20 #$2f #$1b #$e6 #$94 #$f0 #$ba #$a2 #$fc #$a9 #$01 #$a4 #$9d #$c4 #$95 #$d0 #$10 #$a4 #$9e #$c4 #$96 #$d0 #$0a #$a4 #$9f #$c4 #$97 #$d0 #$04 #$a4 #$a0 #$c4 #$98 #$08 #$2a #$90 #$09 #$e8 #$95 #$5b #$f0 #$32 #$10 #$34 #$a9 #$01 #$28 #$b0 #$0e #$06 #$a0 #$26 #$9f #$26 #$9e #$26 #$9d #$b0 #$e6 #$30 #$ce #$10 #$e2 #$a8 #$a5 #$a0 #$e5 #$98 #$85 #$a0 #$a5 #$9f #$e5 #$97 #$85 #$9f #$a5 #$9e #$e5 #$96 #$85 #$9e #$a5 #$9d #$e5 #$95 #$85 #$9d #$98 #$4c #$c7 #$1b #$a9 #$40 #$d0 #$ce #$0a #$0a #$0a #$0a #$0a #$0a #$85 #$a3 #$28 #$4c *=$1c00 #$07 #$1c #$a2 #$85 #$4c #$4a #$05 #$a5 #$58 #$85 #$95 #$a5 #$59 #$85 #$96 #$a5 #$5a #$85 #$97 #$a5 #$5b #$85 #$98 #$4c #$4f #$19 #$85 #$54 #$84 #$55 #$a0 #$04 #$b1 #$54 #$85 #$98 #$88 #$b1 #$54 #$85 #$97 #$88 #$b1 #$54 #$85 #$96 #$88 #$b1 #$54 #$85 #$99 #$09 #$80 #$85 #$95 #$88 #$b1 #$54 #$85 #$94 #$84 #$a3 #$60 #$a2 #$8f #$2c #$a2 #$8a #$a0 #$00 #$f0 #$04 #$a6 #$7b #$a4 #$7c #$20 #$93 #$1c #$86 #$54 #$84 #$55 #$a0 #$04 #$a5 #$98 #$91 #$54 #$88 #$a5 #$97 #$91 #$54 #$88 #$a5 #$96 #$91 #$54 #$88 #$a5 #$99 #$09 #$7f #$25 #$95 #$91 #$54 #$88 #$a5 #$94 #$91 #$54 #$84 #$a3 #$60 #$a5 #$a1 #$85 #$99 #$a2 #$05 #$b5 #$9b #$95 #$93 #$ca #$d0 #$f9 #$86 #$a3 #$60 #$20 #$93 #$1c #$a2 #$06 #$b5 #$93 #$95 #$9b #$ca #$d0 #$f9 #$86 #$a3 #$60 #$a5 #$94 #$f0 #$fb #$06 #$a3 #$90 #$f7 #$20 #$e7 #$19 #$d0 #$f2 #$4c #$b0 #$19 #$a5 #$94 #$f0 #$09 #$a5 #$99 #$2a #$a9 #$ff #$b0 #$02 #$a9 #$01 #$60 #$20 #$a3 #$1c #$85 #$95 #$a9 #$00 #$85 #$96 #$a2 #$88 #$a5 #$95 #$49 #$ff #$2a #$a9 #$00 #$85 #$98 #$85 #$97 #$86 #$94 #$85 #$a3 #$85 #$99 #$4c #$4a #$19 #$46 #$99 #$60 #$85 #$56 #$84 #$57 #$a0 #$00 #$b1 #$56 #$c8 #$aa #$f0 #$c4 #$b1 #$56 #$45 #$99 #$30 #$c2 #$e4 #$94 #$d0 #$21 #$b1 #$56 #$09 #$80 #$c5 #$95 #$d0 #$19 #$c8 #$b1 #$56 #$c5 #$96 #$d0 #$12 #$c8 #$b1 #$56 #$c5 #$97 #$d0 #$0b #$c8 *=$1d00 #$a9 #$7f #$c5 #$a3 #$b1 #$56 #$e5 #$98 #$f0 #$28 #$a5 #$99 #$90 #$02 #$49 #$ff #$4c #$a9 #$1c #$a5 #$94 #$f0 #$4a #$38 #$e9 #$a0 #$24 #$99 #$10 #$09 #$aa #$a9 #$ff #$85 #$9b #$20 #$c5 #$19 #$8a #$a2 #$94 #$c9 #$f9 #$10 #$06 #$20 #$11 #$1a #$84 #$9b #$60 #$a8 #$a5 #$99 #$29 #$80 #$46 #$95 #$05 #$95 #$85 #$95 #$20 #$28 #$1a #$84 #$9b #$60 #$a5 #$94 #$c9 #$a0 #$b0 #$20 #$20 #$13 #$1d #$84 #$a3 #$a5 #$99 #$84 #$99 #$49 #$80 #$2a #$a9 #$a0 #$85 #$94 #$a5 #$98 #$85 #$3b #$4c #$4a #$19 #$85 #$95 #$85 #$96 #$85 #$97 #$85 #$98 #$a8 #$60 #$a0 #$00 #$a2 #$0a #$94 #$90 #$ca #$10 #$fb #$90 #$0f #$c9 #$2d #$d0 #$04 #$86 #$9a #$f0 #$04 #$c9 #$2b #$d0 #$05 #$20 #$6b #$22 #$90 #$5b #$c9 #$2e #$f0 #$2e #$c9 #$45 #$d0 #$30 #$20 #$6b #$22 #$90 #$17 #$c9 #$a5 #$f0 #$0e #$c9 #$2d #$f0 #$0a #$c9 #$a4 #$f0 #$08 #$c9 #$2b #$f0 #$04 #$d0 #$07 #$66 #$93 #$20 #$6b #$22 #$90 #$5c #$24 #$93 #$10 #$0e #$a9 #$00 #$38 #$e5 #$91 #$4c #$c1 #$1d #$66 #$92 #$24 #$92 #$50 #$c3 #$a5 #$91 #$38 #$e5 #$90 #$85 #$91 #$f0 #$12 #$10 #$09 #$20 #$76 #$1b #$e6 #$91 #$d0 #$f9 #$f0 #$07 #$20 #$5a #$1b #$c6 #$91 #$d0 #$f9 #$a5 #$9a #$30 #$01 #$60 #$4c #$0d #$20 #$48 #$24 #$92 #$10 #$02 #$e6 #$90 #$20 #$5a #$1b #$68 #$38 #$e9 #$30 #$20 #$f6 #$1d #$4c #$82 #$1d #$48 #$20 #$84 #$1c #$68 #$20 #$b4 #$1c #$a5 #$a1 *=$1e00 #$45 #$99 #$85 #$a2 #$a6 #$94 #$4c #$e2 #$18 #$a5 #$91 #$c9 #$0a #$90 #$09 #$a9 #$64 #$24 #$93 #$30 #$11 #$4c #$f6 #$19 #$0a #$0a #$18 #$65 #$91 #$0a #$18 #$a0 #$00 #$71 #$a6 #$38 #$e9 #$30 #$85 #$91 #$4c #$a8 #$1d #$9b #$3e #$bc #$1f #$fd #$9e #$6e #$6b #$27 #$fd #$9e #$6e #$6b #$28 #$00 #$a9 #$8a #$a0 #$04 #$20 #$52 #$1e #$a5 #$6c #$a6 #$6b #$85 #$95 #$86 #$96 #$a2 #$90 #$38 #$20 #$c1 #$1c #$20 #$55 #$1e #$4c #$ef #$0b #$a0 #$01 #$a9 #$20 #$24 #$99 #$10 #$02 #$a9 #$2d #$99 #$04 #$02 #$85 #$99 #$84 #$a4 #$c8 #$a9 #$30 #$a6 #$94 #$d0 #$03 #$4c #$7c #$1f #$a9 #$00 #$e0 #$80 #$f0 #$02 #$b0 #$09 #$a9 #$35 #$a0 #$1e #$20 #$a0 #$1a #$a9 #$f7 #$85 #$90 #$a9 #$30 #$a0 #$1e #$20 #$d3 #$1c #$f0 #$1e #$10 #$12 #$a9 #$2b #$a0 #$1e #$20 #$d3 #$1c #$f0 #$02 #$10 #$0e #$20 #$5a #$1b #$c6 #$90 #$d0 #$ee #$20 #$76 #$1b #$e6 #$90 #$d0 #$dc #$20 #$8e #$18 #$20 #$13 #$1d #$a2 #$01 #$a5 #$90 #$18 #$69 #$0a #$30 #$09 #$c9 #$0b #$b0 #$06 #$69 #$ff #$aa #$a9 #$02 #$38 #$e9 #$02 #$85 #$91 #$86 #$90 #$8a #$f0 #$02 #$10 #$13 #$a4 #$a4 #$a9 #$2e #$c8 #$99 #$04 #$02 #$8a #$f0 #$06 #$a9 #$30 #$c8 #$99 #$04 #$02 #$84 #$a4 #$a0 #$00 #$a2 #$80 #$a5 #$98 #$18 #$79 #$91 #$1f #$85 #$98 #$a5 #$97 #$79 #$90 #$1f #$85 #$97 #$a5 #$96 #$79 #$8f #$1f #$85 #$96 #$a5 #$95 #$79 #$8e #$1f #$85 #$95 #$e8 *=$1f00 #$b0 #$04 #$10 #$de #$30 #$02 #$30 #$da #$8a #$90 #$04 #$49 #$ff #$69 #$0a #$69 #$2f #$c8 #$c8 #$c8 #$c8 #$84 #$79 #$a4 #$a4 #$c8 #$aa #$29 #$7f #$99 #$04 #$02 #$c6 #$90 #$d0 #$06 #$a9 #$2e #$c8 #$99 #$04 #$02 #$84 #$a4 #$a4 #$79 #$8a #$49 #$ff #$29 #$80 #$aa #$c0 #$24 #$f0 #$04 #$c0 #$3c #$d0 #$a6 #$a4 #$a4 #$b9 #$04 #$02 #$88 #$c9 #$30 #$f0 #$f8 #$c9 #$2e #$f0 #$01 #$c8 #$a9 #$2b #$a6 #$91 #$f0 #$2e #$10 #$08 #$a9 #$00 #$38 #$e5 #$91 #$aa #$a9 #$2d #$99 #$06 #$02 #$a9 #$45 #$99 #$05 #$02 #$8a #$a2 #$2f #$38 #$e8 #$e9 #$0a #$b0 #$fb #$69 #$3a #$99 #$08 #$02 #$8a #$99 #$07 #$02 #$a9 #$00 #$99 #$09 #$02 #$f0 #$08 #$99 #$04 #$02 #$a9 #$00 #$99 #$05 #$02 #$a9 #$05 #$a0 #$02 #$60 #$80 #$00 #$00 #$00 #$00 #$fa #$0a #$1f #$00 #$00 #$98 #$96 #$80 #$ff #$f0 #$bd #$c0 #$00 #$01 #$86 #$a0 #$ff #$ff #$d8 #$f0 #$00 #$00 #$03 #$e8 #$ff #$ff #$ff #$9c #$00 #$00 #$00 #$0a #$ff #$ff #$ff #$ff #$ff #$df #$0a #$80 #$00 #$03 #$4b #$c0 #$ff #$ff #$73 #$60 #$00 #$00 #$0e #$10 #$ff #$ff #$fd #$a8 #$00 #$00 #$00 #$3c #$20 #$84 #$1c #$a9 #$89 #$a0 #$1f #$20 #$1a #$1c #$f0 #$70 #$a5 #$9c #$d0 #$03 #$4c #$71 #$19 #$a2 #$81 #$a0 #$00 #$20 #$4c #$1c #$a5 #$a1 #$10 #$0f #$20 #$44 #$1d #$a9 #$81 #$a0 #$00 #$20 #$d3 #$1c #$d0 #$03 #$98 #$a4 #$3b #$20 #$76 #$1c #$98 #$48 #$20 #$62 #$1a #$a9 *=$2000 #$81 #$a0 #$00 #$20 #$a0 #$1a #$20 #$46 #$20 #$68 #$4a #$90 #$0a #$a5 #$94 #$f0 #$06 #$a5 #$99 #$49 #$ff #$85 #$99 #$60 #$81 #$38 #$aa #$3b #$29 #$07 #$71 #$34 #$58 #$3e #$56 #$74 #$16 #$7e #$b3 #$1b #$77 #$2f #$ee #$e3 #$85 #$7a #$1d #$84 #$1c #$2a #$7c #$63 #$59 #$58 #$0a #$7e #$75 #$fd #$e7 #$c6 #$80 #$31 #$72 #$18 #$10 #$81 #$00 #$00 #$00 #$00 #$a9 #$18 #$a0 #$20 #$20 #$a0 #$1a #$a5 #$a3 #$69 #$50 #$90 #$03 #$20 #$9b #$1c #$85 #$89 #$20 #$87 #$1c #$a5 #$94 #$c9 #$88 #$90 #$03 #$20 #$4c #$1b #$20 #$44 #$1d #$a5 #$3b #$18 #$69 #$81 #$f0 #$f3 #$38 #$e9 #$01 #$48 #$a2 #$05 #$b5 #$9c #$b4 #$94 #$95 #$94 #$94 #$9c #$ca #$10 #$f5 #$a5 #$89 #$85 #$a3 #$20 #$98 #$18 #$20 #$0d #$20 #$a9 #$1d #$a0 #$20 #$20 #$af #$20 #$a9 #$00 #$85 #$a2 #$68 #$20 #$31 #$1b #$60 #$85 #$a4 #$84 #$a5 #$20 #$42 #$1c #$a9 #$8a #$20 #$a0 #$1a #$20 #$b3 #$20 #$a9 #$8a #$a0 #$00 #$4c #$a0 #$1a #$85 #$a4 #$84 #$a5 #$20 #$3f #$1c #$b1 #$a4 #$85 #$9a #$a4 #$a4 #$c8 #$98 #$d0 #$02 #$e6 #$a5 #$85 #$a4 #$a4 #$a5 #$20 #$a0 #$1a #$a5 #$a4 #$a4 #$a5 #$18 #$69 #$05 #$90 #$01 #$c8 #$85 #$a4 #$84 #$a5 #$20 #$df #$18 #$a9 #$8f #$a0 #$00 #$c6 #$9a #$d0 #$e4 #$60 #$98 #$35 #$44 #$7a #$68 #$28 #$b1 #$46 #$20 #$a3 #$1c #$30 #$2a #$d0 #$13 #$a5 #$06 #$85 #$95 #$a5 #$0a #$85 #$96 #$a5 #$07 #$85 #$97 #$a5 #$0b *=$2100 #$85 #$98 #$4c #$2a #$21 #$a9 #$88 #$a0 #$22 #$20 #$1a #$1c #$a9 #$e3 #$a0 #$20 #$20 #$a0 #$1a #$a9 #$e7 #$a0 #$20 #$20 #$df #$18 #$a6 #$98 #$a5 #$95 #$85 #$98 #$86 #$95 #$a6 #$96 #$a5 #$97 #$85 #$96 #$86 #$97 #$a9 #$00 #$85 #$99 #$a5 #$94 #$85 #$a3 #$a9 #$80 #$85 #$94 #$20 #$4f #$19 #$a2 #$88 #$a0 #$22 #$4c #$4c #$1c #$a9 #$bc #$a0 #$21 #$20 #$df #$18 #$20 #$84 #$1c #$a9 #$c1 #$a0 #$21 #$a6 #$a1 #$20 #$7f #$1b #$20 #$84 #$1c #$20 #$44 #$1d #$a9 #$00 #$85 #$a2 #$20 #$98 #$18 #$a9 #$c6 #$a0 #$21 #$20 #$95 #$18 #$a5 #$99 #$48 #$10 #$0d #$20 #$8e #$18 #$a5 #$99 #$30 #$09 #$a5 #$44 #$49 #$ff #$85 #$44 #$20 #$0d #$20 #$a9 #$c6 #$a0 #$21 #$20 #$df #$18 #$68 #$10 #$03 #$20 #$0d #$20 #$a9 #$cb #$a0 #$21 #$4c #$99 #$20 #$20 #$42 #$1c #$a9 #$00 #$85 #$44 #$20 #$47 #$21 #$a2 #$81 #$a0 #$00 #$20 #$3d #$21 #$a9 #$8a #$a0 #$00 #$20 #$1a #$1c #$a9 #$00 #$85 #$99 #$a5 #$44 #$20 #$b8 #$21 #$a9 #$81 #$a0 #$00 #$4c #$87 #$1b #$48 #$4c #$79 #$21 #$81 #$49 #$0f #$da #$a2 #$83 #$49 #$0f #$da #$a2 #$7f #$00 #$00 #$00 #$00 #$05 #$84 #$e6 #$1a #$2d #$1b #$86 #$28 #$07 #$fb #$f8 #$87 #$99 #$68 #$89 #$01 #$87 #$23 #$35 #$df #$e1 #$86 #$a5 #$5d #$e7 #$28 #$83 #$49 #$0f #$da #$a2 #$a1 #$54 #$46 #$8f #$13 #$8f #$52 #$43 #$89 #$cd #$e1 #$4e #$8f #$92 #$14 #$ad #$81 #$47 #$89 #$c7 #$a5 #$99 *=$2200 #$48 #$10 #$03 #$20 #$0d #$20 #$a5 #$94 #$48 #$c9 #$81 #$90 #$07 #$a9 #$34 #$a0 #$1a #$20 #$87 #$1b #$a9 #$2e #$a0 #$22 #$20 #$99 #$20 #$68 #$c9 #$81 #$90 #$07 #$a9 #$bc #$a0 #$21 #$20 #$95 #$18 #$68 #$10 #$03 #$4c #$0d #$20 #$60 #$0b #$76 #$b3 #$83 #$bd #$d3 #$79 #$1e #$f4 #$a6 #$f5 #$7b #$83 #$fc #$b0 #$10 #$7c #$0c #$1f #$67 #$ca #$7c #$de #$53 #$cb #$c1 #$7d #$14 #$64 #$70 #$4c #$7d #$b7 #$ea #$51 #$7a #$7d #$63 #$30 #$88 #$7e #$7e #$92 #$44 #$99 #$3a #$7e #$4c #$cc #$91 #$c7 #$7f #$aa #$aa #$aa #$13 #$81 #$00 #$00 #$00 #$00 #$e6 #$a6 #$d0 #$02 #$e6 #$a7 #$84 #$19 #$a0 #$00 #$b1 #$a6 #$a4 #$19 #$c9 #$3a #$b0 #$0a #$c9 #$20 #$f0 #$ea #$38 #$e9 #$30 #$38 #$e9 #$d0 #$60 #$80 #$4f #$c7 #$52 #$58 #$a2 #$fb #$9a #$a9 #$4c #$85 #$87 #$85 #$38 #$a9 #$82 #$a0 #$12 #$85 #$39 #$84 #$3a #$a9 #$28 #$85 #$19 #$a9 #$1e #$85 #$19 #$a2 #$00 #$a9 #$03 #$85 #$86 #$8a #$85 #$9b #$85 #$19 #$85 #$4a #$48 #$85 #$45 #$e8 #$8e #$02 #$24 #$8e #$01 #$24 #$a2 #$4b #$86 #$48 #$a0 #$71 #$85 #$5d #$84 #$5e #$85 #$46 #$84 #$47 #$a8 #$e6 #$46 #$d0 #$04 #$e6 #$47 #$30 #$0f #$a9 #$55 #$91 #$46 #$d1 #$46 #$d0 #$07 #$0a #$91 #$46 #$d1 #$46 #$f0 #$e9 #$a5 #$01 #$c9 #$01 #$e9 #$00 #$85 #$47 #$a5 #$46 #$a4 #$47 #$85 #$69 #$84 #$6a #$85 #$65 #$84 #$66 #$a2 #$00 #$a0 #$71 #$86 #$5d #$84 #$5e #$a0 *=$2300 #$00 #$98 #$91 #$5d #$e6 #$5d #$a5 #$5d #$a4 #$5e #$20 #$1b #$05 #$a9 #$3b #$a0 #$23 #$20 #$ef #$0b #$a5 #$69 #$38 #$e5 #$5d #$aa #$a5 #$6a #$e5 #$5e #$20 #$45 #$1e #$a9 #$2e #$a0 #$23 #$20 #$ef #$0b #$20 #$44 #$07 #$4c #$71 #$05 #$20 #$42 #$59 #$54 #$45 #$53 #$20 #$46 #$52 #$45 #$45 #$0d #$00 #$23 #$23 #$23 #$20 #$4d #$53 #$20 #$42 #$41 #$53 #$49 #$43 #$20 #$23 #$23 #$23 #$0d #$0d #$00 { ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ Insert BASIC image here ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ } {-----------------------------------------------------------------------+ | Setup | +-----------------------------------------------------------------------} *=$2400 { This space will be reused as input buffer } _Setup=* [ { Preemptively switch to MODE 3 because, honestly, people will just try a simple benchmark and leave it at that... } \SYS_SetMode_v2_80 _sysFn= 3 80!! \TISTR0 p= 0 p: =0 j p. 0loop] {Until all 120 pixel lines done} { Shift the horizontal display by 96 bytes. For MS BASIC it doesn't matter, but this prepares the I/O routines for an improved Apple 1 emulator: that one has less flexibility in how the RAM address space can be set up. } $101 {videoTable+1} p= $60 p. {Use offsets 96..255 for pixel data, not 0..159} { Semi-clear the screen. Give just enough newlines such that once the READY prompt is there, all garbage pixels are gone. } 6 [do \sysArgs6. 13 CharOut! {Also prepares p for character printing} \sysArgs6, 1- if>0loop] &_MainLoop _vLR= {Prepare transfer to main loop} &_COLD_START {Start address for 6502 program} ret {Jump to MainLoop (the brackets just prevent} {the GCL compiler's insert of a vLR patch)} ] {-----------------------------------------------------------------------+ | Main loop | +-----------------------------------------------------------------------} *=$2600 _MainLoop=* { Main loop from the perspective of the Gigatron I/O system } _v6502_PC= {Reset v6502 PC} [do \SYS_Run6502_v4_80 _sysFn= 80!! {Run 6502 code until BRK} push {Save v6502 PC} CharOut! {Write character to screen} pop {Restore v6502 PC} loop] {Return to v6502 code} {-----------------------------------------------------------------------+ | DrawChar | +-----------------------------------------------------------------------} { Continuation of CharOut Draws the glyph from the ROM address in j Preserve the 8th line because of the compressed video layout: the first line of the top text row is there! Tail function: pops without push } _DrawChar=* [ \SYS_VDrawBits_134 _sysFn= {Prepare SYS calls} $b00 _sysArgs0= {Amber on black} p _sysArgs4= {Screen position for character} 6+ p= {Advance by 6 pixels} 5 [do i= {Draw character as 5 vertical bit slices} j 0?? {Get bit slice as byte from ROM table} $fe& \sysArgs2. {Clear bottom pixel} $700 _sysArgs4+ peek {Preserve pixel on 8th line because of overlap} [if<>0 <\sysArgs2++] { in 7 line text mode. Assumes background is 0.} 134!! {SYS call to draw 8 pixels vertically} 0loop] {Looping} pop ret ] {-----------------------------------------------------------------------+ | Character output with automatic scrolling | +-----------------------------------------------------------------------} *=$2700 _CharOut=* [ { Simple video terminal output with automatic line feed. } push 255- [if<>0 {Check for 255: pi} 223+ [if<0 {Check for less than 255-223 = 32} _sysArgs0= {Store argument because we're clobbering vAC} \ControlCode call {Handle other ASCII control codes} [if=0 pop ret] {Don't draw character if zero returned} #_LDWI #155 #>\font32up {Inline asm to point to `?'} else 95- [if>0 -64] {Map 128..254 to `?'} 45+ {Map ASCII code to offset in font table} [if<0 50+ i= \font32up {ASCII 32..81} else i= \font82up] {ASCII 82..127} j= i 2<< i+ {Multiply char code by 5} j+ {Add to page address to reach bitmap data} ] else {Handle pi} #_LDWI #12 #>\font82up {Inline asm to point to font82up+12, see below} ] j= {Pass to DrawChar} 0 \Newline call] {Line wrap if current line is full} \DrawChar call {Tail call: doesn't return here} ] { Combining right half of 'T' and left half of 'U' makes 'pi': R S T pi U | | | | | v v v v v x x x x . . x x x . x x # # # # . . . x x . . . x x . . . . . . # . . # . . . x x . . . x x . . . . . . # . . # . . . x x x x x . . x x x . . . # . . # . . . x x . x . . . . . . x . . # . . # . . . x x . . x . . . . . x . . # . . # . . . x x . . . x x x x x . . . # . . . # x x . . . . . . . . . . . . . . . . . . . . . 0 1 2 3 4 5 6 7 8 9 a b c d e f 1 1 1 1 ^ 0 1 2 3 | font82up } {-----------------------------------------------------------------------+ | Newline | +-----------------------------------------------------------------------} *=$2800 { Newline function for the compressed layout (7 pixel lines per text row) Returns 0 } _Newline=* [ \SYS_VDrawBits_134 _sysFn= {Prepare SYS calls} $b00 _sysArgs0= {Amber on black} { Find the top text row } $62 p. {Go to what is now still the top text row} { Clear this text row } p 2- _sysArgs4= {Set drawing position for clearing} [do $700 _sysArgs4+ peek {Preserve pixel on 8th line because of overlap} 1& \sysArgs2. { in 7 line text mode. Assume bit 0 differs.} 134!! {SYS call to draw 8 pixels vertically} <\sysArgs4++ {Step 1 pixel right} \sysArgs4, if<>0loop] {Loop until end of pixel line} { Scroll everything up by modifying the video indirection table. [This may be a cool effect to watch in slow motion?] } [do i 22+ _sysArgs4= {_sysArgs4 looks 11 entries ahead of i} peek \sysArgs2. {Swap scanlines} i, _sysArgs4. \sysArgs2, i. 0loop] {Until all done} { The cleared text row has now bubbled down to the bottom } ret ] {-----------------------------------------------------------------------+ | ControlCode | +-----------------------------------------------------------------------} *=$2900 { Output handler for ASCII codes 0..31 except newline (13). Input is offset by -13 } _ControlCode=* [ _sysArgs0 {Retrieve argument} 19+ [if=0 {Check for 255-223-19 = 13 = CR} push \Newline call {Create new line and scroll screen up} pop ret] {Returns 0} 3+ [if<>0 {Return 0 if 10 = LF} 3+ [if=0 6 \soundTimer. {CHR$(7) rings a bell} pop]] {Don't print a glyph as well} ret ] {-----------------------------------------------------------------------+ | WAITKEY | +-----------------------------------------------------------------------} *=$2a00 { Wait for next key press and return ASCII result Display a blinking cursor and keep TI$ updated while waiting } _WAITKEY=* #_LDAZ_ #_serialRaw _WAITKEY1=* #_STAZ_ #_TMPZP {Reference state before change} _WAITKEY2=* #_LDAZ_ #_serialRaw #_CMPZ_ #_TMPZP {Keyboard state changed?} #_BNE_ #@_WAITKEY4 #_LDAZ_ #_frameCount {No change: handle cursor and time} #_ANDIM_ #$0f #_BNE_ #@_WAITKEY2 {4 Hz cursor redraw rate} #_LDAZ_ #_frameCount {Select space or cursor symbol} #_ANDIM_ #$10 #_BNE_ #@_WAITKEY3 #_LDAIM_ #32 {Space} #_BIT_ _WAITKEY3=* #_LDAIM_ #127 {Cursor} #_BRK_ {Display cursor} #_JSR_ ##_GOBACK {Move back} #_JSR_ ##_TICK {Lacking interrupts, keep TI$ ticking} #_JMP_ ##_WAITKEY2 _WAITKEY4=* #_CMPIM_ #255 {Ignore key release} #_BEQ_ #@_WAITKEY1 #_PHA_ #_LDAIM_ #$20 {Overwrite cursor symbol with a space} #_BRK_ #_JSR_ ##_GOBACK {Move back} #_PLA_ #_RTS_ _GOBACK=* #_LDAZ_ #

$4f1a #_BCC_ #@_NOWRAP #_LDAIM_ #0 #_STA_ ##_TISTR0 #_STA_ ##_TISTR1 _NOWRAP=* #_RTS_ {-----------------------------------------------------------------------+ | LINEEDIT | +-----------------------------------------------------------------------} *=$2f00 _LINEEDIT=* #_CMPIM_ #$5f {"_" or RUBOUT} #_BEQ_ #@_EDIT1 #_CPXIM_ #90 {Input buffer full?} #_BCS_ #@_EDIT2 #_RTS_ _EDIT1=* #_TXA_ {Rescue buffer index X} #_PHA_ #_JSR_ ##_GOBACK {Print space to remove spurious echo} #_LDAIM_ #$20 #_BRK_ #_JSR_ ##_GOBACK #_PLA_ {Restore X} #_TAX_ #_BEQ_ #@_EDIT3 {Nothing in buffer to delete} #_DEX_ {Remove from buffer} _EDIT2=* #_JSR_ ##_GOBACK {Can we go back on this screen line?} #_BCC_ #@_EDIT4 {Failed to go back} #_LDAIM_ #0 {For caller} _EDIT3=* #_RTS_ _EDIT4=* #_LDAIM_ #$3f {"?" to signal buffer clearing} #_BRK_ #_LDAIM_ #13 {Newline} #_BRK_ #_LDXIM_ #0 {Clear buffer when in left-most column} #_RTS_ {-----------------------------------------------------------------------+ | SAVE | +-----------------------------------------------------------------------} *=$3000 _Buffer=$2405 _SAVE=* #_PHP_ {Preserve parsing state} #_PHA_ #_LDYIM_ #0 {Print message} _save1=* #_LDAAY_ ##_SaveMsg #_INY_ #_JSR_ ##_CHROUT #_BNE_ #@_save1 #_LDAIM_ #<\Buffer {Serial out buffer} #_LDYIM_ #>\Buffer #_STAZ_ #i #_LDAIM_ #0 {Bit counter} #_STAZ_ #j #_LDAIM_ #<\SaveChar {Redirect BRK} #_LDYIM_ #>\SaveChar #_STAZ_ #_vPCL #_STYZ_ #_vPCH #_PLA_ {Restore parsing state} #_PLP_ #_JMP_ ##_LIST {Continue as LIST command} _SaveMsg=* #13 `SENDING`TO`BABELFISH #13 #0 { Restore BRK redirection } _SaveEnd=* [ i, CharOut! {Emit last char (typically "R" for "READY.")} &_MainLoop _vLR= {Restore video terminal} %0 2++ {Read back v6502_PC value} ret {Return to MainLoop} ] {-----------------------------------------------------------------------+ | SaveChar | +-----------------------------------------------------------------------} *=$3100 _SaveChar=$30fe {vCPU adds 2 and wraps to $3000} [do { Alternative "MainLoop" for when we're in SAVE. This catches the LIST output and writes it to BabelFish. The stop condition is recognized by checking the first character on each line: unlike error messages and the ready prompt, program lines are listed starting with a space. Note: BASIC sends $0d $0a for newlines. } %3 i. {Grab original A from stack and put in buffer} >j, 10^ [if=0 {First char on line?} i, 32- if>0 {"ifgraph"?} push {Rescue v6502_PC} \SaveEnd call {Exit SAVE handler} ] j. {Remember char} 0 0 3 \serialRaw.] {Not a great hack: induce a break error} 0