annotate level1/modules/dwwrite.asm @ 2321:6a5ada3e2666

added DWINIT op code, dw3 now sends on init just before installing VIRQ
author aaronwolfe
date Wed, 06 Jan 2010 01:55:30 +0000
parents 27f07aa0bca0
children f0977fc3f2d6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
1 *******************************************************
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
2 *
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
3 * DWWrite
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
4 * Send a packet to the DriveWire server.
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
5 * Serial data format: 1-8-N-1
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
6 * 4/12/2009 by Darren Atkinson
2182
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
7 *
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
8 * Entry:
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
9 * X = starting address of data to send
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
10 * Y = number of bytes to send
2182
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
11 *
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
12 * Exit:
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
13 * X = address of last byte sent + 1
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
14 * Y = 0
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
15 * All others preserved
2182
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
16 *
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
17
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
18
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
19 IFNE BAUD38400
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
20 *******************************************************
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
21 * 38400 bps using 6809 code and timimg
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
22 *******************************************************
2182
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
23
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
24 DWWrite pshs u,d,cc ; preserve registers
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
25 orcc #$50 ; mask interrupts
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
26 ldu #BBOUT ; point U to bit banger out register
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
27 lda 3,u ; read PIA 1-B control register
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
28 anda #$f7 ; clear sound enable bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
29 sta 3,u ; disable sound output
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
30 fcb $8c ; skip next instruction
2182
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
31
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
32 txByte stb ,--u ; send stop bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
33 leau ,u+
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
34 lda #8 ; counter for start bit and 7 data bits
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
35 ldb ,x+ ; get a byte to transmit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
36 lslb ; left rotate the byte two positions..
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
37 rolb ; ..placing a zero (start bit) in bit 1
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
38 tx0010 stb ,u++ ; send bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
39 tst ,--u
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
40 rorb ; move next bit into position
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
41 deca ; decrement loop counter
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
42 bne tx0010 ; loop until 7th data bit has been sent
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
43 leau ,u
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
44 stb ,u ; send bit 7
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
45 lda ,u++
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
46 ldb #$02 ; value for stop bit (MARK)
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
47 leay -1,y ; decrement byte counter
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
48 bne txByte ; loop if more to send
2182
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
49
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
50 stb ,--u ; leave bit banger output at MARK
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
51 puls cc,d,u,pc ; restore registers and return
2182
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
52
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
53
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
54 ELSE
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
55 IFNE H6309-1
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
56 *******************************************************
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
57 * 57600 (115200) bps using 6809 code and timimg
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
58 *******************************************************
2182
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
59
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
60 DWWrite pshs dp,d,cc ; preserve registers
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
61 orcc #$50 ; mask interrupts
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
62 ldd #$04ff ; A = loop counter, B = $ff
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
63 tfr b,dp ; set direct page to $FFxx
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
64 setdp $ff
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
65 ldb <$ff23 ; read PIA 1-B control register
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
66 andb #$f7 ; clear sound enable bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
67 stb <$ff23 ; disable sound output
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
68 fcb $8c ; skip next instruction
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
69
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
70 txByte stb <BBOUT ; send stop bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
71 ldb ,x+ ; get a byte to transmit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
72 nop
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
73 lslb ; left rotate the byte two positions..
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
74 rolb ; ..placing a zero (start bit) in bit 1
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
75 tx0020 stb <BBOUT ; send bit (start bit, d1, d3, d5)
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
76 rorb ; move next bit into position
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
77 exg a,a
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
78 nop
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
79 stb <BBOUT ; send bit (d0, d2, d4, d6)
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
80 rorb ; move next bit into position
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
81 leau ,u
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
82 deca ; decrement loop counter
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
83 bne tx0020 ; loop until 7th data bit has been sent
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
84
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
85 stb <BBOUT ; send bit 7
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
86 ldd #$0402 ; A = loop counter, B = MARK value
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
87 leay ,-y ; decrement byte counter
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
88 bne txByte ; loop if more to send
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
89
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
90 stb <BBOUT ; leave bit banger output at MARK
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
91 puls cc,d,dp,pc ; restore registers and return
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
92 setdp $00
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
93
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
94
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
95 ELSE
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
96 *******************************************************
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
97 * 57600 (115200) bps using 6309 native mode
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
98 *******************************************************
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
99
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
100 DWWrite pshs u,d,cc ; preserve registers
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
101 orcc #$50 ; mask interrupts
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
102 * ldmd #1 ; requires 6309 native mode
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
103 ldu #BBOUT+1 ; point U to bit banger out register +1
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
104 aim #$f7,2,u ; disable sound output
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
105 lda #8 ; counter for start bit and 7 data bits
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
106 fcb $8c ; skip next instruction
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
107
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
108 txByte stb -1,u ; send stop bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
109 tx0010 ldb ,x+ ; get a byte to transmit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
110 lslb ; left rotate the byte two positions..
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
111 rolb ; ..placing a zero (start bit) in bit 1
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
112 bra tx0030
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
113
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
114 tx0020 bita #1 ; even or odd bit number ?
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
115 beq tx0040 ; branch if even (15 cycles)
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
116 tx0030 nop ; extra (16th) cycle
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
117 tx0040 stb -1,u ; send bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
118 rorb ; move next bit into position
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
119 deca ; decrement loop counter
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
120 bne tx0020 ; loop until 7th data bit has been sent
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
121 leau ,u+
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
122 stb -1,u ; send bit 7
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
123 ldd #$0802 ; A = loop counter, B = MARK value
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
124 leay -1,y ; decrement byte counter
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
125 bne txByte ; loop if more to send
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
126
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
127 stb -1,u ; final stop bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
128 puls cc,d,u,pc ; restore registers and return
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
129
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
130
2182
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
131 ENDC
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
132 ENDC
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
133
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
134