`define INSN_LDH_AC 8'b111x0010 // Either LDH A,(C) or LDH (C),A
`define INSN_LDx_AHL 8'b001xx010 // LDD/LDI A,(HL) / (HL),A
`define INSN_ALU8 8'b10xxxxxx // 10 xxx yyy
+`define INSN_ALU8IMM 8'b11xxx110
`define INSN_NOP 8'b00000000
`define INSN_RST 8'b11xxx111
`define INSN_RET 8'b110x1001 // 1 = RETI, 0 = RET
ld hl, $DF81
ld a, [hl]
- ld b, 1
- add b
+ add 1
ld c, $51
ld [c], a
ld [hl], a
-
POP HL
POP DE
POP BC
POP AF
RETI
- db $18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE
- db $18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE
- db $18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE
; Memory tester: writes h ^ l to all addresses from C000 to DF80.
memtest:
ld a,h
xor l
ld [hli],a
- ld a, $DF
- cp h
+ ld a, h
+ cp $DF
jr nz, .wr
- ld a, $80
- cp l
+ ld a, l
+ cp $80
jr nz, .wr
ld hl, $C001 ; Read loop
cp b
jr nz, .memfail
- ld a, $DF
- cp h
+ ld a, h
+ cp $DF
jr nz, .rd
- ld a, $80
- cp l
+ ld a, l
+ cp $80
jr nz, .rd
ld hl, testokstr ; Say we're OK
rra
rra
rra
- ld b,$0F
- and b
- ld b,$30
- add b
+ and $0F
+ add $30
call putc
pop af
- ld b,$0F
- and b
- ld b,$30
- add b
+ and $0F
+ add $30
call putc
ret
xor a
ld [c],a
- ld b, $0
.loop1:
ld a,[c]
- cp b
+ cp $0
jr z,.loop1
.loop2:
ld a,[c]
- cp b
+ cp $0
jr nz,.loop2
ret
; Test JR
ld a, $FF
- ld b, $00
- cp b
+ cp $0
jr nz,.jr
ld hl, .jrfail
jr .fail
; Test CP.
ld hl, .cpfail
ld a, $10
- ld b, $20
- cp b
+ cp $20
jr nc,.fail
ld a, $20
- ld b, $10
- cp b
+ cp $10
jr c,.fail
; Test CPL
ld hl, .cplfail
ld a, $55
- ld b, $AA
cpl
- cp b
+ cp $AA
jr nz,.fail
ld hl, .ok
; Serial port manipulation functions.
putc:
- ld b, 0
ld c, $50
push af
.waitport:
ld a,[c]
- cp b
+ cp $00
jr nz,.waitport
pop af
ld [c],a
puts:
ld a, [hli]
- ld b, $00
- cp b
+ cp $00
ret z
call putc
jr puts
`ifdef EXECUTE
- `INSN_ALU8: begin
- if ((opcode[2:0] == `INSN_reg_dHL) && (cycle == 0))
+ `INSN_ALU8,`INSN_ALU8IMM: begin
+ if ((opcode[7:6] == 2'b11) && (cycle == 0)) begin // alu8imm
+ `EXEC_INC_PC
+ `EXEC_READ(`_PC + 1)
+ end else if ((opcode[2:0] == `INSN_reg_dHL) && (cycle == 0))
`EXEC_READ(`_HL)
else begin
`EXEC_NEWCYCLE
`endif
`ifdef WRITEBACK
- `INSN_ALU8: begin
- if ((opcode[2:0] == `INSN_reg_dHL) && (cycle == 0)) begin
+ `INSN_ALU8,`INSN_ALU8IMM: begin
+ if (((opcode[2:0] == `INSN_reg_dHL) || (opcode[7:6] == 2'b11)) && (cycle == 0)) begin
/* Sit on our asses. */
end else begin /* Actually do the computation! */
case (opcode[5:3])