]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/blobdiff - cbios/mm.180
Add TCGETA, TCSETA
[z180-stamp-cpm3.git] / cbios / mm.180
index 9f90e0385f94593e49cd2db44132d8fcd0622cab..9df0471a4d6e8404d55dd5b6a694adcf23ccb6d5 100644 (file)
@@ -5,9 +5,15 @@
        public mmuinit
        public bnk2log,bnk2phy,hwl2phy,phy2log
        public isv_sw
+       public b_ld_a,b_ld_hl,b_st_a,b_st_hl
 
-       include config.inc
-       include z180reg.inc
+
+       extrn @cbnk
+       extrn ijphl
+
+
+       maclib z180reg.inc
+       maclib config.inc
 
 
 ;----------------------------------------------------------------------
@@ -353,7 +359,7 @@ isv_sw:                                     ;
        ld      d,(hl)                  ;
        ex      de,hl                   ;
        push    bc                      ;
-       call    jphl                    ;
+       call    ijphl                   ;
 
        pop     bc                      ;
        pop     hl                      ;
@@ -365,15 +371,122 @@ isv_sw:                                  ;
        pop     hl                      ;
        ei                              ;
        ret                             ;
-jphl:
-       jp      (hl)                    ;
 
 
        ds      24
 istack:
 
+       dseg
+
+;--------------------------------------------------------------------
+; Load byte/word from user ram
+;
+;   de:  src address in users bank
+; return
+;    a:  value (byte)
+;   hl:  value (word)
+
+b_ld_a:
+       push    hl
+       or      a               ; clear carry == byte store
+       jr      $+3
+b_ld_hl:
+       scf                     ; set carry == word store
+       push    af              ; save flag
+       push    hl              ; make space on stack
+
+       ld      a,(@cbnk)
+       ld      b,a             ; b = src bank
+
+       ld      hl,0
+       ld      a,l
+       ld      c,l             ; c = dst bank (0)
+       add     hl,sp           ; hl = dst
+       adc     a,1             ; a = count
+       ex      de,hl
+       call    dma_move
+       ex      de,hl
+       pop     hl
+       pop     af
+       ret     c
+       ld      a,l
+       pop     hl
+       ret
+
+;--------------------------------------------------------------------
+; Store byte/word to user ram
+;
+;   de:  dst address in users bank
+;    a:  value (byte)
+;   hl:  value (word)
+
+b_st_a:
+       push    hl
+       ld      l,a
+       or      a               ; clear carry == byte store
+       jr      $+3
+b_st_hl:
+       scf                     ; set carry == word store
+       push    af              ; save flag
+       push    hl              ; put value on stack
+
+       ld      a,(@cbnk)       ;
+       ld      c,a             ; c = dst bank
+       ld      a,0
+       ld      l,a
+       ld      h,a
+       ld      b,a             ; b = src bank (0)
+       add     hl,sp           ; hl = src
+       adc     a,1             ; a = count
+
+       call    dma_move
+
+       pop     hl              ; restore value
+       pop     af              ; carry
+       ret     c
+       pop     hl
+       ret
+
+;--------------------------------------------------------------------
+;
+;    hl: src
+;    de: dst
+;     b: src bank
+;     c: dst bank
+;     a: count
+
+dma_move:
+       out0    (bcr0l),a       ; setup DMA count
+       xor     a
+       out0    (bcr0h),a
+
+       push    hl
+       ld      a,b
+       call    bnk2phy
+       out0    (sar0l),l       ; setup DMA src address
+       out0    (sar0h),h
+       out0    (sar0b),a
+
+       ld      l,e
+       ld      h,d
+       ld      a,c
+       call    bnk2phy
+       out0    (dar0l),l       ; setup DMA dst address
+       out0    (dar0h),h
+       out0    (dar0b),a
+
+       ld      a,M_MMOD        ; DMA burst mode
+       out0    (dmode),a
+       ld      a,M_DE0+M_NDWE1 ; enable DMA0
+       out0    (dstat),a       ; move ...
+       pop     hl
+       ret
+
+
 ;====================================================================
 
+       cseg
+
   if 0
 
 ;--------------------------------------------------------------------