10PutV = &22A 20GetV = &22C 30Oput = &80 40Oget = &82 50putptr = &84 60getptr = &86 70Top = &88 80Bot = &8A 90 REM Prototype ELBIT terminal emulator 100 OSWRCH = &FFEE 110 OSASCI = &FFE3 120 OSBYTE = &FFF4 130 OSWORD = &FFF1 140 TEMP = &0070 150 Sym = TEMP 160 Matrix = &3B00 170 TEMP1 = &0071 180 PROTECT = &0072 190 200 DEST = &0073 210 DEST1 = &0074 220 CX = &0075 230 CY = &0076 240 TX = &0077 250 TY = &0078 260 270page = &79 280page1 = &7A 290Ytab = &7B 300Ytab1 = &7C 310Cell = &7D 320Cell1 = &7E 330BaseY = &7F 340 COMLEN = 8 350 360 REM Len ("TERMINAL") 370 380 B% = &8000 390 REM Assemble to run at $8000 400 410 MODE 7 420 C% = &7600 430 REM Dump code being assembled at $7800 440 450 FOR Z = 4 TO 7 STEP 3 460 P%=B% 470 O%=C% 480[ OPT Z 490 500\[[[[[[[[[[[[[ Sideways rom declarations ]]]]]]]]]]]]] 510 520 JMP LANGJP 530 JMP SERVJP 540 EQUB &C2 550 EQUB &25 560 EQUB &00 570 EQUS "ELBIT Terminal Emulator" 580 EQUB &00 590 EQUS "2.11" 600.COPYR EQUB &00 610 EQUS "(C) 1982 Acorn" 620 EQUB &00 630 640\[[[[[[[[[[[[[ Initialise and enter... ]]]]]]]]]]]]] 650 660.LANGJP CLI \Language entry point 670 LDA #&E5 680 LDX #&1 690 LDY #&0 700 JSR OSBYTE \*FX 229,1 Disable escape action 710 LDA #&02 720 TAX 730 LDY #&00 740 JSR OSBYTE \*FX2,2 Enable 423 750 LDA #181 760 LDX #1 770 LDY #0 780 STY BaseY 790 JSR OSBYTE \ RS 8 bit 791 LDA #11 792 LDX #190 793 JSR OSBYTE \ AUTO REP DELAY 820 LDA #144 830 LDX #0 840 LDY #1 850 JSR OSBYTE \ *TV 0,1 855 LDA #22 856 JSR OSWRCH 860 LDA #3 870 JSR OSWRCH \ Mode 3 880 JSR VSTRING 890 EQUB 31 900 EQUB 44 \ Send to spare report line 910 EQUB 24 920 EQUS "Acorn ELBIT Terminal Emulator 2.11" 930 EQUB 30 940 EQUB &00 950 LDA #&00 960 STA PROTECT \ Initialise PROTECT OFF 970 STA CX 980 STA CY 990 LDX #7 1000 LDA #7 1010 JSR OSBYTE \ *FX 7,7 9600 Rx 1020 LDX #7 1030 LDA #8 1040 JSR OSBYTE \ *FX 8,7 9600 Tx 1050 LDA #20:LDX #6:LDY #0: JSR OSBYTE 1060 JSR INVER 1070 JSR initBF 1080\ repeat << 1090\ SelectInput (423) 1100\ A = Buffer 1110\ if Success then ToVDU (A) 1120\ SelectInput (Keyboard) 1130\ A = Buffer 1140\ if Success then << 1150\ SelectOutput (423) 1160\ To423 (A) 1170\ SelectOutput (VDU) 1180\ >> 1190\>> forever 1200 1210\<<<<<<<<<<<<<<< MAIN LOOP >>>>>>>>>>>>> 1220 1230\ repeat << 1240 1250.LOOP LDA #&91 1260 LDX #&01 1270 LDY #&00 1280 JSR OSBYTE \*FX145,1 Get char from 423 i/p buffer 1290 1300\ Select Input (423) assumed 1310\ A = Inkey (0) 1320 1330 BCS KEYBOARD \C=1 => Buffer empty 1340\ if Success then ... 1350 TYA 1360 AND #&7F 1370 JSR GTOVDU 1380\ ... ToVDU (A) 1390.KEYBOARD LDA #&91 1400 LDX #&00 1410 LDY #&00 1420 JSR OSBYTE \*FX 145,0 Get char from keyboard buffer 1430\ Select Input (Keyboard) assuned 1440\ A = Inkey (0) 1450 BCS LOOP \C=1 => Buffer empty 1460\ if Success then ... 1470 TYA 1480 PHA 1490 LDA #3 1500 LDX #3 1510 LDY #0 1520 JSR OSBYTE \*FX3,3 Select printer & 423 1530\ ... Select Output (423) 1540 PLA 1550 JSR GTO432 1560\ ... To423 (A) 1570 LDA #&03 1580 LDX #&00 1590 LDY #&00 1600 JSR OSBYTE \*FX3,0 Re-select VDU 1610\ ... Select Output (VDU) 1620 JMP LOOP 1630\ >> forever 1640.SERVJP CMP #&04 \Offer command line 1650\[[[[[[[[[[[[ Recognise *TERMINAL ]]]]]]]]]]]] 1660 BNE RET 1670 TYA \Save regs 1680 PHA 1690 TXA 1700 PHA 1710 LDX #COMLEN \Load counter 1720.CHKCOM LDA (&F2),Y \Pointer to command line 1730 CMP COMMAND-1,X 1740 BNE BADCOMM \Command not recognised 1750 INY 1760 DEX 1770 BNE CHKCOM 1780.DUMBGO PLA 1790 TAX \Get rom no. in X 1800 LDA #&8E 1810 JSR OSBYTE \Jump to language 1820.BADCOMM CMP #ASC"." \Check for abbreviation 1830 BEQ DUMBGO 1840 PLA 1850 TAX 1860 PLA 1870 TAY 1880 LDA #&04 \Pass command on 1890.RET RTS 1900.VSTRING PLA 1910 STA TEMP 1920 PLA 1930 STA TEMP+1 1940 LDY #&00 1950 BEQ VLOOP 1960.VGO JSR OSASCI 1970.VLOOP INC TEMP 1980 BNE VGON 1990 INC TEMP+1 2000.VGON LDA (TEMP),Y 2010 BPL VGO 2020 JMP (TEMP) 2030.COMMAND EQUS "LANIMRET" 2040.GTOVDU CMP #ASC(" ") \ Control char? 2050 BCC CONTROL 2060 CMP #&7F \ Non printing? 2070 BEQ VDDONE 2080 STA TEMP 2090 LDA CX 2100 STA DEST 2110 LDA CY 2120 STA DEST1 2130 JSR SETCELL 2140 LDA PROTECT 2150 BNE nocheck 2160\ Load A from PageMap (CX,CY) 2170 LDY #0 2180 LDA (Cell),Y 2190 BPL nocheck 2200 JMP RIGHT 2210.nocheck LDA TEMP 2220 ORA PROTECT 2230 PHA 2240 JSR OSWRCH 2250\ Store A at PageMap (CX,CY) 2260 LDY #0 2270 PLA 2280 STA (Cell),Y 2290 JMP ANYCHAR \ And increment pointers 2300.VDDONE RTS 2310.SETCELL LDA DEST1:JSR Wrap24 2320 ASLA:TAX 2330 LDA Xtab,X 2340 STA Cell 2350 LDA Xtab+1,X 2360 STA Cell1 2370 LDA Cell 2380 CLC 2390 ADC DEST 2400 BCC L2 2410 INC Cell1 2420.L2 STA Cell 2430 RTS 2440\[[[[[[[[[[[ TERMINAL HANDLER CODE .. ]]]]]]]]]]] 2450.CONTROL \ Handle all control chars 2460 PHA 2470 ASL A 2480 TAX 2490 LDA ACTIONS,X 2500 STA DEST 2510 LDA ACTIONS+1,X 2520 STA DEST+1 2530 PLA 2540 JMP (DEST) 2550.GTO432 TAX 2560 LDA CONVERT,X 2570 JSR OSWRCH 2580 RTS 2590.STARTPROTECT 2600 LDA #&80 \ True 2610 STA PROTECT 2620 RTS 2630.ENDPROTECT 2640 LDA #&00 \ False 2650 STA PROTECT 2660 RTS 2670.CLRSCR 2680 LDA #0 2690 STA CX 2700 STA CY 2710.CLREOS LDA CX 2720 STA TX 2730 LDA CY 2740 STA TY 2750 JSR coff 2760\ repeat << 2770\ CLEAN (TX, TY) 2780\ TX = 0; TY = TY+1 2790\ until TY = 24 2800.CLloop 2810 JSR CLEAN 2820 LDA #0 2830 STA TX 2840 INC TY 2850 LDA TY 2860 CMP #24 2870 BNE CLloop 2880 JSR con 2890 JMP REPLACE 2900.CLREOL 2910 JSR coff 2920 LDA CX 2930 STA TX 2940 LDA CY 2950 STA TY 2960JSR CLEAN 2970 JSR con 2980 RTS 2990.CLEAN \ Common entry point - Clears from TX, TY to RHS 3000\ repeat << 3010\ MoveTo (X,Y) 3020\ VDU 32 3030\ X = X + 1 3040\ >> until X = 80 3050 LDA #31 3060 JSR OSWRCH 3070 LDA TX 3080 JSR OSWRCH 3090 LDA TY 3100 JSR OSWRCH 3110.CNloop LDA TX 3120STA DEST 3130LDA TY 3140STA DEST+1 3150JSR SETCELL 3160LDA PROTECT 3170 BNE nocheck2 3180\ Load A from PageMap(TX,TY) 3190 LDY #0 3200 LDA (Cell),Y 3210 BPL nocheck2 3220 LDA #9 3230 JSR OSWRCH 3240 JMP out 3250.nocheck2 3260 LDA #32 3270 JSR OSWRCH 3280\ Store A in PageMap (TX,TY) 3290 LDY #0 3300 STA (Cell),Y 3310.out 3320 INC TX 3330 LDA TX 3340 CMP #80 3350 BNE CNloop 3360 \ from CX, CY inclusive 3370 JMP REPLACE \ and replace the cursor 3380.ADDRESSFIELD 3390 \ Move to X,Y 3400.againagain 3410 LDA #&91:LDX #1:LDY #0 3420 JSR OSBYTE 3430 BCS againagain:TYA:AND #&7F 3440 CMP #&C 3450 BCC OK: CMP #&10 :BCC REPLACE 3460 SBC #(&10-&0B-1) \ Carry set 3470 CMP #&1C-(&10-&0B-1) 3480 BCS REPLACE 3490.OK STA TY 3500.again LDA #&91:LDX #1:LDY #0 3510 JSR OSBYTE:BCS again:TYA:AND #&7F 3520 CMP #80:BCS REPLACE 3530 STA TX 3540 LDA TX:STA CX:LDA TY:STA CY 3550 \ Convert TX, TY to CX, CY 3560 \ and move there 3570.REPLACE 3580 LDA #31 \ Set cursor command 3590 JSR OSWRCH 3600 LDA CX 3610 JSR OSWRCH 3620 LDA CY 3630 JSR OSWRCH 3640 RTS 3650.BELL JSR OSWRCH 3660 RTS 3670.LEFT LDA CX 3680 CMP CY 3690 BNE CantBe 3700 CMP #0 3710 BNE CantBe 3720 LDA #79 3730 STA CX 3740 LDA #23 3750 STA CY 3760 JMP REPLACE 3770.CantBe 3780 LDA CX 3790 BEQ ScrollUp 3800 DEC CX 3810 LDA #8: JSR OSWRCH 3820 RTS 3830.ScrollUp LDA #79 3840 STA CX 3850 DEC CY 3860 JMP REPLACE \ or RTS 3870.DOWN JSR OSWRCH 3880 JMP ScrollDown 3890.HOMEUP LDA #0 3900 STA CX 3910 STA CY 3920 JMP REPLACE 3930.RETN LDA #0 3940 STA CX 3950 JMP REPLACE 3960.RIGHT LDA #9 \ Tab character on BBC machine 3970 JSR OSWRCH 3980.ANYCHAR INC CX: LDA CX 3990 CMP #80 4000 BNE RET2 \ Assumes cursor already moved. 4010 LDA #0 4020 STA CX 4030.ScrollDown 4040 LDA CY: CMP #23 4050 BEQ Bottom 4060 INC CY 4070 JMP REPLACE \ or RTS 4080.Bottom LDA #10 \ Force scroll 4090 JSR OSWRCH 4100 LDA #11 \ and return cursor 4110 JSR OSWRCH 4120 LDA #1 4130 JSR Wrap24 4140 STA BaseY 4150 JSR WipeLast 4160.RET2 RTS 4170.UP LDA CY: BEQ NoScroll: LDA #11 \ Cursor up 4180 JSR OSWRCH 4190 LDA CY 4200 BNE Updone 4210 LDA #23 4220 STA CY 4230 JMP REPLACE 4240.NoScroll LDA #23: STA CY 4250 JMP REPLACE 4260.Updone DEC CY \ Special handling for scroll/wrap on = 0 4270 RTS 4280.IGNORE RTS 4290.ACTIONS EQUW IGNORE \ 00 4300 EQUW IGNORE \ 01 4310 EQUW IGNORE \ 02 4320 EQUW IGNORE \ 03 4330 EQUW IGNORE \ 04 4340 EQUW IGNORE \ 05 4350 EQUW IGNORE \ 06 4360 EQUW BELL \ 07 4370 EQUW LEFT \ 08 4380 EQUW IGNORE \ 09 4390 EQUW DOWN \ 0A 4400 EQUW IGNORE \ 0B 4410 EQUW HOMEUP \ 0C 4420 EQUW RETN \ 0D 4430 EQUW STARTPROTECT \ 0E 4440 EQUW IGNORE \ 0F 4450 EQUW IGNORE \ 10 4460 EQUW IGNORE \ 11 4470 EQUW IGNORE \ 12 4480 EQUW IGNORE \ 13 4490 EQUW CLREOS \ 14 4500 EQUW RIGHT \ 15 4510 EQUW CLREOL \ 16 4520 EQUW ENDPROTECT \ 17 4530 EQUW CLRSCR \ 18 4540 EQUW IGNORE \ 19 4550 EQUW UP \ 1A 4560 EQUW ADDRESSFIELD \ 1B 4570 EQUW IGNORE \ 1C 4580 EQUW IGNORE \ 1D 4590 EQUW IGNORE \ 1E 4600 EQUW IGNORE \ 1F 4610.CONVERT 4620 EQUB &0 \ 0 4630 EQUB &1 \ 1 4640 EQUB &2 \ 2 4650 EQUB &3 \ 3 4660 EQUB &4 \ 4 4670 EQUB &5 \ 5 4680 EQUB &6 \ 6 4690 EQUB &7 \ 7 4700 EQUB &8 \ 8 4710 EQUB &9 \ 9 4720 EQUB &A \ A 4730 EQUB &B \ B 4740 EQUB &C \ C 4750 EQUB &D \ D 4760 EQUB &E \ E 4770 EQUB &F \ F 4780 EQUB &10 \ 10 4790 EQUB &11 \ 11 4800 EQUB &12 \ 12 4810 EQUB &13 \ 13 4820 EQUB &14 \ 14 4830 EQUB &15 \ 15 4840 EQUB &16 \ 16 4850 EQUB &17 \ 17 4860 EQUB &18 \ 18 4870 EQUB &19 \ 19 4880 EQUB &1A \ 1A 4890 EQUB &1B \ 1B 4900 EQUB &1C \ 1C 4910 EQUB &1D \ 1D 4920 EQUB &1E \ 1E 4930 EQUB &1F \ 1F 4940 EQUB &20 \ 20 4950 EQUB &21 \ 21 4960 EQUB &22 \ 22 4970 EQUB &23 \ 23 4980 EQUB &24 \ 24 4990 EQUB &25 \ 25 5000 EQUB &26 \ 26 5010 EQUB &27 \ 27 5020 EQUB &28 \ 28 5030 EQUB &29 \ 29 5040 EQUB &2A \ 2A 5050 EQUB &2B \ 2B 5060 EQUB &2C \ 2C 5070 EQUB &2D \ 2D 5080 EQUB &2E \ 2E 5090 EQUB &2F \ 2F 5100 EQUB &30 \ 30 5110 EQUB &31 \ 31 5120 EQUB &32 \ 32 5130 EQUB &33 \ 33 5140 EQUB &34 \ 34 5150 EQUB &35 \ 35 5160 EQUB &36 \ 36 5170 EQUB &37 \ 37 5180 EQUB &38 \ 38 5190 EQUB &39 \ 39 5200 EQUB &3A \ 3A 5210 EQUB &3B \ 3B 5220 EQUB &3C \ 3C 5230 EQUB &3D \ 3D 5240 EQUB &3E \ 3E 5250 EQUB &3F \ 3F 5260 EQUB &40 \ 40 5270 EQUB &41 \ 41 5280 EQUB &42 \ 42 5290 EQUB &43 \ 43 5300 EQUB &44 \ 44 5310 EQUB &45 \ 45 5320 EQUB &46 \ 46 5330 EQUB &47 \ 47 5340 EQUB &48 \ 48 5350 EQUB &49 \ 49 5360 EQUB &4A \ 4A 5370 EQUB &4B \ 4B 5380 EQUB &4C \ 4C 5390 EQUB &4D \ 4D 5400 EQUB &4E \ 4E 5410 EQUB &4F \ 4F 5420 EQUB &50 \ 50 5430 EQUB &51 \ 51 5440 EQUB &52 \ 52 5450 EQUB &53 \ 53 5460 EQUB &54 \ 54 5470 EQUB &55 \ 55 5480 EQUB &56 \ 56 5490 EQUB &57 \ 57 5500 EQUB &58 \ 58 5510 EQUB &59 \ 59 5520 EQUB &5A \ 5A 5530 EQUB &5B \ 5B 5540 EQUB &5C \ 5C 5550 EQUB &5D \ 5D 5560 EQUB &5E \ 5E 5570 EQUB &5F \ 5F 5580 EQUB &60 \ 60 5590 EQUB &61 \ 61 5600 EQUB &62 \ 62 5610 EQUB &63 \ 63 5620 EQUB &64 \ 64 5630 EQUB &65 \ 65 5640 EQUB &66 \ 66 5650 EQUB &67 \ 67 5660 EQUB &68 \ 68 5670 EQUB &69 \ 69 5680 EQUB &6A \ 6A 5690 EQUB &6B \ 6B 5700 EQUB &6C \ 6C 5710 EQUB &6D \ 6D 5720 EQUB &6E \ 6E 5730 EQUB &6F \ 6F 5740 EQUB &70 \ 70 5750 EQUB &71 \ 71 5760 EQUB &72 \ 72 5770 EQUB &73 \ 73 5780 EQUB &74 \ 74 5790 EQUB &75 \ 75 5800 EQUB &76 \ 76 5810 EQUB &77 \ 77 5820 EQUB &78 \ 78 5830 EQUB &79 \ 79 5840 EQUB &7A \ 7A 5850 EQUB &7B \ 7B 5860 EQUB &7C \ 7C 5870 EQUB &7D \ 7D 5880 EQUB &7E \ 7E 5890 EQUB &7F \ 7F Delete 5900\ <<<<<<<<<<< Normal Fn keys >>>>>>>>>>>> 5910 EQUB &80 \ 80 5920 EQUB &1E \ 81 F1 5930 EQUB &14 \ 82 F2 5940 EQUB &16 \ 83 F3 5950 EQUB &0C \ 84 F4 5960 EQUB &0F \ 85 F5 5970 EQUB &0E \ 86 F6 5980 EQUB &00 \ 87 F7 5990 EQUB &04 \ 88 F8 6000 EQUB &06 \ 89 F9 6010 EQUB &8A \ 8A 6020 EQUB &8B \ 8B 6030 EQUB &08 \ 8C Left 6040 EQUB &15 \ 8D Right 6050 EQUB &0A \ 8E Down 6060 EQUB &1A \ 8F Up 6070\ <<<<<<<<<<<<< Shift Fn keys >>>>>>>>>>>>>>> 6080 EQUB &90 \ 90 6090 EQUB &91 \ 91 6100 EQUB &92 \ 92 6110 EQUB &18 \ 93 Shift F3 6120 EQUB &94 \ 94 6130 EQUB &95 \ 95 6140 EQUB &96 \ 96 6150 EQUB &19 \ 97 Shift F7 6160 EQUB &98 \ 98 6170 EQUB &99 \ 99 6180 EQUB &9A \ 9A 6190 EQUB &9B \ 9B 6200 EQUB &12 \ 9C Shift left 6210 EQUB &01 \ 9D Shift right 6220 EQUB &1F \ 9E Shift down 6230 EQUB &1D \ 9F Shift up 6240\ <<<<<<<<<<< Control Fn keys >>>>>>>> 6250 EQUB &A0 \ A0 6260 EQUB &02 \ A1 Cont F1 6270 EQUB &10 \ A2 Cont F2 6280 EQUB &A3 \ A3 6290 EQUB &11 \ A4 Cont F4 6300 EQUB &A5 \ A5 6310 EQUB &A6 \ A6 6320 EQUB &1C \ A7 Cont F7 6330 EQUB &A8 \ A8 6340 EQUB &13 \ A9 Cont F9 6350 EQUB &AA \ AA 6360 EQUB &AB \ AB 6370 EQUB &AC \ AC 6380 EQUB &AD \ AD 6390 EQUB &AE \ AE 6400 EQUB &AF \ AF 6410\ <<<<<<<<<<<<< Control+Shift Fn keys >>>>>>>>>> 6420 EQUB &B0 \ B0 6430 EQUB &B1 \ B1 6440 EQUB &B2 \ B2 6450 EQUB &B3 \ B3 6460 EQUB &B4 \ B4 6470 EQUB &B5 \ B5 6480 EQUB &B6 \ B6 6490 EQUB &B7 \ B7 6500 EQUB &B8 \ B8 6510 EQUB &B9 \ B9 6520 EQUB &BA \ BA 6530 EQUB &BB \ BB 6540 EQUB &BC \ BC 6550 EQUB &BD \ BD 6560 EQUB &BE \ BE 6570 EQUB &BF \ BF 6580 EQUB &C0 \ C0 6590 EQUB &C1 \ C1 6600 EQUB &C2 \ C2 6610 EQUB &C3 \ C3 6620 EQUB &C4 \ C4 6630 EQUB &C5 \ C5 6640 EQUB &C6 \ C6 6650 EQUB &C7 \ C7 6660 EQUB &C8 \ C8 6670 EQUB &C9 \ C9 6680 EQUB &CA \ CA 6690 EQUB &CB \ CB 6700 EQUB &CC \ CC 6710 EQUB &CD \ CD 6720 EQUB &CE \ CE 6730 EQUB &CF \ CF 6740 EQUB &D0 \ D0 6750 EQUB &D1 \ D1 6760 EQUB &D2 \ D2 6770 EQUB &D3 \ D3 6780 EQUB &D4 \ D4 6790 EQUB &D5 \ D5 6800 EQUB &D6 \ D6 6810 EQUB &D7 \ D7 6820 EQUB &D8 \ D8 6830 EQUB &D9 \ D9 6840 EQUB &DA \ DA 6850 EQUB &DB \ DB 6860 EQUB &DC \ DC 6870 EQUB &DD \ DD 6880 EQUB &DE \ DE 6890 EQUB &DF \ DF 6900 EQUB &E0 \ E0 6910 EQUB &E1 \ E1 6920 EQUB &E2 \ E2 6930 EQUB &E3 \ E3 6940 EQUB &E4 \ E4 6950 EQUB &E5 \ E5 6960 EQUB &E6 \ E6 6970 EQUB &E7 \ E7 6980 EQUB &E8 \ E8 6990 EQUB &E9 \ E9 7000 EQUB &EA \ EA 7010 EQUB &EB \ EB 7020 EQUB &EC \ EC 7030 EQUB &ED \ ED 7040 EQUB &EE \ EE 7050 EQUB &EF \ EF 7060 EQUB &F0 \ F0 7070 EQUB &F1 \ F1 7080 EQUB &F2 \ F2 7090 EQUB &F3 \ F3 7100 EQUB &F4 \ F4 7110 EQUB &F5 \ F5 7120 EQUB &F6 \ F6 7130 EQUB &F7 \ F7 7140 EQUB &F8 \ F8 7150 EQUB &F9 \ F9 7160 EQUB &FA \ FA 7170 EQUB &FB \ FB 7180 EQUB &FC \ FC 7190 EQUB &FD \ FD 7200 EQUB &FE \ FE 7210 EQUB &FF \ FF 7220.Xtab 7230 EQUW &3880 7240 EQUW &38D0 7250 EQUW &3920 7260 EQUW &3970 7270 EQUW &39C0 7280 EQUW &3A10 7290 EQUW &3A60 7300 EQUW &3AB0 7310 EQUW &3B00 7320 EQUW &3B50 7330 EQUW &3BA0 7340 EQUW &3BF0 7350 EQUW &3C40 7360 EQUW &3C90 7370 EQUW &3CE0 7380 EQUW &3D30 7390 EQUW &3D80 7400 EQUW &3DD0 7410 EQUW &3E20 7420 EQUW &3E70 7430 EQUW &3EC0 7440 EQUW &3F10 7450 EQUW &3F60 7460 EQUW &3FB0 7470.INVER:LDA #32:STA Sym:.LP3 LDA #23:JSR OSWRCH:LDA Sym 7480 STA &3B00:ORA #&80:JSR OSWRCH 7490 LDX #&00 7500 LDY #&3B 7510 LDA #10 7520 JSR OSWORD 7530 LDX #0 7540.LP4 INX 7550 LDA &3B00,X 7560\ EOR #&FF 7570 JSR OSWRCH 7580 TXA 7590 CMP #7 7600 BNE LP4 7610 LDA #&FF 7620 JSR OSWRCH 7630 INC Sym 7640 BPL LP3 7650 LDX #&80:STX Cell 7660 LDY #&38:STY Cell+1:LDY #0 7670.LP5 LDA #32 7680 STA (Cell),Y 7690 INC Cell 7700 BNE L6 7710 INC Cell+1 7720.L6 LDA Cell 7730 CMP #&FF 7740 BNE LP5 7750 LDA Cell+1:CMP #&3F 7760 BNE LP5 7770 RTS 7780.Wrap24 CLC 7790 ADC BaseY 7800 CMP #24 7810 BCC L99 7820 SEC 7830 SBC #24 7840.L99 RTS 7850.WipeLast LDA #0 7860 STA DEST 7870 LDA #23 7880 STA DEST1 7890 JSR SETCELL 7900 LDY #79 7910 LDA #32 7920.L69 7930 STA (Cell),Y 7940 DEY 7950 BPL L69 7960 RTS 7970.initBF 7980 LDA #00 7990 STA Top 8000 LDA #&38 8010 STA Top+1 8020 LDA PutV 8030 STA Oput 8040 LDA PutV+1 8050 STA Oput+1 8060 LDA GetV 8070 STA Oget 8080 LDA GetV+1 8090 STA Oget+1 8100 LDA #Myget AND &FF 8110 STA GetV 8120 LDA #Myput AND &FF 8130 STA PutV 8140 LDA #Myget DIV 256 8150 STA GetV+1 8160 LDA #Myput DIV 256 8170 STA PutV+1 8180LDA #&83 8190LDY #0 8200LDX #0 8210JSR OSBYTE 8220 CLC 8230 TYA 8240 ADC #7 8250 STA Bot+1 8260 STX Bot 8270LDA Bot 8280STA putptr 8290STA getptr 8300LDA Bot+1 8310STA putptr+1 8320STA getptr+1 8330 RTS 8340.Hisput JMP (Oput) 8350.Myput CPX #1 8360 BNE Hisput 8370 TYA 8380 LDY #0 8390 PHP 8400 SEI 8410 STA (putptr),Y 8420 INC putptr 8430 BNE nocar1 8440 INC putptr+1 8450.nocar1 8460 LDA putptr 8470 CMP Top 8480 BNE done2 8490 LDA putptr+1 8500 CMP Top+1 8510 BNE done2 8520 LDA Bot 8530 STA putptr 8540 LDA Bot+1 8550 STA putptr+1 8560.done2 8570 LDA putptr 8580 CMP getptr 8590 BNE done1 8600 LDA putptr+1 8610 CMP getptr+1 8620 BNE done1 8630 LDA putptr 8640 BNE zz1 8650 DEC putptr+1 8660.zz1 DEC putptr 8670 PLP 8680 SEC \buffer full 8690 RTS 8700.done1 8710 PLP 8720 CLC \buffer wasn't full 8730 RTS 8740.Hisget JMP (Oget) 8750.Myget CPX #1 8760 BNE Hisget 8770 PHP 8780 SEI 8790 LDA getptr 8800 CMP putptr 8810 BNE L27 8820 LDA getptr+1 8830 CMP putptr+1 8840 BNE L27 8850 PLP \buffer empty 8860 SEC 8870 RTS 8880.L27 8890 LDY #0 8900 LDA (getptr),Y:TAY 8910 INC getptr 8920 BNE L30 8930 INC getptr+1 8940.L30 8950 LDA getptr 8960 CMP Top 8970 BNE done10 8980 LDA getptr+1 8990 CMP Top+1 9000 BNE done10 9010 LDA Bot 9020 STA getptr 9030 LDA Bot+1 9040 STA getptr+1 9050.done10 9060 PLP 9070 CLC \ buffer full 9080 RTS 9090.coff LDA #23:JSR OSWRCH 9100LDA #1:JSR OSWRCH 9110LDA #0:JSR OSWRCH 9120.cmeet JSR OSWRCH:JSR OSWRCH:JSR OSWRCH 9130JSR OSWRCH:JSR OSWRCH:JSR OSWRCH 9140JSR OSWRCH 9150RTS 9160.con LDA #23:JSR OSWRCH 9170LDA #1:JSR OSWRCH 9180JSR OSWRCH:LDA #0 9190JMP cmeet 9200] 9210NEXT 9220END