Advertisement
jacobtohahn

Z80 CTC Timer

Sep 22nd, 2019
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;Simple 1 second timer for my Z80 SBC using the Z80 CTC
  2. ;Written using ASM80.com
  3. ;Code copyright Jacob Hahn, 2019
  4.  
  5.  
  6. RAMCELL     EQU     8000h
  7. INTTBL      EQU     1
  8.  
  9.             .ORG    $0000
  10.             JP      START
  11.  
  12.             .ORG    $101
  13.             DW      TMRDONE
  14.  
  15.             .ORG    $1000
  16. TMRDONE:    PUSH    AF
  17.             LD      A,(RAMCELL)
  18.             CP      $06
  19.             JR      Z,END
  20.             INC     A
  21.             LD      (RAMCELL),A
  22.             EI      
  23.             POP     AF
  24.             RETI    
  25.  
  26. END:        CALL    GETCHAR1
  27.             DI      
  28.             HALT    
  29.  
  30. START:              
  31.             LD      SP,0xffff ;set the stack pointer to top of RAM
  32.  
  33.             ;.INCLUDE initdart.z80 ;initialize DART
  34.             LD      A,00H ; initialize DART
  35.             OUT     ($09),A ; request reg. 0
  36.             LD      A,18H ; Channel reset
  37.             OUT     ($09),A
  38.             NOP      
  39.             LD      A,04H ; request reg. 4
  40.             OUT     ($09),A
  41.             LD      A,084H ; x32 clock, 1 stop bit, no parity
  42.             OUT     ($09),A
  43.             LD      A,03H ; request reg. 3
  44.             OUT     ($09),A
  45.             LD      A,0C1H ; 8 bit receiver, RX enable
  46.             OUT     ($09),A
  47.             LD      A,01H
  48.             OUT     ($09),A
  49.             LD      A,08H
  50.             OUT     ($09),A
  51.             LD      A,05H ; request reg. 5
  52.             OUT     ($09),A
  53.             LD      A,068H ; Transmit 8 bits, TX enable
  54.             OUT     ($09),A ; end of DART init
  55.  
  56.             LD      a,00000011b
  57.             OUT     $13,A ;CH2 doesn't run
  58.             OUT     $1B,A ;CH3 doesn't run
  59.             LD      A,7H ;init CTC ch. 0
  60.             OUT     $03,A
  61.             LD      A,0FAH ;start timer with time constant 0FAH
  62.             OUT     $03,A
  63.             LD      A,0C7H ;init CTC ch. 1
  64.             OUT     $0B,A
  65.             LD      A,0FAH ;load counter with time const. 0FAH
  66.             OUT     $0B,A
  67.             LD      A,00000000b ;int. vector
  68.             OUT     $0B,A
  69.             CALL    GETCHAR
  70.             XOR     A ;0 to A
  71.             LD      (RAMCELL),A
  72.             LD      A,INTTBL
  73.             LD      I,A
  74.             IM      2 ;init interrupts
  75.             EI       ;enable them
  76. WAIT:       LD      A,A
  77.             JR      WAIT
  78.  
  79. CHKOUT:     PUSH    AF
  80. TXA:        LD      A,$00
  81.             OUT     ($09),A
  82.             IN      A,($09)
  83.             AND     $04
  84.             JR      Z,TXA
  85.             POP     AF
  86.             RET      
  87.  
  88. GETCHAR1:   LD      HL,MSG2
  89.             JP      WR
  90. GETCHAR:    LD      HL,MSG1
  91. WR:         LD      A,(HL)
  92.             OR      A
  93.             JR      Z,DONE
  94.             CALL    CHKOUT
  95.             OUT     ($01),A
  96.             INC     HL
  97.             JR      WR
  98. DONE:       RET      
  99.  
  100. MSG1:       DB      "Timer start",$0D,$00
  101. MSG2:       DB      "Timer done",$0D,$00
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement