diff --git a/src/hence/emulator.cr b/src/hence/emulator.cr index 003797c..5fa5a4e 100644 --- a/src/hence/emulator.cr +++ b/src/hence/emulator.cr @@ -184,13 +184,13 @@ module Hence when 0x08 # shr @reg_tmp = @reg_a >> @reg_b when 0x09 # add - @reg_tmp = @reg_a &+ @reg_b + @reg_tmp = @reg_a &+ @reg_b &+ (@reg_s & 0b00000001_u8) @reg_s &= 0b11111110_u8 if @reg_tmp < @reg_a @reg_s |= 0b00000001_u8 end when 0x0a # sub - @reg_tmp = @reg_a &- @reg_b + @reg_tmp = @reg_a &- @reg_b &- (@reg_s & 0b00000001_u8) @reg_s &= 0b11111110_u8 if @reg_tmp > @reg_a @reg_s |= 0b00000001_u8 diff --git a/src/hence/firmware/firmwares/default.yml b/src/hence/firmware/firmwares/default.yml index 7652970..51d1cf0 100644 --- a/src/hence/firmware/firmwares/default.yml +++ b/src/hence/firmware/firmwares/default.yml @@ -104,6 +104,20 @@ sections: tmpl 0xb alu 0x01 push + - name: clc + description: Clears carry flag + opcode: null + arg: null + stack: + input: [] + output: [] + microcode: | + tmpsr 0xd + tmpl 0xa + tmps 0b11111110 + tmpl 0xb + alu 0x01 + tmpl 0xd - name: stack-manipulation description: Stack manipulation opcodes: