home *** CD-ROM | disk | FTP | other *** search
/ Brotikasten / BROTCD01.iso / c128 / c124.d64 / clock128.src < prev    next >
Text File  |  1995-08-09  |  9KB  |  250 lines

  1. ;"0:CLOCK128.SRC
  2. ;
  3.               .MAC W8563
  4.               LDX ?1
  5.               LDA ?2
  6.               JSR WRITE8563
  7.               .MND
  8.               .MAC R8563
  9.               LDX ?1
  10.               JSR READ8563
  11.               .MND
  12. ;****************************
  13. ;*  THIS ROUTINE FOR C-128 USE ONLY !
  14. ;****************************
  15. CIA2TOD1      =   $DD08        ;TIME OF DAY CLOCK (10THS)
  16. CIA2TODS      =   $DD09        ;TOD CLOCK (SECONDS)
  17. CIA2TODM      =   $DD0A        ;TOD CLOCK (MINUTES)
  18. CIA2TODH      =   $DD0B        ;TOD CLOCK (HOURS)
  19. CIA2CRA       =   $DD0E        ;CIA CONTROL REGISTER
  20. CIA2CRB       =   $DD0F        ;CIA CONTROL REGISTER
  21.               .LIB K128.XREF
  22. *=            $1300            ;BEGIN PROGRAM AT 4864
  23.               LDA #"0"
  24.               LDX #7
  25. STARTLOOP     STA INTIMEOUT,X
  26.               DEX
  27.               STA INTIMEOUT,X
  28.               DEX
  29.               DEX
  30.               BPL STARTLOOP
  31.               JSR SETCLOCK     ;LET US SET THE CLOCK
  32.               SEI              ;SET IRQ INTERUPT VECTOR
  33.               LDA #<CLOCKIRQ   ;TO CLOCK ROUTINE
  34.               STA $0314
  35.               LDA #>CLOCKIRQ
  36.               STA $0315
  37.               CLI
  38.               LDA 241
  39.               STA CHARCOLOR
  40.               RTS              ;RETURN TO BASIC
  41. COPYRIGHT     .BYT "(C) COPYRIGHT 1987 "
  42.               .BYT "BY DIAMOND SOFTWARE AND C.L. GOTWALD"
  43. IRQDONE       JMP RETVEC       ;RETURN TO HARDWARE IRQ
  44. CLOCKIRQ      NOP
  45.               LDA $D3          ;IS ALT KEY PRESSED?
  46.               AND #%00001000   ;CLEAR ALL EXCEPT ALT FLAG
  47.               BEQ CLOCKIRQCONT ;NOT PRESSED, CONTINUE
  48.               INC CHARCOLOR
  49. CLOCKIRQCONT  INC STOPWATCH    ;THIS IS A SLOW DOWN
  50.               BIT STOPWATCH    ;TECHNIC. I HAD PROBLEMS
  51.               BPL IRQDONE      ;WITH LONG IRQ'S
  52.               LDA #0           ;RESET STOPWATCH
  53.               STA STOPWATCH
  54.               JSR READCLOCK    ;READ THE TOD CLOCK
  55.               LDA CHARCOLOR    ;GET CHAR COLOR TO PRINT
  56.               AND #%00001111   ;CLEAR HI NYBBLE
  57.               ORA #%01000000   ;SET REV ON
  58.               STA TIMEATTRIBS
  59.               BIT $D600        ;STOP ALL SCREEN ACCESS
  60.               BPL IRQDONE
  61.               SEI
  62.               R8563 #18        ;GET UPDATE ADDR HI
  63.               STA SAVE18       ;SAVE IT
  64.               R8563 #19        ;GET UPDATE ADDR LO
  65.               STA SAVE19       ;SAVE IT
  66.               LDA #70          ;SET SCREEN ADDRESS LO
  67.               STA SCNLOC
  68.               W8563 #18:#0     ;PREPARE FOR TIME OUTPUT
  69.               W8563 #19:SCNLOC
  70.               LDY #0
  71. CLOCKOUTLOOP  LDA NEWTIME,Y    ;GET NEXT CHARACTER
  72.               STA OUTCHAR      ;STORE FOR USE
  73.               W8563 #31:OUTCHAR     ;OUTPUT TO SCREEN
  74.               W8563 #18:#8          ;CHANGE ACCESS ADDR
  75.               W8563 #19:SCNLOC
  76.               W8563 #31:TIMEATTRIBS ;OUTPUT ATTRIBUTES
  77.               W8563 #18:#0          ;RESET ACCESS ADDR
  78.               INC SCNLOC       ;FOR NEXT USE
  79.               W8563 #19:SCNLOC
  80.               INY              ;INCREMENT CHAR COUNT
  81.               CPY #10          ;HAVE WE DONE ALL?
  82.               BNE CLOCKOUTLOOP ;NO, PUT THE NEXT CHAR
  83.               W8563 #18:SAVE18 ;RESTORE SCREEN ACCESS
  84.               W8563 #19:SAVE19 ;FOR NORMAL PROGRAM ACCESS
  85.               CLI              ;CLEAR INTERRUPT
  86.               JMP RETVEC       ;HARDWARE IRQ ROUTINE
  87. ERRORRESET    NOP
  88.               LDX #7
  89. ERR01         LDA NEWTIME+1,X
  90.               STA INTIMEOUT,X
  91.               DEX
  92.               BPL ERR01
  93.               LDA #"*"
  94.               STA INTIMEOUT,Y
  95.               JSR PRIMM
  96.               .BYT 13,"æ",0
  97.               JMP SETCLOCK
  98. CLOCKERR      JMP ERRORRESET
  99. SETCLOCK      NOP
  100.               JSR PRIMM        ;PRINT IMMEDIATE
  101.               .BYT "ENTER TIME (HH:MM:SS) "
  102. INTIMEOUT     .BYT "00:00:00¥¥¥¥¥¥¥¥",0
  103.               LDX #0           ;GET TIME
  104. GETTIME       JSR CHRIN
  105.               CMP #13          ;END OF INPUT?
  106.               BEQ TESTSYNTAX   ;YES, CHECK IT OUT
  107.               CPX #8
  108.               BEQ GETTIME
  109.               STA NEWTIME+1,X
  110.               INX
  111.               BNE GETTIME
  112. TESTSYNTAX    NOP
  113.               LDX #2           ;PREPARE INDICES
  114.               LDY #7
  115. TESTSYNTAX01  LDA NEWTIME+1,Y  ;LOAD INPUT CHARACTER
  116.               SEC
  117.               SBC #"0"         ;MAKE IT 0 TO 9
  118. ;             CMP #0           ;IS IT LESS THAN "0"?
  119.               BMI CLOCKERR     ;YES, GO AGAIN
  120.               CLC
  121.               CMP #10          ;IS IT GREATER THAN "9"?
  122.               BCS CLOCKERR     ;YES, GO AGAIN
  123.               STA NEWTIMEBCD,X ;OKAY, STORE IT
  124.               DEY              ;
  125.               LDA NEWTIME+1,Y  ;LOAD INPUT CHARACTER
  126.               SEC
  127.               SBC #"0"         ;MAKE IT 0 TO 9
  128. ;             CMP #0           ;IS IT LESS THAN "0"?
  129.               BMI CLOCKERR     ;YES, GO AGAIN
  130.               CLC
  131.               CMP #10          ;IS IT GREATER THAN "9"?
  132.               BCS CLOCKERR     ;YES, GO AGAIN
  133.               ASL A            ;SHIFT VALUE TO THE UPPER
  134.               ASL A            ;NYBBLE OF THE ACCUMULATOR
  135.               ASL A
  136.               ASL A
  137.               ORA NEWTIMEBCD,X ;OR IN THE LOW BYTE
  138.               STA NEWTIMEBCD,X ;STORE BCD VALUE
  139.               DEY              ;DECREMENT PAST THE ":"
  140.               DEY
  141.               DEX
  142.               BPL TESTSYNTAX01 ;TEST MINUTES/HOURS
  143.               LDA NEWTIMEBCD   ;CHECK FOR VALID HOUR
  144.               LDY #1
  145.               CLC
  146.               CMP #$24         ;IS IT >= 24?
  147. CLOCKERR01    BCS CLOCKERR     ;BAD NUMBER, GO AGAIN
  148.               SEC
  149.               CMP #$12         ;IS IT < 12?
  150.               BCC AMHOUR       ;YES, DON'T SET PM BIT
  151.               SED
  152.               SEC
  153.               SBC #$12
  154.               CLD
  155. PMHOUR        ORA #%10000000
  156. AMHOUR        STA NEWTIMEBCD   ;STORE HOURS
  157.               LDY #4
  158.               LDA NEWTIMEBCD+1 ;CHECK MINUTES SYNTAX
  159.               CMP #$60         ;IS IT >= 60?
  160.               BCS CLOCKERR01   ;YES, ERROR
  161.               LDY #7
  162.               LDA NEWTIMEBCD+2 ;CHECK SECONDS SYNTAX
  163.               CMP #$60         ;IS IT >= 60?
  164.               BCS CLOCKERR01   ;YES, ERROR
  165.               LDA NEWTIMEBCD   ;GET HOURS
  166.               STA CIA2TODH     ;STORE IN TOD CLOCK
  167.               LDA NEWTIMEBCD+1 ;GET MINUTES
  168.               STA CIA2TODM     ;STORE IN TOD CLOCK
  169.               LDA NEWTIMEBCD+2 ;GET SECONDS
  170.               STA CIA2TODS     ;STORE IN TOD CLOCK
  171.               NOP
  172.               LDA #0           ;LOAD 0
  173.               STA CIA2TOD1     ;START TOD CLOCK TICKING
  174.               RTS              ;RETURN TO SET IRQ VECTOR
  175. NEWTIME       .BYT " 00:00:00 ",0
  176. TIMEATTRIBS   .BYT 0
  177. NEWTIMEBCD    .BYT 0,0,0
  178. LASTUPDATE    .BYT 0
  179. SCNLOC        .BYT 0
  180. OUTCHAR       .BYT 0
  181. SAVE18        .BYT 0
  182. SAVE19        .BYT 0
  183. RETVEC        = $FA65
  184. STOPWATCH     .BYT 0
  185. CHARCOLOR     .BYT 0
  186. ;
  187. ;
  188. READCLOCK     LDA CIA2TODH     ;GET HOURS
  189.               STA NEWTIMEBCD   ;STORE HOURS
  190.               LDA CIA2TODM     ;GET MINUTES
  191.               STA NEWTIMEBCD+1 ;STORE MINUTES
  192.               LDA CIA2TODS     ;GET SECONDS
  193.               STA NEWTIMEBCD+2 ;STORE SECONDS
  194.               LDA CIA2TOD1     ;RESTART CLOCK
  195.               LDY #7
  196.               LDX #2
  197. READCLOCK01   LDA NEWTIMEBCD,X ;LOAD SECONDS/MINUTES/HRS
  198.               AND #%00001111   ;STRIP UPPER NYBBLE
  199.               CLC
  200.               ADC #$30         ;MAKE IT ASCII
  201.               STA NEWTIME+1,Y  ;STORE IN OUTPUT LOCATION
  202.               DEY
  203.               LDA NEWTIMEBCD,X ;RELOAD SECS/MINS/HRS
  204.               AND #%11110000   ;STRIP LOWER NYBBLE
  205.               LSR A            ;SHIFT UPPER NYBBLE TO
  206.               LSR A            ;LOWER NYBBLE
  207.               LSR A
  208.               LSR A
  209.               ADC #$30         ;MAKE IT ASCII
  210.               STA NEWTIME+1,Y  ;AND STORE IN OUTPUT
  211.               DEY
  212.               LDA #":"         ;PUT ":" IN ITS LOCATION
  213.               STA NEWTIME+1,Y
  214.               DEY
  215.               DEX              ;ARE WE DONE YET?
  216.               BMI ESCAPECLOCK  ;YES, LEAVE
  217.               BNE READCLOCK01
  218.               PHP              ;HOLD THIS STATUS
  219.               LDA NEWTIMEBCD   ;IS IT PM?
  220.               BMI READCLOCK02  ;NO, GO AGAIN
  221.               CMP #$12         ;IS IT 00:??:??
  222.               BNE R