Home » Archimedes archive » Zipped Apps » 6502em » !6502Em/src/OpcodesNew
!6502Em/src/OpcodesNew
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » Archimedes archive » Zipped Apps » 6502em |
Filename: | !6502Em/src/OpcodesNew |
Read OK: | ✔ |
File size: | 7B0C bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM > Opcodes 20 30DEFFNopcodes 40 50FOR bcd_loop%=0 TO 1 60opcode%=0 70IF bcd_loop%=0 THEN [OPTp:.opcode(&0):] ELSE [OPTp:.bcd(0):] 80 90[OPTp 100 110;.opcode(&0) ; BRK 120ADD zpc,zpc,#2 << 16 130MOV R0,zpc,LSR#24 140FNpush(0) 150MOV R0,zpc,LSR#16 160FNpush(0) 170ORR F,F,#%10000 ; set BRK flag 180FNpush(F) 190ORR F,F,#%00100 ; set I flag 200BIC F,F,#%10000 ; clear BRK flag..... seems to work! 210MOV R0,#&10000 : SUB R0,R0,#2 220LDRB zpc,[mem,R0] 230ADD R0,R0,#1 240LDRB R0,[mem,R0] 250ADD zpc,zpc,R0,LSL#8 260MOV zpc,zpc,LSL#16 270FNfetch(0,7) 280; 290.opcode(&1) ; ORA (n,X) 300FNgetpre(0,1) 310FNora(0,2,6) 320; 330.opcode(&2) ; ? 340;FNprint(zpc) 350;MOV R0,#66 360;B raw_exit 370FNundoc(&2) 380FNfetch(1,2) 390; 400.opcode(&3) ; ? 410;ADDS R0,zpc,#(&10000-&FFF4) << 16 420;CMPEQ A,#&81 << 24 430ADD R0,zpc,#1 << 16 440;LDRB R0,[mem,R0,LSR#16] 441MOV R2,#pagetable 442LDRB R2,[R2,R0,LSR#28] 443MOV R2,R2,LSL#12 444LDRB R0,[R2,R0,LSR#16] 450CMP R0,#3 460BEQ osbput 470CMP R0,#4 480BEQ osbget 490MOV R0,#3 500B raw_exit 510FNfetch(1,2) 520; 530.opcode(&4) ; TSB n 540FNgetzero(0,1) 550FNtsb(0) 560STRB R0,[mem,R1] ; zero page STRB 570FNfetch(2,5) 580; 590.opcode(&5) ; ORA n 600FNgetzero(0,1) 610FNora(0,2,3) 620; 630.opcode(&6) ; ASL n 640FNgetzero(0,1) 650FNasl(0) 660STRB R0,[mem,R1] ; zero page STRB 670FNfetch(2,5) 680; 690.opcode(&7) ; (SLO n - ASL n, ORA n) 700CMP zpc,#&8000 << 16 710;BHS opcode7 720MOVHS R0,#7 730BHS raw_exit 740FNgetzero(0,1) 750FNasl(0) 760ORRS A,A,R0,LSL#24 ; ORA zp 770STRB R0,[mem,R1] 780FNfetch(2,0) 790; 800.opcode(&8) ; PHP 810FNpush(F) 820FNfetch(1,3) 830; 840.opcode(&9) ; ORA #N 850FNgetbyte1(0) 860FNora(0,2,2) 870; 880.opcode(&A) ; ASL A 890MOVS A,A,LSL#1 900FNsetupNZC 910FNfetch(1,2) 920; 930.opcode(&B) ; ANC (undocumented - Repton 2) 940 ; AND #N, ASL A 950FNgetbyte1(0) 960AND R0,A,R0,LSL#24 970MOVS A,A,LSL#1 980FNsetupNZC 990FNfetch(2,2) 1000; 1010.opcode(&C) ; TSB nn 1020FNgetabs(0,1) 1030FNtsb(0) 1040FNstrb(0,1) 1050FNfetch(3,6) 1060; 1070.opcode(&D) ; ORA nn 1080FNgetabs(0,1) 1090FNora(0,3,4) 1100; 1110.opcode(&E) ; ASL nn 1120FNgetabs(0,1) 1130FNasl(0) 1140FNstrb(0,1) 1150FNfetch(3,6) 1160; 1170.opcode(&F) ; ? 1180FNundoc(&F) 1190FNfetch(1,2) 1200; 1210.opcode(&10) ; BPL r 1220TST F,#%10000000 1230BNE branch_fetch 1240FNbranch 1250; 1260.opcode(&11) ; ORA (n),Y 1270FNgetpost(0,1) 1280FNora(0,2,5) 1290; 1300.opcode(&12) ; ORA (n) 1310FNgetzeroindir(0,1) 1320FNora(0,2,5) 1330; 1340.opcode(&13) ; OSBYTE 1350FNundoc(&13) 1360FNfetch(1,2) 1370; 1380; ;FNprint(A) 1390; ;SWI &100+ASC"O" 1400; CMP A,#19 << 24 1410; BEQ opcode(&60) 1420; CMP A,#&81 << 24 1430; BEQ osbyte81 1440; CMP A,#&7A << 24 1450; BEQ generic_osbyte 1460; CMP A,#&79 << 24 1470; BEQ generic_osbyte 1480; CMP A,#&80 << 24 1490; BEQ osbyte80 1500; MOV R0,#&200 1510; ADD R0,R0,#&A 1520; LDR zpc,[mem,R0] 1530; MOV zpc,zpc,LSL#16 1540; FNfetch(0,0) 1550; .osbyte81 1560; ;MOVS R0,X,LSR#24 1570; ;BEQ skip55 1580; ;FNprint2(0) 1590; ;SWI "OS_ReadC" 1600; ;.skip55 1610; CMP Y,#&80 << 24 1620; BHS os2 1630; CMP X,#&20 << 24 1640; SWIHI "6502_UpdateScreen" 1650; .os2 1660; MOV R0,A,LSR#24 1670; MOV R1,X,LSR#24 1680; MOV R2,Y,LSR#24 1690; SWI "OS_Byte" 1700; CMP Y,#&FF << 24 1710; BNE os3 1720; BIC F,F,#%1 1730; CMP R2,#&FF 1740; ORREQ F,F,#1 1750; .os3 1760; CMP Y,#&80 << 16 1770; BHS os4 1780; CMP R2,#0 ; key detected 1790; CMPEQ R1,#ASC"'" 1800; MOVEQ R1,#ASC": 1810; CMP R2,#&FF 1820; MOVEQ R1,#0 1830; CMP R1,#&1B 1840; MOVEQ R2,R1 1850; ORREQ F,F,#%1 1860; .os4 1870; MOV A,R0,LSL#24 1880; MOV X,R1,LSL#24 1890; MOV Y,R2,LSL#24 1900; MOVEQ R0,#&FF 1910; LDREQB R1,[mem,R0] 1920; ORR R1,R1,#&80 1930; STREQB R1,[mem,R0] 1940; B opcode(&60) 1950; .generic_osbyte 1960; MOV R0,A,LSR#24 1970; MOV R1,X,LSR#24 1980; MOV R2,Y,LSR#24 1990; SWI "OS_Byte" 2000; MOV A,R0,LSL#24 2010; MOV X,R1,LSL#24 2020; MOV Y,R2,LSL#24 2030; B opcode(&60) 2040; .osbyte80 2050; MOV X,#0 2060; B opcode(&60) 2070 2080; 2090.opcode(&14) ; TRB n 2100FNgetzero(0,1) 2110FNtrb(0) 2120STRB R0,[mem,R1] ; zero page STRB 2130FNfetch(2,5) 2140; 2150.opcode(&15) ; ORA n,X 2160FNgetzeroindex(0,1) 2170FNora(0,2,4) 2180; 2190.opcode(&16) ; ASL n,X 2200FNgetzeroindex(0,1) 2210FNasl(0) 2220STRB R0,[mem,R1,LSR#24] ; zero page STRB 2230FNfetch(2,6) 2240; 2250.opcode(&17) ; ? 2260FNundoc(&17) 2270FNfetch(1,2) 2280; 2290.opcode(&18) ; CLC 2300BIC F,F,#%1 2310FNfetch(1,2) 2320; 2330.opcode(&19) ; ORA nn,Y 2340FNgetabsindex(0,1,Y) 2350FNora(0,3,4) 2360; 2370.opcode(&1A) ; INA 2380FNinc(A) 2390FNfetch(1,2) 2400; 2410.opcode(&1B) ; ? 2420FNundoc(&1B) 2430FNfetch(1,2) 2440; 2450.opcode(&1C) ; TRB nn 2460FNgetabs(0,1) 2470FNtrb(0) 2480FNstrb(0,1) 2490FNfetch(3,6) 2500; 2510.opcode(&1D) ; ORA nn,X 2520FNgetabsindex(0,1,X) 2530FNora(0,3,4) 2540; 2550.opcode(&1E) ; ASL nn,X 2560FNgetabsindex(0,1,X) 2570FNasl(0) 2580FNstrb16(0,1) 2590FNfetch(3,7) 2600; 2610.opcode(&1F) ; ? 2620FNundoc(&1F) 2630FNfetch(1,2) 2640; 2650.opcode(&20) ; JSR nn 2660FNgetabs(0,1) 2670ADD zpc,zpc,#2 << 16 2680MOV R0,zpc,LSR#24 2690FNpush(0) 2700MOV R0,zpc,LSR#16 2710FNpush(0) 2720MOV zpc,R1,LSL#16 2730FNfetch(0,6) 2740; 2750.opcode(&21) ; AND (n,X) 2760FNgetpre(0,1) 2770FNand(0,2,6) 2780; 2790.opcode(&22) ; ? 2800FNundoc(&22) 2810FNfetch(1,2) 2820; 2830.opcode(&23) ; ? 2840;MOV R0,#255 2850;STRB R0,[mem,#lastmode] 2860BL updatescreen 2870;BL force_update_pal 2880;SWI "6502_UpdateScreen" 2890MOV R0,#229 : MOV R1,#0 : SWI "OS_Byte" 2900SWI "OS_ReadC" 2910MOV A,R0,LSL#24 2920CMP R0,#&1B : ORREQ F,F,#%1 2930LDREQB R0,[mem,#&FF] 2940ORREQ R0,R0,#&80 2950STREQB R0,[mem,#&FF] 2960MOV R0,#229 : MOV R1,#1 : SWI "OS_Byte" 2970B opcode(&60) 2980FNfetch(1,2) 2990; 3000.opcode(&24) ; BIT n 3010FNgetzero(0,1) 3020FNbit(0,2,3) 3030; 3040.opcode(&25) ; AND n 3050FNgetzero(0,1) 3060FNand(0,2,3) 3070; 3080.opcode(&26) ; ROL n 3090FNgetzero(0,1) 3100FNrol(0) 3110STRB R0,[mem,R1] ; zero page STRB 3120FNfetch(2,5) 3130; 3140.opcode(&27) ; ? 3150FNundoc(&27) 3160FNfetch(1,2) 3170; 3180.opcode(&28) ; PLP 3190FNpull(F) 3200FNfetch(1,4) 3210; 3220.opcode(&29) ; AND #N 3230FNgetbyte1(0) 3240FNand(0,2,2) 3250; 3260.opcode(&2A) ; ROL A 3270MOV R0,A,LSR#24 3280FNrol(0) 3290MOV A,R0,LSL#24 3300FNfetch(1,2) 3310; 3320.opcode(&2B) ; ? 3330FNundoc(&2B) 3340FNfetch(1,2) 3350; 3360.opcode(&2C) ; BIT nn 3370FNgetabs(0,1) 3380FNbit(0,3,4) 3390; 3400.opcode(&2D) ; AND nn 3410FNgetabs(0,1) 3420FNand(0,3,4) 3430; 3440.opcode(&2E) ; ROL nn 3450FNgetabs(0,1) 3460FNrol(0) 3470FNstrb(0,1) 3480FNfetch(3,6) 3490; 3500.opcode(&2F) ; ? 3510FNundoc(&2F) 3520FNfetch(1,2) 3530; 3540.opcode(&30) ; BMI r 3550TST F,#%10000000 3560BEQ branch_fetch 3570FNbranch 3580; 3590.opcode(&31) ; AND (n),Y 3600FNgetpost(0,1) 3610FNand(0,2,5) 3620; 3630.opcode(&32) ; AND (n) 3640FNgetzeroindir(0,1) 3650FNand(0,2,5) 3660; 3670.opcode(&33) ; ? 3680FNundoc(&33) 3690FNfetch(1,2) 3700; 3710.opcode(&34) ; BIT n,X 3720FNgetzeroindex(0,1) 3730FNbit(0,2,4) 3740; 3750.opcode(&35) ; AND n,X 3760FNgetzeroindex(0,1) 3770FNand(0,2,4) 3780; 3790.opcode(&36) ; ROL n,X 3800FNgetzeroindex(0,1) 3810FNrol(0) 3820STRB R0,[mem,R1,LSR#24] 3830FNfetch(2,6) 3840; 3850.opcode(&37) ; ? 3860FNundoc(&37) 3870FNfetch(1,2) 3880; 3890.opcode(&38) ; SEC 3900ORR F,F,#%1 3910FNfetch(1,2) 3920; 3930.opcode(&39) ; AND nn,Y 3940FNgetabsindex(0,1,Y) 3950FNand(0,3,4) 3960; 3970.opcode(&3A) ; DEA 3980FNdec(A) 3990FNfetch(1,2) 4000; 4010.opcode(&3B) ; ? 4020FNundoc(&3B) 4030FNfetch(1,2) 4040; 4050.opcode(&3C) ; BIT nn,X 4060FNgetabsindex(0,1,X) 4070FNbit(0,3,4) 4080; 4090.opcode(&3D) ; AND nn,X 4100FNgetabsindex(0,1,X) 4110FNand(0,3,4) 4120; 4130.opcode(&3E) ; ROL nn,X 4140FNgetabsindex(0,1,X) 4150FNrol(0) 4160FNstrb16(0,1) 4170FNfetch(3,7) 4180; 4190.opcode(&3F) ; ? 4200FNundoc(&3F) 4210FNfetch(1,2) 4220; 4230.opcode(&40) ; RTI 4240FNpull(F) 4250FNpull(1) 4260FNpull(zpc) 4270ADD zpc,zpc,R1,LSR#8 4280BL interrupt 4290 4300FNfetch(0,6) ; yes, that should be 0! 4310; 4320.opcode(&41) ; EOR (n,X) 4330FNgetpre(0,1) 4340FNeor(0,2,6) 4350; 4360.opcode(&42) ; ? 4370FNundoc(&42) 4380FNfetch(1,2) 4390; 4400.opcode(&43) ; ? 4410FNundoc(&43) 4420FNfetch(1,2) 4430; 4440.opcode(&44) ; ? 4450FNundoc(&44) 4460FNfetch(1,2) 4470; 4480.opcode(&45) ; EOR n 4490FNgetzero(0,1) 4500FNeor(0,2,3) 4510; 4520.opcode(&46) ; LSR n 4530FNgetzero(0,1) 4540FNlsr(0) 4550STRB R0,[mem,R1] 4560FNfetch(2,5) 4570; 4580.opcode(&47) ; ? 4590FNundoc(&47) 4600FNfetch(1,2) 4610; 4620.opcode(&48) ; PHA 4630FNpush(A) 4640FNfetch(1,3) 4650; 4660.opcode(&49) ; EOR #N 4670FNgetbyte1(0) 4680FNeor(0,2,2) 4690; 4700.opcode(&4A) ; LSR A 4710MOVS A,A,LSR#25 4720MOV A,A,LSL#24 4730FNsetupNZC 4740FNfetch(1,2) 4750; 4760.opcode(&4B) ; (ASR #N - AND #N, LSR A) 4770FNgetbyte1(0) ; 4780ANDS A,A,R0,LSL#24 ; 4790;FNsetupNZ ; FNand 4800 4810MOVS A,A,LSR#25 ; 4820FNsetupC ; 4830MOVS A,A,LSL#24 ; 4840FNsetupNZ ; LSR A 4850FNfetch(2,0) 4860 4870;SWI &100+ASC"4" 4880;SWI &100+ASC"B" 4890;FNfetch(1,2) 4900; 4910.opcode(&4C) ; JMP nn 4920FNgetabs(0,1) 4930MOV zpc,R1,LSL#16 4940FNfetch(0,3) 4950; 4960.opcode(&4D) ; EOR nn 4970FNgetabs(0,1) 4980FNeor(0,3,4) 4990; 5000.opcode(&4E) ; LSR nn 5010FNgetabs(0,1) 5020FNlsr(0) 5030FNstrb(0,1) 5040FNfetch(3,6) 5050; 5060.opcode(&4F) ; ? 5070FNundoc(&4F) 5080FNfetch(1,2) 5090; 5100.opcode(&50) ; BVC r 5110TST F,#%1000000 5120BNE branch_fetch 5130FNbranch 5140; 5150.opcode(&51) ; EOR (n),Y 5160FNgetpost(0,1) 5170FNeor(0,2,5) 5180; 5190.opcode(&52) ; EOR (n) 5200FNgetzeroindir(0,1) 5210FNeor(0,2,5) 5220; 5230.opcode(&53) ; ? 5240FNundoc(&53) 5250FNfetch(1,2) 5260; 5270.opcode(&54) ; ? 5280FNundoc(&54) 5290FNfetch(1,2) 5300; 5310.opcode(&55) ; EOR n,X 5320FNgetzeroindex(0,1) 5330FNeor(0,2,4) 5340; 5350.opcode(&56) ; LSR n,X 5360FNgetzeroindex(0,1) 5370FNlsr(0) 5380STRB R0,[mem,R1,LSR#24] ; zero page STRB 5390FNfetch(2,6) 5400; 5410.opcode(&57) ; ? 5420FNundoc(&57) 5430FNfetch(1,2) 5440; 5450.opcode(&58) ; CLI 5460;B CLI 5470BIC F,F,#%100 5480ADD zpc,zpc,#1 << 16 5490;LDRB R0,keychk 5500;CMP R0,#0 5510;BLEQ keyboard 5520BL keyboard 5530BL interrupt 5540FNfetch(0,2) 5550; 5560.opcode(&59) ; EOR nn,Y 5570FNgetabsindex(0,1,Y) 5580FNeor(0,3,4) 5590; 5600.opcode(&5A) ; PHY 5610FNpush(Y) 5620FNfetch(1,3) 5630; 5640.opcode(&5B) ; ? 5650FNundoc(&5B) 5660FNfetch(1,2) 5670; 5680.opcode(&5C) ; ? 5690FNundoc(&5C) 5700FNfetch(1,2) 5710; 5720.opcode(&5D) ; EOR nn,X 5730FNgetabsindex(0,1,X) 5740FNeor(0,3,4) 5750; 5760.opcode(&5E) ; LSR nn,X 5770FNgetabsindex(0,1,X) 5780FNlsr(0) 5790FNstrb16(0,1) 5800FNfetch(3,7) 5810; 5820.opcode(&5F) ; ? 5830FNundoc(&5F) 5840FNfetch(1,2) 5850; 5860.opcode(&60) ; RTS 5870FNpull(1) 5880FNpull(zpc) 5890ADD zpc,zpc,R1,LSR#8 5900FNfetch(1,6) ; yes, that should be 1! 5910; 5920.opcode(&61) ; ADC (n,X) 5930FNgetpre(0,1) 5940FNadc(0,2,6) 5950; 5960.opcode(&62) ; ? 5970FNundoc(&62) 5980FNfetch(1,2) 5990; 6000.opcode(&63) ; ? 6010FNundoc(&63) 6020FNfetch(1,2) 6030; 6040.opcode(&64) ; STZ n 6050FNgetbyte1(0) 6060MOV R1,#0 6070STRB R1,[mem,R0] ; zero page STRB 6080FNfetch(2,3) 6090; 6100.opcode(&65) ; ADC n 6110FNgetzero(0,1) 6120FNadc(0,2,3) 6130; 6140.opcode(&66) ; ROR n 6150FNgetzero(0,1) 6160FNror(0) 6170STRB R0,[mem,R1] ; zero page STRB 6180FNfetch(2,5) 6190; 6200.opcode(&67) ; ? 6210FNundoc(&67) 6220FNfetch(1,2) 6230; 6240.opcode(&68) ; PLA 6250FNpull(A) 6260FNfetch(1,4) 6270; 6280.opcode(&69) ; ADC #N 6290FNgetbyte1(0) 6300FNadc(0,2,2) 6310; 6320.opcode(&6A) ; ROR A 6330MOV R0,A,LSR#24 6340FNror(0) 6350MOV A,R0,LSL#24 6360FNfetch(1,2) 6370; 6380.opcode(&6B) ; ? 6390FNundoc(&6B) 6400FNfetch(1,2) 6410; 6420.opcode(&6C) ; JMP (nn) 6430FNgetabs(0,1) 6440ADD R1,R1,#1 6450] 6460 6470REM JMP (&xxFF) bug 6480IF NOTmaster OR electron% THEN 6490[OPTp 6500TST R1,#&FF 6510SUBEQ R1,R1,#&100 6520MOVEQ R1,R1,LSL#16 6530MOVEQ R1,R1,LSR#16 6540] 6550ENDIF 6560 6570[OPTp 6580;LDRB R1,[mem,R1] 6590MOV R2,#pagetable 6600LDRB R2,[R2,R1,LSR#12] 6610LDRB R1,[R1,R2,LSL#12] 6620 6630ADD R0,R0,R1,LSL#8 6640MOV zpc,R0,LSL#16 6650FNfetch(0,5) 6660; 6670.opcode(&6D) ; ADC nn 6680FNgetabs(0,1) 6690FNadc(0,3,4) 6700; 6710.opcode(&6E) ; ROR nn 6720FNgetabs(0,1) 6730FNror(0) 6740FNstrb(0,1) 6750FNfetch(3,6) 6760; 6770.opcode(&6F) ; ? 6780FNundoc(&6F) 6790FNfetch(1,2) 6800; 6810.opcode(&70) ; BVS r 6820TST F,#%1000000 6830BEQ branch_fetch 6840FNbranch 6850; 6860.opcode(&71) ; ADC (n),Y 6870FNgetpost(0,1) 6880FNadc(0,2,5) 6890; 6900.opcode(&72) ; ADC (n) 6910FNgetzeroindir(0,1) 6920FNadc(0,2,5) 6930; 6940.opcode(&73) ; ? 6950FNundoc(&73) 6960FNfetch(1,2) 6970; 6980.opcode(&74) ; STZ n,X 6990FNzeroindex(0,1) 7000MOV R0,#0 7010STRB R0,[mem,R1,LSR#24] 7020FNfetch(2,4) 7030; 7040.opcode(&75) ; ADC n,X 7050FNgetzeroindex(0,1) 7060FNadc(0,2,4) 7070; 7080.opcode(&76) ; ROR n,X 7090FNgetzeroindex(0,1) 7100FNror(0) 7110STRB R0,[mem,R1,LSR#24] ; zero page STRB 7120FNfetch(2,6) 7130; 7140.opcode(&77) ; ? 7150FNundoc(&77) 7160FNfetch(1,2) 7170; 7180.opcode(&78) ; SEI 7190ORR F,F,#%100 7200FNfetch(1,2) 7210; 7220.opcode(&79) ; ADC nn,Y 7230FNgetabsindex(0,1,Y) 7240FNadc(0,3,4) 7250; 7260.opcode(&7A) ; PLY 7270FNpull(Y) 7280FNfetch(1,4) 7290; 7300.opcode(&7B) ; ? 7310FNundoc(&7B) 7320FNfetch(1,2) 7330; 7340.opcode(&7C) ; JMP (nn,X) 7350FNabs(0,1) 7360MOV R0,R1,LSL#16 7370ADD R0,R0,X,LSR#8 7380 7390;LDRB R1,[mem,R0,LSR#16] 7400MOV R2,#pagetable 7410LDRB R2,[R2,R0,LSR#28] 7420MOV R2,R2,LSL#12 7430LDRB R1,[R2,R0,LSR#16] 7450 7460ADD R0,R0,#1 << 16 7470;LDRB R0,[mem,R0,LSR#16] 7480MOV R2,#pagetable 7490LDRB R2,[R2,R0,LSR#28] 7500MOV R2,R2,LSL#12 7510LDRB R0,[R2,R0,LSR#16] 7530 7540 7550ADD R0,R1,R0,LSL#8 7560MOV zpc,R0,LSL#16 7570FNfetch(0,6) 7580; 7590.opcode(&7D) ; ADC nn,X 7600FNgetabsindex(0,1,X) 7610FNadc(0,3,4) 7620; 7630.opcode(&7E) ; ROR nn,X 7640FNgetabsindex(0,1,X) 7650FNror(0) 7660FNstrb16(0,1) 7670FNfetch(3,7) 7680; 7690.opcode(&7F) ; ? 7700FNundoc(&7F) 7710FNfetch(1,2) 7720; 7730.opcode(&80) ; BRA r 7740FNbranch 7750; 7760.opcode(&81) ; STA (n,X) 7770FNpre(0,1) 7780MOV R0,A,LSR#24 7790FNstrb(0,1) 7800FNfetch(2,6) 7810; 7820.opcode(&82) ; ? 7830FNundoc(&82) 7840FNfetch(1,2) 7850; 7860.opcode(&83) ; ? 7870FNundoc(&83) 7880FNfetch(1,2) 7890; 7900.opcode(&84) ; STY n 7910FNgetbyte1(1) 7920MOV R0,Y,LSR#24 7930STRB R0,[mem,R1] ; zero page STRB 7940FNfetch(2,3) 7950; 7960.opcode(&85) ; STA n 7970FNgetbyte1(1) 7980MOV R0,A,LSR#24 7990STRB R0,[mem,R1] ; zero page STRB 8000FNfetch(2,3) 8010; 8020.opcode(&86) ; STX n 8030FNgetbyte1(1) 8040MOV R0,X,LSR#24 8050STRB R0,[mem,R1] ; zero page STRB 8060FNfetch(2,3) 8070; 8080.opcode(&87) ; (SAX n - store (A AND X) in zero page) 8090FNgetbyte1(1) 8100ANDS R0,X,A 8110FNsetupNZ 8120MOV R0,R0,LSR#24 8130STRB R0,[mem,R1] ; zero page STRB 8140FNfetch(2,0) 8150;SWI &100+ASC"8" 8160;SWI &100+ASC"7" 8170;FNfetch(1,2) 8180; 8190.opcode(&88) ; DEY 8200FNdec(Y) 8210FNfetch(1,2) 8220; 8230.opcode(&89) ; BIT #N 8240FNgetbyte1(0) 8250TST R0,A,LSR#24 8260BIC F,F,#%10 ; N and V unchanged in immediate mode 8270ORREQ F,F,#%10 8280.branch_fetch 8290FNfetch(2,2) 8300; 8310.opcode(&8A) ; TXA 8320MOVS A,X 8330FNsetupNZ 8340FNfetch(1,2) 8350; 8360.opcode(&8B) ; ? 8370FNundoc(&8B) 8380FNfetch(1,2) 8390; 8400.opcode(&8C) ; STY nn 8410FNabs(0,1) 8420MOV R0,Y,LSR#24 8430FNstrb(0,1) 8440FNfetch(3,4) 8450; 8460.opcode(&8D) ; STA nn 8470FNabs(0,1) 8480MOV R0,A,LSR#24 8490FNstrb(0,1) 8500FNfetch(3,4) 8510; 8520.opcode(&8E) ; STX nn 8530FNabs(0,1) 8540MOV R0,X,LSR#24 8550FNstrb(0,1) 8560FNfetch(3,4) 8570; 8580.opcode(&8F) ; ? 8590FNundoc(&8F) 8600FNfetch(1,2) 8610; 8620.opcode(&90) ; BCC r 8630TST F,#%1 8640BNE branch_fetch 8650FNbranch 8660; 8670.opcode(&91) ; STA (n),Y 8680FNpost(0,1) 8690MOV R0,A,LSR#24 8700FNstrb16(0,1) 8710FNfetch(2,6) 8720; 8730.opcode(&92) ; STA (n) 8740FNzeroindir(0,1) 8750MOV R0,A,LSR#24 8760FNstrb(0,1) 8770FNfetch(2,5) 8780; 8790.opcode(&93) ; ? 8800FNundoc(&93) 8810FNfetch(1,2) 8820; 8830.opcode(&94) ; STY n,X 8840FNgetzeroindex(0,1) 8850MOV R0,Y,LSR#24 8860STRB R0,[mem,R1,LSR#24] ; zero page STRB 8870FNfetch(2,4) 8880; 8890.opcode(&95) ; STA n,X 8900FNzeroindex(0,1) 8910MOV R0,A,LSR#24 8920STRB R0,[mem,R1,LSR#24] ; zero page STRB 8930FNfetch(2,4) 8940; 8950.opcode(&96) ; STX n,Y 8960FNzeroindexY(0,1) 8970MOV R0,X,LSR#24 8980STRB R0,[mem,R1,LSR#24] ; zero page STRB 8990 9000FNfetch(2,4) 9010; 9020.opcode(&97) ; ? 9030FNundoc(&97) 9040FNfetch(1,2) 9050; 9060.opcode(&98) ; TYA 9070MOVS A,Y 9080FNsetupNZ 9090FNfetch(1,2) 9100; 9110.opcode(&99) ; STA nn,Y 9120FNabsindex(0,1,Y) 9130MOV R0,A,LSR#24 9140FNstrb16(0,1) 9150FNfetch(3,5) 9160; 9170.opcode(&9A) ; TXS 9180MOVS SP,X ; flags not affected 9190ORR SP,SP,#1 9200FNsetupNZ 9210FNfetch(1,2) 9220; 9230.opcode(&9B) ; ? 9240FNundoc(&9B) 9250FNfetch(1,2) 9260; 9270.opcode(&9C) ; STZ nn 9280FNabs(0,1) 9290MOV R0,#0 9300FNstrb(0,1) 9310FNfetch(3,4) 9320; 9330.opcode(&9D) ; STA nn,X 9340FNabsindex(0,1,X) 9350MOV R0,A,LSR#24 9360FNstrb16(0,1) 9370FNfetch(3,5) 9380; 9390.opcode(&9E) ; STZ nn,X 9400FNabsindex(0,1,X) 9410MOV R0,#0 9420FNstrb16(0,1) 9430FNfetch(3,5) 9440; 9450.opcode(&9F) ; ? 9460FNundoc(&9F) 9470FNfetch(1,2) 9480; 9490.opcode(&A0) ; LDY #N 9500FNgetbyte1(0) 9510FNldy(0,2,2) 9520; 9530.opcode(&A1) ; LDA (n,X) 9540FNgetpre(0,1) 9550FNlda(0,2,6) 9560; 9570.opcode(&A2) ; LDX #N 9580FNgetbyte1(0) 9590FNldx(0,2,2) 9600; 9610.opcode(&A3) ; ? 9620FNundoc(&A3) 9630FNfetch(1,2) 9640; 9650.opcode(&A4) ; LDY n 9660FNgetzero(0,1) 9670FNldy(0,2,3) 9680; 9690.opcode(&A5) ; LDA n 9700FNgetzero(0,1) 9710FNlda(0,2,3) 9720; 9730.opcode(&A6) ; LDX n 9740FNgetzero(0,1) 9750FNldx(0,2,3) 9760; 9770.opcode(&A7) ; ? 9780FNundoc(&A7) 9790FNfetch(1,2) 9800; 9810.opcode(&A8) ; TAY 9820MOVS Y,A 9830FNsetupNZ 9840FNfetch(1,2) 9850; 9860.opcode(&A9) ; LDA #N 9870FNgetbyte1(0) 9880FNlda(0,2,2) 9890; 9900.opcode(&AA) ; TAX 9910MOVS X,A 9920FNsetupNZ 9930FNfetch(1,2) 9940; 9950.opcode(&AB) ; ? 9960FNundoc(&AB) 9970FNfetch(1,2) 9980; 9990.opcode(&AC) ; LDY nn 10000FNgetabs(0,1) 10010FNldy(0,3,4) 10020; 10030.opcode(&AD) ; LDA nn 10040FNgetabs(0,1) 10050FNlda(0,3,4) 10060; 10070.opcode(&AE) ; LDX nn 10080FNgetabs(0,1) 10090FNldx(0,3,4) 10100; 10110.opcode(&AF) ; ? 10120FNundoc(&AF) 10130FNfetch(1,2) 10140; 10150.opcode(&B0) ; BCS r 10160TST F,#%1 10170BEQ branch_fetch 10180FNbranch 10190; 10200.opcode(&B1) ; LDA (n),Y 10210FNgetpost(0,1) 10220FNlda(0,2,5) 10230; 10240.opcode(&B2) ; LDA (n) 10250FNgetzeroindir(0,1) 10260FNlda(0,2,5) 10270; 10280.opcode(&B3) ; ? 10290FNundoc(&B3) 10300FNfetch(1,2) 10310; 10320.opcode(&B4) ; LDY n,X 10330FNgetzeroindex(0,1) 10340FNldy(0,2,4) 10350; 10360.opcode(&B5) ; LDA n,X 10370FNgetzeroindex(0,1) 10380FNlda(0,2,4) 10390; 10400.opcode(&B6) ; LDX n,Y 10410FNgetzeroindexY(0,1) 10420FNldx(0,2,4) 10430; 10440.opcode(&B7) ; ? 10450FNundoc(&B7) 10460FNfetch(1,2) 10470; 10480.opcode(&B8) ; CLV 10490BIC F,F,#%1000000 10500FNfetch(1,2) 10510; 10520.opcode(&B9) ; LDA nn,Y 10530FNgetabsindex(0,1,Y) 10540FNlda(0,3,4) 10550; 10560.opcode(&BA) ; TSX 10570ANDS X,SP,#&FF000000 10580FNsetupNZ 10590FNfetch(1,2) 10600; 10610.opcode(&BB) ; ? 10620FNundoc(&BB) 10630FNfetch(1,2) 10640; 10650.opcode(&BC) ; LDY nn,X 10660FNgetabsindex(0,1,X) 10670FNldy(0,3,4) 10680; 10690.opcode(&BD) ; LDA nn,X 10700FNgetabsindex(0,1,X) 10710FNlda(0,3,4) 10720; 10730.opcode(&BE) ; LDX nn,Y 10740FNgetabsindex(0,1,Y) 10750FNldx(0,3,4) 10760; 10770.opcode(&BF) ; ? 10780FNundoc(&BF) 10790FNfetch(1,2) 10800; 10810.opcode(&C0) ; CPY #N 10820FNgetbyte1(0) 10830FNcpy(0,2,2) 10840; 10850.opcode(&C1) ; CMP (n,X) 10860FNgetpre(0,1) 10870FNcmp(0,2,6) 10880; 10890.opcode(&C2) ; ? 10900FNundoc(&C2) 10910FNfetch(1,2) 10920; 10930.opcode(&C3) ; ? 10940FNundoc(&C3) 10950FNfetch(1,2) 10960; 10970.opcode(&C4) ; CPY n 10980FNgetzero(0,1) 10990FNcpy(0,2,3) 11000; 11010.opcode(&C5) ; CMP n 11020FNgetzero(0,1) 11030FNcmp(0,2,3) 11040; 11050.opcode(&C6) ; DEC n 11060FNgetzero(0,1) 11070FNdec(0) 11080STRB R0,[mem,R1] ; zero page STRB 11090FNfetch(2,5) 11100; 11110.opcode(&C7) ; ? 11120FNundoc(&C7) 11130FNfetch(1,2) 11140; 11150.opcode(&C8) ; INY 11160FNinc(Y) 11170FNfetch(1,2) 11180; 11190.opcode(&C9) ; CMP #N 11200FNgetbyte1(0) 11210FNcmp(0,2,2) 11220; 11230.opcode(&CA) ; DEX 11240FNdec(X) 11250FNfetch(1,2) 11260; 11270.opcode(&CB) ; ? 11280FNundoc(&CB) 11290FNfetch(1,2) 11300; 11310.opcode(&CC) ; CPY nn 11320FNgetabs(0,1) 11330FNcpy(0,3,4) 11340; 11350.opcode(&CD) ; CMP nn 11360FNgetabs(0,1) 11370FNcmp(0,3,4) 11380; 11390.opcode(&CE) ; DEC nn 11400FNgetabs(0,1) 11410FNdec(0) 11420FNstrb(0,1) 11430FNfetch(3,6) 11440; 11450.opcode(&CF) ; ? 11460FNundoc(&CF) 11470FNfetch(1,2) 11480; 11490.opcode(&D0) ; BNE r 11500TST F,#%10 11510BNE branch_fetch 11520FNbranch 11530; 11540.opcode(&D1) ; CMP (n),Y 11550FNgetpost(0,1) 11560FNcmp(0,2,5) 11570; 11580.opcode(&D2) ; CMP (n) 11590FNgetzeroindir(0,1) 11600FNcmp(0,2,5) 11610; 11620.opcode(&D3) ; ? 11630FNundoc(&D3) 11640FNfetch(1,2) 11650; 11660.opcode(&D4) ; ? 11670FNundoc(&D4) 11680FNfetch(1,2) 11690; 11700.opcode(&D5) ; CMP n,X 11710FNgetzeroindex(0,1) 11720FNcmp(0,2,4) 11730; 11740.opcode(&D6) ; DEC n,X 11750FNgetzeroindex(0,1) 11760FNdec(0) 11770STRB R0,[mem,R1,LSR#24] 11780FNfetch(2,6) 11790; 11800.opcode(&D7) ; ? 11810FNundoc(&D7) 11820FNfetch(1,2) 11830; 11840.opcode(&D8) ; CLD 11850TST F,#%1000 11860SUBNE table,table,#256*64*4 11870BICNE F,F,#%1000 11880;ADR table,opcodetable 11890FNfetch(1,2) 11900; 11910.opcode(&D9) ; CMP nn,Y 11920FNgetabsindex(0,1,Y) 11930FNcmp(0,3,4) 11940; 11950.opcode(&DA) ; PHX 11960FNpush(X) 11970FNfetch(1,3) 11980; 11990.opcode(&DB) ; ? 12000FNundoc(&DB) 12010FNfetch(1,2) 12020; 12030.opcode(&DC) ; (NOP nn,X) 12040;SWI &100+ASC"D" 12050;SWI &100+ASC"C" 12060 12070FNfetch(3,0) 12080; 12090.opcode(&DD) ; CMP nn,X 12100FNgetabsindex(0,1,X) 12110FNcmp(0,3,4) 12120; 12130.opcode(&DE) ; DEC nn,X 12140FNgetabsindex(0,1,X) 12150FNdec(0) 12160FNstrb16(0,1) 12170FNfetch(3,7) 12180; 12190.opcode(&DF) ; ? 12200FNundoc(&DF) 12210FNfetch(1,2) 12220; 12230.opcode(&E0) ; CPX #N 12240FNgetbyte1(0) 12250FNcpx(0,2,2) 12260; 12270.opcode(&E1) ; SBC (n,X) 12280FNgetpre(0,1) 12290FNsbc(0,2,6) 12300; 12310.opcode(&E2) ; ? 12320FNundoc(&E2) 12330FNfetch(1,2) 12340; 12350.opcode(&E3) ; ? 12360FNundoc(&E3) 12370FNfetch(1,2) 12380; 12390.opcode(&E4) ; CPX n 12400FNgetzero(0,1) 12410FNcpx(0,2,3) 12420; 12430.opcode(&E5) ; SBC n 12440FNgetzero(0,1) 12450FNsbc(0,2,3) 12460; 12470.opcode(&E6) ; INC n 12480FNgetzero(0,1) 12490FNinc(0) 12500STRB R0,[mem,R1] ; zero page STRB 12510FNfetch(2,5) 12520; 12530.opcode(&E7) ; ? 12540FNundoc(&E7) 12550FNfetch(1,2) 12560; 12570.opcode(&E8) ; INX 12580FNinc(X) 12590FNfetch(1,2) 12600; 12610.opcode(&E9) ; SBC #N 12620FNgetbyte1(0) 12630FNsbc(0,2,2) 12640; 12650.opcode(&EA) ; NOP 12660 12670FNfetch(1,2) 12680; 12690.opcode(&EB) ; ? 12700FNundoc(&EB) 12710FNfetch(1,2) 12720; 12730.opcode(&EC) ; CPX nn 12740FNgetabs(0,1) 12750FNcpx(0,3,4) 12760; 12770.opcode(&ED) ; SBC nn 12780FNgetabs(0,1) 12790FNsbc(0,3,4) 12800; 12810.opcode(&EE) ; INC nn 12820FNgetabs(0,1) 12830FNinc(0) 12840FNstrb(0,1) 12850FNfetch(3,6) 12860; 12870.opcode(&EF) ; ? 12880FNundoc(&EF) 12890FNfetch(1,2) 12900; 12910.opcode(&F0) ; BEQ r 12920TST F,#%10 12930BEQ branch_fetch 12940FNbranch 12950; 12960.opcode(&F1) ; SBC (n),Y 12970FNgetpost(0,1) 12980FNsbc(0,2,5) 12990; 13000.opcode(&F2) ; SBC (n) 13010FNgetzeroindir(0,1) 13020FNsbc(0,2,5) 13030; 13040.opcode(&F3) ; ? 13050FNundoc(&F3) 13060FNfetch(1,2) 13070; 13080.opcode(&F4) ; ? 13090FNundoc(&F4) 13100FNfetch(1,2) 13110; 13120.opcode(&F5) ; SBC n,X 13130FNgetzeroindex(0,1) 13140FNsbc(0,2,4) 13150; 13160.opcode(&F6) ; INC n,X 13170FNgetzeroindex(0,1) 13180FNinc(0) 13190STRB R0,[mem,R1,LSR#24] ; zero page STRB 13200FNfetch(2,6) 13210; 13220.opcode(&F7) ; ? 13230FNundoc(&F7) 13240FNfetch(1,2) 13250; 13260.opcode(&F8) ; SED 13270TST F,#%1000 13280ADDEQ table,table,#256*64*4 13290ORREQ F,F,#%1000 13300;ADR table,bcdtable 13310FNfetch(1,2) 13320; 13330.opcode(&F9) ; SBC nn,Y 13340FNgetabsindex(0,1,Y) 13350FNsbc(0,3,4) 13360; 13370.opcode(&FA) ; PLX 13380FNpull(X) 13390FNfetch(1,4) 13400; 13410.opcode(&FB) ; ? 13420FNundoc(&FB) 13430FNfetch(1,2) 13440; 13450.opcode(&FC) ; ? 13460FNundoc(&FC) 13470FNfetch(1,2) 13480; 13490.opcode(&FD) ; SBC nn,X 13500FNgetabsindex(0,1,X) 13510FNsbc(0,3,4) 13520; 13530.opcode(&FE) ; INC nn,X 13540FNgetabsindex(0,1,X) 13550FNinc(0) 13560FNstrb16(0,1) 13570FNfetch(3,7) 13580; 13590.opcode(&FF) ; ? 13600FNundoc(&FF) 13610FNfetch(1,2) 13620; 13630] 13640NEXT bcd_loop% 13650 13660REMFOR I%=code+0 TO code+255*4*64 STEP 4 13670REMbcd(0)!I%=opcode(0)!I% 13680REMNEXT 13690P%=bcd(0) 13700O%=P%+code 13710[OPTp 13720FNbcd(&61) 13730.bcd(&61) ; ADC (n,X) 13740FNgetpre(0,1) 13750FNadcBCD(0,2,6) 13760 13770FNbcd(&65) 13780.bcd(&65) ; ADC n 13790FNgetzero(0,1) 13800FNadcBCD(0,2,3) 13810 13820FNbcd(&69) 13830.bcd(&69) ; ADC #N 13840FNgetbyte1(0) 13850FNadcBCD(0,2,2) 13860 13870FNbcd(&6D) 13880.bcd(&6D) ; ADC nn 13890FNgetabs(0,1) 13900FNadcBCD(0,3,4) 13910 13920FNbcd(&71) 13930.bcd(&71) ; ADC (n),Y 13940FNgetpost(0,1) 13950FNadcBCD(0,2,5) 13960 13970FNbcd(&72) 13980.bcd(&72) ; ADC (n) 13990FNgetzeroindir(0,1) 14000FNadcBCD(0,2,5) 14010 14020FNbcd(&75) 14030.bcd(&75) ; ADC n,X 14040FNgetzeroindex(0,1) 14050FNadcBCD(0,2,4) 14060 14070FNbcd(&79) 14080.bcd(&79) ; ADC nn,Y 14090FNgetabsindex(0,1,Y) 14100FNadcBCD(0,3,4) 14110 14120FNbcd(&7D) 14130.bcd(&7D) ; ADC nn,X 14140FNgetabsindex(0,1,X) 14150FNadcBCD(0,3,4) 14160 14170FNbcd(&E1) 14180.bcd(&E1) ; SBC (n,X) 14190FNgetpre(0,1) 14200FNsbcBCD(0,2,6) 14210 14220FNbcd(&E5) 14230.bcd(&E5) ; SBC n 14240FNgetzero(0,1) 14250FNsbcBCD(0,2,3) 14260FNbcd(&E6) 14270 14280FNbcd(&E9) 14290.bcd(&E9) ; SBC #N 14300FNgetbyte1(0) 14310FNsbcBCD(0,2,2) 14320 14330FNbcd(&ED) 14340.bcd(&ED) ; SBC nn 14350FNgetabs(0,1) 14360FNsbcBCD(0,3,4) 14370 14380FNbcd(&F1) 14390.bcd(&F1) ; SBC (n),Y 14400FNgetpost(0,1) 14410FNsbcBCD(0,2,5) 14420 14430FNbcd(&F2) 14440.bcd(&F2) ; SBC (n) 14450FNgetzeroindir(0,1) 14460FNsbcBCD(0,2,5) 14470 14480FNbcd(&F5) 14490.bcd(&F5) ; SBC n,X 14500FNgetzeroindex(0,1) 14510FNsbcBCD(0,2,4) 14520 14530FNbcd(&F9) 14540.bcd(&F9) ; SBC nn,Y 14550FNgetabsindex(0,1,Y) 14560FNsbcBCD(0,3,4) 14570 14580FNbcd(&FD) 14590.bcd(&FD) ; SBC nn,X 14600FNgetabsindex(0,1,X) 14610FNsbcBCD(0,3,4) 14620 14630FNbcd(&100) 14640] 14650 14660="" 14670 14680DEFFNbranch 14690[OPTp 14700MOV R12,zpc,LSR#24 14710FNgetbyte1(0) 14720ADD zpc,zpc,R0,LSL#16 14730CMP R0,#&80 14740SUBGE zpc,zpc,#254 << 16 14750ADDLT zpc,zpc,#2 << 16 14760CMP R12,zpc,LSR#24 14770SUBEQ time,time,#1 ; page boundary not crossed 14780SUBNE time,time,#2 ; page boundary crossed 14790FNfetch(0,2) 14800] 14810="" 14820 14830DEFFNtrb(R) 14840[OPTp 14850TST R,A,LSR#24 14860FNsetupZ 14870BIC R,R,A,LSR#24 14880] 14890="" 14900 14910DEFFNtsb(R) 14920[OPTp 14930TST R,A,LSR#24 14940FNsetupZ 14950ORR R,R,A,LSR#24 14960] 14970="" 14980 14990DEFFNasl(R) 15000[OPTp 15010MOVS R,R,LSL#25 15020MOV R,R,LSR#24 15030FNsetupNZC 15040] 15050="" 15060 15070DEFFNlsr(R) 15080[OPTp 15090BIC F,F,#%10000011 15100MOVS R,R,LSR#1 15110ORRCS F,F,#%1 15120MOVS R2,R,LSL#24 15130ORRMI F,F,#%10000000 15140ORREQ F,F,#%10 15150] 15160="" 15170 15180DEFFNrol(R) 15190IF R=1 STOP 15200[OPTp 15210;MOVS R2,F,RRX ; MOVE 6502 CARRY INTO ARM CARRY 15220AND R2,F,#%1 15230BIC F,F,#%10000011 15240MOVS R,R,LSL#24 15250ORR R,R,R2,LSL#23 15260MOVS R,R,LSL#1 15270MOV R,R,LSR#24 15280FNsetupNZC 15290] 15300="" 15310 15320DEFFNror(R) 15330IF R=1 STOP 15340[OPTp 15350MOVS R2,F,RRX ; MOVE 6502 CARRY INTO ARM CARRY 15360BIC F,F,#%10000011 15370ORRCS F,F,#%10000000 ; N -> what C was 15380ADD R,R,R,LSL#24 15390MOVS R,R,RRX 15400ORRCS F,F,#%1 15410MOVS R,R,LSR#24 15420ORREQ F,F,#%10 15430] 15440="" 15450 15460 15470DEFFNcmp(R,F%,T%) 15480[OPTp 15490SUBS R0,A,R,LSL#24 15500FNsetupNZC 15510FNfetch(F%,T%) 15520] 15530="" 15540 15550DEFFNcpx(R,F%,T%) 15560[OPTp 15570SUBS R0,X,R,LSL#24 15580FNsetupNZC 15590FNfetch(F%,T%) 15600] 15610="" 15620 15630DEFFNcpy(R,F%,T%) 15640[OPTp 15650SUBS R0,Y,R,LSL#24 15660FNsetupNZC 15670FNfetch(F%,T%) 15680] 15690="" 15700 15710REMDEFFNadc(R,F%,T%) 15720[OPTp 15730MOVS R2,F,RRX ; MOVE 6502 CARRY INTO ARM CARRY 15740MVN R2,#0 ; R2=-1 15750BIC R2,R2,#&FF << 24 15760ADD R2,R2,A 15770ADCS R2,R2,R,LSL#24 15780ANDS A,R2,#&FF << 24 ; only affects Z,N! 15790FNsetupCZVN 15800FNfetch(F%,T%) 15810] 15820="" 15830 15840DEFFNadc(R,F%,T%) 15850[OPTp 15860AND R2,F,#%1 15870ADD R2,R2,R 15880ADDS A,A,R2,LSL#24 15890FNsetupCZVN 15900CMP R2,#&100 : ORREQ F,F,#%1 15910FNfetch(F%,T%) 15920] 15930="" 15940 15950DEFFNadcBCD(R,F%,T%) 15960[OPTp 15970MOVS R2,F,RRX ; MOVE 6502 CARRY INTO ARM CARRY 15980AND R2,A,#&0F << 24 15990AND R13,R,#&F 16000;ADDCS R2,R2,#1 << 24 16010ADC R13,R13,R2,LSR#24 16020CMP R13,#&A 16030ADDGE R13,R13,#&06 16040 16050CMP R13,#&20 16060SUBGE R13,R13,#&10 16070 16080MOV R,R,LSR#4 16090ADD R,R,A,LSR#28 16100ADD A,R13,R,LSL#4 16110CMP A,#&A0 16120ADDGE A,A,#&60 16130ANDS R2,A,#&300 16140ORRNE F,F,#%1 16150BICEQ F,F,#%1 16160MOVS A,A,LSL#24 16170FNsetupNZ ; Master elite needs N flag? 16180FNfetch3(F%,T%) 16190] 16200="" 16210 16220DEFFNsbcBCD(R,F%,T%) 16230[OPTp 16240 16250MOVS R2,F,RRX ; MOVE 6502 CARRY INTO ARM CARRY 16260AND R2,A,#&0F << 24 16270AND R13,R,#&F 16280RSCS R13,R13,R2,LSR#24 16290SUBCC R13,R13,#6 16300AND R13,R13,#&F 16310MOV R,R,LSR#4 16320RSCS R,R,A,LSR#28 16330SUBCC R,R,#6 16340FNsetupC 16350 16360AND R,R,#&F 16370ADD A,R13,R,LSL#4 16380MOVS A,A,LSL#24 16390FNsetupNZ 16400FNfetch3(F%,T%) 16410] 16420="" 16430 16440DEFFNsbc(R,F%,T%) 16450[OPTp 16460MOVS R2,F,RRX ; MOVE 6502 CARRY INTO ARM CARRY 16470SBCS A,A,R,LSL#24 16480FNsetupCZVN 16490ANDS A,A,#&FF << 24 16500BICNE F,F,#%10 16510ORREQ F,F,#%10 ; FNsetupZ 16520FNfetch(F%,T%) 16530] 16540="" 16550 16560 16570MOVS R2,F,RRX ; MOVE 6502 CARRY INTO ARM CARRY 16580MOV A,A,ASR#24 16590MOV R,R,LSL#24 16600MOV R,R,ASR#24 16610EOR R,R,#&FF << 24 16620EOR R,R,#&FF << 16 16630EOR R,R,#&FF << 8 16640EOR A,A,#&FF << 24 16650EOR A,A,#&FF << 16 16660EOR A,A,#&FF << 8 16670SBCS A,A,R 16680MOV A,A,LSL#24 16690FNsetupCZVN 16700FNfetch(F%,T%) 16710] 16720="" 16730 16740DEFFNbit(R,F%,T%) 16750[OPTp 16760AND R2,R,#%11000000 16770ANDS R,R,A,LSR#24 16780BIC F,F,#%11000010 16790ADD F,F,R2 16800ORREQ F,F,#%10 16810FNfetch(F%,T%) 16820] 16830="" 16840 16850DEFFNeor(R,F%,T%) 16860[OPTp 16870EORS A,A,R,LSL#24 16880FNsetupNZ 16890FNfetch(F%,T%) 16900] 16910="" 16920 16930DEFFNand(R,F%,T%) 16940[OPTp 16950ANDS A,A,R,LSL#24 16960FNsetupNZ 16970FNfetch(F%,T%) 16980] 16990="" 17000 17010DEFFNora(R,F%,T%) 17020[OPTp 17030ORRS A,A,R,LSL#24 17040FNsetupNZ 17050FNfetch(F%,T%) 17060] 17070="" 17080 17090DEFFNlda(R,F%,T%) 17100[OPTp 17110MOVS A,R,LSL#24 17120FNsetupNZ 17130FNfetch(F%,T%) 17140] 17150="" 17160 17170DEFFNldx(R,F%,T%) 17180[OPTp 17190MOVS X,R,LSL#24 17200FNsetupNZ 17210FNfetch(F%,T%) 17220] 17230="" 17240 17250DEFFNldy(R,F%,T%) 17260[OPTp 17270MOVS Y,R,LSL#24 17280FNsetupNZ 17290FNfetch(F%,T%) 17300] 17310="" 17320 17330DEFFNinc(R) 17340IF R=X OR R=Y OR R=A THEN 17350[OPTp 17360ADDS R,R,#1 << 24 17370] 17380ELSE 17390[OPTp 17400ADD R,R,#1 17410MOVS R2,R,LSL#24 17420] 17430ENDIF 17440[OPTp 17450FNsetupNZ 17460] 17470="" 17480 17490DEFFNdec(R) 17500IF R=X OR R=Y OR R=A THEN 17510[OPTp 17520SUBS R,R,#1 << 24 17530] 17540ELSE 17550[OPTp 17560SUB R,R,#1 17570MOVS R2,R,LSL#24 17580] 17590ENDIF 17600[OPTp 17610FNsetupNZ 17620] 17630="" 17640 17650DEFFNsetupNZ 17660[OPTp 17670BIC F,F,#%10000010 17680ORREQ F,F,#%10 17690ORRMI F,F,#%10000000 17700] 17710="" 17720 17730DEFFNsetupZ 17740[OPTp 17750BIC F,F,#%10 17760ORREQ F,F,#%10 17770] 17780="" 17790 17800DEFFNsetupC 17810[OPTp 17820BIC F,F,#%1 17830ORRCS F,F,#%1 17840] 17850="" 17860 17870DEFFNsetupNZC 17880[OPTp 17890BIC F,F,#%10000011 17900ORRCS F,F,#%1 17910ORREQ F,F,#%10 17920ORRMI F,F,#%10000000 17930] 17940="" 17950 17960DEFFNsetupCZVN 17970[OPTp 17980BIC F,F,#%11000011 17990ORRCS F,F,#%1 18000ORREQ F,F,#%10 18010ORRVS F,F,#%1000000 18020ORRMI F,F,#%10000000 18030] 18040="" 18050 18060DEFFNsetupCzVN 18070[OPTp 18080BIC F,F,#%11000011 18090ORRCS F,F,#%1 18100ORRVS F,F,#%1000000 18110ORRMI F,F,#%10000000 18120] 18130="" 18140 18150DEFFNgetpre(R,S) 18160[OPTp 18170FNpre(R,S) 18180;LDRB R,[mem,R] 18190FNldrb2(R,S) 18200] 18210="" 18220 18230DEFFNpre(R,S) 18240[OPTp 18250FNgetbyte1(R) 18260ADD R,X,R,LSL#24 18270LDRB S,[mem,R,LSR#24] ; zero page LDRB 18280ADD R,R,#1 << 24 18290LDRB R,[mem,R,LSR#24] ; zero page LDRB 18300ADD S,S,R,LSL#8 18310] 18320="" 18330 18340DEFFNgetzero(R,S) 18350[OPTp 18360FNgetbyte1(S) 18370LDRB R,[mem,S] ; zero page LDRB 18380] 18390="" 18400 18410DEFFNgetabs(R,S) 18420[OPTp 18430FNabs(R,S) 18440;LDRB R,[mem,S] 18450FNldrb2(R,S) 18460] 18470="" 18480 18490DEFFNabs(R,S) 18500[OPTp 18510FNgetbyte2(R,S) 18520ADD S,R,S,LSL#8 18530;FNstrb 18540] 18550="" 18560 18570DEFFNgetpost(R,S) 18580[OPTp 18590FNpost(R,S) 18600;LDRB R,[mem,R,LSR#16] 18610FNldrb16(R,S) 18620] 18630="" 18640 18650DEFFNpost(R,S) 18660[OPTp 18670FNgetbyte1(R) 18680MOV R,R,LSL#24 18690LDRB S,[mem,R,LSR#24] ; zero page LDRB 18700ADD R,R,#1 << 24 18710LDRB R,[mem,R,LSR#24] ; zero page LDRB 18720ADD R,S,R,LSL#8 18730MOV R,R,LSL#16 18740ADD S,R,Y,LSR#8 18750;FNstrb16 18760] 18770="" 18780 18790DEFFNgetzeroindir(R,S) 18800[OPTp 18810FNzeroindir(R,S) 18820;LDRB R,[mem,S] 18830FNldrb2(R,S) 18840] 18850="" 18860 18870DEFFNzeroindir(R,S) 18880[OPTp 18890FNgetbyte1(R) 18900MOV R,R,LSL#24 18910LDRB S,[mem,R,LSR#24] ; zero page LDRB 18920ADD R,R,#1 << 24 18930LDRB R,[mem,R,LSR#24] ; zero page LDRB 18940ADD S,S,R,LSL#8 18950] 18960="" 18970 18980DEFFNgetabsindex(R,S,T) REM T=X or Y 18990[OPTp 19000FNabsindex(R,S,T) 19010;LDRB R,[mem,S,LSR#16] 19020FNldrb16(R,S) 19030] 19040="" 19050 19060DEFFNabsindex(R,S,T) REM T=X or Y 19070[OPTp 19080FNgetbyte2(R,S) 19090ADD R,R,S,LSL#8 19100MOV R,R,LSL#16 19110ADD S,R,T,LSR#8 19120] 19130="" 19140 19150DEFFNgetzeroindex(R,S) 19160[OPTp 19170FNzeroindex(R,S) 19180LDRB R,[mem,S,LSR#24] ; zero page LDRB 19190] 19200="" 19210 19220DEFFNzeroindex(R,S) 19230[OPTp 19240FNgetbyte1(R) 19250ADD S,X,R,LSL#24 19260] 19270="" 19280 19290DEFFNgetzeroindexY(R,S) 19300[OPTp 19310FNzeroindexY(R,S) 19320LDRB R,[mem,S,LSR#24] ; zero page LDRB 19330] 19340="" 19350 19360DEFFNzeroindexY(R,S) 19370[OPTp 19380FNgetbyte1(R) 19390ADD S,Y,R,LSL#24 19400] 19410="" 19420 19430DEFFNgetbyte1(R) 19440[OPTp 19450ADD R,zpc,#1 << 16 19460;LDRB R,[mem,R,LSR#16] ; instruction fetch 19470MOV R2,#pagetable 19480LDRB R2,[R2,R,LSR#28] 19490MOV R2,R2,LSL#12 19500LDRB R,[R2,R,LSR#16] 19510] 19520="" 19530 19540DEFFNXXgetbyte2(R,S) 19550[OPTp 19560ADD S,mem,zpc,LSR#16 19570LDRB R,[S,#1] 19580LDRB S,[S,#2] ; instruction fetches 19590] 19600="" 19610 19620DEFFNgetbyte2(R,S) 19630[OPTp 19640;ADD S,mem,zpc,LSR#16 19650;LDRB R,[S,#1] 19660;LDRB S,[S,#2] ; instruction fetches 19670ADD R,zpc,#1 << 16 19680MOV R2,#pagetable 19690LDRB S,[R2,R,LSR#28] 19700MOV S,S,LSL#12 19710LDRB R,[S,R,LSR#16] 19720ADD S,zpc,#2 << 16 19730;MOV R2,#pagetable 19740LDRB R2,[R2,S,LSR#28] 19750MOV R2,R2,LSL#12 19760LDRB S,[R2,S,LSR#16] 19770 19780] 19790="" 19800 19810DEFFNpull(R) 19820CASE R OF 19830WHEN F 19840[OPTp 19850ADD SP,SP,#1 << 24 19860LDRB R1,[mem,SP,ROR#24] 19870BIC F,F,#&FF 19880ORR F,F,R1 19890BL reset_bcdflag 19900] 19910WHEN A,X,Y 19920[OPTp 19930ADD SP,SP,#1 << 24 19940LDRB R0,[mem,SP,ROR#24] 19950MOVS R,R0,LSL#24 19960FNsetupNZ 19970] 19980OTHERWISE 19990[OPTp 20000ADD SP,SP,#1 << 24 20010LDRB R0,[mem,SP,ROR#24] 20020MOV R,R0,LSL#24 20030] 20040ENDCASE 20050="" 20060 20070DEFFNpush(R) 20080IF R=F OR R=0 OR R=1 THEN 20090[OPTp 20100STRB R,[mem,SP,ROR#24] 20110SUB SP,SP,#1 << 24 20120] 20130ELSE 20140[OPTp 20150MOV R0,R,LSR#24 20160STRB R0,[mem,SP,ROR#24] 20170SUB SP,SP,#1 << 24 20180] 20190ENDIF 20200="" 20210
� > Opcodes ݤopcodes ( 2� bcd_loop%=0 � 1 < opcode%=0 F9� bcd_loop%=0 � [OPTp:.opcode(&0):] � [OPTp:.bcd(0):] P Z [OPTp d n;.opcode(&0) ; BRK xADD zpc,zpc,#2 << 16 �MOV R0,zpc,LSR#24 ��push(0) �MOV R0,zpc,LSR#16 ��push(0) �!�R F,F,#%10000 ; set BRK flag ��push(F) ��R F,F,#%00100 ; set I flag �8BIC F,F,#%10000 ; clear BRK flag..... seems to work! �!MOV R0,#&10000 : SUB R0,R0,#2 �LDRB zpc,[mem,R0] �ADD R0,R0,#1 �LDRB R0,[mem,R0] �ADD zpc,zpc,R0,LSL#8 MOV zpc,zpc,LSL#16 �fetch(0,7) ; ".opcode(&1) ; �A (n,X) ,�getpre(0,1) 6�ora(0,2,6) @; J.opcode(&2) ; ? T;�print(zpc) ^;MOV R0,#66 h;B raw_exit r�undoc(&2) |�fetch(1,2) �; �.opcode(&3) ; ? �&;ADDS R0,zpc,#(&10000-&FFF4) << 16 �;CMPEQ A,#&81 << 24 �ADD R0,zpc,#1 << 16 �;LDRB R0,[mem,R0,LSR#16] �MOV R2,#pagetable �LDRB R2,[R2,R0,LSR#28] �MOV R2,R2,LSL#12 �LDRB R0,[R2,R0,LSR#16] � CMP R0,#3 �BEQ osbput � CMP R0,#4 �BEQ osbget � MOV R0,#3 �B raw_exit ��fetch(1,2) ; .opcode(&4) ; TSB n �getzero(0,1) &�tsb(0) 0%STRB R0,[mem,R1] ; zero page STRB :�fetch(2,5) D; N.opcode(&5) ; �A n X�getzero(0,1) b�ora(0,2,3) l; v.opcode(&6) ; ASL n ��getzero(0,1) ��asl(0) �%STRB R0,[mem,R1] ; zero page STRB ��fetch(2,5) �; �'.opcode(&7) ; (SLO n - ASL n, �A n) �CMP zpc,#&8000 << 16 �;BHS opcode7 �MOVHS R0,#7 �BHS raw_exit ��getzero(0,1) ��asl(0) ��RS A,A,R0,LSL#24 ; �A zp STRB R0,[mem,R1] �fetch(2,0) ; .opcode(&8) ; PHP *�push(F) 4�fetch(1,3) >; H.opcode(&9) ; �A #N R�getbyte1(0) \�ora(0,2,2) f; p.opcode(&A) ; ASL A zMOVS A,A,LSL#1 � �setupNZC ��fetch(1,2) �; �/.opcode(&B) ; ANC (undocumented - Repton 2) � ; � #N, ASL A ��getbyte1(0) �� R0,A,R0,LSL#24 �MOVS A,A,LSL#1 � �setupNZC ��fetch(2,2) �; �.opcode(&C) ; TSB nn ��getabs(0,1) �tsb(0) �strb(0,1) �fetch(3,6) $; ..opcode(&D) ; �A nn 8�getabs(0,1) B�ora(0,3,4) L; V.opcode(&E) ; ASL nn `�getabs(0,1) j�asl(0) t�strb(0,1) ~�fetch(3,6) �; �.opcode(&F) ; ? ��undoc(&F) ��fetch(1,2) �; �.opcode(&10) ; BPL r �TST F,#%10000000 �BNE branch_fetch ��branch �; �.opcode(&11) ; �A (n),Y ��getpost(0,1) �ora(0,2,5) ; .opcode(&12) ; �A (n) �getzeroindir(0,1) (�ora(0,2,5) 2; <.opcode(&13) ; OSBYTE F�undoc(&13) P�fetch(1,2) Z; d; ;�print(A) n; ;SWI &100+�"O" x; CMP A,#19 << 24 �; BEQ opcode(&60) �; CMP A,#&81 << 24 �; BEQ osbyte81 �; CMP A,#&7A << 24 �; BEQ generic_osbyte �; CMP A,#&79 << 24 �; BEQ generic_osbyte �; CMP A,#&80 << 24 �; BEQ osbyte80 �; MOV R0,#&200 �; ADD R0,R0,#&A �; LDR zpc,[mem,R0] �; MOV zpc,zpc,LSL#16 ; �fetch(0,0) ; .osbyte81 ; ;MOVS R0,X,LSR#24 "; ;BEQ skip55 ,; ;�print2(0) 6; ;SWI "OS_ReadC" @; ;.skip55 J; CMP Y,#&80 << 24 T ; BHS os2 ^; CMP X,#&20 << 24 h; SWIHI "6502_UpdateScreen" r ; .os2 |; MOV R0,A,LSR#24 �; MOV R1,X,LSR#24 �; MOV R2,Y,LSR#24 �; SWI "OS_Byte" �; CMP Y,#&FF << 24 � ; BNE os3 �; BIC F,F,#%1 �; CMP R2,#&FF �; �REQ F,F,#1 � ; .os3 �; CMP Y,#&80 << 16 � ; BHS os4 �; CMP R2,#0 ; key detected �; CMPEQ R1,#�"'" ; �Q R1,#�": ; CMP R2,#&FF ; �Q R1,#0 &; CMP R1,#&1B 0; �Q R2,R1 :; �REQ F,F,#%1 D ; .os4 N; MOV A,R0,LSL#24 X; MOV X,R1,LSL#24 b; MOV Y,R2,LSL#24 l; �Q R0,#&FF v; LDREQB R1,[mem,R0] �; �R R1,R1,#&80 �; STREQB R1,[mem,R0] �; B opcode(&60) �; .generic_osbyte �; MOV R0,A,LSR#24 �; MOV R1,X,LSR#24 �; MOV R2,Y,LSR#24 �; SWI "OS_Byte" �; MOV A,R0,LSL#24 �; MOV X,R1,LSL#24 �; MOV Y,R2,LSL#24 �; B opcode(&60) �; .osbyte80 ; MOV X,#0 ; B opcode(&60) ; *.opcode(&14) ; TRB n 4�getzero(0,1) >�trb(0) H%STRB R0,[mem,R1] ; zero page STRB R�fetch(2,5) \; f.opcode(&15) ; �A n,X p�getzeroindex(0,1) z�ora(0,2,4) �; �.opcode(&16) ; ASL n,X ��getzeroindex(0,1) ��asl(0) �,STRB R0,[mem,R1,LSR#24] ; zero page STRB ��fetch(2,6) �; �.opcode(&17) ; ? ��undoc(&17) ��fetch(1,2) �; �.opcode(&18) ; CLC �BIC F,F,#%1 �fetch(1,2) ; .opcode(&19) ; �A nn,Y $�getabsindex(0,1,Y) .�ora(0,3,4) 8; B.opcode(&1A) ; INA L�inc(A) V�fetch(1,2) `; j.opcode(&1B) ; ? t�undoc(&1B) ~�fetch(1,2) �; �.opcode(&1C) ; TRB nn ��getabs(0,1) ��trb(0) ��strb(0,1) ��fetch(3,6) �; �.opcode(&1D) ; �A nn,X ��getabsindex(0,1,X) ��ora(0,3,4) �; �.opcode(&1E) ; ASL nn,X �getabsindex(0,1,X) �asl(0) �strb16(0,1) �fetch(3,7) (; 2.opcode(&1F) ; ? <�undoc(&1F) F�fetch(1,2) P; Z.opcode(&20) ; JSR nn d�getabs(0,1) nADD zpc,zpc,#2 << 16 xMOV R0,zpc,LSR#24 ��push(0) �MOV R0,zpc,LSR#16 ��push(0) �MOV zpc,R1,LSL#16 ��fetch(0,6) �; �.opcode(&21) ; � (n,X) ��getpre(0,1) ��and(0,2,6) �; �.opcode(&22) ; ? ��undoc(&22) ��fetch(1,2) ; .opcode(&23) ; ? ;MOV R0,#255 ";STRB R0,[mem,#lastmode] ,BL updatescreen 6;BL force_update_pal @;SWI "6502_UpdateScreen" J+MOV R0,#229 : MOV R1,#0 : SWI "OS_Byte" TSWI "OS_ReadC" ^MOV A,R0,LSL#24 hCMP R0,#&1B : �REQ F,F,#%1 rLDREQB R0,[mem,#&FF] |�REQ R0,R0,#&80 �STREQB R0,[mem,#&FF] �+MOV R0,#229 : MOV R1,#1 : SWI "OS_Byte" �B opcode(&60) ��fetch(1,2) �; �.opcode(&24) ; BIT n ��getzero(0,1) ��bit(0,2,3) �; �.opcode(&25) ; � n ��getzero(0,1) ��and(0,2,3) �; .opcode(&26) ; ROL n �getzero(0,1) �rol(0) &%STRB R0,[mem,R1] ; zero page STRB 0�fetch(2,5) :; D.opcode(&27) ; ? N�undoc(&27) X�fetch(1,2) b; l.opcode(&28) ; PLP v�pull(F) ��fetch(1,4) �; �.opcode(&29) ; � #N ��getbyte1(0) ��and(0,2,2) �; �.opcode(&2A) ; ROL A �MOV R0,A,LSR#24 ��rol(0) �MOV A,R0,LSL#24 ��fetch(1,2) �; �.opcode(&2B) ; ? �undoc(&2B) �fetch(1,2) ; .opcode(&2C) ; BIT nn *�getabs(0,1) 4�bit(0,3,4) >; H.opcode(&2D) ; � nn R�getabs(0,1) \�and(0,3,4) f; p.opcode(&2E) ; ROL nn z�getabs(0,1) ��rol(0) ��strb(0,1) ��fetch(3,6) �; �.opcode(&2F) ; ? ��undoc(&2F) ��fetch(1,2) �; �.opcode(&30) ; BMI r �TST F,#%10000000 �BEQ branch_fetch ��branch �; .opcode(&31) ; � (n),Y �getpost(0,1) �and(0,2,5) $; ..opcode(&32) ; � (n) 8�getzeroindir(0,1) B�and(0,2,5) L; V.opcode(&33) ; ? `�undoc(&33) j�fetch(1,2) t; ~.opcode(&34) ; BIT n,X ��getzeroindex(0,1) ��bit(0,2,4) �; �.opcode(&35) ; � n,X ��getzeroindex(0,1) ��and(0,2,4) �; �.opcode(&36) ; ROL n,X ��getzeroindex(0,1) ��rol(0) �STRB R0,[mem,R1,LSR#24] ��fetch(2,6) ; .opcode(&37) ; ? �undoc(&37) �fetch(1,2) (; 2.opcode(&38) ; SEC <�R F,F,#%1 F�fetch(1,2) P; Z.opcode(&39) ; � nn,Y d�getabsindex(0,1,Y) n�and(0,3,4) x; �.opcode(&3A) ; DEA ��dec(A) ��fetch(1,2) �; �.opcode(&3B) ; ? ��undoc(&3B) ��fetch(1,2) �; �.opcode(&3C) ; BIT nn,X ��getabsindex(0,1,X) ��bit(0,3,4) �; �.opcode(&3D) ; � nn,X �getabsindex(0,1,X) �and(0,3,4) ; ".opcode(&3E) ; ROL nn,X ,�getabsindex(0,1,X) 6�rol(0) @�strb16(0,1) J�fetch(3,7) T; ^.opcode(&3F) ; ? h�undoc(&3F) r�fetch(1,2) |; �.opcode(&40) ; RTI ��pull(F) ��pull(1) ��pull(zpc) �ADD zpc,zpc,R1,LSR#8 �BL interrupt � �(�fetch(0,6) ; yes, that should be 0! �; �.opcode(&41) ; � (n,X) ��getpre(0,1) ��eor(0,2,6) �; .opcode(&42) ; ? �undoc(&42) �fetch(1,2) &; 0.opcode(&43) ; ? :�undoc(&43) D�fetch(1,2) N; X.opcode(&44) ; ? b�undoc(&44) l�fetch(1,2) v; �.opcode(&45) ; � n ��getzero(0,1) ��eor(0,2,3) �; �.opcode(&46) ; LSR n ��getzero(0,1) ��lsr(0) �STRB R0,[mem,R1] ��fetch(2,5) �; �.opcode(&47) ; ? ��undoc(&47) ��fetch(1,2) ; .opcode(&48) ; PHA �push(A) �fetch(1,3) *; 4.opcode(&49) ; � #N >�getbyte1(0) H�eor(0,2,2) R; \.opcode(&4A) ; LSR A fMOVS A,A,LSR#25 pMOV A,A,LSL#24 z �setupNZC ��fetch(1,2) �; �).opcode(&4B) ; (ASR #N - � #N, LSR A) ��getbyte1(0) ; ��S A,A,R0,LSL#24 ; �;�setupNZ ; �and � �MOVS A,A,LSR#25 ; ��setupC ; �MOVS A,A,LSL#24 ; ��setupNZ ; LSR A ��fetch(2,0) � ;SWI &100+�"4" ;SWI &100+�"B" ;�fetch(1,2) $; ..opcode(&4C) ; JMP nn 8�getabs(0,1) BMOV zpc,R1,LSL#16 L�fetch(0,3) V; `.opcode(&4D) ; � nn j�getabs(0,1) t�eor(0,3,4) ~; �.opcode(&4E) ; LSR nn ��getabs(0,1) ��lsr(0) ��strb(0,1) ��fetch(3,6) �; �.opcode(&4F) ; ? ��undoc(&4F) ��fetch(1,2) �; �.opcode(&50) ; BVC r �TST F,#%1000000 BNE branch_fetch �branch ; .opcode(&51) ; � (n),Y (�getpost(0,1) 2�eor(0,2,5) <; F.opcode(&52) ; � (n) P�getzeroindir(0,1) Z�eor(0,2,5) d; n.opcode(&53) ; ? x�undoc(&53) ��fetch(1,2) �; �.opcode(&54) ; ? ��undoc(&54) ��fetch(1,2) �; �.opcode(&55) ; � n,X ��getzeroindex(0,1) ��eor(0,2,4) �; �.opcode(&56) ; LSR n,X ��getzeroindex(0,1) ��lsr(0) ,STRB R0,[mem,R1,LSR#24] ; zero page STRB �fetch(2,6) ; ".opcode(&57) ; ? ,�undoc(&57) 6�fetch(1,2) @; J.opcode(&58) ; CLI T ;B CLI ^BIC F,F,#%100 hADD zpc,zpc,#1 << 16 r;LDRB R0,keychk |;CMP R0,#0 �;BLEQ keyboard �BL keyboard �BL interrupt ��fetch(0,2) �; �.opcode(&59) ; � nn,Y ��getabsindex(0,1,Y) ��eor(0,3,4) �; �.opcode(&5A) ; PHY ��push(Y) ��fetch(1,3) �; .opcode(&5B) ; ? �undoc(&5B) �fetch(1,2) &; 0.opcode(&5C) ; ? :�undoc(&5C) D�fetch(1,2) N; X.opcode(&5D) ; � nn,X b�getabsindex(0,1,X) l�eor(0,3,4) v; �.opcode(&5E) ; LSR nn,X ��getabsindex(0,1,X) ��lsr(0) ��strb16(0,1) ��fetch(3,7) �; �.opcode(&5F) ; ? ��undoc(&5F) ��fetch(1,2) �; �.opcode(&60) ; RTS ��pull(1) ��pull(zpc) ADD zpc,zpc,R1,LSR#8 (�fetch(1,6) ; yes, that should be 1! ; .opcode(&61) ; ADC (n,X) *�getpre(0,1) 4�adc(0,2,6) >; H.opcode(&62) ; ? R�undoc(&62) \�fetch(1,2) f; p.opcode(&63) ; ? z�undoc(&63) ��fetch(1,2) �; �.opcode(&64) ; STZ n ��getbyte1(0) � MOV R1,#0 �%STRB R1,[mem,R0] ; zero page STRB ��fetch(2,3) �; �.opcode(&65) ; ADC n ��getzero(0,1) ��adc(0,2,3) �; �.opcode(&66) ; ROR n �getzero(0,1) �ror(0) %STRB R0,[mem,R1] ; zero page STRB $�fetch(2,5) .; 8.opcode(&67) ; ? B�undoc(&67) L�fetch(1,2) V; `.opcode(&68) ; PLA j�pull(A) t�fetch(1,4) ~; �.opcode(&69) ; ADC #N ��getbyte1(0) ��adc(0,2,2) �; �.opcode(&6A) ; ROR A �MOV R0,A,LSR#24 ��ror(0) �MOV A,R0,LSL#24 ��fetch(1,2) �; �.opcode(&6B) ; ? ��undoc(&6B) �fetch(1,2) ; .opcode(&6C) ; JMP (nn) �getabs(0,1) (ADD R1,R1,#1 2] < F� JMP (&xxFF) bug P� �master � electron% � Z [OPTp dTST R1,#&FF nSUBEQ R1,R1,#&100 x�Q R1,R1,LSL#16 ��Q R1,R1,LSR#16 �] �� � � [OPTp �;LDRB R1,[mem,R1] �MOV R2,#pagetable �LDRB R2,[R2,R1,LSR#12] �LDRB R1,[R1,R2,LSL#12] � �ADD R0,R0,R1,LSL#8 �MOV zpc,R0,LSL#16 ��fetch(0,5) ; .opcode(&6D) ; ADC nn �getabs(0,1) "�adc(0,3,4) ,; 6.opcode(&6E) ; ROR nn @�getabs(0,1) J�ror(0) T�strb(0,1) ^�fetch(3,6) h; r.opcode(&6F) ; ? |�undoc(&6F) ��fetch(1,2) �; �.opcode(&70) ; BVS r �TST F,#%1000000 �BEQ branch_fetch ��branch �; �.opcode(&71) ; ADC (n),Y ��getpost(0,1) ��adc(0,2,5) �; �.opcode(&72) ; ADC (n) ��getzeroindir(0,1) �adc(0,2,5) ; .opcode(&73) ; ? &�undoc(&73) 0�fetch(1,2) :; D.opcode(&74) ; STZ n,X N�zeroindex(0,1) X MOV R0,#0 bSTRB R0,[mem,R1,LSR#24] l�fetch(2,4) v; �.opcode(&75) ; ADC n,X ��getzeroindex(0,1) ��adc(0,2,4) �; �.opcode(&76) ; ROR n,X ��getzeroindex(0,1) ��ror(0) �,STRB R0,[mem,R1,LSR#24] ; zero page STRB ��fetch(2,6) �; �.opcode(&77) ; ? ��undoc(&77) ��fetch(1,2) ; .opcode(&78) ; SEI �R F,F,#%100 �fetch(1,2) *; 4.opcode(&79) ; ADC nn,Y >�getabsindex(0,1,Y) H�adc(0,3,4) R; \.opcode(&7A) ; PLY f�pull(Y) p�fetch(1,4) z; �.opcode(&7B) ; ? ��undoc(&7B) ��fetch(1,2) �; �.opcode(&7C) ; JMP (nn,X) � �abs(0,1) �MOV R0,R1,LSL#16 �ADD R0,R0,X,LSR#8 � �;LDRB R1,[mem,R0,LSR#16] �MOV R2,#pagetable �LDRB R2,[R2,R0,LSR#28] �MOV R2,R2,LSL#12 LDRB R1,[R2,R0,LSR#16] $ADD R0,R0,#1 << 16 .;LDRB R0,[mem,R0,LSR#16] 8MOV R2,#pagetable BLDRB R2,[R2,R0,LSR#28] LMOV R2,R2,LSL#12 VLDRB R0,[R2,R0,LSR#16] j t ~ADD R0,R1,R0,LSL#8 �MOV zpc,R0,LSL#16 ��fetch(0,6) �; �.opcode(&7D) ; ADC nn,X ��getabsindex(0,1,X) ��adc(0,3,4) �; �.opcode(&7E) ; ROR nn,X ��getabsindex(0,1,X) ��ror(0) ��strb16(0,1) ��fetch(3,7) ; .opcode(&7F) ; ? �undoc(&7F) �fetch(1,2) (; 2.opcode(&80) ; BRA r <�branch F; P.opcode(&81) ; STA (n,X) Z �pre(0,1) dMOV R0,A,LSR#24 n�strb(0,1) x�fetch(2,6) �; �.opcode(&82) ; ? ��undoc(&82) ��fetch(1,2) �; �.opcode(&83) ; ? ��undoc(&83) ��fetch(1,2) �; �.opcode(&84) ; STY n ��getbyte1(1) �MOV R0,Y,LSR#24 �%STRB R0,[mem,R1] ; zero page STRB �fetch(2,3) ; .opcode(&85) ; STA n "�getbyte1(1) ,MOV R0,A,LSR#24 6%STRB R0,[mem,R1] ; zero page STRB @�fetch(2,3) J; T.opcode(&86) ; STX n ^�getbyte1(1) hMOV R0,X,LSR#24 r%STRB R0,[mem,R1] ; zero page STRB |�fetch(2,3) �; �7.opcode(&87) ; (SAX n - store (A � X) in zero page) ��getbyte1(1) � �S R0,X,A ��setupNZ �MOV R0,R0,LSR#24 �%STRB R0,[mem,R1] ; zero page STRB ��fetch(2,0) �;SWI &100+�"8" �;SWI &100+�"7" �;�fetch(1,2) �; �.opcode(&88) ; DEY �dec(Y) �fetch(1,2) ; &.opcode(&89) ; BIT #N 0�getbyte1(0) :TST R0,A,LSR#24 D6BIC F,F,#%10 ; N and V unchanged in immediate mode N�REQ F,F,#%10 X.branch_fetch b�fetch(2,2) l; v.opcode(&8A) ; TXA �MOVS A,X ��setupNZ ��fetch(1,2) �; �.opcode(&8B) ; ? ��undoc(&8B) ��fetch(1,2) �; �.opcode(&8C) ; STY nn � �abs(0,1) �MOV R0,Y,LSR#24 ��strb(0,1) ��fetch(3,4) !; !.opcode(&8D) ; STA nn ! �abs(0,1) ! MOV R0,A,LSR#24 !*�strb(0,1) !4�fetch(3,4) !>; !H.opcode(&8E) ; STX nn !R �abs(0,1) !\MOV R0,X,LSR#24 !f�strb(0,1) !p�fetch(3,4) !z; !�.opcode(&8F) ; ? !��undoc(&8F) !��fetch(1,2) !�; !�.opcode(&90) ; BCC r !� TST F,#%1 !�BNE branch_fetch !��branch !�; !�.opcode(&91) ; STA (n),Y !��post(0,1) !�MOV R0,A,LSR#24 !��strb16(0,1) "�fetch(2,6) "; ".opcode(&92) ; STA (n) "$�zeroindir(0,1) ".MOV R0,A,LSR#24 "8�strb(0,1) "B�fetch(2,5) "L; "V.opcode(&93) ; ? "`�undoc(&93) "j�fetch(1,2) "t; "~.opcode(&94) ; STY n,X "��getzeroindex(0,1) "�MOV R0,Y,LSR#24 "�,STRB R0,[mem,R1,LSR#24] ; zero page STRB "��fetch(2,4) "�; "�.opcode(&95) ; STA n,X "��zeroindex(0,1) "�MOV R0,A,LSR#24 "�,STRB R0,[mem,R1,LSR#24] ; zero page STRB "��fetch(2,4) "�; "�.opcode(&96) ; STX n,Y # �zeroindexY(0,1) # MOV R0,X,LSR#24 #,STRB R0,[mem,R1,LSR#24] ; zero page STRB # #(�fetch(2,4) #2; #<.opcode(&97) ; ? #F�undoc(&97) #P�fetch(1,2) #Z; #d.opcode(&98) ; TYA #nMOVS A,Y #x�setupNZ #��fetch(1,2) #�; #�.opcode(&99) ; STA nn,Y #��absindex(0,1,Y) #�MOV R0,A,LSR#24 #��strb16(0,1) #��fetch(3,5) #�; #�.opcode(&9A) ; TXS #�"MOVS SP,X ; flags not affected #��R SP,SP,#1 #��setupNZ #��fetch(1,2) $; $.opcode(&9B) ; ? $�undoc(&9B) $"�fetch(1,2) $,; $6.opcode(&9C) ; STZ nn $@ �abs(0,1) $J MOV R0,#0 $T�strb(0,1) $^�fetch(3,4) $h; $r.opcode(&9D) ; STA nn,X $|�absindex(0,1,X) $�MOV R0,A,LSR#24 $��strb16(0,1) $��fetch(3,5) $�; $�.opcode(&9E) ; STZ nn,X $��absindex(0,1,X) $� MOV R0,#0 $��strb16(0,1) $��fetch(3,5) $�; $�.opcode(&9F) ; ? $��undoc(&9F) $��fetch(1,2) %; %.opcode(&A0) ; LDY #N %�getbyte1(0) %&�ldy(0,2,2) %0; %:.opcode(&A1) ; LDA (n,X) %D�getpre(0,1) %N�lda(0,2,6) %X; %b.opcode(&A2) ; LDX #N %l�getbyte1(0) %v�ldx(0,2,2) %�; %�.opcode(&A3) ; ? %��undoc(&A3) %��fetch(1,2) %�; %�.opcode(&A4) ; LDY n %��getzero(0,1) %��ldy(0,2,3) %�; %�.opcode(&A5) ; LDA n %��getzero(0,1) %��lda(0,2,3) %�; &.opcode(&A6) ; LDX n &�getzero(0,1) &�ldx(0,2,3) & ; &*.opcode(&A7) ; ? &4�undoc(&A7) &>�fetch(1,2) &H; &R.opcode(&A8) ; TAY &\MOVS Y,A &f�setupNZ &p�fetch(1,2) &z; &�.opcode(&A9) ; LDA #N &��getbyte1(0) &��lda(0,2,2) &�; &�.opcode(&AA) ; TAX &�MOVS X,A &��setupNZ &��fetch(1,2) &�; &�.opcode(&AB) ; ? &��undoc(&AB) &��fetch(1,2) &�; '.opcode(&AC) ; LDY nn '�getabs(0,1) '�ldy(0,3,4) '$; '..opcode(&AD) ; LDA nn '8�getabs(0,1) 'B�lda(0,3,4) 'L; 'V.opcode(&AE) ; LDX nn '`�getabs(0,1) 'j�ldx(0,3,4) 't; '~.opcode(&AF) ; ? '��undoc(&AF) '��fetch(1,2) '�; '�.opcode(&B0) ; BCS r '� TST F,#%1 '�BEQ branch_fetch '��branch '�; '�.opcode(&B1) ; LDA (n),Y '��getpost(0,1) '��lda(0,2,5) '�; ( .opcode(&B2) ; LDA (n) ( �getzeroindir(0,1) (�lda(0,2,5) (; ((.opcode(&B3) ; ? (2�undoc(&B3) (<�fetch(1,2) (F; (P.opcode(&B4) ; LDY n,X (Z�getzeroindex(0,1) (d�ldy(0,2,4) (n; (x.opcode(&B5) ; LDA n,X (��getzeroindex(0,1) (��lda(0,2,4) (�; (�.opcode(&B6) ; LDX n,Y (��getzeroindexY(0,1) (��ldx(0,2,4) (�; (�.opcode(&B7) ; ? (��undoc(&B7) (��fetch(1,2) (�; (�.opcode(&B8) ; CLV (�BIC F,F,#%1000000 )�fetch(1,2) ); ).opcode(&B9) ; LDA nn,Y )"�getabsindex(0,1,Y) ),�lda(0,3,4) )6; )@.opcode(&BA) ; TSX )J�S X,SP,#&FF000000 )T�setupNZ )^�fetch(1,2) )h; )r.opcode(&BB) ; ? )|�undoc(&BB) )��fetch(1,2) )�; )�.opcode(&BC) ; LDY nn,X )��getabsindex(0,1,X) )��ldy(0,3,4) )�; )�.opcode(&BD) ; LDA nn,X )��getabsindex(0,1,X) )��lda(0,3,4) )�; )�.opcode(&BE) ; LDX nn,Y )��getabsindex(0,1,Y) )��ldx(0,3,4) *; *.opcode(&BF) ; ? *�undoc(&BF) *&�fetch(1,2) *0; *:.opcode(&C0) ; CPY #N *D�getbyte1(0) *N�cpy(0,2,2) *X; *b.opcode(&C1) ; CMP (n,X) *l�getpre(0,1) *v�cmp(0,2,6) *�; *�.opcode(&C2) ; ? *��undoc(&C2) *��fetch(1,2) *�; *�.opcode(&C3) ; ? *��undoc(&C3) *��fetch(1,2) *�; *�.opcode(&C4) ; CPY n *��getzero(0,1) *��cpy(0,2,3) *�; +.opcode(&C5) ; CMP n +�getzero(0,1) +�cmp(0,2,3) + ; +*.opcode(&C6) ; DEC n +4�getzero(0,1) +>�dec(0) +H%STRB R0,[mem,R1] ; zero page STRB +R�fetch(2,5) +\; +f.opcode(&C7) ; ? +p�undoc(&C7) +z�fetch(1,2) +�; +�.opcode(&C8) ; INY +��inc(Y) +��fetch(1,2) +�; +�.opcode(&C9) ; CMP #N +��getbyte1(0) +��cmp(0,2,2) +�; +�.opcode(&CA) ; DEX +��dec(X) +��fetch(1,2) +�; ,.opcode(&CB) ; ? ,�undoc(&CB) ,�fetch(1,2) ,$; ,..opcode(&CC) ; CPY nn ,8�getabs(0,1) ,B�cpy(0,3,4) ,L; ,V.opcode(&CD) ; CMP nn ,`�getabs(0,1) ,j�cmp(0,3,4) ,t; ,~.opcode(&CE) ; DEC nn ,��getabs(0,1) ,��dec(0) ,��strb(0,1) ,��fetch(3,6) ,�; ,�.opcode(&CF) ; ? ,��undoc(&CF) ,��fetch(1,2) ,�; ,�.opcode(&D0) ; BNE r ,�TST F,#%10 ,�BNE branch_fetch - �branch - ; -.opcode(&D1) ; CMP (n),Y -�getpost(0,1) -(�cmp(0,2,5) -2; -<.opcode(&D2) ; CMP (n) -F�getzeroindir(0,1) -P�cmp(0,2,5) -Z; -d.opcode(&D3) ; ? -n�undoc(&D3) -x�fetch(1,2) -�; -�.opcode(&D4) ; ? -��undoc(&D4) -��fetch(1,2) -�; -�.opcode(&D5) ; CMP n,X -��getzeroindex(0,1) -��cmp(0,2,4) -�; -�.opcode(&D6) ; DEC n,X -��getzeroindex(0,1) -��dec(0) -�STRB R0,[mem,R1,LSR#24] .�fetch(2,6) .; ..opcode(&D7) ; ? ."�undoc(&D7) .,�fetch(1,2) .6; .@.opcode(&D8) ; CLD .JTST F,#%1000 .TSUBNE table,table,#256*64*4 .^BICNE F,F,#%1000 .h;ADR table,opcodetable .r�fetch(1,2) .|; .�.opcode(&D9) ; CMP nn,Y .��getabsindex(0,1,Y) .��cmp(0,3,4) .�; .�.opcode(&DA) ; PHX .��push(X) .��fetch(1,3) .�; .�.opcode(&DB) ; ? .��undoc(&DB) .��fetch(1,2) .�; .�.opcode(&DC) ; (NOP nn,X) /;SWI &100+�"D" /;SWI &100+�"C" / /&�fetch(3,0) /0; /:.opcode(&DD) ; CMP nn,X /D�getabsindex(0,1,X) /N�cmp(0,3,4) /X; /b.opcode(&DE) ; DEC nn,X /l�getabsindex(0,1,X) /v�dec(0) /��strb16(0,1) /��fetch(3,7) /�; /�.opcode(&DF) ; ? /��undoc(&DF) /��fetch(1,2) /�; /�.opcode(&E0) ; CPX #N /��getbyte1(0) /��cpx(0,2,2) /�; /�.opcode(&E1) ; SBC (n,X) /��getpre(0,1) 0�sbc(0,2,6) 0; 0.opcode(&E2) ; ? 0 �undoc(&E2) 0*�fetch(1,2) 04; 0>.opcode(&E3) ; ? 0H�undoc(&E3) 0R�fetch(1,2) 0\; 0f.opcode(&E4) ; CPX n 0p�getzero(0,1) 0z�cpx(0,2,3) 0�; 0�.opcode(&E5) ; SBC n 0��getzero(0,1) 0��sbc(0,2,3) 0�; 0�.opcode(&E6) ; INC n 0��getzero(0,1) 0��inc(0) 0�%STRB R0,[mem,R1] ; zero page STRB 0��fetch(2,5) 0�; 0�.opcode(&E7) ; ? 0��undoc(&E7) 1�fetch(1,2) 1; 1.opcode(&E8) ; INX 1$�inc(X) 1.�fetch(1,2) 18; 1B.opcode(&E9) ; SBC #N 1L�getbyte1(0) 1V�sbc(0,2,2) 1`; 1j.opcode(&EA) ; NOP 1t 1~�fetch(1,2) 1�; 1�.opcode(&EB) ; ? 1��undoc(&EB) 1��fetch(1,2) 1�; 1�.opcode(&EC) ; CPX nn 1��getabs(0,1) 1��cpx(0,3,4) 1�; 1�.opcode(&ED) ; SBC nn 1��getabs(0,1) 1��sbc(0,3,4) 2 ; 2 .opcode(&EE) ; INC nn 2�getabs(0,1) 2�inc(0) 2(�strb(0,1) 22�fetch(3,6) 2<; 2F.opcode(&EF) ; ? 2P�undoc(&EF) 2Z�fetch(1,2) 2d; 2n.opcode(&F0) ; BEQ r 2xTST F,#%10 2�BEQ branch_fetch 2��branch 2�; 2�.opcode(&F1) ; SBC (n),Y 2��getpost(0,1) 2��sbc(0,2,5) 2�; 2�.opcode(&F2) ; SBC (n) 2��getzeroindir(0,1) 2��sbc(0,2,5) 2�; 2�.opcode(&F3) ; ? 2��undoc(&F3) 3�fetch(1,2) 3; 3.opcode(&F4) ; ? 3"�undoc(&F4) 3,�fetch(1,2) 36; 3@.opcode(&F5) ; SBC n,X 3J�getzeroindex(0,1) 3T�sbc(0,2,4) 3^; 3h.opcode(&F6) ; INC n,X 3r�getzeroindex(0,1) 3|�inc(0) 3�,STRB R0,[mem,R1,LSR#24] ; zero page STRB 3��fetch(2,6) 3�; 3�.opcode(&F7) ; ? 3��undoc(&F7) 3��fetch(1,2) 3�; 3�.opcode(&F8) ; SED 3�TST F,#%1000 3�ADDEQ table,table,#256*64*4 3��REQ F,F,#%1000 3�;ADR table,bcdtable 3��fetch(1,2) 4; 4.opcode(&F9) ; SBC nn,Y 4�getabsindex(0,1,Y) 4&�sbc(0,3,4) 40; 4:.opcode(&FA) ; PLX 4D�pull(X) 4N�fetch(1,4) 4X; 4b.opcode(&FB) ; ? 4l�undoc(&FB) 4v�fetch(1,2) 4�; 4�.opcode(&FC) ; ? 4��undoc(&FC) 4��fetch(1,2) 4�; 4�.opcode(&FD) ; SBC nn,X 4��getabsindex(0,1,X) 4��sbc(0,3,4) 4�; 4�.opcode(&FE) ; INC nn,X 4��getabsindex(0,1,X) 4��inc(0) 4��strb16(0,1) 5�fetch(3,7) 5; 5.opcode(&FF) ; ? 5 �undoc(&FF) 5*�fetch(1,2) 54; 5>] 5H� bcd_loop% 5R 5\*�FOR I%=code+0 TO code+255*4*64 STEP 4 5f�bcd(0)!I%=opcode(0)!I% 5p �NEXT 5z P%=bcd(0) 5�O%=P%+code 5� [OPTp 5� �bcd(&61) 5�.bcd(&61) ; ADC (n,X) 5��getpre(0,1) 5��adcBCD(0,2,6) 5� 5� �bcd(&65) 5�.bcd(&65) ; ADC n 5��getzero(0,1) 5��adcBCD(0,2,3) 5� 5� �bcd(&69) 6.bcd(&69) ; ADC #N 6�getbyte1(0) 6�adcBCD(0,2,2) 6$ 6. �bcd(&6D) 68.bcd(&6D) ; ADC nn 6B�getabs(0,1) 6L�adcBCD(0,3,4) 6V 6` �bcd(&71) 6j.bcd(&71) ; ADC (n),Y 6t�getpost(0,1) 6~�adcBCD(0,2,5) 6� 6� �bcd(&72) 6�.bcd(&72) ; ADC (n) 6��getzeroindir(0,1) 6��adcBCD(0,2,5) 6� 6� �bcd(&75) 6�.bcd(&75) ; ADC n,X 6��getzeroindex(0,1) 6��adcBCD(0,2,4) 6� 6� �bcd(&79) 7 .bcd(&79) ; ADC nn,Y 7 �getabsindex(0,1,Y) 7�adcBCD(0,3,4) 7 7( �bcd(&7D) 72.bcd(&7D) ; ADC nn,X 7<�getabsindex(0,1,X) 7F�adcBCD(0,3,4) 7P 7Z �bcd(&E1) 7d.bcd(&E1) ; SBC (n,X) 7n�getpre(0,1) 7x�sbcBCD(0,2,6) 7� 7� �bcd(&E5) 7�.bcd(&E5) ; SBC n 7��getzero(0,1) 7��sbcBCD(0,2,3) 7� �bcd(&E6) 7� 7� �bcd(&E9) 7�.bcd(&E9) ; SBC #N 7��getbyte1(0) 7��sbcBCD(0,2,2) 7� 7� �bcd(&ED) 8.bcd(&ED) ; SBC nn 8�getabs(0,1) 8�sbcBCD(0,3,4) 8" 8, �bcd(&F1) 86.bcd(&F1) ; SBC (n),Y 8@�getpost(0,1) 8J�sbcBCD(0,2,5) 8T 8^ �bcd(&F2) 8h.bcd(&F2) ; SBC (n) 8r�getzeroindir(0,1) 8|�sbcBCD(0,2,5) 8� 8� �bcd(&F5) 8�.bcd(&F5) ; SBC n,X 8��getzeroindex(0,1) 8��sbcBCD(0,2,4) 8� 8� �bcd(&F9) 8�.bcd(&F9) ; SBC nn,Y 8��getabsindex(0,1,Y) 8��sbcBCD(0,3,4) 8� 8� �bcd(&FD) 8�.bcd(&FD) ; SBC nn,X 9�getabsindex(0,1,X) 9�sbcBCD(0,3,4) 9 9&�bcd(&100) 90] 9: 9D="" 9N 9Xݤbranch 9b [OPTp 9lMOV R12,zpc,LSR#24 9v�getbyte1(0) 9�ADD zpc,zpc,R0,LSL#16 9�CMP R0,#&80 9�SUBGE zpc,zpc,#254 << 16 9�ADDLT zpc,zpc,#2 << 16 9�CMP R12,zpc,LSR#24 9�2SUBEQ time,time,#1 ; page boundary not crossed 9�.SUBNE time,time,#2 ; page boundary crossed 9��fetch(0,2) 9�] 9�="" 9� 9�ݤtrb(R) 9� [OPTp :TST R,A,LSR#24 :�setupZ :BIC R,R,A,LSR#24 : ] :*="" :4 :>ݤtsb(R) :H [OPTp :RTST R,A,LSR#24 :\�setupZ :f�R R,R,A,LSR#24 :p] :z="" :� :�ݤasl(R) :� [OPTp :�MOVS R,R,LSL#25 :�MOV R,R,LSR#24 :� �setupNZC :�] :�="" :� :�ݤlsr(R) :� [OPTp :�BIC F,F,#%10000011 :�MOVS R,R,LSR#1 ;�RCS F,F,#%1 ;MOVS R2,R,LSL#24 ;�RMI F,F,#%10000000 ;$�REQ F,F,#%10 ;.] ;8="" ;B ;Lݤrol(R) ;V� R=1 � ;` [OPTp ;j.;MOVS R2,F,RRX ; � 6502 CARRY �O ARM CARRY ;t� R2,F,#%1 ;~BIC F,F,#%10000011 ;�MOVS R,R,LSL#24 ;��R R,R,R2,LSL#23 ;�MOVS R,R,LSL#1 ;�MOV R,R,LSR#24 ;� �setupNZC ;�] ;�="" ;� ;�ݤror(R) ;�� R=1 � ;� [OPTp ;�-MOVS R2,F,RRX ; � 6502 CARRY �O ARM CARRY <