SECTION "Control Signals", ROM0 ; [in] f: flags set from a previous operation UpdateFlags: ld hl, flags_temp .check_z: jr z, .set_z res FLAG_Z, [hl] .check_c: jr c, .set_c res FLAG_C, [hl] jr .exit .set_z: set FLAG_Z, [hl] jr .check_c .set_c: set FLAG_C, [hl] .exit: ret ctrl_ht: ld a, [ctrl] ld b, a bit CTRL_HT, b jr z, .exit xor a ld [running], a .exit: ret ctrl_ro: ld a, [ctrl] ld b, a bit CTRL_RO, b jr z, .exit ; get memory offset based on MAR ld hl, ram ld a, [mar] add l ld l, a ld a, [hl] ld [bus], a .exit: ret ctrl_io: ld a, [ctrl] ld b, a bit CTRL_IO, b jr z, .exit ld a, [ir] and $0f ld [bus], a .exit: ret ctrl_ao: ld a, [ctrl] ld b, a bit CTRL_AO, b jr z, .exit ld a, [a_reg] ld [bus], a .exit: ret ctrl_eo: ld a, [ctrl+1] ld b, a bit CTRL_EO, b jp z, .exit ld a, [alu] ld [bus], a .exit: ret ctrl_co: ld a, [ctrl+1] ld b, a bit CTRL_CO, b jp z, .exit ld a, [pc] ld [bus], a .exit: ret ctrl_mi: ld a, [ctrl] ld b, a bit CTRL_MI, b jp z, .exit ld a, [bus] ld [mar], a .exit: ret ctrl_ri: ld a, [ctrl] ld b, a bit CTRL_RI, b jp z, .exit ; get memory offset based on MAR ld hl, ram ld a, [mar] add l ld l, a ld a, [bus] ld [hl], a .exit: ret ctrl_ii: ld a, [ctrl] ld b, a bit CTRL_II, b jp z, .exit ld a, [bus] ld [ir], a .exit: ret ctrl_ai: ld a, [ctrl] ld b, a bit CTRL_AI, b jp z, .exit ld a, [bus] ld [a_reg], a ; alu value reflects any change to A or B ld d, a ld a, [b_reg] add d ld [alu], a call UpdateFlags .exit: ret ctrl_su: ld a, [ctrl+1] ld b, a bit CTRL_SU, b jp z, .exit ld a, [b_reg] cpl inc a ld [b_reg], a ; alu value reflects any change to A or B ld d, a ld a, [a_reg] add d ld [alu], a call UpdateFlags .exit: ret ctrl_bi: ld a, [ctrl+1] ld b, a bit CTRL_BI, b jp z, .exit ld a, [bus] ld [b_reg], a ; alu value reflects any change to A or B ld d, a ld a, [a_reg] add d ld [alu], a call UpdateFlags .exit: ret ctrl_oi: ld a, [ctrl+1] ld b, a bit CTRL_OI, b jp z, .exit ld a, [bus] ld [out_reg], a .exit: ret ctrl_ce: ld a, [ctrl+1] ld b, a bit CTRL_CE, b jp z, .exit ld a, [pc] inc a ld [pc], a .exit: ret ctrl_jp: ld a, [ctrl+1] ld b, a bit CTRL_JP, b jp z, .exit ld a, [bus] ld [pc], a .exit: ret ctrl_fi: ld a, [ctrl+1] ld b, a bit CTRL_FI, b jp z, .exit ld a, [flags_temp] ld [flags], a .exit: ret