BYTE 5.1 PG 56 A computer controlled light dimmer Part 1
BYTE 5.2 PG 72 A computer controlled light dimmer Part 2
BYTE 4.10 PG 202
addr value of address label or absolute address
adrr =addr-2-PC, relitive address
im byte immediate
fp byte offset in first page memory
imwd =im,im word immediate
xx =im index offset
a accumulator registor
0 A
1 B
mm memory address mode
00 immediate op #<immediate value>
01 first page op <address in first page>
10 index op <offset>,X
11 absolute op <absolute address>
d direction
0 load
1 store
maop Math Operation
0000 SUB
0001 CMP
0100 AND
0101 BIT
0110 LDA
0111 STA
1000 EOR
1001 ADC
1010 ORA
1011 ADD
1100 CPX
PC program counter register
A First accumulator register
B second accumulator register
X index register
P CCR Condition Code Register
H Half carry 5
I Interrupt mask 4
N Negative 3
Z Zero 2
V oVerflow 1
C Carry 0
S Stack pointer register
01 NOP
02
03
04
05
06 TAP ;P=A Transfer to CCR
07 TPA ;A=P Transfer from CCR
08 INX ;Increment X, Compare with 0?
09 DEX ;Decrement X, Compare with 0?
0A CLV ;Clear Overflow
0B SEV ;Set Overflow
0C CLC ;Clear Carry
0D SEC ;Set Carry
0E CLI ;Clear IRQ Mask
0F SEI ;Set IRQ Mask
16 TAB ;Transfer A to B?
17 TBA ;Transfer B to A
18 ;?
19 DAA ;Decimal adjust accumulator
1B ABA ;A=A+B Add accumulators
20 ar BRA adrr ; Skip (Branch Always)
21 ar BRN adrr ; Branch Never
22 ar BHI adrr ;C|Z=0? Branch Higher
23 ar BLS adrr ;C|Z=1? Branch Lower or Same
24 ar BCC adrr ;C=0? Branch Carry Clear
25 ar BCS adrr ;C=1? Branch Carry Set
26 ar BNE adrr ;Z=1? Branch Not Equal
27 ar BEQ adrr ;Branch Equal
28 ar BVC adrr ;Branch oVerflow Clear
29 ar BVS adrr ;Branch Half Carry Set
2A ar BPL adrr ;N=0? Branch Plus
2B ar BM1 adrr ;N=1? Branch Minus
2C ar BGE adrr ;N^V=0? Branch Greater than or Equal
2D ar BLT adrr ;N^V=1? Branch Less Than
2E ar BGT adrr ;Z|{N^V}=0? !Z&!{N^V}=1? Branch Greater than
2F ar BLE adrr ;Z|{N^V}=1? Branch Less than or Equal
32 PUL A
33 PUL B
34 DES ;Decrement Stack, Compare with 0?
35
36 PSH A
37 PSH B
38
39 RTS ;RETURN
3A
3B RTI ;Return from interrupt?
80 12 SUB A #18
90
A0
B0
81 im CMP A im
91 fp CMP A fp
A1 xx CMP A xx,X
B1 addr CMP A addr
C1 im CMP B im
D1 fp CMP B fp
E1 xx CMP B xx,X
F1 addr CMP B addr
1amm 0100
84 im AND A im ;A=A&im And A with immediate byte
94 fp AND A fp ;A=A&(fp) And A with first page memory byte at immediate byte
A4 xx AND A xx,X ;A=A&(xx+X) And A with memory byte at X+byte offset
B4 addr AND A addr ;A=A&(addr) And A with memory byte at addr
C4 im AND B im ;B=B&im And B with immediate byte
D4 fp AND B fp ;B=B&(fp) And B with first page memory byte at immediate byte
E4 xx AND B xx,X ;B=B&(xx+X) And B with memory byte at X+byte offset
F4 addr AND B addr ;B=B&(addr) And B with memory byte at addr
1amm 0101
85 im BIT A im ;A&im Bit test
95 fp BIT A fp ;A&(fp)
A5 xx BIT A xx,X ;A&(xx+X)
B5 addr BIT A addr ;A&(addr)
C5 im BIT B im ;B&im
D5 fp BIT B fp ;B&(fp)
E5 xx BIT B xx,X ;B&(xx+X)
F5 addr BIT B addr ;B&(addr)
1amm 011d ; Load Accumulator register
86 3F LDA A #$3F ;Load A byte immediate
96 20 LDA A RNDM ;Load A with byte memory at first page address byte immediate
A6 00 LDA A 0,X ;Load A with byte memory at X+byte immediate
B6 A000 LDA A ASSA ;Load A with byte memory at word immediate
C6 18 LDA B $24 ;Load B byte immediate (24d is 18h)
D6 20 LDA B RNDM ;Load B with byte memory at first page address byte immediate
E6 00 LDA B 0,X ;Load B with byte memory at X+byte immediate
F6 A000 LDA B ASSA ;Load B with byte memory at word immediate
87 ; not used?
97 22 STA A RNDM+2 ;Store A in first page memory address byte immediate (RNDM is at address 20 in first page)
A7 00 STA A 0,X ;Store A in memory at X+byte immediate
B7 ; not used?
C7 ; not used?
D7 22 STA B RNDM+2 ;Store B in first page memory address byte immediate (RNDM is at address 20 in first page)
E7 02 STA B 2,X ;Store B in memory at X+byte immediate
F7 ; not used?
88
98 20 EOR A RNDM ;XOR
A8
B8
C8
D8
E8
F8
1amm 1001
89 im ADC A im ;A=A+im+C Add A with Carry to immediate byte
99 fp ADC A fp ;A=A+(fp)+C Add A with Carry to first page memory byte at immediate byte
A9 xx ADC A xx,X ;A=A+(xx+X)+C Add A with Carry to memory byte at X+byte offset
B9 addr ADC A addr ;A=A+(addr)+C Add A with Carry to memory byte at addr
C9 im ADC B im ;B=B+im+C Add B with Carry to immediate byte
D9 fp ADC B fp ;B=B+(fp)+C Add B with Carry to first page memory byte at immediate byte
E9 xx ADC B xx,X ;B=B+(xx+X)+C Add B with Carry to memory byte at X+byte offset
F9 addr ADC B addr ;B=B+(addr)+C Add B with Carry to memory byte at addr
1amm 1010
8A im ORA A im ;A=A|im ORA with byte immediate
9A fp ORA A fp ;A=A|(fp) ORA with byte in first page address
AA xx ORA A xx,X ;A=A|(xx+X) ORA with byte at X+byte offset
BA addr ORA A addr ;A=A|(addr) ORA with byte at memory address word immediate
CA im ORA B im ;B=B|im ORB with byte immediate
DA fp ORA B fp ;B=B|(fp) ORB with byte in first page address
EA xx ORA B xx,X ;B=B|(xx+X) ORB with byte at X+byte offset
FA addr ORA B addr ;B=B|(addr) ORB with byte at memory address word immediate
1amm 1011
8B im ADD A im ;A=A+im Add A to immediate byte
9B fp ADD A fp ;A=A+(fp) Add A to first page memory byte at immediate byte
AB xx ADD A xx,X ;A=A+(xx+X) Add A to memory byte at X+byte offset
BB addr ADD A addr ;A=A+(addr) Add A to memory byte at addr
CB im ADD B im ;B=B+im Add B to immediate byte
DB fp ADD B fp ;B=B+(fp) Add B to first page memory byte at immediate byte
EB xx ADD B xx,X ;B=B+(xx+X) Add B to memory byte at X+byte offset
FB addr ADD B addr ;B=B+(addr) Add B to memory byte at addr
8C 0013 CPX #$13 ;
9C 75 CPX SaveSum ;SaveSum equates to 75
AC
BC
CC
DC
EC
FC
8D os BSR <PC-addr> ;(S--)=PC, PC=PC+2+os Branch to Service Routine at PC+offset+2
9D ;?
AD xx JSR xx,X ;(S--)=PC, PC=X+xx Jump to Service Routine at indeX plus immediate byte
BD 012C JSR addr RANDOM ;(S--)=PC, PC=addr Jump to Service Routine at immediate word (CALL) RANDOM is at address 012C
CD
DD
ED
FD
1pmm 111d ; Load Pointer register p=Stack/Index mm=Immediate/FirstPage/Index/Address d=Load/Store
8E 8004 LDS #PIAD ;Load Stack pointer with immediate word
9E 56 LDS fp WTBLRP ;Load Stack pointer with first page memory word at byte immediate
AE xx LDS xx,X ;Load Stack pointer with memory word at indeX plus byte immediate
BE A000 LDS addr ASSA ;Load Stack pointer with memory word at word immediate
CE 8004 LDX #PIAD ;Load indeX with immediate word
DE 23 LDX fp TBLADR ;Load indeX with word memory at byte immediate in first page (TBLADR is at address 0023 in first page)
EE xx LDX xx,X ;Load indeX with word memory at indeX plus byte immediate
FE A000 LDX addr ASSA ;Load indeX with word memory at word immediate
8F STS ? ;
9F 56 STS fp WTBLRP ;Store Stack pointer in first page memory address byte immediate (WTBLRP is at address 56 in first page)
AF xx STS xx,X ;Store Stack pointer in memory word at indeX plus byte immediate
BF addr STS addr ;Store Stack pointer in memory word at word immediate
CF 8004 STX #PIAD ? ;
DF 23 STX fp TBLADR ;Store indeX in memory word at first page memory address plus byte immediate (TBLADR is at address 23 in first page)
EF xx STX xx,X ;Store indeX in memory word at indeX plus byte immediate
FF A000 STX addr ASSA ;Store indeX in memory word at word immediate
40 NEG A ;?
50 NEG B
60
70
41
51
61
71
42
52
62
72
43 COM A ;Complement A
53
63
73 44 COM MPTPAT
44 LSR A ;Logical Shift Right
54 LSR B ;Shift right
64 xx LSR xx,X
74 addr LSR addr
45 ASR A ;Arithmetic Shift Right
55 ASR B
65 xx ASR xx,X
75 addr ASR addr
46 ROR A
56 ROR B
66 00 ROR 0,X
76 0022 ROR RNDM+2
47 ASR A ;A=A/2 Arithmetic Shift Right
57 ASR B ;B=B/2
67 xx ASR xx,X ;(xx+X)=(xx+X)/2
77 addr ASR addr ;(addr)=(addr)/2
48 ASL A ;A=A*2 Arithmetic Shift Left
58 ASL B ;B=B*2
68 xx ASL xx,X ;(xx+X)=(xx+X)*2
78 addr ASL addr ;(addr)=(addr)*2
49 ROL A ;A=A<<
59 ROL B
69 xx ROL xx,X
79 addr ROL addr
4A DEC A
5A DEC B
6A 02 DEC 2,X
7A XXXX DEC (XXXX) ;?
4B
5B
6B
7B
4C INC A ;?
5C INC B
6C 02 INC 2,X
7C 8006 INC PIA
4D TST A ;
5D TST B ;
6D 02 TST 2,X ;
7D XXXX TST (XXXX) ;GOOD
4E
5E
6E
7E 0100 JMP START
4F CLR A
5F CLR B
6F 02 CLR 2,X ;
7F 49 CLR ENDGAM ;ENDGAM is at 49 in first page