]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/blobdiff - cbios/misc.180
file reorg. move routines, that are mainly used in initialization to banked area
[z180-stamp-cpm3.git] / cbios / misc.180
index ae9190ccf27eaf580ebe3dacec3cc0ca7ffa2f70..b3e486d334898b331452e55f835cebe5ac02ba5b 100644 (file)
 
-       global add_hla,div32_16,div32_r
-       global ioiniml,ioini1l
        global intinit
        global bufinit
        global cpu_frq
 
        global fifolst
 
-       extrn ?pmsg
+       extrn div32_r,?pmsg
        extrn msg.sm,msg.recv,hwl2phy
 
        include config.inc
        include z180reg.inc
 
 
-;--------------------------------------------------------------------
-; add a to hl
-;
-;    return:
-;       hl = hl + a
-;       Flags undefined
-
-       cseg    ; (common. TODO: check for banked)
-
-add_hla:
-       add     a,l
-       ld      l,a
-       ret     nc
-       inc     h
-       ret
-
-;--------------------------------------------------------------------
-; rounded div 32 by 16 bit
-;
-;      HLDE:   Dividend (x)
-;      BC:     Divisor  (y)
-;    return:
-;      HLDE:   Rounded Quotient (q)
-;      BC:     Remainder              (r)
-
-       dseg    ;banked.
-
-div32_r:
-       push bc
-       srl     b               ;y/2
-       rr      c
-       add     hl,bc           ;low x + y/2
-       pop     bc
-       jr      nc,div_r1
-       inc     hl
-div_r1:
-       ;fall thru
-
-;--------------------------------------------------------------------
-; Divide 32 bit by 16
-;
-;    DEHL:     Dividend (x)
-;    BC:       Divisor  (y)
-;
-;  return:
-;    DEHL:     Quotient
-;    BC:       Reminder
-
-       dseg    ; same as above!
-div32_16:
-       exx                     ;low
-       push    de              ;save alternate registers (de,bc)
-       push    bc
-       exx                     ;high
-       push    hl              ;lx
-       push    bc              ;ly
-       ld      bc,0            ;bc  = hy = 0
-       ld      h,b             ;hl  = hr = 0
-       ld      l,c
-                               ;de = x, hl = r
-       exx                     ;low
-       pop     bc              ;bc' = ly
-       ex      (sp),hl         ;hl' = lx, save alternate hl
-       ld      de,0            ;de' = lr = 0
-       ex      de,hl           ;de = x, hl = r
-       exx                     ;high
-       ld      a,32            ;count
-;
-; start:
-;     de: x    (de: hx, de': lx)
-;     bc: y    (bc: hy, bc': ly)
-;     hl: 0
-;
-div_lp:                                ;do
-       exx                     ;    low
-       ex      de,hl           ;    x
-       add     hl,hl           ;    x <<= 1
-       exx                     ;    high
-       ex      de,hl           ;    x
-       adc     hl,hl           ;    x <<= 1
-       exx                     ;    low
-       ex      de,hl           ;    r
-       adc     hl,hl           ;    r <<= 1
-       exx                     ;    high
-       ex      de,hl           ;    r
-       adc     hl,hl           ;    r <<= 1
-       exx                     ;    low
-       inc     de              ;    x/q += 1
-       or      a               ;
-       sbc     hl,bc           ;
-       exx                     ;    high
-       sbc     hl,bc           ;
-       jr      nc,div_no_restore
-       exx                     ;        low
-       dec     de              ;
-       add     hl,bc           ;        r += y
-       exx                     ;        high
-       adc     hl,bc           ;
-
-div_no_restore:                        ;
-       dec     a               ;
-       jr      nz,div_lp       ;while (--count)
-
-; result:
-;     de: q    (de: hq, de': lq)
-;     hl: r    (hl: hr, hl': lr)
-
-       exx                     ;low
-       ex      de,hl           ;hl = lq,  de = lr
-
-       ex      (sp),hl         ;lq
-       push    de              ;lr
-       exx                     ;high
-       pop     bc              ;bc = lr
-       pop     hl              ;de = lq
-
-       exx                     ;low
-       pop     bc              ;restore alternate registers
-       pop     de
-       exx                     ;high
-       ret
-
-;----------------------------------------------------------------------
-
-       ; output bytes to consecutive portaddresses
-       ;
-       ;     hl: table with following structure:
-       ;        db n, port1, val1, val2,... valn
-       ;        db m, port1, val1, val2,... valm
-       ;        ...
-       ;        db 0 ; Terminate table
-
-
-       cseg    ; (common for now)
-
-ioiniml:
-       push    bc
-       xor     a
-ioml_lp:
-       ld      b,(hl)
-       inc     hl
-       cp      b
-       jr      z,ioml_e
-
-       ld      c,(hl)
-       inc     hl
-       otimr
-       jr      ioml_lp
-ioml_e:
-       pop     bc
-       ret
-
-;----------------------------------------------------------------------
-
-       ; output bytes to ports
-       ;
-       ;     hl: tables of port,value pairs:
-       ;         db n, port1,val1, port2,val2,... portn,valn
-       ;         ...
-       ;         db 0 ; Terminate table
-
-       cseg    ; (common for now)
-
-ioini1l:
-       push    bc
-       jr      io1_nxt
-io1_lp:
-       ld      c,(hl)          ;port address
-       inc     hl
-       otim
-       jr      nz,io1_lp
-io1_nxt:
-       ld      b,(hl)          ;count
-       inc     hl
-       inc     b
-       djnz    io1_lp
-
-       pop     bc
-       ret
-
 ;----------------------------------------------------------------------
 
        dseg
@@ -285,23 +103,21 @@ cpu_frq:
 ;
 
 ;      ld      hl,8192         ; 147456/18
-       ld      hl,10240        ; 184320/18
+       ld      hl,(10240-100)*5 ; 184320/18
        ld      de,1
        or      a
 dly_lp:
        sbc     hl,de           ; 10
-       jr      nz,dly_lp       ; 6/8  -> 18
+       jr      nz,dly_lp       ; 6/8  -> 18 cycles
 
        pop     hl
        pop     de
        call    get_timer
 
-       ld      bc,10
-       call    div32_r
        ld      b,h
        ld      c,l
-       ld      de,00119h       ;18432000/(2**16)
-       ld      hl,04000h       ;18432000%(2**16)
+       ld      de,036EEh       ;18432000/(2**16) * 50
+       ld      hl,08000h       ;18432000%(2**16) * 50
 
        ld      a,b
        or      a
@@ -353,7 +169,6 @@ fifolst:
        dseg
 
 bufinit:
-       ld      c,a
        ld      a,(ix+o.id)
        cp      4
        jr      nc,bfi_doit2
@@ -398,7 +213,6 @@ bfi_doit:
 bfi_doit2:
        ld      (ix+o.in_idx),0         ;reset pointers
        ld      (ix+o.out_idx),0
-       ld      (ix+o.mask),c           ;reset "size"
 
        push    ix                      ;get phys. address of fifo
        pop     hl