130 lines
2.5 KiB
ArmAsm
130 lines
2.5 KiB
ArmAsm
OP_IO_IN:
|
|
push DE
|
|
pop HL
|
|
call DHEX_TO_BYTE
|
|
ld c,a ;store result in b
|
|
ld a,e ;check for error
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
in a,(c)
|
|
push af
|
|
call print_newLine
|
|
pop af
|
|
call print_a_hex
|
|
ret
|
|
|
|
OP_IO_OUT:
|
|
push DE
|
|
pop HL
|
|
call DHEX_TO_BYTE
|
|
ld c,a ;store result in b
|
|
ld a,e ;check for error
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
inc hl
|
|
inc hl
|
|
ld a,(hl)
|
|
cp ' '
|
|
jp nz, ERR_SYNTAX
|
|
inc hl
|
|
call DHEX_TO_BYTE
|
|
push af
|
|
ld a,e ;check for error
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
pop af
|
|
out (c),a
|
|
ret
|
|
|
|
OP_IIC_OUT:
|
|
push DE
|
|
pop HL
|
|
call DHEX_TO_BYTE ;load start addr
|
|
ld (var_scratch+1),A ;store result in ram
|
|
ld a,e ;check for error
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
inc hl
|
|
inc hl
|
|
LD BC,[var_scratch + 2]
|
|
XOR A
|
|
LD (var_scratch),A
|
|
_OP_IIC_OUT_LOOP:
|
|
ld a,(hl)
|
|
cp 0 ;if 0 then end
|
|
jp z,_OP_IIC_OUT_SEND
|
|
cp ' '
|
|
jp nz, ERR_SYNTAX
|
|
inc hl ;next byte
|
|
|
|
call DHEX_TO_BYTE
|
|
ld (bc),a
|
|
inc bc ;incerement pointer
|
|
ld a,(var_scratch)
|
|
inc a ;increment counter
|
|
ld (var_scratch),a
|
|
inc HL
|
|
inc HL
|
|
jr _OP_IIC_OUT_LOOP
|
|
_OP_IIC_OUT_SEND:
|
|
ld hl,[var_scratch + 2]
|
|
ld a,(var_scratch) ;load amount of bytes
|
|
ld b,a
|
|
ld a,(var_scratch+1) ;load start addr
|
|
ld c,a
|
|
call iic_send_buffer
|
|
or a
|
|
jp nz, _OP_IIC_ACK_ERR
|
|
ret
|
|
|
|
_OP_IIC_ACK_ERR:
|
|
LD HL,[_OP_IIC_ACK_ERR_str]
|
|
call print_str
|
|
ret
|
|
_OP_IIC_ACK_ERR_str:
|
|
db 10,13,"bus-error: no ACK",0
|
|
|
|
OP_IIC_IN:
|
|
push DE
|
|
pop HL
|
|
call DHEX_TO_BYTE ;load start addr
|
|
ld C,a ;store start addr to B
|
|
ld a,e ;check for error
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
inc hl
|
|
inc hl
|
|
ld a,(hl)
|
|
cp ' '
|
|
jp nz, ERR_SYNTAX
|
|
inc hl
|
|
call DHEX_TO_BYTE ;read length
|
|
ld b,a ;store length in B
|
|
push bc
|
|
ld a,e ;check for error
|
|
and a
|
|
jp nz, ERR_SYNTAX
|
|
ld hl,[var_scratch]
|
|
call iic_receive_buffer
|
|
pop bc
|
|
or a
|
|
jp nz, _OP_IIC_ACK_ERR
|
|
ld hl,[_OP_IIC_IN_LOOP_TEXT]
|
|
call print_str
|
|
ld hl,[var_scratch]
|
|
;print data
|
|
_OP_IIC_IN_LOOP:
|
|
ld a,(hl)
|
|
call print_a_hex
|
|
ld a, ' '
|
|
call print_char
|
|
inc hl
|
|
djnz _OP_IIC_IN_LOOP
|
|
ret
|
|
|
|
_OP_IIC_IN_LOOP_TEXT:
|
|
db 10,13,"rec-buff: ",0
|
|
|
|
OP_CLR:
|
|
call print_clear
|
|
ret |