Home » Archimedes archive » Zipped Apps » 6502em » !6502Em/src/Opcodes
!6502Em/src/Opcodes
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/Opcodes |
Read OK: | ✔ |
File size: | 77D5 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 440LDRB R0,[mem,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 6561[OPTp 6570LDRB R1,[mem,R1] 6580ADD R0,R0,R1,LSL#8 6590MOV zpc,R0,LSL#16 6600FNfetch(0,5) 6610; 6620.opcode(&6D) ; ADC nn 6630FNgetabs(0,1) 6640FNadc(0,3,4) 6650; 6660.opcode(&6E) ; ROR nn 6670FNgetabs(0,1) 6680FNror(0) 6690FNstrb(0,1) 6700FNfetch(3,6) 6710; 6720.opcode(&6F) ; ? 6730FNundoc(&6F) 6740FNfetch(1,2) 6750; 6760.opcode(&70) ; BVS r 6770TST F,#%1000000 6780BEQ branch_fetch 6790FNbranch 6800; 6810.opcode(&71) ; ADC (n),Y 6820FNgetpost(0,1) 6830FNadc(0,2,5) 6840; 6850.opcode(&72) ; ADC (n) 6860FNgetzeroindir(0,1) 6870FNadc(0,2,5) 6880; 6890.opcode(&73) ; ? 6900FNundoc(&73) 6910FNfetch(1,2) 6920; 6930.opcode(&74) ; STZ n,X 6940FNzeroindex(0,1) 6950MOV R0,#0 6960STRB R0,[mem,R1,LSR#24] 6970FNfetch(2,4) 6980; 6990.opcode(&75) ; ADC n,X 7000FNgetzeroindex(0,1) 7010FNadc(0,2,4) 7020; 7030.opcode(&76) ; ROR n,X 7040FNgetzeroindex(0,1) 7050FNror(0) 7060STRB R0,[mem,R1,LSR#24] ; zero page STRB 7070FNfetch(2,6) 7080; 7090.opcode(&77) ; ? 7100FNundoc(&77) 7110FNfetch(1,2) 7120; 7130.opcode(&78) ; SEI 7140ORR F,F,#%100 7150FNfetch(1,2) 7160; 7170.opcode(&79) ; ADC nn,Y 7180FNgetabsindex(0,1,Y) 7190FNadc(0,3,4) 7200; 7210.opcode(&7A) ; PLY 7220FNpull(Y) 7230FNfetch(1,4) 7240; 7250.opcode(&7B) ; ? 7260FNundoc(&7B) 7270FNfetch(1,2) 7280; 7290.opcode(&7C) ; JMP (nn,X) 7300FNabs(0,1) 7310MOV R0,R1,LSL#16 7320ADD R0,R0,X,LSR#8 7330LDRB R1,[mem,R0,LSR#16] 7340ADD R0,R0,#1 << 16 7350LDRB R0,[mem,R0,LSR#16] 7360ADD R0,R1,R0,LSL#8 7370MOV zpc,R0,LSL#16 7380FNfetch(0,6) 7390; 7400.opcode(&7D) ; ADC nn,X 7410FNgetabsindex(0,1,X) 7420FNadc(0,3,4) 7430; 7440.opcode(&7E) ; ROR nn,X 7450FNgetabsindex(0,1,X) 7460FNror(0) 7470FNstrb16(0,1) 7480FNfetch(3,7) 7490; 7500.opcode(&7F) ; ? 7510FNundoc(&7F) 7520FNfetch(1,2) 7530; 7540.opcode(&80) ; BRA r 7550FNbranch 7560; 7570.opcode(&81) ; STA (n,X) 7580FNpre(0,1) 7590MOV R0,A,LSR#24 7600FNstrb(0,1) 7610FNfetch(2,6) 7620; 7630.opcode(&82) ; ? 7640FNundoc(&82) 7650FNfetch(1,2) 7660; 7670.opcode(&83) ; ? 7680FNundoc(&83) 7690FNfetch(1,2) 7700; 7710.opcode(&84) ; STY n 7720FNgetbyte1(1) 7730MOV R0,Y,LSR#24 7740STRB R0,[mem,R1] ; zero page STRB 7750FNfetch(2,3) 7760; 7770.opcode(&85) ; STA n 7780FNgetbyte1(1) 7790MOV R0,A,LSR#24 7800STRB R0,[mem,R1] ; zero page STRB 7810FNfetch(2,3) 7820; 7830.opcode(&86) ; STX n 7840FNgetbyte1(1) 7850MOV R0,X,LSR#24 7860STRB R0,[mem,R1] ; zero page STRB 7870FNfetch(2,3) 7880; 7890.opcode(&87) ; (SAX n - store (A AND X) in zero page) 7900FNgetbyte1(1) 7910ANDS R0,X,A 7920FNsetupNZ 7930MOV R0,R0,LSR#24 7940STRB R0,[mem,R1] ; zero page STRB 7950FNfetch(2,0) 7960;SWI &100+ASC"8" 7970;SWI &100+ASC"7" 7980;FNfetch(1,2) 7990; 8000.opcode(&88) ; DEY 8010FNdec(Y) 8020FNfetch(1,2) 8030; 8040.opcode(&89) ; BIT #N 8050FNgetbyte1(0) 8060TST R0,A,LSR#24 8070BIC F,F,#%10 ; N and V unchanged in immediate mode 8080ORREQ F,F,#%10 8090.branch_fetch 8100FNfetch(2,2) 8110; 8120.opcode(&8A) ; TXA 8130MOVS A,X 8140FNsetupNZ 8150FNfetch(1,2) 8160; 8170.opcode(&8B) ; ? 8180FNundoc(&8B) 8190FNfetch(1,2) 8200; 8210.opcode(&8C) ; STY nn 8220FNabs(0,1) 8230MOV R0,Y,LSR#24 8240FNstrb(0,1) 8250FNfetch(3,4) 8260; 8270.opcode(&8D) ; STA nn 8280FNabs(0,1) 8290MOV R0,A,LSR#24 8300FNstrb(0,1) 8310FNfetch(3,4) 8320; 8330.opcode(&8E) ; STX nn 8340FNabs(0,1) 8350MOV R0,X,LSR#24 8360FNstrb(0,1) 8370FNfetch(3,4) 8380; 8390.opcode(&8F) ; ? 8400FNundoc(&8F) 8410FNfetch(1,2) 8420; 8430.opcode(&90) ; BCC r 8440TST F,#%1 8450BNE branch_fetch 8460FNbranch 8470; 8480.opcode(&91) ; STA (n),Y 8490FNpost(0,1) 8500MOV R0,A,LSR#24 8510FNstrb16(0,1) 8520FNfetch(2,6) 8530; 8540.opcode(&92) ; STA (n) 8550FNzeroindir(0,1) 8560MOV R0,A,LSR#24 8570FNstrb(0,1) 8580FNfetch(2,5) 8590; 8600.opcode(&93) ; ? 8610FNundoc(&93) 8620FNfetch(1,2) 8630; 8640.opcode(&94) ; STY n,X 8650FNgetzeroindex(0,1) 8660MOV R0,Y,LSR#24 8670STRB R0,[mem,R1,LSR#24] ; zero page STRB 8680FNfetch(2,4) 8690; 8700.opcode(&95) ; STA n,X 8710FNzeroindex(0,1) 8720MOV R0,A,LSR#24 8730STRB R0,[mem,R1,LSR#24] ; zero page STRB 8740FNfetch(2,4) 8750; 8760.opcode(&96) ; STX n,Y 8770FNzeroindexY(0,1) 8780MOV R0,X,LSR#24 8790STRB R0,[mem,R1,LSR#24] ; zero page STRB 8800 8810FNfetch(2,4) 8820; 8830.opcode(&97) ; ? 8840FNundoc(&97) 8850FNfetch(1,2) 8860; 8870.opcode(&98) ; TYA 8880MOVS A,Y 8890FNsetupNZ 8900FNfetch(1,2) 8910; 8920.opcode(&99) ; STA nn,Y 8930FNabsindex(0,1,Y) 8940MOV R0,A,LSR#24 8950FNstrb16(0,1) 8960FNfetch(3,5) 8970; 8980.opcode(&9A) ; TXS 8990MOVS SP,X ; flags not affected 9000ORR SP,SP,#1 9010FNsetupNZ 9020FNfetch(1,2) 9030; 9040.opcode(&9B) ; ? 9050FNundoc(&9B) 9060FNfetch(1,2) 9070; 9080.opcode(&9C) ; STZ nn 9090FNabs(0,1) 9100MOV R0,#0 9110FNstrb(0,1) 9120FNfetch(3,4) 9130; 9140.opcode(&9D) ; STA nn,X 9150FNabsindex(0,1,X) 9160MOV R0,A,LSR#24 9170FNstrb16(0,1) 9180FNfetch(3,5) 9190; 9200.opcode(&9E) ; STZ nn,X 9210FNabsindex(0,1,X) 9220MOV R0,#0 9230FNstrb16(0,1) 9240FNfetch(3,5) 9250; 9260.opcode(&9F) ; ? 9270FNundoc(&9F) 9280FNfetch(1,2) 9290; 9300.opcode(&A0) ; LDY #N 9310FNgetbyte1(0) 9320FNldy(0,2,2) 9330; 9340.opcode(&A1) ; LDA (n,X) 9350FNgetpre(0,1) 9360FNlda(0,2,6) 9370; 9380.opcode(&A2) ; LDX #N 9390FNgetbyte1(0) 9400FNldx(0,2,2) 9410; 9420.opcode(&A3) ; ? 9430FNundoc(&A3) 9440FNfetch(1,2) 9450; 9460.opcode(&A4) ; LDY n 9470FNgetzero(0,1) 9480FNldy(0,2,3) 9490; 9500.opcode(&A5) ; LDA n 9510FNgetzero(0,1) 9520FNlda(0,2,3) 9530; 9540.opcode(&A6) ; LDX n 9550FNgetzero(0,1) 9560FNldx(0,2,3) 9570; 9580.opcode(&A7) ; ? 9590FNundoc(&A7) 9600FNfetch(1,2) 9610; 9620.opcode(&A8) ; TAY 9630MOVS Y,A 9640FNsetupNZ 9650FNfetch(1,2) 9660; 9670.opcode(&A9) ; LDA #N 9680FNgetbyte1(0) 9690FNlda(0,2,2) 9700; 9710.opcode(&AA) ; TAX 9720MOVS X,A 9730FNsetupNZ 9740FNfetch(1,2) 9750; 9760.opcode(&AB) ; ? 9770FNundoc(&AB) 9780FNfetch(1,2) 9790; 9800.opcode(&AC) ; LDY nn 9810FNgetabs(0,1) 9820FNldy(0,3,4) 9830; 9840.opcode(&AD) ; LDA nn 9850FNgetabs(0,1) 9860FNlda(0,3,4) 9870; 9880.opcode(&AE) ; LDX nn 9890FNgetabs(0,1) 9900FNldx(0,3,4) 9910; 9920.opcode(&AF) ; ? 9930FNundoc(&AF) 9940FNfetch(1,2) 9950; 9960.opcode(&B0) ; BCS r 9970TST F,#%1 9980BEQ branch_fetch 9990FNbranch 10000; 10010.opcode(&B1) ; LDA (n),Y 10020FNgetpost(0,1) 10030FNlda(0,2,5) 10040; 10050.opcode(&B2) ; LDA (n) 10060FNgetzeroindir(0,1) 10070FNlda(0,2,5) 10080; 10090.opcode(&B3) ; ? 10100FNundoc(&B3) 10110FNfetch(1,2) 10120; 10130.opcode(&B4) ; LDY n,X 10140FNgetzeroindex(0,1) 10150FNldy(0,2,4) 10160; 10170.opcode(&B5) ; LDA n,X 10180FNgetzeroindex(0,1) 10190FNlda(0,2,4) 10200; 10210.opcode(&B6) ; LDX n,Y 10220FNgetzeroindexY(0,1) 10230FNldx(0,2,4) 10240; 10250.opcode(&B7) ; ? 10260FNundoc(&B7) 10270FNfetch(1,2) 10280; 10290.opcode(&B8) ; CLV 10300BIC F,F,#%1000000 10310FNfetch(1,2) 10320; 10330.opcode(&B9) ; LDA nn,Y 10340FNgetabsindex(0,1,Y) 10350FNlda(0,3,4) 10360; 10370.opcode(&BA) ; TSX 10380ANDS X,SP,#&FF000000 10390FNsetupNZ 10400FNfetch(1,2) 10410; 10420.opcode(&BB) ; ? 10430FNundoc(&BB) 10440FNfetch(1,2) 10450; 10460.opcode(&BC) ; LDY nn,X 10470FNgetabsindex(0,1,X) 10480FNldy(0,3,4) 10490; 10500.opcode(&BD) ; LDA nn,X 10510FNgetabsindex(0,1,X) 10520FNlda(0,3,4) 10530; 10540.opcode(&BE) ; LDX nn,Y 10550FNgetabsindex(0,1,Y) 10560FNldx(0,3,4) 10570; 10580.opcode(&BF) ; ? 10590FNundoc(&BF) 10600FNfetch(1,2) 10610; 10620.opcode(&C0) ; CPY #N 10630FNgetbyte1(0) 10640FNcpy(0,2,2) 10650; 10660.opcode(&C1) ; CMP (n,X) 10670FNgetpre(0,1) 10680FNcmp(0,2,6) 10690; 10700.opcode(&C2) ; ? 10710FNundoc(&C2) 10720FNfetch(1,2) 10730; 10740.opcode(&C3) ; ? 10750FNundoc(&C3) 10760FNfetch(1,2) 10770; 10780.opcode(&C4) ; CPY n 10790FNgetzero(0,1) 10800FNcpy(0,2,3) 10810; 10820.opcode(&C5) ; CMP n 10830FNgetzero(0,1) 10840FNcmp(0,2,3) 10850; 10860.opcode(&C6) ; DEC n 10870FNgetzero(0,1) 10880FNdec(0) 10890STRB R0,[mem,R1] ; zero page STRB 10900FNfetch(2,5) 10910; 10920.opcode(&C7) ; ? 10930FNundoc(&C7) 10940FNfetch(1,2) 10950; 10960.opcode(&C8) ; INY 10970FNinc(Y) 10980FNfetch(1,2) 10990; 11000.opcode(&C9) ; CMP #N 11010FNgetbyte1(0) 11020FNcmp(0,2,2) 11030; 11040.opcode(&CA) ; DEX 11050FNdec(X) 11060FNfetch(1,2) 11070; 11080.opcode(&CB) ; ? 11090FNundoc(&CB) 11100FNfetch(1,2) 11110; 11120.opcode(&CC) ; CPY nn 11130FNgetabs(0,1) 11140FNcpy(0,3,4) 11150; 11160.opcode(&CD) ; CMP nn 11170FNgetabs(0,1) 11180FNcmp(0,3,4) 11190; 11200.opcode(&CE) ; DEC nn 11210FNgetabs(0,1) 11220FNdec(0) 11230FNstrb(0,1) 11240FNfetch(3,6) 11250; 11260.opcode(&CF) ; ? 11270FNundoc(&CF) 11280FNfetch(1,2) 11290; 11300.opcode(&D0) ; BNE r 11310TST F,#%10 11320BNE branch_fetch 11330FNbranch 11340; 11350.opcode(&D1) ; CMP (n),Y 11360FNgetpost(0,1) 11370FNcmp(0,2,5) 11380; 11390.opcode(&D2) ; CMP (n) 11400FNgetzeroindir(0,1) 11410FNcmp(0,2,5) 11420; 11430.opcode(&D3) ; ? 11440FNundoc(&D3) 11450FNfetch(1,2) 11460; 11470.opcode(&D4) ; ? 11480FNundoc(&D4) 11490FNfetch(1,2) 11500; 11510.opcode(&D5) ; CMP n,X 11520FNgetzeroindex(0,1) 11530FNcmp(0,2,4) 11540; 11550.opcode(&D6) ; DEC n,X 11560FNgetzeroindex(0,1) 11570FNdec(0) 11580STRB R0,[mem,R1,LSR#24] 11590FNfetch(2,6) 11600; 11610.opcode(&D7) ; ? 11620FNundoc(&D7) 11630FNfetch(1,2) 11640; 11650.opcode(&D8) ; CLD 11660TST F,#%1000 11670SUBNE table,table,#256*64*4 11680BICNE F,F,#%1000 11690;ADR table,opcodetable 11700FNfetch(1,2) 11710; 11720.opcode(&D9) ; CMP nn,Y 11730FNgetabsindex(0,1,Y) 11740FNcmp(0,3,4) 11750; 11760.opcode(&DA) ; PHX 11770FNpush(X) 11780FNfetch(1,3) 11790; 11800.opcode(&DB) ; ? 11810FNundoc(&DB) 11820FNfetch(1,2) 11830; 11840.opcode(&DC) ; (NOP nn,X) 11850;SWI &100+ASC"D" 11860;SWI &100+ASC"C" 11870 11880FNfetch(3,0) 11890; 11900.opcode(&DD) ; CMP nn,X 11910FNgetabsindex(0,1,X) 11920FNcmp(0,3,4) 11930; 11940.opcode(&DE) ; DEC nn,X 11950FNgetabsindex(0,1,X) 11960FNdec(0) 11970FNstrb16(0,1) 11980FNfetch(3,7) 11990; 12000.opcode(&DF) ; ? 12010FNundoc(&DF) 12020FNfetch(1,2) 12030; 12040.opcode(&E0) ; CPX #N 12050FNgetbyte1(0) 12060FNcpx(0,2,2) 12070; 12080.opcode(&E1) ; SBC (n,X) 12090FNgetpre(0,1) 12100FNsbc(0,2,6) 12110; 12120.opcode(&E2) ; ? 12130FNundoc(&E2) 12140FNfetch(1,2) 12150; 12160.opcode(&E3) ; ? 12170FNundoc(&E3) 12180FNfetch(1,2) 12190; 12200.opcode(&E4) ; CPX n 12210FNgetzero(0,1) 12220FNcpx(0,2,3) 12230; 12240.opcode(&E5) ; SBC n 12250FNgetzero(0,1) 12260FNsbc(0,2,3) 12270; 12280.opcode(&E6) ; INC n 12290FNgetzero(0,1) 12300FNinc(0) 12310STRB R0,[mem,R1] ; zero page STRB 12320FNfetch(2,5) 12330; 12340.opcode(&E7) ; ? 12350FNundoc(&E7) 12360FNfetch(1,2) 12370; 12380.opcode(&E8) ; INX 12390FNinc(X) 12400FNfetch(1,2) 12410; 12420.opcode(&E9) ; SBC #N 12430FNgetbyte1(0) 12440FNsbc(0,2,2) 12450; 12460.opcode(&EA) ; NOP 12470 12480FNfetch(1,2) 12490; 12500.opcode(&EB) ; ? 12510FNundoc(&EB) 12520FNfetch(1,2) 12530; 12540.opcode(&EC) ; CPX nn 12550FNgetabs(0,1) 12560FNcpx(0,3,4) 12570; 12580.opcode(&ED) ; SBC nn 12590FNgetabs(0,1) 12600FNsbc(0,3,4) 12610; 12620.opcode(&EE) ; INC nn 12630FNgetabs(0,1) 12640FNinc(0) 12650FNstrb(0,1) 12660FNfetch(3,6) 12670; 12680.opcode(&EF) ; ? 12690FNundoc(&EF) 12700FNfetch(1,2) 12710; 12720.opcode(&F0) ; BEQ r 12730TST F,#%10 12740BEQ branch_fetch 12750FNbranch 12760; 12770.opcode(&F1) ; SBC (n),Y 12780FNgetpost(0,1) 12790FNsbc(0,2,5) 12800; 12810.opcode(&F2) ; SBC (n) 12820FNgetzeroindir(0,1) 12830FNsbc(0,2,5) 12840; 12850.opcode(&F3) ; ? 12860FNundoc(&F3) 12870FNfetch(1,2) 12880; 12890.opcode(&F4) ; ? 12900FNundoc(&F4) 12910FNfetch(1,2) 12920; 12930.opcode(&F5) ; SBC n,X 12940FNgetzeroindex(0,1) 12950FNsbc(0,2,4) 12960; 12970.opcode(&F6) ; INC n,X 12980FNgetzeroindex(0,1) 12990FNinc(0) 13000STRB R0,[mem,R1,LSR#24] ; zero page STRB 13010FNfetch(2,6) 13020; 13030.opcode(&F7) ; ? 13040FNundoc(&F7) 13050FNfetch(1,2) 13060; 13070.opcode(&F8) ; SED 13080TST F,#%1000 13090ADDEQ table,table,#256*64*4 13100ORREQ F,F,#%1000 13110;ADR table,bcdtable 13120FNfetch(1,2) 13130; 13140.opcode(&F9) ; SBC nn,Y 13150FNgetabsindex(0,1,Y) 13160FNsbc(0,3,4) 13170; 13180.opcode(&FA) ; PLX 13190FNpull(X) 13200FNfetch(1,4) 13210; 13220.opcode(&FB) ; ? 13230FNundoc(&FB) 13240FNfetch(1,2) 13250; 13260.opcode(&FC) ; ? 13270FNundoc(&FC) 13280FNfetch(1,2) 13290; 13300.opcode(&FD) ; SBC nn,X 13310FNgetabsindex(0,1,X) 13320FNsbc(0,3,4) 13330; 13340.opcode(&FE) ; INC nn,X 13350FNgetabsindex(0,1,X) 13360FNinc(0) 13370FNstrb16(0,1) 13380FNfetch(3,7) 13390; 13400.opcode(&FF) ; ? 13410FNundoc(&FF) 13420FNfetch(1,2) 13430; 13440] 13450NEXT bcd_loop% 13460 13470REMFOR I%=code+0 TO code+255*4*64 STEP 4 13480REMbcd(0)!I%=opcode(0)!I% 13490REMNEXT 13500P%=bcd(0) 13510O%=P%+code 13520[OPTp 13530FNbcd(&61) 13540.bcd(&61) ; ADC (n,X) 13550FNgetpre(0,1) 13560FNadcBCD(0,2,6) 13570 13580FNbcd(&65) 13590.bcd(&65) ; ADC n 13600FNgetzero(0,1) 13610FNadcBCD(0,2,3) 13620 13630FNbcd(&69) 13640.bcd(&69) ; ADC #N 13650FNgetbyte1(0) 13660FNadcBCD(0,2,2) 13670 13680FNbcd(&6D) 13690.bcd(&6D) ; ADC nn 13700FNgetabs(0,1) 13710FNadcBCD(0,3,4) 13720 13730FNbcd(&71) 13740.bcd(&71) ; ADC (n),Y 13750FNgetpost(0,1) 13760FNadcBCD(0,2,5) 13770 13780FNbcd(&72) 13790.bcd(&72) ; ADC (n) 13800FNgetzeroindir(0,1) 13810FNadcBCD(0,2,5) 13820 13830FNbcd(&75) 13840.bcd(&75) ; ADC n,X 13850FNgetzeroindex(0,1) 13860FNadcBCD(0,2,4) 13870 13880FNbcd(&79) 13890.bcd(&79) ; ADC nn,Y 13900FNgetabsindex(0,1,Y) 13910FNadcBCD(0,3,4) 13920 13930FNbcd(&7D) 13940.bcd(&7D) ; ADC nn,X 13950FNgetabsindex(0,1,X) 13960FNadcBCD(0,3,4) 13970 13980FNbcd(&E1) 13990.bcd(&E1) ; SBC (n,X) 14000FNgetpre(0,1) 14010FNsbcBCD(0,2,6) 14020 14030FNbcd(&E5) 14040.bcd(&E5) ; SBC n 14050FNgetzero(0,1) 14060FNsbcBCD(0,2,3) 14070FNbcd(&E6) 14080 14090FNbcd(&E9) 14100.bcd(&E9) ; SBC #N 14110FNgetbyte1(0) 14120FNsbcBCD(0,2,2) 14130 14140FNbcd(&ED) 14150.bcd(&ED) ; SBC nn 14160FNgetabs(0,1) 14170FNsbcBCD(0,3,4) 14180 14190FNbcd(&F1) 14200.bcd(&F1) ; SBC (n),Y 14210FNgetpost(0,1) 14220FNsbcBCD(0,2,5) 14230 14240FNbcd(&F2) 14250.bcd(&F2) ; SBC (n) 14260FNgetzeroindir(0,1) 14270FNsbcBCD(0,2,5) 14280 14290FNbcd(&F5) 14300.bcd(&F5) ; SBC n,X 14310FNgetzeroindex(0,1) 14320FNsbcBCD(0,2,4) 14330 14340FNbcd(&F9) 14350.bcd(&F9) ; SBC nn,Y 14360FNgetabsindex(0,1,Y) 14370FNsbcBCD(0,3,4) 14380 14390FNbcd(&FD) 14400.bcd(&FD) ; SBC nn,X 14410FNgetabsindex(0,1,X) 14420FNsbcBCD(0,3,4) 14430 14440FNbcd(&100) 14450] 14460 14470="" 14480 14490DEFFNbranch 14500[OPTp 14510MOV R12,zpc,LSR#24 14520FNgetbyte1(0) 14530ADD zpc,zpc,R0,LSL#16 14540CMP R0,#&80 14550SUBGE zpc,zpc,#254 << 16 14560ADDLT zpc,zpc,#2 << 16 14570CMP R12,zpc,LSR#24 14580SUBEQ time,time,#1 ; page boundary not crossed 14590SUBNE time,time,#2 ; page boundary crossed 14600FNfetch(0,2) 14610] 14620="" 14630 14640DEFFNtrb(R) 14650[OPTp 14660TST R,A,LSR#24 14670FNsetupZ 14680BIC R,R,A,LSR#24 14690] 14700="" 14710 14720DEFFNtsb(R) 14730[OPTp 14740TST R,A,LSR#24 14750FNsetupZ 14760ORR R,R,A,LSR#24 14770] 14780="" 14790 14800DEFFNasl(R) 14810[OPTp 14820MOVS R,R,LSL#25 14830MOV R,R,LSR#24 14840FNsetupNZC 14850] 14860="" 14870 14880DEFFNlsr(R) 14890[OPTp 14900BIC F,F,#%10000011 14910MOVS R,R,LSR#1 14920ORRCS F,F,#%1 14930MOVS R2,R,LSL#24 14940ORRMI F,F,#%10000000 14950ORREQ F,F,#%10 14960] 14970="" 14980 14990DEFFNrol(R) 15000IF R=1 STOP 15010[OPTp 15020;MOVS R2,F,RRX ; MOVE 6502 CARRY INTO ARM CARRY 15030AND R2,F,#%1 15040BIC F,F,#%10000011 15050MOVS R,R,LSL#24 15060ORR R,R,R2,LSL#23 15070MOVS R,R,LSL#1 15080MOV R,R,LSR#24 15090FNsetupNZC 15100] 15110="" 15120 15130DEFFNror(R) 15140IF R=1 STOP 15150[OPTp 15160MOVS R2,F,RRX ; MOVE 6502 CARRY INTO ARM CARRY 15170BIC F,F,#%10000011 15180ORRCS F,F,#%10000000 ; N -> what C was 15190ADD R,R,R,LSL#24 15200MOVS R,R,RRX 15210ORRCS F,F,#%1 15220MOVS R,R,LSR#24 15230ORREQ F,F,#%10 15240] 15250="" 15260 15270 15280DEFFNcmp(R,F%,T%) 15290[OPTp 15300SUBS R0,A,R,LSL#24 15310FNsetupNZC 15320FNfetch(F%,T%) 15330] 15340="" 15350 15360DEFFNcpx(R,F%,T%) 15370[OPTp 15380SUBS R0,X,R,LSL#24 15390FNsetupNZC 15400FNfetch(F%,T%) 15410] 15420="" 15430 15440DEFFNcpy(R,F%,T%) 15450[OPTp 15460SUBS R0,Y,R,LSL#24 15470FNsetupNZC 15480FNfetch(F%,T%) 15490] 15500="" 15510 15520REMDEFFNadc(R,F%,T%) 15530[OPTp 15540MOVS R2,F,RRX ; MOVE 6502 CARRY INTO ARM CARRY 15550MVN R2,#0 ; R2=-1 15560BIC R2,R2,#&FF << 24 15570ADD R2,R2,A 15580ADCS R2,R2,R,LSL#24 15590ANDS A,R2,#&FF << 24 ; only affects Z,N! 15600FNsetupCZVN 15610FNfetch(F%,T%) 15620] 15630="" 15640 15650DEFFNadc(R,F%,T%) 15660[OPTp 15670AND R2,F,#%1 15680ADD R2,R2,R 15690ADDS A,A,R2,LSL#24 15700FNsetupCZVN 15710CMP R2,#&100 : ORREQ F,F,#%1 15720FNfetch(F%,T%) 15730] 15740="" 15750 15760DEFFNadcBCD(R,F%,T%) 15770[OPTp 15780MOVS R2,F,RRX ; MOVE 6502 CARRY INTO ARM CARRY 15790AND R2,A,#&0F << 24 15800AND R13,R,#&F 15810;ADDCS R2,R2,#1 << 24 15820ADC R13,R13,R2,LSR#24 15830CMP R13,#&A 15840ADDGE R13,R13,#&06 15850 15860CMP R13,#&20 15870SUBGE R13,R13,#&10 15880 15890MOV R,R,LSR#4 15900ADD R,R,A,LSR#28 15910ADD A,R13,R,LSL#4 15920CMP A,#&A0 15930ADDGE A,A,#&60 15940ANDS R2,A,#&300 15950ORRNE F,F,#%1 15960BICEQ F,F,#%1 15970MOVS A,A,LSL#24 15980FNsetupNZ ; Master elite needs N flag? 15990FNfetch3(F%,T%) 16000] 16010="" 16020 16030DEFFNsbcBCD(R,F%,T%) 16040[OPTp 16050 16060MOVS R2,F,RRX ; MOVE 6502 CARRY INTO ARM CARRY 16070AND R2,A,#&0F << 24 16080AND R13,R,#&F 16090RSCS R13,R13,R2,LSR#24 16100SUBCC R13,R13,#6 16110AND R13,R13,#&F 16120MOV R,R,LSR#4 16130RSCS R,R,A,LSR#28 16140SUBCC R,R,#6 16150FNsetupC 16160 16170AND R,R,#&F 16180ADD A,R13,R,LSL#4 16190MOVS A,A,LSL#24 16200FNsetupNZ 16210FNfetch3(F%,T%) 16220] 16230="" 16240 16250DEFFNsbc(R,F%,T%) 16260[OPTp 16270MOVS R2,F,RRX ; MOVE 6502 CARRY INTO ARM CARRY 16280SBCS A,A,R,LSL#24 16290FNsetupCZVN 16300ANDS A,A,#&FF << 24 16310BICNE F,F,#%10 16320ORREQ F,F,#%10 ; FNsetupZ 16330FNfetch(F%,T%) 16340] 16350="" 16360 16370 16380MOVS R2,F,RRX ; MOVE 6502 CARRY INTO ARM CARRY 16390MOV A,A,ASR#24 16400MOV R,R,LSL#24 16410MOV R,R,ASR#24 16420EOR R,R,#&FF << 24 16430EOR R,R,#&FF << 16 16440EOR R,R,#&FF << 8 16450EOR A,A,#&FF << 24 16460EOR A,A,#&FF << 16 16470EOR A,A,#&FF << 8 16480SBCS A,A,R 16490MOV A,A,LSL#24 16500FNsetupCZVN 16510FNfetch(F%,T%) 16520] 16530="" 16540 16550DEFFNbit(R,F%,T%) 16560[OPTp 16570AND R2,R,#%11000000 16580ANDS R,R,A,LSR#24 16590BIC F,F,#%11000010 16600ADD F,F,R2 16610ORREQ F,F,#%10 16620FNfetch(F%,T%) 16630] 16640="" 16650 16660DEFFNeor(R,F%,T%) 16670[OPTp 16680EORS A,A,R,LSL#24 16690FNsetupNZ 16700FNfetch(F%,T%) 16710] 16720="" 16730 16740DEFFNand(R,F%,T%) 16750[OPTp 16760ANDS A,A,R,LSL#24 16770FNsetupNZ 16780FNfetch(F%,T%) 16790] 16800="" 16810 16820DEFFNora(R,F%,T%) 16830[OPTp 16840ORRS A,A,R,LSL#24 16850FNsetupNZ 16860FNfetch(F%,T%) 16870] 16880="" 16890 16900DEFFNlda(R,F%,T%) 16910[OPTp 16920MOVS A,R,LSL#24 16930FNsetupNZ 16940FNfetch(F%,T%) 16950] 16960="" 16970 16980DEFFNldx(R,F%,T%) 16990[OPTp 17000MOVS X,R,LSL#24 17010FNsetupNZ 17020FNfetch(F%,T%) 17030] 17040="" 17050 17060DEFFNldy(R,F%,T%) 17070[OPTp 17080MOVS Y,R,LSL#24 17090FNsetupNZ 17100FNfetch(F%,T%) 17110] 17120="" 17130 17140DEFFNinc(R) 17150IF R=X OR R=Y OR R=A THEN 17160[OPTp 17170ADDS R,R,#1 << 24 17180] 17190ELSE 17200[OPTp 17210ADD R,R,#1 17220MOVS R2,R,LSL#24 17230] 17240ENDIF 17250[OPTp 17260FNsetupNZ 17270] 17280="" 17290 17300DEFFNdec(R) 17310IF R=X OR R=Y OR R=A THEN 17320[OPTp 17330SUBS R,R,#1 << 24 17340] 17350ELSE 17360[OPTp 17370SUB R,R,#1 17380MOVS R2,R,LSL#24 17390] 17400ENDIF 17410[OPTp 17420FNsetupNZ 17430] 17440="" 17450 17460DEFFNsetupNZ 17470[OPTp 17480BIC F,F,#%10000010 17490ORREQ F,F,#%10 17500ORRMI F,F,#%10000000 17510] 17520="" 17530 17540DEFFNsetupZ 17550[OPTp 17560BIC F,F,#%10 17570ORREQ F,F,#%10 17580] 17590="" 17600 17610DEFFNsetupC 17620[OPTp 17630BIC F,F,#%1 17640ORRCS F,F,#%1 17650] 17660="" 17670 17680DEFFNsetupNZC 17690[OPTp 17700BIC F,F,#%10000011 17710ORRCS F,F,#%1 17720ORREQ F,F,#%10 17730ORRMI F,F,#%10000000 17740] 17750="" 17760 17770DEFFNsetupCZVN 17780[OPTp 17790BIC F,F,#%11000011 17800ORRCS F,F,#%1 17810ORREQ F,F,#%10 17820ORRVS F,F,#%1000000 17830ORRMI F,F,#%10000000 17840] 17850="" 17860 17870DEFFNsetupCzVN 17880[OPTp 17890BIC F,F,#%11000011 17900ORRCS F,F,#%1 17910ORRVS F,F,#%1000000 17920ORRMI F,F,#%10000000 17930] 17940="" 17950 17960DEFFNgetpre(R,S) 17970[OPTp 17980FNpre(R,S) 17990;LDRB R,[mem,R] 18000FNldrb2(R,S) 18010] 18020="" 18030 18040DEFFNpre(R,S) 18050[OPTp 18060FNgetbyte1(R) 18070ADD R,X,R,LSL#24 18080LDRB S,[mem,R,LSR#24] ; zero page LDRB 18090ADD R,R,#1 << 24 18100LDRB R,[mem,R,LSR#24] ; zero page LDRB 18110ADD S,S,R,LSL#8 18120] 18130="" 18140 18150DEFFNgetzero(R,S) 18160[OPTp 18170FNgetbyte1(S) 18180LDRB R,[mem,S] ; zero page LDRB 18190] 18200="" 18210 18220DEFFNgetabs(R,S) 18230[OPTp 18240FNabs(R,S) 18250;LDRB R,[mem,S] 18260FNldrb2(R,S) 18270] 18280="" 18290 18300DEFFNabs(R,S) 18310[OPTp 18320FNgetbyte2(R,S) 18330ADD S,R,S,LSL#8 18340;FNstrb 18350] 18360="" 18370 18380DEFFNgetpost(R,S) 18390[OPTp 18400FNpost(R,S) 18410;LDRB R,[mem,R,LSR#16] 18420FNldrb16(R,S) 18430] 18440="" 18450 18460DEFFNpost(R,S) 18470[OPTp 18480FNgetbyte1(R) 18490MOV R,R,LSL#24 18500LDRB S,[mem,R,LSR#24] ; zero page LDRB 18510ADD R,R,#1 << 24 18520LDRB R,[mem,R,LSR#24] ; zero page LDRB 18530ADD R,S,R,LSL#8 18540MOV R,R,LSL#16 18550ADD S,R,Y,LSR#8 18560;FNstrb16 18570] 18580="" 18590 18600DEFFNgetzeroindir(R,S) 18610[OPTp 18620FNzeroindir(R,S) 18630;LDRB R,[mem,S] 18640FNldrb2(R,S) 18650] 18660="" 18670 18680DEFFNzeroindir(R,S) 18690[OPTp 18700FNgetbyte1(R) 18710MOV R,R,LSL#24 18720LDRB S,[mem,R,LSR#24] ; zero page LDRB 18730ADD R,R,#1 << 24 18740LDRB R,[mem,R,LSR#24] ; zero page LDRB 18750ADD S,S,R,LSL#8 18760] 18770="" 18780 18790DEFFNgetabsindex(R,S,T) REM T=X or Y 18800[OPTp 18810FNabsindex(R,S,T) 18820;LDRB R,[mem,S,LSR#16] 18830FNldrb16(R,S) 18840] 18850="" 18860 18870DEFFNabsindex(R,S,T) REM T=X or Y 18880[OPTp 18890FNgetbyte2(R,S) 18900ADD R,R,S,LSL#8 18910MOV R,R,LSL#16 18920ADD S,R,T,LSR#8 18930] 18940="" 18950 18960DEFFNgetzeroindex(R,S) 18970[OPTp 18980FNzeroindex(R,S) 18990LDRB R,[mem,S,LSR#24] ; zero page LDRB 19000] 19010="" 19020 19030DEFFNzeroindex(R,S) 19040[OPTp 19050FNgetbyte1(R) 19060ADD S,X,R,LSL#24 19070] 19080="" 19090 19100DEFFNgetzeroindexY(R,S) 19110[OPTp 19120FNzeroindexY(R,S) 19130LDRB R,[mem,S,LSR#24] ; zero page LDRB 19140] 19150="" 19160 19170DEFFNzeroindexY(R,S) 19180[OPTp 19190FNgetbyte1(R) 19200ADD S,Y,R,LSL#24 19210] 19220="" 19230 19240DEFFNgetbyte1(R) 19250[OPTp 19260ADD R,zpc,#1 << 16 19270LDRB R,[mem,R,LSR#16] ; instuction fetch 19280] 19290="" 19300 19310DEFFNgetbyte2(R,S) 19320[OPTp 19330ADD S,mem,zpc,LSR#16 19340LDRB R,[S,#1] 19350LDRB S,[S,#2] ; instuction fetches 19360] 19370="" 19380 19390DEFFNpull(R) 19400CASE R OF 19410WHEN F 19420[OPTp 19430ADD SP,SP,#1 << 24 19440LDRB R1,[mem,SP,ROR#24] 19450BIC F,F,#&FF 19460ORR F,F,R1 19470BL reset_bcdflag 19480] 19490WHEN A,X,Y 19500[OPTp 19510ADD SP,SP,#1 << 24 19520LDRB R0,[mem,SP,ROR#24] 19530MOVS R,R0,LSL#24 19540FNsetupNZ 19550] 19560OTHERWISE 19570[OPTp 19580ADD SP,SP,#1 << 24 19590LDRB R0,[mem,SP,ROR#24] 19600MOV R,R0,LSL#24 19610] 19620ENDCASE 19630="" 19640 19650DEFFNpush(R) 19660IF R=F OR R=0 OR R=1 THEN 19670[OPTp 19680STRB R,[mem,SP,ROR#24] 19690SUB SP,SP,#1 << 24 19700] 19710ELSE 19720[OPTp 19730MOV R0,R,LSR#24 19740STRB R0,[mem,SP,ROR#24] 19750SUB SP,SP,#1 << 24 19760] 19770ENDIF 19780="" 19790
� > 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] � 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] �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) �; .opcode(&6E) ; ROR nn �getabs(0,1) �ror(0) "�strb(0,1) ,�fetch(3,6) 6; @.opcode(&6F) ; ? J�undoc(&6F) T�fetch(1,2) ^; h.opcode(&70) ; BVS r rTST 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) ��fetch(1,2) ; .opcode(&74) ; STZ n,X �zeroindex(0,1) & MOV R0,#0 0STRB R0,[mem,R1,LSR#24] :�fetch(2,4) D; N.opcode(&75) ; ADC n,X X�getzeroindex(0,1) b�adc(0,2,4) l; v.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) �; .opcode(&79) ; ADC nn,Y �getabsindex(0,1,Y) �adc(0,3,4) ; *.opcode(&7A) ; PLY 4�pull(Y) >�fetch(1,4) H; R.opcode(&7B) ; ? \�undoc(&7B) f�fetch(1,2) p; z.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] �ADD R0,R0,#1 << 16 �LDRB R0,[mem,R0,LSR#16] �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) 8�fetch(3,7) B; L.opcode(&7F) ; ? V�undoc(&7F) `�fetch(1,2) j; t.opcode(&80) ; BRA r ~�branch �; �.opcode(&81) ; STA (n,X) � �pre(0,1) �MOV R0,A,LSR#24 ��strb(0,1) ��fetch(2,6) �; �.opcode(&82) ; ? ��undoc(&82) ��fetch(1,2) �; �.opcode(&83) ; ? �undoc(&83) �fetch(1,2) ; .opcode(&84) ; STY n (�getbyte1(1) 2MOV R0,Y,LSR#24 <%STRB R0,[mem,R1] ; zero page STRB F�fetch(2,3) P; Z.opcode(&85) ; STA n d�getbyte1(1) nMOV R0,A,LSR#24 x%STRB R0,[mem,R1] ; zero page STRB ��fetch(2,3) �; �.opcode(&86) ; STX n ��getbyte1(1) �MOV R0,X,LSR#24 �%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) 6; @.opcode(&88) ; DEY J�dec(Y) T�fetch(1,2) ^; h.opcode(&89) ; BIT #N r�getbyte1(0) |TST R0,A,LSR#24 �6BIC F,F,#%10 ; N and V unchanged in immediate mode ��REQ F,F,#%10 �.branch_fetch ��fetch(2,2) �; �.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 0�strb(0,1) :�fetch(3,4) D; N.opcode(&8D) ; STA nn X �abs(0,1) bMOV R0,A,LSR#24 l�strb(0,1) v�fetch(3,4) �; �.opcode(&8E) ; STX nn � �abs(0,1) �MOV R0,X,LSR#24 ��strb(0,1) ��fetch(3,4) �; �.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) !4MOV R0,A,LSR#24 !>�strb16(0,1) !H�fetch(2,6) !R; !\.opcode(&92) ; STA (n) !f�zeroindir(0,1) !pMOV R0,A,LSR#24 !z�strb(0,1) !��fetch(2,5) !�; !�.opcode(&93) ; ? !��undoc(&93) !��fetch(1,2) !�; !�.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) ".; "8.opcode(&96) ; STX n,Y "B�zeroindexY(0,1) "LMOV R0,X,LSR#24 "V,STRB R0,[mem,R1,LSR#24] ; zero page STRB "` "j�fetch(2,4) "t; "~.opcode(&97) ; ? "��undoc(&97) "��fetch(1,2) "�; "�.opcode(&98) ; TYA "�MOVS A,Y "��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 #2�setupNZ #<�fetch(1,2) #F; #P.opcode(&9B) ; ? #Z�undoc(&9B) #d�fetch(1,2) #n; #x.opcode(&9C) ; STZ nn #� �abs(0,1) #� MOV R0,#0 #��strb(0,1) #��fetch(3,4) #�; #�.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) ; ? $6�undoc(&9F) $@�fetch(1,2) $J; $T.opcode(&A0) ; LDY #N $^�getbyte1(0) $h�ldy(0,2,2) $r; $|.opcode(&A1) ; LDA (n,X) $��getpre(0,1) $��lda(0,2,6) $�; $�.opcode(&A2) ; LDX #N $��getbyte1(0) $��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) %0�lda(0,2,3) %:; %D.opcode(&A6) ; LDX n %N�getzero(0,1) %X�ldx(0,2,3) %b; %l.opcode(&A7) ; ? %v�undoc(&A7) %��fetch(1,2) %�; %�.opcode(&A8) ; TAY %�MOVS Y,A %��setupNZ %��fetch(1,2) %�; %�.opcode(&A9) ; LDA #N %��getbyte1(0) %��lda(0,2,2) %�; %�.opcode(&AA) ; TAX %�MOVS X,A &�setupNZ &�fetch(1,2) &; & .opcode(&AB) ; ? &*�undoc(&AB) &4�fetch(1,2) &>; &H.opcode(&AC) ; LDY nn &R�getabs(0,1) &\�ldy(0,3,4) &f; &p.opcode(&AD) ; LDA nn &z�getabs(0,1) &��lda(0,3,4) &�; &�.opcode(&AE) ; LDX nn &��getabs(0,1) &��ldx(0,3,4) &�; &�.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) '8; 'B.opcode(&B2) ; LDA (n) 'L�getzeroindir(0,1) 'V�lda(0,2,5) '`; 'j.opcode(&B3) ; ? 't�undoc(&B3) '~�fetch(1,2) '�; '�.opcode(&B4) ; LDY n,X '��getzeroindex(0,1) '��ldy(0,2,4) '�; '�.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) ((; (2.opcode(&B8) ; CLV (<BIC F,F,#%1000000 (F�fetch(1,2) (P; (Z.opcode(&B9) ; LDA nn,Y (d�getabsindex(0,1,Y) (n�lda(0,3,4) (x; (�.opcode(&BA) ; TSX (��S X,SP,#&FF000000 (��setupNZ (��fetch(1,2) (�; (�.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 )6�getabsindex(0,1,Y) )@�ldx(0,3,4) )J; )T.opcode(&BF) ; ? )^�undoc(&BF) )h�fetch(1,2) )r; )|.opcode(&C0) ; CPY #N )��getbyte1(0) )��cpy(0,2,2) )�; )�.opcode(&C1) ; CMP (n,X) )��getpre(0,1) )��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) *0�cpy(0,2,3) *:; *D.opcode(&C5) ; CMP n *N�getzero(0,1) *X�cmp(0,2,3) *b; *l.opcode(&C6) ; DEC n *v�getzero(0,1) *��dec(0) *�%STRB R0,[mem,R1] ; zero page STRB *��fetch(2,5) *�; *�.opcode(&C7) ; ? *��undoc(&C7) *��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) +4�fetch(1,2) +>; +H.opcode(&CB) ; ? +R�undoc(&CB) +\�fetch(1,2) +f; +p.opcode(&CC) ; CPY nn +z�getabs(0,1) +��cpy(0,3,4) +�; +�.opcode(&CD) ; CMP nn +��getabs(0,1) +��cmp(0,3,4) +�; +�.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 ,8BNE branch_fetch ,B�branch ,L; ,V.opcode(&D1) ; CMP (n),Y ,`�getpost(0,1) ,j�cmp(0,2,5) ,t; ,~.opcode(&D2) ; CMP (n) ,��getzeroindir(0,1) ,��cmp(0,2,5) ,�; ,�.opcode(&D3) ; ? ,��undoc(&D3) ,��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) -2�dec(0) -<STRB R0,[mem,R1,LSR#24] -F�fetch(2,6) -P; -Z.opcode(&D7) ; ? -d�undoc(&D7) -n�fetch(1,2) -x; -�.opcode(&D8) ; CLD -�TST F,#%1000 -�SUBNE table,table,#256*64*4 -�BICNE F,F,#%1000 -�;ADR table,opcodetable -��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) .6; .@.opcode(&DC) ; (NOP nn,X) .J;SWI &100+�"D" .T;SWI &100+�"C" .^ .h�fetch(3,0) .r; .|.opcode(&DD) ; CMP nn,X .��getabsindex(0,1,X) .��cmp(0,3,4) .�; .�.opcode(&DE) ; DEC nn,X .��getabsindex(0,1,X) .��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) /&; /0.opcode(&E1) ; SBC (n,X) /:�getpre(0,1) /D�sbc(0,2,6) /N; /X.opcode(&E2) ; ? /b�undoc(&E2) /l�fetch(1,2) /v; /�.opcode(&E3) ; ? /��undoc(&E3) /��fetch(1,2) /�; /�.opcode(&E4) ; CPX n /��getzero(0,1) /��cpx(0,2,3) /�; /�.opcode(&E5) ; SBC n /��getzero(0,1) /��sbc(0,2,3) /�; /�.opcode(&E6) ; INC n 0�getzero(0,1) 0�inc(0) 0%STRB R0,[mem,R1] ; zero page STRB 0 �fetch(2,5) 0*; 04.opcode(&E7) ; ? 0>�undoc(&E7) 0H�fetch(1,2) 0R; 0\.opcode(&E8) ; INX 0f�inc(X) 0p�fetch(1,2) 0z; 0�.opcode(&E9) ; SBC #N 0��getbyte1(0) 0��sbc(0,2,2) 0�; 0�.opcode(&EA) ; NOP 0� 0��fetch(1,2) 0�; 0�.opcode(&EB) ; ? 0��undoc(&EB) 0��fetch(1,2) 0�; 0�.opcode(&EC) ; CPX nn 1�getabs(0,1) 1�cpx(0,3,4) 1; 1$.opcode(&ED) ; SBC nn 1.�getabs(0,1) 18�sbc(0,3,4) 1B; 1L.opcode(&EE) ; INC nn 1V�getabs(0,1) 1`�inc(0) 1j�strb(0,1) 1t�fetch(3,6) 1~; 1�.opcode(&EF) ; ? 1��undoc(&EF) 1��fetch(1,2) 1�; 1�.opcode(&F0) ; BEQ r 1�TST F,#%10 1�BEQ branch_fetch 1��branch 1�; 1�.opcode(&F1) ; SBC (n),Y 1��getpost(0,1) 1��sbc(0,2,5) 2 ; 2 .opcode(&F2) ; SBC (n) 2�getzeroindir(0,1) 2�sbc(0,2,5) 2(; 22.opcode(&F3) ; ? 2<�undoc(&F3) 2F�fetch(1,2) 2P; 2Z.opcode(&F4) ; ? 2d�undoc(&F4) 2n�fetch(1,2) 2x; 2�.opcode(&F5) ; SBC n,X 2��getzeroindex(0,1) 2��sbc(0,2,4) 2�; 2�.opcode(&F6) ; INC n,X 2��getzeroindex(0,1) 2��inc(0) 2�,STRB R0,[mem,R1,LSR#24] ; zero page STRB 2��fetch(2,6) 2�; 2�.opcode(&F7) ; ? 2��undoc(&F7) 2��fetch(1,2) 3; 3.opcode(&F8) ; SED 3TST F,#%1000 3"ADDEQ table,table,#256*64*4 3,�REQ F,F,#%1000 36;ADR table,bcdtable 3@�fetch(1,2) 3J; 3T.opcode(&F9) ; SBC nn,Y 3^�getabsindex(0,1,Y) 3h�sbc(0,3,4) 3r; 3|.opcode(&FA) ; PLX 3��pull(X) 3��fetch(1,4) 3�; 3�.opcode(&FB) ; ? 3��undoc(&FB) 3��fetch(1,2) 3�; 3�.opcode(&FC) ; ? 3��undoc(&FC) 3��fetch(1,2) 3�; 3�.opcode(&FD) ; SBC nn,X 3��getabsindex(0,1,X) 4�sbc(0,3,4) 4; 4.opcode(&FE) ; INC nn,X 4&�getabsindex(0,1,X) 40�inc(0) 4:�strb16(0,1) 4D�fetch(3,7) 4N; 4X.opcode(&FF) ; ? 4b�undoc(&FF) 4l�fetch(1,2) 4v; 4�] 4�� bcd_loop% 4� 4�*�FOR I%=code+0 TO code+255*4*64 STEP 4 4��bcd(0)!I%=opcode(0)!I% 4� �NEXT 4� P%=bcd(0) 4�O%=P%+code 4� [OPTp 4� �bcd(&61) 4�.bcd(&61) ; ADC (n,X) 4��getpre(0,1) 4��adcBCD(0,2,6) 5 5 �bcd(&65) 5.bcd(&65) ; ADC n 5 �getzero(0,1) 5*�adcBCD(0,2,3) 54 5> �bcd(&69) 5H.bcd(&69) ; ADC #N 5R�getbyte1(0) 5\�adcBCD(0,2,2) 5f 5p �bcd(&6D) 5z.bcd(&6D) ; ADC nn 5��getabs(0,1) 5��adcBCD(0,3,4) 5� 5� �bcd(&71) 5�.bcd(&71) ; ADC (n),Y 5��getpost(0,1) 5��adcBCD(0,2,5) 5� 5� �bcd(&72) 5�.bcd(&72) ; ADC (n) 5��getzeroindir(0,1) 5��adcBCD(0,2,5) 5� 6 �bcd(&75) 6.bcd(&75) ; ADC n,X 6�getzeroindex(0,1) 6$�adcBCD(0,2,4) 6. 68 �bcd(&79) 6B.bcd(&79) ; ADC nn,Y 6L�getabsindex(0,1,Y) 6V�adcBCD(0,3,4) 6` 6j �bcd(&7D) 6t.bcd(&7D) ; ADC nn,X 6~�getabsindex(0,1,X) 6��adcBCD(0,3,4) 6� 6� �bcd(&E1) 6�.bcd(&E1) ; SBC (n,X) 6��getpre(0,1) 6��sbcBCD(0,2,6) 6� 6� �bcd(&E5) 6�.bcd(&E5) ; SBC n 6��getzero(0,1) 6��sbcBCD(0,2,3) 6� �bcd(&E6) 7 7 �bcd(&E9) 7.bcd(&E9) ; SBC #N 7�getbyte1(0) 7(�sbcBCD(0,2,2) 72 7< �bcd(&ED) 7F.bcd(&ED) ; SBC nn 7P�getabs(0,1) 7Z�sbcBCD(0,3,4) 7d 7n �bcd(&F1) 7x.bcd(&F1) ; SBC (n),Y 7��getpost(0,1) 7��sbcBCD(0,2,5) 7� 7� �bcd(&F2) 7�.bcd(&F2) ; SBC (n) 7��getzeroindir(0,1) 7��sbcBCD(0,2,5) 7� 7� �bcd(&F5) 7�.bcd(&F5) ; SBC n,X 7��getzeroindex(0,1) 7��sbcBCD(0,2,4) 7� 8 �bcd(&F9) 8.bcd(&F9) ; SBC nn,Y 8�getabsindex(0,1,Y) 8"�sbcBCD(0,3,4) 8, 86 �bcd(&FD) 8@.bcd(&FD) ; SBC nn,X 8J�getabsindex(0,1,X) 8T�sbcBCD(0,3,4) 8^ 8h�bcd(&100) 8r] 8| 8�="" 8� 8�ݤbranch 8� [OPTp 8�MOV R12,zpc,LSR#24 8��getbyte1(0) 8�ADD zpc,zpc,R0,LSL#16 8�CMP R0,#&80 8�SUBGE zpc,zpc,#254 << 16 8�ADDLT zpc,zpc,#2 << 16 8�CMP R12,zpc,LSR#24 8�2SUBEQ time,time,#1 ; page boundary not crossed 8�.SUBNE time,time,#2 ; page boundary crossed 9�fetch(0,2) 9] 9="" 9& 90ݤtrb(R) 9: [OPTp 9DTST R,A,LSR#24 9N�setupZ 9XBIC R,R,A,LSR#24 9b] 9l="" 9v 9�ݤtsb(R) 9� [OPTp 9�TST R,A,LSR#24 9��setupZ 9��R R,R,A,LSR#24 9�] 9�="" 9� 9�ݤasl(R) 9� [OPTp 9�MOVS R,R,LSL#25 9�MOV R,R,LSR#24 9� �setupNZC :] :="" : : ݤlsr(R) :* [OPTp :4BIC F,F,#%10000011 :>MOVS R,R,LSR#1 :H�RCS F,F,#%1 :RMOVS R2,R,LSL#24 :\�RMI F,F,#%10000000 :f�REQ F,F,#%10 :p] :z="" :� :�ݤrol(R) :�� R=1 � :� [OPTp :�.;MOVS R2,F,RRX ; � 6502 CARRY �O ARM CARRY :�� 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 ;8-MOVS R2,F,RRX ; � 6502 CARRY �O ARM CARRY ;BBIC F,F,#%10000011 ;L)�RCS F,F,#%10000000 ; N -> what C was ;VADD R,R,R,LSL#24 ;`MOVS R,R,RRX ;j�RCS F,F,#%1 ;tMOVS R,R,LSR#24 ;~�REQ F,F,#%10 ;�] ;�="" ;� ;� ;�ݤcmp(R,F%,T%) ;� [OPTp ;�SUBS R0,A,R,LSL#24 ;� �setupNZC ;��fetch(F%,T%) ;�] ;�="" ;� <