home *** CD-ROM | disk | FTP | other *** search
/ Antic Magazine 1982 October / Antic_October_1982_Vol_1_No_4.atr / aclock.src next >
Text File  |  2021-02-14  |  2KB  |  2 lines

  1. ;"ACCURATE" CLOCK MODULE¢;Copyright Pete Goodeve, 1982¢;=========================¢;¢;occupies cassette buffer¢;¢;Atari OS references:¢SETVBV    EQU    $E45C        ; set-vector entry¢SYSVBV    EQU    $E45F        ; OS VBLANK service¢VVBLKI    EQU    $222        ; immed. VBLANK vector¢CRITIC    EQU    $42        ; critical section flag¢CASINI    EQU    $2        ; "cassette" init vector¢BOOTF    EQU    9        ; boot mode flag for init¢;¢;¢    ORG    $400        ; cass. buffer(1024 dec)¢;¢TIMLOK    DB    $FF¢SECS    DB    0¢MIN    DB    0¢HRS    DB    0¢DAYS    DB    0¢;¢CNT60    DB    60        ; VBLANK ticks¢CSECS    DB    0        ; contin. count¢ASECS    DB    13        ; adjustment count¢;¢;¢INITON    DS    1¢;Comes this way on RESET Button¢;via "Cassette Init" vector:¢RESET¢    JSR    NUTHIN        ; -- filled before use¢SETINT¢    LDX    #<CLOCK¢    LDY    #>CLOCK¢    LDA    #6        ; "immediate VBLANK" code¢    JSR    SETVBV        ; set up interr# vect,¢NUTHIN¢    RTS¢;¢;¢;Immed VBLANK interrupt service¢;comes through here first:¢;¢CLOCK¢    DEC    CNT60        ; count 60 ticks¢    BNE    XIT        ; before doing anything¢    INC    CSECS        ; keep track of seconds¢    LDX    #60        ; (kept around for later)¢    STX    CNT60        ; reset count¢    LDA    CRITIC        ; check if critical¢    ORA    TIMLOK        ; or if locked by user¢    BNE    XIT        ; gotta stop here¢; continue on if not critical¢; or locked ...:¢; repeats if seconds were missed¢CLKLP¢    DEC    ASECS        ; 13 second count down¢    BNE    TICK¢    LDA    #13¢    STA    ASECS        ; reset 13-sec count¢    DEC    CNT60        ; and skip one tick¢TICK¢    INC    SECS        ; user's time¢    CPX    SECS        ; reached 60 yet!¢    BNE    TOK        ; nops¢    LDY    #0¢    STY    SECS        ; reset seconds¢    INC    MIN        ; and bump minutes¢    CPX    MIN        ; over the hour?¢    BNE    TOK        ; not yet¢    STY    MIN        ; and so on¢    INC    HRS¢    LDA    #24¢    CMP    HRS¢    BNE    TOK¢    STY    HRS¢    INC    DAYS¢;...etc. if needed¢TOK¢    DEC    CSECS        ; were any missed?¢    BNE    CLKLP        ; round again if so¢VVON    DS    1¢;continue with VBLANK chain:¢XIT¢    JMP    SYSVBV        ; altered at setup¢;¢;¢;¢;*** INITIAL ENTRY HERE¢;gets overwritten by BASIC¢WINDIT¢    LDX    CASINI+1    ; Cassette Init vect¢    BEQ    NOINI        ; zero if not used¢    LDY    CASINI        ; rest of current vect¢SETON¢    STX    INITON+1    ; set up JSR address¢    STY    INITON        ; so stuff gets done¢    LDA    #<RESET        ; plug in our own¢    STA    CASINI+1    ; reset sequence¢    LDA    #>RESET¢    STA    CASINI¢    LDA    VVBLKI        ; current immed VBLANK¢    STA    VVON        ; will be done after us¢    LDA    VVBLKI+1¢    STA    VVON+1¢    LDA    BOOTF        ; bootstrap mode flag¢    ORA    #2        ; must include "cassette.'¢    STA    BOOTF¢    JMP    SETINT        ; go set VBLANK vector¢;¢NOINI¢    LDY    #>NUTHIN    ; dummy for JSR¢    LDX    #<NUTHIN¢    BNE    SETON¢;¢;¢;Autostart addr.¢    ORG    $2E2        ; "init" vector¢    DW    WINDIT¢;¢***    .END¢
  2.