2 global add_hla,div32_16,div32_r
11 extrn msg.sm,msg.recv,hwl2phy
17 ;--------------------------------------------------------------------
24 cseg ; (common. TODO: check for banked)
33 ;--------------------------------------------------------------------
34 ; rounded div 32 by 16 bit
39 ; HLDE: Rounded Quotient (q)
48 add hl,bc ;low x + y/2
55 ;--------------------------------------------------------------------
68 push de ;save alternate registers (de,bc)
79 ex (sp),hl ;hl' = lx, save alternate hl
81 ex de,hl ;de = x, hl = r
86 ; de: x (de: hx, de': lx)
87 ; bc: y (bc: hy, bc': ly)
118 jr nz,div_lp ;while (--count)
121 ; de: q (de: hq, de': lq)
122 ; hl: r (hl: hr, hl': lr)
125 ex de,hl ;hl = lq, de = lr
134 pop bc ;restore alternate registers
139 ;----------------------------------------------------------------------
141 ; output bytes to consecutive portaddresses
143 ; hl: table with following structure:
144 ; db n, port1, val1, val2,... valn
145 ; db m, port1, val1, val2,... valm
147 ; db 0 ; Terminate table
150 cseg ; (common for now)
169 ;----------------------------------------------------------------------
171 ; output bytes to ports
173 ; hl: tables of port,value pairs:
174 ; db n, port1,val1, port2,val2,... portn,valn
176 ; db 0 ; Terminate table
178 cseg ; (common for now)
184 ld c,(hl) ;port address
197 ;----------------------------------------------------------------------
208 ; Let all vectors point to spurious int routines.
226 ;--------------------------------------------------------------------
227 ; Spurious interrupt handler
233 sp.int.len equ $-sp.int0
261 db 13,10,'Spurious Int: '
265 ;--------------------------------------------------------------------
267 ; Get/compute CPU clock
270 ; hlde: CPU frequency (Hz)
283 ; delay ~8ms @ 18.432MHz --> 147456 clock cycles
284 ; delay ~10ms @ 18.432MHz --> 184320 clock cycles
287 ; ld hl,8192 ; 147456/18
288 ld hl,10240 ; 184320/18
293 jr nz,dly_lp ; 6/8 -> 18
303 ld de,00119h ;18432000/(2**16)
304 ld hl,04000h ;18432000%(2**16)
317 ;--------------------------------------------------------------------
322 ld hl,1*256 + 3 ; d = subcommand, e = command
332 ld b,7 ; max receive message len
341 ;--------------------------------------------------------------------
351 ;--------------------------------------------------------------------
377 ; TODO: address translation
386 ; TODO: address translation
399 ld (ix+o.in_idx),0 ;reset pointers
401 ld (ix+o.mask),c ;reset "size"
403 push ix ;get phys. address of fifo
408 ld a,(ix+o.id) ;fifo id
431 db 0 ;subfunc: gets overwritten with buf id
434 bfi_msg_len equ $ - bfi_msg
435 bfi_msg_end equ $ - 1
437 ;----------------------------------------------------------------------