@@ -212,79 +212,71 @@ func eor(cpu *CPU, mem Memory, arg operand) {
212212}
213213
214214func asl (cpu * CPU , mem Memory , arg operand ) {
215- var (
216- write = func (v uint8 ) { mem .Write (arg .addr , v ) }
217- read = func () uint8 { return mem .Read (arg .addr ) }
218- )
219-
220215 if arg .mode == AddrModeAcc {
221- write = func (v uint8 ) { cpu .A = v }
222- read = func () uint8 { return cpu .A }
216+ data := cpu .A
217+ cpu .setFlag (flagCarry , data & 0x80 != 0 )
218+ data <<= 1
219+ cpu .setZN (data )
220+ cpu .A = data
221+ } else {
222+ data := mem .Read (arg .addr )
223+ cpu .setFlag (flagCarry , data & 0x80 != 0 )
224+ data <<= 1
225+ cpu .setZN (data )
226+ mem .Write (arg .addr , data )
223227 }
224-
225- data := read ()
226- cpu .setFlag (flagCarry , data & 0x80 != 0 )
227- data <<= 1
228- cpu .setZN (data )
229- write (data )
230228}
231229
232230func lsr (cpu * CPU , mem Memory , arg operand ) {
233- var (
234- write = func (v uint8 ) { mem .Write (arg .addr , v ) }
235- read = func () uint8 { return mem .Read (arg .addr ) }
236- )
237-
238231 if arg .mode == AddrModeAcc {
239- write = func (v uint8 ) { cpu .A = v }
240- read = func () uint8 { return cpu .A }
232+ data := cpu .A
233+ cpu .setFlag (flagCarry , data & 0x01 != 0 )
234+ data >>= 1
235+ cpu .setZN (data )
236+ cpu .A = data
237+ } else {
238+ data := mem .Read (arg .addr )
239+ cpu .setFlag (flagCarry , data & 0x01 != 0 )
240+ data >>= 1
241+ cpu .setZN (data )
242+ mem .Write (arg .addr , data )
241243 }
242-
243- data := read ()
244- cpu .setFlag (flagCarry , data & 0x01 != 0 )
245- data >>= 1
246- cpu .setZN (data )
247- write (data )
248244}
249245
250246func rol (cpu * CPU , mem Memory , arg operand ) {
251- var (
252- write = func (v uint8 ) { mem .Write (arg .addr , v ) }
253- read = func () uint8 { return mem .Read (arg .addr ) }
254- )
255-
256247 if arg .mode == AddrModeAcc {
257- write = func (v uint8 ) { cpu .A = v }
258- read = func () uint8 { return cpu .A }
248+ data := cpu .A
249+ carr := cpu .carried ()
250+ cpu .setFlag (flagCarry , data & 0x80 != 0 )
251+ data = data << 1 | carr
252+ cpu .setZN (data )
253+ cpu .A = data
254+ } else {
255+ data := mem .Read (arg .addr )
256+ carr := cpu .carried ()
257+ cpu .setFlag (flagCarry , data & 0x80 != 0 )
258+ data = data << 1 | carr
259+ cpu .setZN (data )
260+ mem .Write (arg .addr , data )
259261 }
260-
261- data := read ()
262- carr := cpu .carried ()
263-
264- cpu .setFlag (flagCarry , data & 0x80 != 0 )
265- data = data << 1 | carr
266- cpu .setZN (data )
267- write (data )
268262}
269263
270264func ror (cpu * CPU , mem Memory , arg operand ) {
271- var (
272- write = func (v uint8 ) { mem .Write (arg .addr , v ) }
273- read = func () uint8 { return mem .Read (arg .addr ) }
274- )
275-
276265 if arg .mode == AddrModeAcc {
277- write = func (v uint8 ) { cpu .A = v }
278- read = func () uint8 { return cpu .A }
266+ data := cpu .A
267+ carr := cpu .carried ()
268+ cpu .setFlag (flagCarry , data & 0x01 != 0 )
269+ data = data >> 1 | carr << 7
270+ cpu .setZN (data )
271+ cpu .A = data
272+ } else {
273+ data := mem .Read (arg .addr )
274+ carr := cpu .carried ()
275+ cpu .setFlag (flagCarry , data & 0x01 != 0 )
276+ data = data >> 1 | carr << 7
277+ cpu .setZN (data )
278+ mem .Write (arg .addr , data )
279279 }
280-
281- data := read ()
282- carr := cpu .carried ()
283-
284- cpu .setFlag (flagCarry , data & 0x01 != 0 )
285- data = data >> 1 | carr << 7
286- cpu .setZN (data )
287- write (data )
288280}
289281
290282func bit (cpu * CPU , mem Memory , arg operand ) {
0 commit comments