; 65C02 instruction implementations ; ; NOTE: If you change this file, opdefs.inc must be rebuilt by running ; opdefs.pl (requires the pyz80 assembler) INC "opdefs.inc" org op_00 dump $ i_brk: inc de ; return to BRK+2 ex af,af' ; get C inc c dec c ; set N Z push af ; save flags for below ex af,af' ; save C ld a,d ; PCH exx ld (hl),a ; push return PCH dec l ; S-- exx ld a,e ; PCL exx ld (hl),a ; push return PCL dec l ; S-- pop bc ; Z80 flags in C ld a,c and %10000001 ; keep Z80 N and C bit 6,c ; check Z80 Z jr z,brk_nz or %00000010 ; set Z brk_nz: or e ; merge V or d ; merge T B D I or %00010000 ; set B (stack value only) ld (hl),a ; push P dec l ; S-- res 3,d ; clear D [65C02] set 2,d ; set I (disable interrupts) exx ld de,(m6502_int) ; fetch interrupt handler jp (ix) ; main_loop op_00_len: equ $-op_00 org op_01 dump $ i_ora_ix: ld a,(de) ; ORA ($xx,X) inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ld a,(hl) inc hl ld h,(hl) ld l,a ld a,b ; A or (hl) ; A|x ld b,a ; set A ld c,a ; set N Z jp read_loop op_01_len: equ $-op_01 org op_02 dump $ jp i_undoc_1 op_02_len: equ $-op_02 org op_03 dump $ jp i_undoc_2 op_03_len: equ $-op_03 org op_04 dump $ i_tsb_z: ld a,(de) ; TSB $nn [65C02] inc de ld l,a ld h,0 ld c,(hl) ; x ld a,c or b ; x|A ld (hl),a ; set mem ld a,c and b ; x&A ld c,a ; set Z jp (ix) ; zwrite_loop op_04_len: equ $-op_04 org op_05 dump $ i_ora_z: ld a,(de) ; ORA $nn inc de ld l,a ld h,0 ld a,b ; A or (hl) ; A|x ld b,a ; set A ld c,a ; set N Z jp read_loop op_05_len: equ $-op_05 org op_06 dump $ i_asl_z: ld a,(de) ; ASL $nn inc de ld l,a ld h,0 ex af,af' sla (hl) ; x << 1 ld c,(hl) ; set N Z ex af,af' ; set carry jp write_loop op_06_len: equ $-op_06 org op_07 dump $ i_rmb_0: ld a,(de) ; RMB0 [65C02] inc de ld l,a ld h,0 res 0,(hl) jp (ix) ; zwrite_loop op_07_len: equ $-op_07 org op_08 dump $ i_php: ex af,af' ; carry inc c dec c ; set N Z push af ; save flags ex af,af' ; protect carry exx pop bc ld a,c and %10000001 ; keep Z80 N and C bit 6,c ; check Z80 Z jr z,php_nz or %00000010 ; set Z php_nz: or e ; merge V or d ; merge T D I ld (hl),a dec l ; S-- exx jp (ix) ; main_loop op_08_len: equ $-op_08 org op_09 dump $ i_ora_i: ld h,d ld l,e inc de ld a,b ; A or (hl) ; A|x ld b,a ; set A ld c,a ; set N Z jp read_loop op_09_len: equ $-op_09 org op_0a dump $ i_asl_acc: ex af,af' sla b ; A << 1 ld c,b ; set N Z ex af,af' ; set carry jp (ix) ; main_loop op_0a_len: equ $-op_0a org op_0b dump $ jp i_undoc_2 op_0b_len: equ $-op_0b org op_0c dump $ i_tsb_a: ex de,hl ; TSB $nnnn [65C02] ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ld c,(hl) ; x ld a,c or b ; x|A ld (hl),a ; set mem ld a,c and b ; x&A ld c,a ; set Z jp write_loop op_0c_len: equ $-op_0c org op_0d dump $ i_ora_a: ex de,hl ; ORA $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ld a,b ; A or (hl) ; A|x ld b,a ; set A ld c,a ; set N Z jp read_loop op_0d_len: equ $-op_0d org op_0e dump $ i_asl_a: ex de,hl ; ASL $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ex af,af' sla (hl) ; x << 1 ld c,(hl) ; set N Z ex af,af' ; set carry jp write_loop op_0e_len: equ $-op_0e org op_0f dump $ i_bbr_0: ld a,(de) ; BBR0 [65C02] inc de ld l,a ld h,0 bit 0,(hl) jp z,i_bra ; ToDo: read after branch inc de jp (ix) ; zread_loop op_0f_len: equ $-op_0f org op_10 dump $ i_bpl: inc c dec c jp p,i_bra ; branch if plus inc de jp (ix) ; main_loop op_10_len: equ $-op_10 org op_11 dump $ i_ora_iy: ld a,(de) ; ORA ($nn),Y inc de ld l,a ld h,0 ld a,iyl ; Y add a,(hl) inc l ; (may wrap in zero page) ld h,(hl) ld l,a adc a,h sub l ld h,a ld a,b ; A or (hl) ; A|x ld b,a ; set A ld c,a ; set N Z jp read_loop op_11_len: equ $-op_11 org op_12 dump $ i_ora_iz: ld a,(de) ; indirect zero-page [65C02] inc de ld l,a ld h,0 ld a,(hl) inc l ; (may wrap in zero page) ld h,(hl) ld l,a ld a,(hl) inc hl ld h,(hl) ld l,a ld a,b ; A or (hl) ; A|x ld b,a ; set A ld c,a ; set N Z jp read_loop op_12_len: equ $-op_12 org op_13 dump $ jp i_undoc_2 op_13_len: equ $-op_13 org op_14 dump $ i_trb_z: ld a,(de) ; TRB $nn [65C02] inc de ld l,a ld h,0 ld c,(hl) ; x ld a,b ; A cpl ; ~A and c ; x&~A ld (hl),a ; set mem ld a,c and b ; x&A ld c,a ; set Z (N lost) jp (ix) ; zwrite_loop op_14_len: equ $-op_14 org op_15 dump $ i_ora_zx: ld a,(de) ; ORA $nn,X inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ld a,b ; A or (hl) ; A|x ld b,a ; set A ld c,a ; set N Z jp read_loop op_15_len: equ $-op_15 org op_16 dump $ i_asl_zx: ld a,(de) ; ASL $nn,X inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ex af,af' sla (hl) ; x << 1 ld c,(hl) ; set N Z ex af,af' ; set carry jp write_loop op_16_len: equ $-op_16 org op_17 dump $ i_rmb_1: ld a,(de) ; RMB1 [65C02] inc de ld l,a ld h,0 res 1,(hl) jp (ix) ; zwrite_loop op_17_len: equ $-op_17 org op_18 dump $ i_clc: and a ; clear C ex af,af' ; save carry jp (ix) ; main_loop op_18_len: equ $-op_18 org op_19 dump $ i_ora_ay: ld a,(de) ; ORA $nnnn,Y inc de add a,iyl ; add Y ld l,a ld a,(de) inc de adc a,0 ld h,a ld a,b ; A or (hl) ; A|x ld b,a ; set A ld c,a ; set N Z jp read_loop op_19_len: equ $-op_19 org op_1a dump $ i_inc_acc: inc b ; A++ [65C02] ld c,b ; set N Z jp (ix) ; main_loop op_1a_len: equ $-op_1a org op_1b dump $ jp i_undoc_3 op_1b_len: equ $-op_1b org op_1c dump $ i_trb_a: ex de,hl ; TRB $nnnn [65C02] ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ld c,(hl) ; x ld a,b ; A cpl ; ~A and c ; x&~A ld (hl),a ; set mem ld a,c and b ; x&A ld c,a ; set Z (N lost) jp write_loop op_1c_len: equ $-op_1c org op_1d dump $ i_ora_ax: ld a,(de) ; ORA $nnnn,X inc de add a,iyh ; add X ld l,a ld a,(de) inc de adc a,0 ld h,a ld a,b ; A or (hl) ; A|x ld b,a ; set A ld c,a ; set N Z jp read_loop op_1d_len: equ $-op_1d org op_1e dump $ i_asl_ax: ld a,(de) ; ASL $nnnn,X inc de add a,iyh ; add X ld l,a ld a,(de) inc de adc a,0 ld h,a ex af,af' sla (hl) ; x << 1 ld c,(hl) ; set N Z ex af,af' ; set carry jp write_loop op_1e_len: equ $-op_1e org op_1f dump $ i_bbr_1: ld a,(de) ; BBR1 [65C02] inc de ld l,a ld h,0 bit 1,(hl) jp z,i_bra inc de jp (ix) ; main_loop op_1f_len: equ $-op_1f org op_20 dump $ i_jsr: ex de,hl ; JSR nn ld e,(hl) ; subroutine low inc hl ; only 1 inc - we push ret-1 ld d,(hl) ; subroutine high ld a,h ; PCh exx ld (hl),a ; push ret-1 high byte dec l ; S-- exx ld a,l ; PCl exx ld (hl),a ; push ret-1 low byte dec l ; S-- exx jp (ix) ; main_loop op_20_len: equ $-op_20 org op_21 dump $ i_and_ix: ld a,(de) ; AND ($xx,X) inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ld a,(hl) inc hl ld h,(hl) ld l,a ld a,b ; A and (hl) ; A&x ld b,a ; set A ld c,a ; set N Z jp read_loop op_21_len: equ $-op_21 org op_22 dump $ jp i_undoc_1 op_22_len: equ $-op_22 org op_23 dump $ jp i_undoc_2 op_23_len: equ $-op_23 org op_24 dump $ i_bit_z: ld a,(de) ; BIT $nn inc de ld l,a ld h,0 i_bit: ld c,(hl) ; set N ld a,c and %01000000 ; V flag from bit 6 of x exx ld e,a ; set V exx ld a,(de) ; next instruction and %11011111 cp &d0 ; BNE or BEQ next? jr z,bit_z jp (ix) ; main_loop ; use N flag bit_z: ld a,b ; A and c ; perform BIT test ld c,a ; set Z jp read_loop op_24_len: equ $-op_24 org op_25 dump $ i_and_z: ld a,(de) ; AND $nn inc de ld l,a ld h,0 ld a,b ; A and (hl) ; A&x ld b,a ; set A ld c,a ; set N Z jp read_loop op_25_len: equ $-op_25 org op_26 dump $ i_rol_z: ld a,(de) ; ROL $nn inc de ld l,a ld h,0 ex af,af' rl (hl) ; x << 1 ld c,(hl) ; set N Z ex af,af' ; set carry jp write_loop op_26_len: equ $-op_26 org op_27 dump $ i_rmb_2: ld a,(de) ; RMB2 [65C02] inc de ld l,a ld h,0 res 2,(hl) jp (ix) ; zwrite_loop op_27_len: equ $-op_27 org op_28 dump $ i_plp: exx inc l ; S++ ld a,(hl) ; pop P ld c,a ; keep safe and %00001100 ; keep D and I or %00110000 ; force T and B ld d,a ; set P ld a,c and %01000000 ; keep V ld e,a ; set V ld a,c rra ; carry from C ex af,af' ; set carry ld a,c and %10000010 ; keep N Z xor %00000010 ; zero for Z exx ld c,a ; set N Z jp (ix) ; main_loop op_28_len: equ $-op_28 org op_29 dump $ i_and_i: ld h,d ld l,e inc de ld a,b ; A and (hl) ; A&x ld b,a ; set A ld c,a ; set N Z jp read_loop op_29_len: equ $-op_29 org op_2a dump $ i_rol_acc: ex af,af' rl b ld c,b ; set N Z ex af,af' ; set carry jp (ix) ; main_loop op_2a_len: equ $-op_2a org op_2b dump $ jp i_undoc_2 op_2b_len: equ $-op_2b org op_2c dump $ i_bit_a: ex de,hl ; BIT $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl jp i_bit op_2c_len: equ $-op_2c org op_2d dump $ i_and_a: ex de,hl ; AND $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ld a,b ; A and (hl) ; A&x ld b,a ; set A ld c,a ; set N Z jp read_loop op_2d_len: equ $-op_2d org op_2e dump $ i_rol_a: ex de,hl ; ROL $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ex af,af' rl (hl) ; x << 1 ld c,(hl) ; set N Z ex af,af' ; set carry jp write_loop op_2e_len: equ $-op_2e org op_2f dump $ i_bbr_2: ld a,(de) ; BBR2 [65C02] inc de ld l,a ld h,0 bit 2,(hl) jp z,i_bra inc de jp (ix) ; zread_loop op_2f_len: equ $-op_2f org op_30 dump $ i_bmi: inc c dec c jp m,i_bra ; branch if minus inc de jp (ix) ; main_loop op_30_len: equ $-op_30 org op_31 dump $ i_and_iy: ld a,(de) ; AND ($nn),Y inc de ld l,a ld h,0 ld a,iyl ; Y add a,(hl) inc l ; (may wrap in zero page) ld h,(hl) ld l,a adc a,h sub l ld h,a ld a,b ; A and (hl) ; A&x ld b,a ; set A ld c,a ; set N Z jp read_loop op_31_len: equ $-op_31 org op_32 dump $ i_and_iz: ld a,(de) ; indirect zero-page [65C02] inc de ld l,a ld h,0 ld a,(hl) inc l ; (may wrap in zero page) ld h,(hl) ld l,a ld a,(hl) inc hl ld h,(hl) ld l,a ld a,b ; A and (hl) ; A&x ld b,a ; set A ld c,a ; set N Z jp read_loop op_32_len: equ $-op_32 org op_33 dump $ jp i_undoc_2 op_33_len: equ $-op_33 org op_34 dump $ i_bit_zx: ld a,(de) ; BIT $nn,X inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 jp i_bit op_34_len: equ $-op_34 org op_35 dump $ i_and_zx: ld a,(de) ; AND $nn,X inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ld a,b ; A and (hl) ; A&x ld b,a ; set A ld c,a ; set N Z jp read_loop op_35_len: equ $-op_35 org op_36 dump $ i_rol_zx: ld a,(de) ; ROL $nn,X inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ex af,af' rl (hl) ; x << 1 ld c,(hl) ; set N Z ex af,af' ; set carry jp write_loop op_36_len: equ $-op_36 org op_37 dump $ i_rmb_3: ld a,(de) ; RMB3 [65C02] inc de ld l,a ld h,0 res 3,(hl) jp (ix) ; zwrite_loop op_37_len: equ $-op_37 org op_38 dump $ i_sec: scf ; set C ex af,af' ; save carry jp (ix) ; main_loop op_38_len: equ $-op_38 org op_39 dump $ i_and_ay: ld a,(de) ; AND $nnnn,Y inc de add a,iyl ; add Y ld l,a ld a,(de) inc de adc a,0 ld h,a ld a,b ; A and (hl) ; A&x ld b,a ; set A ld c,a ; set N Z jp read_loop op_39_len: equ $-op_39 org op_3a dump $ i_dec_acc: dec b ; A-- [65C02] ld c,b ; set N Z jp (ix) ; main_loop op_3a_len: equ $-op_3a org op_3b dump $ jp i_undoc_3 op_3b_len: equ $-op_3b org op_3c dump $ i_bit_ax: ld a,(de) ; BIT $nnnn,X inc de add a,iyh ; add X ld l,a ld a,(de) inc de adc a,0 ld h,a jp i_bit op_3c_len: equ $-op_3c org op_3d dump $ i_and_ax: ld a,(de) ; AND $nnnn,X inc de add a,iyh ; add X ld l,a ld a,(de) inc de adc a,0 ld h,a ld a,b ; A and (hl) ; A&x ld b,a ; set A ld c,a ; set N Z jp read_loop op_3d_len: equ $-op_3d org op_3e dump $ i_rol_ax: ld a,(de) ; ROL $nnnn,X inc de add a,iyh ; add X ld l,a ld a,(de) inc de adc a,0 ld h,a ex af,af' rl (hl) ; x << 1 ld c,(hl) ; set N Z ex af,af' ; set carry jp write_loop op_3e_len: equ $-op_3e org op_3f dump $ i_bbr_3: ld a,(de) ; BBR3 [65C02] inc de ld l,a ld h,0 bit 3,(hl) jp z,i_bra inc de jp (ix) ; zread_loop op_3f_len: equ $-op_3f org op_40 dump $ i_rti: exx inc l ; S++ ld a,(hl) ; pop P ld c,a ; keep safe and %00001100 ; keep D and I or %00110000 ; force T and B ld d,a ; set P ld a,c and %01000000 ; keep V ld e,a ; set V ld a,c rra ; carry from C ex af,af' ; set carry ld a,c and %10000010 ; keep N Z xor %00000010 ; zero for Z exx ld c,a ; set N Z exx inc l ; S++ ld a,(hl) ; pop return LSB exx ld e,a ; PCL exx inc l ; S++ ld a,(hl) ; pop return MSB exx ld d,a ; PCH jp (ix) ; main_loop op_40_len: equ $-op_40 org op_41 dump $ i_eor_ix: ld a,(de) ; EOR ($xx,X) inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ld a,(hl) inc hl ld h,(hl) ld l,a ld a,b ; A xor (hl) ; A^x ld b,a ; set A ld c,a ; set N Z jp read_loop op_41_len: equ $-op_41 org op_42 dump $ jp i_undoc_1 op_42_len: equ $-op_42 org op_43 dump $ jp i_undoc_2 op_43_len: equ $-op_43 org op_44 dump $ jp i_undoc_2 op_44_len: equ $-op_44 org op_45 dump $ i_eor_z: ld a,(de) ; EOR $nn inc de ld l,a ld h,0 ld a,b ; A xor (hl) ; A^x ld b,a ; set A ld c,a ; set N Z jp read_loop op_45_len: equ $-op_45 org op_46 dump $ i_lsr_z: ld a,(de) ; LSR $nn inc de ld l,a ld h,0 ex af,af' srl (hl) ; x >> 1 ld c,(hl) ; set N Z ex af,af' ; set carry jp write_loop op_46_len: equ $-op_46 org op_47 dump $ i_rmb_4: ld a,(de) ; RMB4 [65C02] inc de ld l,a ld h,0 res 4,(hl) jp (ix) ; zwrite_loop op_47_len: equ $-op_47 org op_48 dump $ i_pha: ld a,b ; A exx ld (hl),a ; push A dec l ; S-- exx jp (ix) ; main_loop op_48_len: equ $-op_48 org op_49 dump $ i_eor_i: ld h,d ld l,e inc de ld a,b ; A xor (hl) ; A^x ld b,a ; set A ld c,a ; set N Z jp read_loop op_49_len: equ $-op_49 org op_4a dump $ i_lsr_acc: ex af,af' srl b ; A >> 1 ld c,b ; set N Z ex af,af' ; set carry jp (ix) ; main_loop op_4a_len: equ $-op_4a org op_4b dump $ jp i_undoc_2 op_4b_len: equ $-op_4b org op_4c dump $ i_jmp_a: ex de,hl ; JMP nn ld e,(hl) inc hl ld d,(hl) jp (ix) ; main_loop op_4c_len: equ $-op_4c org op_4d dump $ i_eor_a: ex de,hl ; EOR $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ld a,b ; A xor (hl) ; A^x ld b,a ; set A ld c,a ; set N Z jp read_loop op_4d_len: equ $-op_4d org op_4e dump $ i_lsr_a: ex de,hl ; LSR $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ex af,af' srl (hl) ; x >> 1 ld c,(hl) ; set N Z ex af,af' ; set carry jp write_loop op_4e_len: equ $-op_4e org op_4f dump $ i_bbr_4: ld a,(de) ; BBR4 [65C02] inc de ld l,a ld h,0 bit 4,(hl) jp z,i_bra inc de jp (ix) ; zread_loop op_4f_len: equ $-op_4f org op_50 dump $ i_bvc: exx bit 6,e exx jp z,i_bra ; branch if V clear inc de jp (ix) ; main_loop op_50_len: equ $-op_50 org op_51 dump $ i_eor_iy: ld a,(de) ; EOR ($nn),Y inc de ld l,a ld h,0 ld a,iyl ; Y add a,(hl) inc l ; (may wrap in zero page) ld h,(hl) ld l,a adc a,h sub l ld h,a ld a,b ; A xor (hl) ; A^x ld b,a ; set A ld c,a ; set N Z jp read_loop op_51_len: equ $-op_51 org op_52 dump $ i_eor_iz: ld a,(de) ; indirect zero-page [65C02] inc de ld l,a ld h,0 ld a,(hl) inc l ; (may wrap in zero page) ld h,(hl) ld l,a ld a,(hl) inc hl ld h,(hl) ld l,a ld a,b ; A xor (hl) ; A^x ld b,a ; set A ld c,a ; set N Z jp read_loop op_52_len: equ $-op_52 org op_53 dump $ jp i_undoc_2 op_53_len: equ $-op_53 org op_54 dump $ jp i_undoc_2 op_54_len: equ $-op_54 org op_55 dump $ i_eor_zx: ld a,(de) ; EOR $nn,X inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ld a,b ; A xor (hl) ; A^x ld b,a ; set A ld c,a ; set N Z jp read_loop op_55_len: equ $-op_55 org op_56 dump $ i_lsr_zx: ld a,(de) ; LSR $nn,X inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ex af,af' srl (hl) ; x >> 1 ld c,(hl) ; set N Z ex af,af' ; set carry jp write_loop op_56_len: equ $-op_56 org op_57 dump $ i_rmb_5: ld a,(de) ; RMB5 [65C02] inc de ld l,a ld h,0 res 5,(hl) jp (ix) ; zwrite_loop op_57_len: equ $-op_57 org op_58 dump $ i_cli: exx res 2,d ; clear I (enable interrupts) exx jp (ix) ; main_loop op_58_len: equ $-op_58 org op_59 dump $ i_eor_ay: ld a,(de) ; EOR $nnnn,Y inc de add a,iyl ; add Y ld l,a ld a,(de) inc de adc a,0 ld h,a ld a,b ; A xor (hl) ; A^x ld b,a ; set A ld c,a ; set N Z jp read_loop op_59_len: equ $-op_59 org op_5a dump $ i_phy: ld a,iyl ; PHY [65C02] exx ld (hl),a ; push Y dec l ; S-- exx jp (ix) ; main_loop op_5a_len: equ $-op_5a org op_5b dump $ jp i_undoc_3 op_5b_len: equ $-op_5b org op_5c dump $ jp i_undoc_3 op_5c_len: equ $-op_5c org op_5d dump $ i_eor_ax: ld a,(de) ; EOR $nnnn,X inc de add a,iyh ; add X ld l,a ld a,(de) inc de adc a,0 ld h,a ld a,b ; A xor (hl) ; A^x ld b,a ; set A ld c,a ; set N Z jp read_loop op_5d_len: equ $-op_5d org op_5e dump $ i_lsr_ax: ld a,(de) ; LSR $nnnn,X inc de add a,iyh ; add X ld l,a ld a,(de) inc de adc a,0 ld h,a ex af,af' srl (hl) ; x >> 1 ld c,(hl) ; set N Z ex af,af' ; set carry jp write_loop op_5e_len: equ $-op_5e org op_5f dump $ i_bbr_5: ld a,(de) ; BBR5 [65C02] inc de ld l,a ld h,0 bit 5,(hl) jp z,i_bra inc de jp (ix) ; zread_loop op_5f_len: equ $-op_5f org op_60 dump $ i_rts: exx ; RTS inc l ; S++ ld a,(hl) ; PC LSB exx ld e,a exx inc l ; S++ ld a,(hl) ; PC MSB exx ld d,a inc de ; PC++ (strange but true) jp (ix) ; main_loop op_60_len: equ $-op_60 org op_61 dump $ i_adc_ix: ld a,(de) ; ADX ($xx,X) inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ld a,(hl) inc hl ld h,(hl) ld l,a jp i_adc op_61_len: equ $-op_61 org op_62 dump $ jp i_undoc_1 op_62_len: equ $-op_62 org op_63 dump $ jp i_undoc_2 op_63_len: equ $-op_63 org op_64 dump $ i_stz_z: ld a,(de) ; STZ $nn [65C02] inc de ld l,a ld h,0 ld (hl),h jp (ix) ; zwrite_loop op_64_len: equ $-op_64 org op_65 dump $ i_adc_z: ld a,(de) ; ADC $nn inc de ld l,a ld h,0 jp i_adc op_65_len: equ $-op_65 org op_66 dump $ i_ror_z: ld a,(de) ; ROR $nn inc de ld l,a ld h,0 ex af,af' rr (hl) ; x >> 1 ld c,(hl) ; set N Z ex af,af' ; set carry jp write_loop op_66_len: equ $-op_66 org op_67 dump $ i_rmb_6: ld a,(de) ; RMB6 [65C02] inc de ld l,a ld h,0 res 6,(hl) jp (ix) ; zwrite_loop op_67_len: equ $-op_67 org op_68 dump $ i_pla: exx inc l ; S++ ld a,(hl) ; pop A exx ld b,a ; set A ld c,a ; set N Z jp (ix) ; main_loop op_68_len: equ $-op_68 org op_69 dump $ i_adc_i: ld h,d ld l,e inc de i_adc: ex af,af' ; carry ld a,b ; A adc a,(hl) ; A+M+C adc_daa: nop ld b,a ; set A ld c,a ; set N Z exx jp pe,adcsbc_v ld e,%00000000 exx ex af,af' ; set carry jp read_loop adcsbc_v: ld e,%01000000 exx ex af,af' ; set carry jp read_loop op_69_len: equ $-op_69 org op_6a dump $ i_ror_acc: ex af,af' rr b ld c,b ; set N Z ex af,af' ; set carry jp (ix) ; main_loop op_6a_len: equ $-op_6a org op_6b dump $ jp i_undoc_2 op_6b_len: equ $-op_6b org op_6c dump $ i_jmp_i: ex de,hl ; JMP (nn) ld e,(hl) inc hl ld d,(hl) ex de,hl ld e,(hl) ; inc l ; 6502 bug wraps within page, *OR* inc hl ; 65C02 spans pages correctly ld d,(hl) jp (ix) ; main_loop op_6c_len: equ $-op_6c org op_6d dump $ i_adc_a: ex de,hl ; ADC $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl jp i_adc op_6d_len: equ $-op_6d org op_6e dump $ i_ror_a: ex de,hl ; ROR $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ex af,af' rr (hl) ; x >> 1 ld c,(hl) ; set N Z ex af,af' ; set carry jp write_loop op_6e_len: equ $-op_6e org op_6f dump $ i_bbr_6: ld a,(de) ; BBR6 [65C02] inc de ld l,a ld h,0 bit 6,(hl) jp z,i_bra inc de jp (ix) ; zread_loop op_6f_len: equ $-op_6f org op_70 dump $ i_bvs: exx bit 6,e exx jp nz,i_bra ; branch if V set inc de jp (ix) ; main_loop op_70_len: equ $-op_70 org op_71 dump $ i_adc_iy: ld a,(de) ; ADC ($nn),Y inc de ld l,a ld h,0 ld a,iyl ; Y add a,(hl) inc l ; (may wrap in zero page) ld h,(hl) ld l,a adc a,h sub l ld h,a jp i_adc op_71_len: equ $-op_71 org op_72 dump $ i_adc_iz: ld a,(de) ; indirect zero-page [65C02] inc de ld l,a ld h,0 ld a,(hl) inc l ; (may wrap in zero page) ld h,(hl) ld l,a ld a,(hl) inc hl ld h,(hl) ld l,a jp i_adc op_72_len: equ $-op_72 org op_73 dump $ jp i_undoc_2 op_73_len: equ $-op_73 org op_74 dump $ i_stz_zx: ld a,(de) ; STZ $nn,X inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ld (hl),h jp (ix) ; zwrite_loop op_74_len: equ $-op_74 org op_75 dump $ i_adc_zx: ld a,(de) ; ADC $nn,X inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 jp i_adc op_75_len: equ $-op_75 org op_76 dump $ i_ror_zx: ld a,(de) ; ROR $nn,X inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ex af,af' rr (hl) ; x >> 1 ld c,(hl) ; set N Z ex af,af' ; set carry jp write_loop op_76_len: equ $-op_76 org op_77 dump $ i_rmb_7: ld a,(de) ; RMB7 [65C02] inc de ld l,a ld h,0 res 7,(hl) jp (ix) ; zwrite_loop op_77_len: equ $-op_77 org op_78 dump $ i_sei: exx set 2,d ; set I (disable interrupts) exx jp (ix) ; main_loop op_78_len: equ $-op_78 org op_79 dump $ i_adc_ay: ld a,(de) ; ADC $nnnn,Y inc de add a,iyl ; add Y ld l,a ld a,(de) inc de adc a,0 ld h,a jp i_adc op_79_len: equ $-op_79 org op_7a dump $ i_ply: exx ; PLY [65C02] inc l ; S++ ld a,(hl) ; pop exx ld iyl,a ; set Y ld c,a ; set N Z jp (ix) ; main_loop op_7a_len: equ $-op_7a org op_7b dump $ jp i_undoc_3 op_7b_len: equ $-op_7b org op_7c dump $ i_jmp_ax: ld a,(de) ; JMP (nn,X) [65C02] inc de add a,iyh ; add X ld l,a ld a,(de) inc de adc a,0 ; carry spans page ld h,a ld e,(hl) inc hl ld d,(hl) jp (ix) ; main_loop op_7c_len: equ $-op_7c org op_7d dump $ i_adc_ax: ld a,(de) ; ADC $nnnn,X inc de add a,iyh ; add X ld l,a ld a,(de) inc de adc a,0 ld h,a jp i_adc op_7d_len: equ $-op_7d org op_7e dump $ i_ror_ax: ld a,(de) ; ROR $nnnn,X inc de add a,iyh ; add X ld l,a ld a,(de) inc de adc a,0 ld h,a ex af,af' rr (hl) ; x >> 1 ld c,(hl) ; set N Z ex af,af' ; set carry jp write_loop op_7e_len: equ $-op_7e org op_7f dump $ i_bbr_7: ld a,(de) ; BBR7 [65C02] inc de ld l,a ld h,0 bit 7,(hl) jp z,i_bra inc de jp (ix) ; zread_loop op_7f_len: equ $-op_7f org op_80 dump $ i_bra: ld a,(de) ; BRA [65C02] inc de ld l,a ; offset low rla ; set carry with sign sbc a,a ; form high byte for offset ld h,a add hl,de ; PC=PC+e ex de,hl jp (ix) ; main_loop i_bra_ex: ex af,af' ; preseve C before branch ld a,(de) inc de ld l,a ; offset low rla ; set carry with sign sbc a,a ; form high byte for offset ld h,a add hl,de ; PC=PC+e ex de,hl jp (ix) ; main_loop op_80_len: equ $-op_80 org op_81 dump $ i_sta_ix: ld a,(de) ; STA ($xx,X) inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ld a,(hl) inc hl ld h,(hl) ld l,a ld (hl),b ; store A jp (ix) ; zwrite_loop op_81_len: equ $-op_81 org op_82 dump $ jp i_undoc_2 op_82_len: equ $-op_82 org op_83 dump $ jp i_undoc_2 op_83_len: equ $-op_83 org op_84 dump $ i_sty_z: ld a,(de) ; STY $nn inc de ld l,a ld h,0 ld a,iyl ; Y ld (hl),a jp (ix) ; zwrite_loop op_84_len: equ $-op_84 org op_85 dump $ i_sta_z: ld a,(de) ; STA $nn inc de ld l,a ld h,0 ld (hl),b ; store A jp (ix) ; zwrite_loop op_85_len: equ $-op_85 org op_86 dump $ i_stx_z: ld a,(de) ; STX $nn inc de ld l,a ld h,0 ld a,iyh ; X ld (hl),a jp (ix) ; zwrite_loop op_86_len: equ $-op_86 org op_87 dump $ i_smb_0: ld a,(de) ; SMB0 [65C02] inc de ld l,a ld h,0 set 0,(hl) jp (ix) ; zwrite_loop op_87_len: equ $-op_87 org op_88 dump $ i_dey: dec iyl ; Y-- ld c,iyl ; set N Z jp (ix) ; main_loop op_88_len: equ $-op_88 org op_89 dump $ i_bit_i: ld a,(de) ; BIT #$nn inc de and b ; BIT test against A ld c,a ; set Z jp read_loop op_89_len: equ $-op_89 org op_8a dump $ i_txa: ld b,iyh ; A=X ld c,b ; set N Z jp (ix) ; main_loop op_8a_len: equ $-op_8a org op_8b dump $ jp i_undoc_2 op_8b_len: equ $-op_8b org op_8c dump $ i_sty_a: ex de,hl ; STY $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ld a,iyl ; Y ld (hl),a jp write_loop op_8c_len: equ $-op_8c org op_8d dump $ i_sta_a: ex de,hl ; STA $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ld (hl),b ; store A jp write_loop op_8d_len: equ $-op_8d org op_8e dump $ i_stx_a: ex de,hl ; STX $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ld a,iyh ; X ld (hl),a jp write_loop op_8e_len: equ $-op_8e org op_8f dump $ i_bbs_0: ld a,(de) ; BBS0 [65C02] inc de ld l,a ld h,0 bit 0,(hl) jp nz,i_bra ; ToDo: read after branch inc de jp (ix) ; zread_loop op_8f_len: equ $-op_8f org op_90 dump $ i_bcc: ex af,af' jp nc,i_bra_ex ; branch if C clear ex af,af' inc de jp (ix) ; main_loop op_90_len: equ $-op_90 org op_91 dump $ i_sta_iy: ld a,(de) ; STA ($nn),Y inc de ld l,a ld h,0 ld a,iyl ; Y add a,(hl) inc l ld h,(hl) ld l,a adc a,h sub l ld h,a ld (hl),b ; store A jp write_loop op_91_len: equ $-op_91 org op_92 dump $ i_sta_iz: ld a,(de) ; STA ($nn) [65C02] inc de ld l,a ld h,0 ld a,(hl) inc l ; (may wrap in zero page) ld h,(hl) ld l,a ld a,(hl) inc hl ld h,(hl) ld l,a ld (hl),b ; store A jp write_loop op_92_len: equ $-op_92 org op_93 dump $ jp i_undoc_2 op_93_len: equ $-op_93 org op_94 dump $ i_sty_zx: ld a,(de) ; STY $nn,X inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ld a,iyl ; Y ld (hl),a jp (ix) ; zwrite_loop op_94_len: equ $-op_94 org op_95 dump $ i_sta_zx: ld a,(de) ; STA $nn,X inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ld (hl),b ; store A jp (ix) ; zwrite_loop op_95_len: equ $-op_95 org op_96 dump $ i_stx_zy: ld a,(de) ; STX $nn,Y inc de add a,iyl ; add Y (may wrap in zero page) ld l,a ld h,0 ld a,iyh ; X ld (hl),a jp (ix) ; zwrite_loop op_96_len: equ $-op_96 org op_97 dump $ i_smb_1: ld a,(de) ; SMB1 [65C02] inc de ld l,a ld h,0 set 1,(hl) jp (ix) ; zwrite_loop op_97_len: equ $-op_97 org op_98 dump $ i_tya: ld b,iyl ; A=Y ld c,b ; set N Z jp (ix) ; main_loop op_98_len: equ $-op_98 org op_99 dump $ i_sta_ay: ld a,(de) ; STA $nnnn,Y inc de add a,iyl ; add Y ld l,a ld a,(de) inc de adc a,0 ld h,a ld (hl),b ; store A jp write_loop op_99_len: equ $-op_99 org op_9a dump $ i_txs: ld a,iyh ; X exx ld l,a ; set S (no flags set) exx jp (ix) ; main_loop op_9a_len: equ $-op_9a org op_9b dump $ jp i_undoc_2 op_9b_len: equ $-op_9b org op_9c dump $ i_stz_a: ex de,hl ; STZ $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ld (hl),0 jp write_loop op_9c_len: equ $-op_9c org op_9d dump $ i_sta_ax: ld a,(de) ; STA $nnnn,X inc de add a,iyh ; add X ld l,a ld a,(de) inc de adc a,0 ld h,a ld (hl),b ; store A jp write_loop op_9d_len: equ $-op_9d org op_9e dump $ i_stz_ax: ld a,(de) ; STZ $nnnn,X inc de add a,iyh ; add X ld l,a ld a,(de) inc de adc a,0 ld h,a ld (hl),0 jp write_loop op_9e_len: equ $-op_9e org op_9f dump $ i_bbs_1: ld a,(de) ; BBS1 [65C02] inc de ld l,a ld h,0 bit 1,(hl) jp nz,i_bra inc de jp (ix) ; zread_loop op_9f_len: equ $-op_9f org op_a0 dump $ i_ldy_i: ld a,(de) ; LDY #$nn inc de ld c,a ; set N Z ld iyl,c ; set Y jp (ix) ; main_loop op_a0_len: equ $-op_a0 org op_a1 dump $ i_lda_ix: ld a,(de) ; LDA ($nn,X) inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ld a,(hl) inc hl ld h,(hl) ld l,a ld b,(hl) ; set A ld c,b ; set N Z jp (ix) ; zread_loop op_a1_len: equ $-op_a1 org op_a2 dump $ i_ldx_i: ld a,(de) ; LDX #$nn inc de ld iyh,a ; set X ld c,a ; set N Z jp (ix) ; main_loop op_a2_len: equ $-op_a2 org op_a3 dump $ jp i_undoc_2 op_a3_len: equ $-op_a3 org op_a4 dump $ i_ldy_z: ld a,(de) ; LDY $nn inc de ld l,a ld h,0 ld c,(hl) ; set N Z ld iyl,c ; set Y jp (ix) ; zread_loop op_a4_len: equ $-op_a4 org op_a5 dump $ i_lda_z: ld a,(de) ; LDA $nn inc de ld l,a ld h,0 ld b,(hl) ; set A ld c,b ; set N Z jp (ix) ; zread_loop op_a5_len: equ $-op_a5 org op_a6 dump $ i_ldx_z: ld a,(de) ; LDX $nn inc de ld l,a ld h,0 ld c,(hl) ; set N Z ld iyh,c ; set X jp (ix) ; zread_loop op_a6_len: equ $-op_a6 org op_a7 dump $ i_smb_2: ld a,(de) ; SMB2 [65C02] inc de ld l,a ld h,0 set 2,(hl) jp (ix) ; zwrite_loop op_a7_len: equ $-op_a7 org op_a8 dump $ i_tay: ld iyl,b ; Y=A ld c,b ; set N Z jp (ix) ; main_loop op_a8_len: equ $-op_a8 org op_a9 dump $ i_lda_i: ld a,(de) ; LDA #$nn inc de ld b,a ; set A ld c,b ; set N Z jp (ix) ; main_loop op_a9_len: equ $-op_a9 org op_aa dump $ i_tax: ld iyh,b ; X=A ld c,b ; set N Z jp (ix) ; main_loop op_aa_len: equ $-op_aa org op_ab dump $ jp i_undoc_2 op_ab_len: equ $-op_ab org op_ac dump $ i_ldy_a: ex de,hl ; LDY $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ld c,(hl) ; set N Z ld iyl,c ; set Y jp read_loop op_ac_len: equ $-op_ac org op_ad dump $ i_lda_a: ex de,hl ; LDA $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ld b,(hl) ; set A ld c,b ; set N Z jp read_loop op_ad_len: equ $-op_ad org op_ae dump $ i_ldx_a: ex de,hl ; LDX $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ld c,(hl) ; set N Z ld iyh,c ; set X jp read_loop op_ae_len: equ $-op_ae org op_af dump $ i_bbs_2: ld a,(de) ; BBS2 [65C02] inc de ld l,a ld h,0 bit 2,(hl) jp nz,i_bra inc de jp (ix) ; zread_loop op_af_len: equ $-op_af org op_b0 dump $ i_bcs: ex af,af' jp c,i_bra_ex ; branch if C set ex af,af' inc de jp (ix) ; main_loop op_b0_len: equ $-op_b0 org op_b1 dump $ i_lda_iy: ld a,(de) ; LDA ($nn),Y inc de ld l,a ld h,0 ld a,iyl ; Y add a,(hl) inc l ; (may wrap in zero page) ld h,(hl) ld l,a adc a,h sub l ld h,a ld b,(hl) ; set A ld c,b ; set N Z jp read_loop op_b1_len: equ $-op_b1 org op_b2 dump $ i_lda_iz: ld a,(de) ; LDA ($nn) [65C02] inc de ld l,a ld h,0 ld a,(hl) inc l ; (may wrap in zero page) ld h,(hl) ld l,a ld a,(hl) inc hl ld h,(hl) ld l,a ld b,(hl) ; set A ld c,b ; set N Z jp read_loop op_b2_len: equ $-op_b2 org op_b3 dump $ jp i_undoc_2 op_b3_len: equ $-op_b3 org op_b4 dump $ i_ldy_zx: ld a,(de) ; LDY $nn,X inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ld c,(hl) ; set N Z ld iyl,c ; set Y jp (ix) ; zread_loop op_b4_len: equ $-op_b4 org op_b5 dump $ i_lda_zx: ld a,(de) ; LDA $nn,X inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ld b,(hl) ; set A ld c,b ; set N Z jp (ix) ; zread_loop op_b5_len: equ $-op_b5 org op_b6 dump $ i_ldx_zy: ld a,(de) ; LDX $nn,Y inc de add a,iyl ; add Y (may wrap in zero page) ld l,a ld h,0 ld c,(hl) ; set N Z ld iyh,c ; set X jp (ix) ; zread_loop op_b6_len: equ $-op_b6 org op_b7 dump $ i_smb_3: ld a,(de) ; SMB3 [65C02] inc de ld l,a ld h,0 set 3,(hl) jp (ix) ; zwrite_loop op_b7_len: equ $-op_b7 org op_b8 dump $ i_clv: exx ; clear overflow ld e,0 exx jp (ix) ; main_loop op_b8_len: equ $-op_b8 org op_b9 dump $ i_lda_ay: ld a,(de) ; LDA $nnnn,Y inc de add a,iyl ; add Y ld l,a ld a,(de) inc de adc a,0 ld h,a ld b,(hl) ; set A ld c,b ; set N Z jp read_loop op_b9_len: equ $-op_b9 org op_ba dump $ i_tsx: exx ld a,l ; S exx ld iyh,a ; X=S ld c,a ; set N Z jp (ix) ; main_loop op_ba_len: equ $-op_ba org op_bb dump $ jp i_undoc_3 op_bb_len: equ $-op_bb org op_bc dump $ i_ldy_ax: ld a,(de) ; LDY $nnnn,X inc de add a,iyh ; add X ld l,a ld a,(de) inc de adc a,0 ld h,a ld c,(hl) ; set N Z ld iyl,c ; set Y jp read_loop op_bc_len: equ $-op_bc org op_bd dump $ i_lda_ax: ld a,(de) ; LDA $nnnn,X inc de add a,iyh ; add X ld l,a ld a,(de) inc de adc a,0 ld h,a ld b,(hl) ; set A ld c,b ; set N Z jp read_loop op_bd_len: equ $-op_bd org op_be dump $ i_ldx_ay: ld a,(de) ; LDX $nnnn,Y inc de add a,iyl ; add Y ld l,a ld a,(de) inc de adc a,0 ld h,a ld c,(hl) ; set N Z ld iyh,c ; set X jp read_loop op_be_len: equ $-op_be org op_bf dump $ i_bbs_3: ld a,(de) ; BBS3 [65C02] inc de ld l,a ld h,0 bit 3,(hl) jp nz,i_bra inc de jp (ix) ; zread_loop op_bf_len: equ $-op_bf org op_c0 dump $ i_cpy_i: ld h,d ld l,e inc de ex af,af' ; carry ld a,iyl ; Y sub (hl) ; Y-x (result discarded) ld c,a ; set N Z ccf ex af,af' ; set carry jp read_loop op_c0_len: equ $-op_c0 org op_c1 dump $ i_cmp_ix: ld a,(de) ; CMP ($xx,X) inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ld a,(hl) inc hl ld h,(hl) ld l,a ex af,af' ; carry ld a,b ; A sub (hl) ; A-x (result discarded) ld c,a ; set N Z ccf ex af,af' ; set carry jp read_loop op_c1_len: equ $-op_c1 org op_c2 dump $ jp i_undoc_2 op_c2_len: equ $-op_c2 org op_c3 dump $ jp i_undoc_2 op_c3_len: equ $-op_c3 org op_c4 dump $ i_cpy_z: ld a,(de) ; CPY $nn inc de ld l,a ld h,0 ex af,af' ; carry ld a,iyl ; Y sub (hl) ; Y-x (result discarded) ld c,a ; set N Z ccf ex af,af' ; set carry jp read_loop op_c4_len: equ $-op_c4 org op_c5 dump $ i_cmp_z: ld a,(de) ; CMP $nn inc de ld l,a ld h,0 ex af,af' ; carry ld a,b ; A sub (hl) ; A-x (result discarded) ld c,a ; set N Z ccf ex af,af' ; set carry jp read_loop op_c5_len: equ $-op_c5 org op_c6 dump $ i_dec_z: ld a,(de) ; DEC $nn inc de ld l,a ld h,0 dec (hl) ; zero-page-- ld c,(hl) ; set N Z jp (ix) ; zread_write_loop op_c6_len: equ $-op_c6 org op_c7 dump $ i_smb_4: ld a,(de) ; SMB4 [65C02] inc de ld l,a ld h,0 set 4,(hl) jp (ix) ; zwrite_loop op_c7_len: equ $-op_c7 org op_c8 dump $ i_iny: inc iyl ; Y++ ld c,iyl ; set N Z jp (ix) ; main_loop op_c8_len: equ $-op_c8 org op_c9 dump $ i_cmp_i: ld h,d ld l,e inc de ex af,af' ; carry ld a,b ; A sub (hl) ; A-x (result discarded) ld c,a ; set N Z ccf ex af,af' ; set carry jp read_loop op_c9_len: equ $-op_c9 org op_ca dump $ i_dex: dec iyh ; X-- ld c,iyh ; set N Z jp (ix) ; main_loop op_ca_len: equ $-op_ca org op_cb dump $ i_wai: dec de ; WAI [65C02] jp (ix) ; main_loop op_cb_len: equ $-op_cb org op_cc dump $ i_cpy_a: ex de,hl ; CPY $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ex af,af' ; carry ld a,iyl ; Y sub (hl) ; Y-x (result discarded) ld c,a ; set N Z ccf ex af,af' ; set carry jp read_loop op_cc_len: equ $-op_cc org op_cd dump $ i_cmp_a: ex de,hl ; CMP $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ex af,af' ; carry ld a,b ; A sub (hl) ; A-x (result discarded) ld c,a ; set N Z ccf ex af,af' ; set carry jp read_loop op_cd_len: equ $-op_cd org op_ce dump $ i_dec_a: ex de,hl ; DEC $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl dec (hl) ; mem-- ld c,(hl) ; set N Z jp read_write_loop op_ce_len: equ $-op_ce org op_cf dump $ i_bbs_4: ld a,(de) ; BBS4 [65C02] inc de ld l,a ld h,0 bit 4,(hl) jp nz,i_bra inc de jp (ix) ; zread_loop op_cf_len: equ $-op_cf org op_d0 dump $ i_bne: inc c dec c jp nz,i_bra ; branch if not zero inc de jp (ix) ; main_loop op_d0_len: equ $-op_d0 org op_d1 dump $ i_cmp_iy: ld a,(de) ; CMP ($nn),Y inc de ld l,a ld h,0 ld a,iyl ; Y add a,(hl) inc l ; (may wrap in zero page) ld h,(hl) ld l,a adc a,h sub l ld h,a ex af,af' ; carry ld a,b ; A sub (hl) ; A-x (result discarded) ld c,a ; set N Z ccf ex af,af' ; set carry jp read_loop op_d1_len: equ $-op_d1 org op_d2 dump $ i_cmp_iz: ld a,(de) ; indirect zero-page [65C02] inc de ld l,a ld h,0 ld a,(hl) inc l ; (may wrap in zero page) ld h,(hl) ld l,a ld a,(hl) inc hl ld h,(hl) ld l,a ex af,af' ; carry ld a,b ; A sub (hl) ; A-x (result discarded) ld c,a ; set N Z ccf ex af,af' ; set carry jp read_loop op_d2_len: equ $-op_d2 org op_d3 dump $ jp i_undoc_2 op_d3_len: equ $-op_d3 org op_d4 dump $ jp i_undoc_2 op_d4_len: equ $-op_d4 org op_d5 dump $ i_cmp_zx: ld a,(de) ; CMP $nn,X inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ex af,af' ; carry ld a,b ; A sub (hl) ; A-x (result discarded) ld c,a ; set N Z ccf ex af,af' ; set carry jp read_loop op_d5_len: equ $-op_d5 org op_d6 dump $ i_dec_zx: ld a,(de) ; DEC $nn,X inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 dec (hl) ; zero-page-- ld c,(hl) ; set N Z jp (ix) ; zread_write_loop op_d6_len: equ $-op_d6 org op_d7 dump $ i_smb_5: ld a,(de) ; SMB5 [65C02] inc de ld l,a ld h,0 set 5,(hl) jp (ix) ; zwrite_loop op_d7_len: equ $-op_d7 org op_d8 dump $ i_cld: exx res 3,d ; clear D exx xor a ; NOP ld (adc_daa),a ; use binary mode for adc ld (sbc_daa),a ; use binary mode for sbc jp (ix) ; main_loop op_d8_len: equ $-op_d8 org op_d9 dump $ i_cmp_ay: ld a,(de) ; CMP $nnnn,Y inc de add a,iyl ; add Y ld l,a ld a,(de) inc de adc a,0 ld h,a ex af,af' ; carry ld a,b ; A sub (hl) ; A-x (result discarded) ld c,a ; set N Z ccf ex af,af' ; set carry jp read_loop op_d9_len: equ $-op_d9 org op_da dump $ i_phx: ld a,iyh ; PHX [65C02] exx ld (hl),a ; push X dec l ; S-- exx jp (ix) ; main_loop op_da_len: equ $-op_da org op_db dump $ i_stp: dec de ; STP [65C02] jp i_sei ; disable interrupts op_db_len: equ $-op_db org op_dc dump $ jp i_undoc_3 op_dc_len: equ $-op_dc org op_dd dump $ i_cmp_ax: ld a,(de) ; CMP $nnnn,X inc de add a,iyh ; add X ld l,a ld a,(de) inc de adc a,0 ld h,a ex af,af' ; carry ld a,b ; A sub (hl) ; A-x (result discarded) ld c,a ; set N Z ccf ex af,af' ; set carry jp read_loop op_dd_len: equ $-op_dd org op_de dump $ i_dec_ax: ld a,(de) ; DEC $nnnn,X inc de add a,iyh ; add X ld l,a ld a,(de) inc de adc a,0 ld h,a dec (hl) ; mem-- ld c,(hl) ; set N Z jp read_write_loop op_de_len: equ $-op_de org op_df dump $ i_bbs_5: ld a,(de) ; BBS5 [65C02] inc de ld l,a ld h,0 bit 5,(hl) jp nz,i_bra inc de jp (ix) ; zread_loop op_df_len: equ $-op_df org op_e0 dump $ i_cpx_i: ld h,d ld l,e inc de ex af,af' ; carry ld a,iyh ; X sub (hl) ; X-x (result discarded) ld c,a ; set N Z ccf ex af,af' ; set carry jp read_loop op_e0_len: equ $-op_e0 org op_e1 dump $ i_sbc_ix: ld a,(de) ; SBC ($xx,X) inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 ld a,(hl) inc hl ld h,(hl) ld l,a jp i_sbc op_e1_len: equ $-op_e1 org op_e2 dump $ jp i_undoc_2 op_e2_len: equ $-op_e2 org op_e3 dump $ jp i_undoc_2 op_e3_len: equ $-op_e3 org op_e4 dump $ i_cpx_z: ld a,(de) ; CPX $nn inc de ld l,a ld h,0 ex af,af' ; carry ld a,iyh ; X sub (hl) ; X-x (result discarded) ld c,a ; set N Z ccf ex af,af' ; set carry jp read_loop op_e4_len: equ $-op_e4 org op_e5 dump $ i_sbc_z: ld a,(de) ; SBC $nn inc de ld l,a ld h,0 jp i_sbc op_e5_len: equ $-op_e5 org op_e6 dump $ i_inc_z: ld a,(de) ; INC $nn inc de ld l,a ld h,0 inc (hl) ; zero-page++ ld c,(hl) ; set N Z jp (ix) ; zread_write_loop op_e6_len: equ $-op_e6 org op_e7 dump $ i_smb_6: ld a,(de) ; SMB6 [65C02] inc de ld l,a ld h,0 set 6,(hl) jp (ix) ; zwrite_loop op_e7_len: equ $-op_e7 org op_e8 dump $ i_inx: inc iyh ; X++ ld c,iyh ; set N Z jp (ix) ; main_loop op_e8_len: equ $-op_e8 org op_e9 dump $ i_sbc_i: ld h,d ld l,e inc de i_sbc: ex af,af' ; carry ccf ; uses inverted carry ld a,b sbc a,(hl) ; A-M-(1-C) sbc_daa: nop ld b,a ; set A ld c,a ; set N Z ccf ; no carry for overflow exx jp pe,adcsbc_v ld e,%00000000 exx ex af,af' ; set carry jp read_loop op_e9_len: equ $-op_e9 org op_ea dump $ i_nop: jp (ix) ; main_loop op_ea_len: equ $-op_ea org op_eb dump $ jp i_undoc_2 op_eb_len: equ $-op_eb org op_ec dump $ i_cpx_a: ex de,hl ; CPX $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ex af,af' ; carry ld a,iyh ; X sub (hl) ; X-x (result discarded) ld c,a ; set N Z ccf ex af,af' ; set carry jp read_loop op_ec_len: equ $-op_ec org op_ed dump $ i_sbc_a: ex de,hl ; SBC $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl jp i_sbc op_ed_len: equ $-op_ed org op_ee dump $ i_inc_a: ex de,hl ; INC $nnnn ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl inc (hl) ; mem++ ld c,(hl) ; set N Z jp read_write_loop op_ee_len: equ $-op_ee org op_ef dump $ i_bbs_6: ld a,(de) ; BBS6 [65C02] inc de ld l,a ld h,0 bit 6,(hl) jp nz,i_bra inc de jp (ix) ; zread_loop op_ef_len: equ $-op_ef org op_f0 dump $ i_beq: inc c dec c jp z,i_bra ; branch if zero inc de jp (ix) ; main_loop op_f0_len: equ $-op_f0 org op_f1 dump $ i_sbc_iy: ld a,(de) ; SBC ($nn),Y inc de ld l,a ld h,0 ld a,iyl ; Y add a,(hl) inc l ; (may wrap in zero page) ld h,(hl) ld l,a adc a,h sub l ld h,a jp i_sbc op_f1_len: equ $-op_f1 org op_f2 dump $ i_sbc_iz: ld a,(de) ; indirect zero-page [65C02] inc de ld l,a ld h,0 ld a,(hl) inc l ; (may wrap in zero page) ld h,(hl) ld l,a ld a,(hl) inc hl ld h,(hl) ld l,a jp i_sbc op_f2_len: equ $-op_f2 org op_f3 dump $ jp i_undoc_2 op_f3_len: equ $-op_f3 org op_f4 dump $ jp i_undoc_2 op_f4_len: equ $-op_f4 org op_f5 dump $ i_sbc_zx: ld a,(de) ; SBC $nn,X inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 jp i_sbc op_f5_len: equ $-op_f5 org op_f6 dump $ i_inc_zx: ld a,(de) ; INC $nn,X inc de add a,iyh ; add X (may wrap in zero page) ld l,a ld h,0 inc (hl) ; zero-page++ ld c,(hl) ; set N Z jp (ix) ; zread_write_loop op_f6_len: equ $-op_f6 org op_f7 dump $ i_smb_7: ld a,(de) ; SMB7 [65C02] inc de ld l,a ld h,0 set 7,(hl) jp (ix) ; zwrite_loop op_f7_len: equ $-op_f7 org op_f8 dump $ i_sed: exx set 3,d ; set D exx ld a,&27 ; DAA ld (adc_daa),a ; use decimal mode for adc ld (sbc_daa),a ; use decimal mode for sbc jp (ix) ; main_loop op_f8_len: equ $-op_f8 org op_f9 dump $ i_sbc_ay: ld a,(de) ; SBC $nnnn,Y inc de add a,iyl ; add Y ld l,a ld a,(de) inc de adc a,0 ld h,a jp i_sbc op_f9_len: equ $-op_f9 org op_fa dump $ i_plx: exx ; PLX [65C02] inc l ; S++ ld a,(hl) ; pop exx ld iyh,a ; set X ld c,a ; set N Z jp (ix) ; main_loop op_fa_len: equ $-op_fa org op_fb dump $ jp i_undoc_3 op_fb_len: equ $-op_fb org op_fc dump $ jp i_undoc_3 op_fc_len: equ $-op_fc org op_fd dump $ i_sbc_ax: ld a,(de) ; SBC $nnnn,X inc de add a,iyh ; add X ld l,a ld a,(de) inc de adc a,0 ld h,a jp i_sbc op_fd_len: equ $-op_fd org op_fe dump $ i_inc_ax: ld a,(de) ; INC $nnnn,X inc de add a,iyh ; add X ld l,a ld a,(de) inc de adc a,0 ld h,a inc (hl) ; mem++ ld c,(hl) ; set N Z jp read_write_loop op_fe_len: equ $-op_fe org op_ff dump $ i_bbs_7: ld a,(de) ; BBS7 [65C02] inc de ld l,a ld h,0 bit 7,(hl) jp nz,i_bra inc de jp (ix) ; zread_loop op_ff_len: equ $-op_ff