78 lines
1.9 KiB
ArmAsm
78 lines
1.9 KiB
ArmAsm
|
|
|
|
debug_init:
|
|
ld A,VAR_CONSOLE_CONF ; Setup CTC
|
|
out (IO_CTC0_C0),A ; Controll word, software reset, time constant follows, CLK/TRG starts timer
|
|
ld A,VAR_CONSOLE_BAUD ; Setup timer const
|
|
out (IO_CTC0_C0),A ; Load timer const into CTC (Setup Baud generator)
|
|
;set up TX and RX:W
|
|
ld a,00110000b ;write into WR0: error reset, select WR0
|
|
out (IO_SIO0A_C),A
|
|
ld a,018h ;write into WR0: channel reset
|
|
out (IO_SIO0A_C),A
|
|
ld a,004h ;write into WR0: select WR4
|
|
out (IO_SIO0A_C),A
|
|
ld a,04h ;44h write into WR4: clkx1,1 stop bit, no parity
|
|
out (IO_SIO0A_C),A
|
|
ld a,005h ;write into WR0: select WR5
|
|
out (IO_SIO0A_C),A
|
|
ld a,068h ;DTR active, TX 8bit, BREAK off, TX on, RTS inactive
|
|
out (IO_SIO0A_C),A
|
|
ld a,01h ;write into WR0: select WR1
|
|
out (IO_SIO0A_C),A
|
|
ld a,00000100b ;no interrupt in CH B, special RX condition affects vect
|
|
out (IO_SIO0A_C),A
|
|
;enable SIO channel A RX
|
|
ld a,003h ;write into WR0: select WR3
|
|
out (IO_SIO0A_C),A
|
|
ld a,0C1h ;RX 8bit, auto enable off, RX on
|
|
out (IO_SIO0A_C),A
|
|
;Channel A RX active
|
|
ld hl,[MSG_START_DBG]
|
|
call debug_print_str
|
|
ret
|
|
|
|
debug_print_char:
|
|
out (IO_SIO0A_D),a
|
|
call debug_wait_out
|
|
ret
|
|
|
|
debug_print_str:
|
|
ld a, (hl)
|
|
or a
|
|
ret z
|
|
call debug_print_char
|
|
inc hl
|
|
jr debug_print_str
|
|
|
|
debug_print_newLine:
|
|
ld a,10
|
|
call debug_print_char
|
|
ld a,13
|
|
call debug_print_char
|
|
ret
|
|
|
|
debug_wait_out:
|
|
; check for TX buffer empty
|
|
sub a ;clear a, write into WR0: select RR0
|
|
inc a ;select RR1
|
|
out (IO_SIO0A_C),A
|
|
in A,(IO_SIO0A_C) ;read RRx
|
|
bit 0,A
|
|
jr z,debug_wait_out
|
|
ret
|
|
|
|
MSG_START_DBG:
|
|
db "Debug interface active!",13,10,0
|
|
|
|
debug_a_hex:
|
|
push BC
|
|
push AF
|
|
call STRCONV_BYTES_TO_HEX
|
|
ld a, b
|
|
call debug_print_char
|
|
ld a, c
|
|
call debug_print_char
|
|
pop AF
|
|
pop BC
|
|
ret |