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