pico430prog/test/rl78g10/dumper.S

255 lines
3.4 KiB
ArmAsm

#include "hw.S"
.global _start
_start:
/*mov es, #0*/
movw sp, #0xfed0
; IAWCTL = 0 -> none?
call !siniport
call !siniclk
;call !sinitau
;call !siniuart0
call !main
delay_long:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
delay_data:
nop
ret
tx_byte:
; start condition
clr1 P0.0
call !delay_long ;27 cyc = 4 cyc + 16 cyc + 7 cyc
; data bits
mov c, #8 ; 1 cyc
.Lbitloop:
; set 1 bit
bf a.0, $.Lsetlo ; 3 cyc hi // 5 cyc lo
.Lsethi:
nop ; 1 cyc hi //
nop ; 1 cyc hi //
set1 P0.0 ; 2 cyc hi //
br $.Lafterset ; 3 cyc hi //
.Lsetlo:
clr1 P0.0 ; // 2 cyc lo
nop ; // 1 cyc lo
nop ; // 1 cyc lo
nop ; // 1 cyc lo
.Lafterset:
; delay
call !delay_data ;12 cyc
; next bit
shr a, 1 ; 1 cyc
dec c ; 1 cyc
bnz $.Lbitloop ; 4 cyc
; stop condition
set1 P0.0
call !delay_long
call !delay_long
ret
main:
set1 P0.0
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
loop:
mov es, #0xe
;movw bc, #0x0200
mov c, #0
movw hl, #0xfe00
innerloop:
mov a, es:[hl]
push ax
push bc
call !tx_byte
pop bc
pop ax
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
incw hl
;decw bc
;cmpw bc, #0
dec c
cmp0 c
bnz $innerloop
;movw bc, #0x0200
mov c, #0
;movw hl, #0xfe00
innerloop2:
mov a, es:[hl]
push ax
push bc
call !tx_byte
pop bc
pop ax
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
incw hl
;decw bc
;cmpw bc, #0
dec c
cmp0 c
bnz $innerloop2
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
mov a, #'E'
call !delay_long
call !delay_long
mov a, #'N'
call !delay_long
call !delay_long
mov a, #'D'
call !delay_long
call !delay_long
mov a, #' '
call !delay_long
call !delay_long
br !loop
mov a, #' '
call !tx_byte
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
call !delay_long
;set1 P0.0
br !loop
siniport:
; P00 GPIO
; P06 TxD0
mov !PIOR, #0
; set P0 as output
mov !P0, #0
; disable pullups
mov !PU0, #0
; push-pull output
mov !POM0, #0
; not analog in
mov !PMC0, #0x7f
; set port modes
;mov !PM0, #0x0f ; P00 GPIO ; P06 TxD0
mov !PM0, #0
ret
siniclk:
mov !PER0, #0xe5 ; enable many peripherals
mov !OSMC, #0x10
;mov !HOCODIV, #1
ret