User Tools

Site Tools


projects:sprite_clock

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

projects:sprite_clock [2015-04-17 04:35] (current)
Line 1: Line 1:
 +====== Sprite Clock ======
  
 +Download: {{:​projects:​spriteclock.zip|}}
 +
 +Simple IRQ clock for C64 that uses sprite objects for presentation.
 +
 +<​code>​
 +;SPRITE IRQ CLOCK (C) M.K. HOMEBREW COMPUTERS INC.
 +; Code below compiles with CC65 assembler:
 +; cl65 --verbose --listing spriteclock.asm
 +; Use HEX editor to insert "00 C0" at the beginning
 +; of the executable to be able to run it on C64 or
 +; in emulator.
 +; Usage:
 +; LOAD"​SPRITECLOCK",​8,​1
 +; CLR:NEW
 +; SYS49152,"​HHMMSS"​
 +; Where:
 +;     HH - hours, MM - minutes, SS - seconds
 +; Turn clock off:
 +; SYS49152
 +; Clock works in IRQ interrupt. Presentation is made
 +; with sprites (clock digits are mapped to sprite
 +; objects and displayed on screen). It is possible
 +; to use C64 while this clock works. Oddly enough,
 +; this clock seems to be interfering with I/O while
 +; running on real HW (unable to use disk drive or
 +; tape, will hung) but works fine in emulator.
 +; My C64 is the C (european) version (in C128 like
 +; case), that I use in USA using voltage converter. ​
 +; If you find the bug, please let me know!
 +; My contact: makarcz@yahoo.com
 +
 +VIC      = 53248 ;VIC Base
 +WSKSP0 ​  = 2040  ;PTR. SPRITE 0
 +WSKSP1 ​  = 2041  ;PTR. SPRITE 1
 +WSKSP2 ​  = 2042  ;PTR. SPRITE 2
 +BLOK13 ​  = 832   ;PTR. BEG. OF BLOCK 13
 +BLOK14 ​  = 896   ;PTR. BEG. OF BLOCK 14
 +BLOK15 ​  = 960   ;SEE ABOVE - BLOCK 15
 +IRQWKT ​  = 788   ;IRQ VECT.
 +POBZNA ​  = 121   ;READ CURR. BYTE
 +PRZECT ​  = $AEFD ;CHECK COMMA
 +ANAWYR ​  = 44446 ;PARSE EXPR.
 +POBTXT ​  = 46978 ;GET STRING
 +
 +         .ORG $C000
 +
 +         JMP STEROW
 +LICZNIK: ​ .BYTE 60                   ;​COUNTER
 +WZORCE: ​  .BYTE 2,​3,​5,​9,​5,​9 ​         ;TEMPLATES
 +CZAS:     .BYTE 1,​2,​0,​0,​0,​0 ​         ;TIME
 +LICZPOZ: ​ .BYTE 1                    ;POS. COUNTER
 +CYF0:     .BYTE 0,​252,​204,​204 ​       ;DIGIT 0
 +          .BYTE 204,​204,​204,​252
 +CYF1:     .BYTE 0,​12,​12,​12 ​          ;​DIGIT 1
 +          .BYTE 12,12,12,12
 +CYF2:     .BYTE 0,​252,​12,​12 ​         ;DIGIT 2, etc...
 +          .BYTE 252,​192,​192,​252
 +CYF3:     .BYTE 0,252,12,12
 +          .BYTE 60,​12,​12,​252
 +CYF4:     .BYTE 0,​204,​204,​204
 +          .BYTE 252,​12,​12,​12
 +CYF5:     .BYTE 0,​252,​192,​252
 +          .BYTE 12,​12,​12,​252
 +CYF6:     .BYTE 0,​252,​192,​192
 +          .BYTE 252,​204,​204,​252
 +CYF7:     .BYTE 0,252,12,24
 +          .BYTE 48,​96,​192,​192
 +CYF8:     .BYTE 0,​252,​204,​204
 +          .BYTE 252,​204,​204,​252
 +CYF9:     .BYTE 0,​252,​204,​204
 +          .BYTE 252,​12,​12,​252
 +DWUKR: ​   .BYTE 0,​0,​48,​48 ​           ;COLON
 +          .BYTE 0,48,48,0
 +COPY:    LDX #$00
 +         LDY #$00
 +LOOP1: ​  LDA CYF0,X
 +BLKNR: ​  STA BLOK13,Y
 +         CPX #7
 +         BEQ POZ
 +         INY
 +         INY
 +         INY
 +         INX
 +         JMP LOOP1
 +POZ:     RTS
 +IRQROM: ​ JMP $EA31
 +MAIN:    DEC LICZNIK
 +         BNE IRQROM
 +         LDA #60
 +         STA LICZNIK
 +         LDA CZAS
 +         LDX #3
 +         CMP #2
 +         BEQ NOC
 +         LDX #9
 +NOC:     STX WZORCE+1
 +         LDX #5
 +NXTCYF: ​ LDA CZAS,X
 +         INC CZAS,X
 +         CMP WZORCE,X
 +         BNE KOP1
 +         LDA #$00
 +         STA CZAS,X
 +         DEX
 +         BPL NXTCYF
 +KOP1:    LDA #$00
 +         STA LICZPOZ
 +         LDX #<CZAS
 +         LDY #>CZAS
 +         STX KOPIUJ+1
 +         STY KOPIUJ+3
 +         LDX #<BLOK13
 +         LDY #>BLOK13
 +         STX POS0B+1
 +         STY POS0C+1
 +KOPIUJ: ​ LDX #<CZAS
 +         LDY #>CZAS
 +         STX POS0+1
 +         STY POS0+2
 +POS0:    LDA CZAS
 +         CMP #$00
 +         BNE NIE00
 +         LDX #<CYF0
 +         LDY #>CYF0
 +POS0A: ​  STX LOOP1+1
 +         STY LOOP1+2
 +POS0B: ​  LDX #<BLOK13
 +POS0C: ​  LDY #>BLOK13
 +         STX BLKNR+1
 +         STY BLKNR+2
 +         JSR COPY
 +         JMP POS1
 +NIE00: ​  CMP #$01
 +         BNE NIE01
 +         LDX #<CYF1
 +         LDY #>CYF1
 +         JMP POS0A
 +NIE01: ​  CMP #$02
 +         BNE NIE02
 +         LDX #<CYF2
 +         LDY #>CYF2
 +         JMP POS0A
 +NIE02: ​  CMP #$03
 +         BNE NIE03
 +         LDX #<CYF3
 +         LDY #>CYF3
 +         JMP POS0A
 +NIE03: ​  CMP #$04
 +         BNE NIE04
 +         LDX #<CYF4
 +         LDY #>CYF4
 +         JMP POS0A
 +NIE04: ​  CMP #$05
 +         BNE NIE05
 +         LDX #<CYF5
 +         LDY #>CYF5
 +         JMP POS0A
 +NIE05: ​  CMP #$06
 +         BNE NIE06
 +         LDX #<CYF6
 +         LDY #>CYF6
 +         JMP POS0A
 +NIE06: ​  CMP #$07
 +         BNE NIE07
 +         LDX #<CYF7
 +         LDY #>CYF7
 +         JMP POS0A
 +NIE07: ​  CMP #$08
 +         BNE NIE08
 +         LDX #<CYF8
 +         LDY #>CYF8
 +         JMP POS0A
 +NIE08: ​  LDX #<CYF9
 +         LDY #>CYF9
 +         JMP POS0A
 +POS1:    INC KOPIUJ+1
 +         LDA KOPIUJ+1
 +         CMP #$00
 +         BNE POS1A
 +         INC KOPIUJ+3
 +POS1A: ​  INC LICZPOZ
 +         LDA LICZPOZ
 +         CMP #1
 +         BNE POS1B
 +         LDX #<​(BLOK13+1)
 +         LDY #>​(BLOK13+1)
 +POS1A1: ​ STX POS0B+1
 +         STY POS0C+1
 +         JMP KOPIUJ
 +POS1B: ​  CMP #2
 +         BNE POS1C
 +         LDX #<BLOK14
 +         LDY #>BLOK14
 +         JMP POS1A1
 +POS1C: ​  CMP #3
 +         BNE POS1D
 +         LDX #<​(BLOK14+1)
 +         LDY #>​(BLOK14+1)
 +         JMP POS1A1
 +POS1D: ​  CMP #4
 +         BNE POS1E
 +         LDX #<BLOK15
 +         LDY #>BLOK15
 +         JMP POS1A1
 +POS1E: ​  CMP #5
 +         BNE POS1F
 +         LDX #<​(BLOK15+1)
 +         LDY #>​(BLOK15+1)
 +         JMP POS1A1
 +POS1F: ​  JMP $EA31
 +START: ​  LDX #$00
 +         LDA #$00
 +STLOOP: ​ STA BLOK13,X
 +         STA BLOK14,X
 +         STA BLOK15,X
 +         INX
 +         CPX #63
 +         BEQ ST1
 +         JMP STLOOP
 +ST1:     LDX #$00
 +         LDY #$00
 +ST1LOOP: LDA DWUKR,X
 +         STA BLOK13+2,Y
 +         STA BLOK14+2,Y
 +         INX
 +         CPX #8
 +         BEQ ST2
 +         INY
 +         INY
 +         INY
 +         JMP ST1LOOP
 +ST2:     LDX #13
 +         STX WSKSP0
 +         INX
 +         STX WSKSP1
 +         INX
 +         STX WSKSP2
 +KOLOR: ​  LDA #13
 +         STA VIC+39
 +         STA VIC+40
 +         STA VIC+41
 +         LDA #%00000110
 +         STA VIC+16
 +         LDA #215
 +         LDX #50
 +         STA VIC
 +         STX VIC+1
 +         LDA #7
 +         STA VIC+2
 +         STX VIC+3
 +         ADC #48
 +         STA VIC+4
 +         STX VIC+5
 +         LDA #%00000111
 +         STA VIC+23
 +         STA VIC+29
 +         STA VIC+27
 +         STA VIC+21
 +         LDX #<MAIN
 +         LDY #>MAIN
 +         SEI
 +         STX IRQWKT
 +         STY IRQWKT+1
 +         CLI
 +         RTS
 +STEROW: ​ JSR POBZNA
 +         BEQ WYLACZ
 +         JSR PRZECT
 +         JSR ANAWYR
 +         ROL 13
 +         BCS NASTAW
 +ILLQUA: ​ JMP 47000
 +NASTAW: ​ JSR POBTXT
 +         CMP #6
 +         BNE ILLQUA
 +         LDY #5
 +         SEI
 +NASTPE: ​ LDA (34),Y
 +         SEC
 +         SBC #48
 +         STA CZAS,Y
 +         DEY
 +         BPL NASTPE
 +         LDA #60
 +         STA LICZNIK
 +         CLI
 +         JMP START
 +WYLACZ: ​ LDX #$31
 +         LDY #$EA
 +         SEI
 +         STX IRQWKT
 +         STY IRQWKT+1
 +         CLI
 +         LDA #$00
 +         STA VIC+21
 +         RTS
 +
 +</​code>​
projects/sprite_clock.txt ยท Last modified: 2015-04-17 04:35 (external edit)