home *** CD-ROM | disk | FTP | other *** search
/ Transactor / Transactor_27_1988_Transactor_Publishing.d64 / clock.asc < prev    next >
Text File  |  2023-02-26  |  5KB  |  219 lines

  1. ********************************
  2. *  CLOCK PROGRAM FOR C'128     *
  3. *  WORKS IN 40 OR 80-COLUMN    *
  4. *         TEXT MODE.           *
  5. *  (C) 1989 JOEL M. RUBIN      *
  6. ********************************
  7.  
  8. COL40_80 = $D7      ; CURRENT SCREEN IS 40-COLUMNS IF 0,
  9.                     ; 80-COLUMNS IF 128
  10.  
  11. WRITDAT = $CDCA     ; .A => WRITE .A TO VDC DATA REGISTER (31)
  12. WRITREG = WRITDAT+2 ; .A, .X => WRITE .A TO VDC REGISTER #.X
  13.  
  14. RDDAT = $CDD8       ; READ VDC DATA (31) REGISTER IN .A
  15. RDREG = RDDAT+2     ; .X => READ VDC REGISTER #.X IN .A
  16.  
  17. OLDIRQ = $FA65      ; STANDARD C'128 IRQ ROUTINE
  18. IRQV   = $0314      ; IRQ VECTOR
  19.  
  20. TIME = $DC08        ; CIA CLOCK #1
  21.  
  22.  ORG $1300
  23.  
  24.  SEI
  25.  LDA #<NEWIRQ
  26.  STA IRQV
  27.  LDA #>NEWIRQ
  28.  STA IRQV+1
  29.  CLI
  30.  RTS
  31.  
  32. *===============================
  33. * PUT 2 BCD DIGITS (.A) ON     *
  34. * CURRENT SCREEN AT CURRENT    *
  35. *       POSITION               *
  36. *===============================
  37.  
  38. PRINTIT TAY
  39.         LSR
  40.         LSR
  41.         LSR
  42.         LSR
  43.         ORA #"0"    ; DOUBLE QUOTES HERE INDICATES MOST
  44.                     ; SIGNIFICANT BIT SET, SO REVERSED
  45.         JSR WRITIT
  46.         TYA
  47. PRINT2  AND #$0F
  48.         ORA #"0"
  49.         JMP WRITIT
  50.  
  51. *===============================
  52. * PUT A SCREEN VALUE AT CURRENT*
  53. *  POSITION ON CURRENT SCREEN. *
  54. *                              *
  55. * DATUM IN .A                  *
  56. * FOR 40-COLUMN SCREEN,        *
  57. *  SCREEN POSITION IN .X       *
  58. *===============================
  59.  
  60. WRITIT PHA
  61.        LDA COL40_80
  62.        BPL :40
  63.  
  64.        PLA
  65.        JMP WRITDAT
  66.  
  67. :40    PLA
  68.        STA $400,X
  69.        INX
  70.        RTS
  71.  
  72. NEWIRQ LDA COL40_80
  73.        BPL DO40
  74.  
  75. *===============================
  76. * FOR 80 COLUMNS ONLY, MAKE    *
  77. * SURE THAT WE'RE NOT DOING    *
  78. * ANYTHING WITH THE VDC RIGHT  *
  79. * NOW--$C400 TO $CFFF NO GOOD. *
  80. *                              *
  81. * COULD PROBABLY GET AWAY WITH *
  82. * $CD00 TO $CDFF IN BANK 15    *
  83. * BUT THERE IS A REFERENCE TO  *
  84. * $D600 IN $C500 PAGE.         *
  85. *                              *
  86. * ALSO, THERE IS A PATCH AREA  *
  87. * AT THE END OF $CE00 PAGE     *
  88. * TO $CFFF WHICH COULD         *
  89. * CONTAIN VDC REFERENCES IN    *
  90. * THE FUTURE.                  *
  91. *===============================
  92.  
  93. COL80 TSX
  94.       LDA $107,X
  95.       CMP #$C4
  96.       BLT OK
  97.       CMP #$D0
  98.       BGE OK
  99.  
  100.       JMP OLDIRQ
  101.  
  102. *===============================
  103. * FOR 80 COLUMNS ONLY,         *
  104. * PUT THE VALUES OF VDC        *
  105. * REGISTER $12 AND $13 ON      *
  106. * THE STACK.                   *
  107. *                              *
  108. * SINCE WE ARE GOING TO WRITE  *
  109. * TO THE BEGINNING OF THE      *
  110. * 80 COLUMN SCREEN, WE ARE     *
  111. * GOING TO SET THESE REGISTERS *
  112. * TO 0.                        *
  113. *===============================
  114.  
  115. OK    LDX #$12
  116.       JSR RDREG
  117.       PHA
  118.       LDA #0
  119.       TAY
  120.       JSR WRITREG
  121.       INX
  122.       JSR RDREG
  123.       PHA
  124.       TYA
  125.       JSR WRITREG
  126.  
  127. *===============================
  128. * COMMON ROUTINES FOR          *
  129. * 40 COLUMNS AND 80 COLUMNS    *
  130. *===============================
  131.  
  132. DO40  LDX #0
  133.       LDA TIME+3    ; HOURS + AM/PM
  134.       PHA
  135.       AND #$1F      ; HOURS
  136.       JSR PRINTIT
  137.       LDA #":"
  138.       JSR WRITIT
  139.       LDA TIME+2    ; MINUTES
  140.       JSR PRINTIT
  141.       LDA #":"
  142.       JSR WRITIT
  143.       LDA TIME+1    ; SECONDS
  144.       JSR PRINTIT
  145.       LDA #"."
  146.       JSR WRITIT
  147.       LDA TIME      ; TENTHS OF SECONDS
  148.       JSR PRINT2
  149.       LDA #" "
  150.       JSR WRITIT
  151.       PLA           ; GET BACK AM/PM FLAG
  152.       BMI PM
  153.       LDA #"A"&"?"
  154.       HEX 2C        ; SKIP NEXT TWO BYTES
  155. PM    LDA #"P"&"?"
  156.       JSR WRITIT
  157.       LDA #"M"&"?"
  158.       JSR WRITIT
  159.  
  160.       LDA COL40_80
  161.       BPL FIN40
  162.  
  163. *===============================
  164. * 80 COLUMNS ONLY--FILL IN     *
  165. * VDC ATTRIBUTE RAM WITH THE   *
  166. * CURRENT COLOR.               *
  167. *===============================
  168.  
  169.       LDA #8
  170.       LDX #$12
  171.       JSR WRITREG
  172.       INX
  173.       LDA #0
  174.       JSR WRITREG
  175.       LDA $F1
  176.       AND #$F
  177.       LDY #13
  178. :L    JSR WRITDAT
  179.       DEY
  180.       BNE :L
  181.  
  182. *===============================
  183. * 80 COLUMNS ONLY--TAKE OLD    *
  184. * VALUES OF VDC REGISTERS      *
  185. * $13 AND $12 OFF THE STACK.   *
  186. *===============================
  187.  
  188.       LDX #$13
  189.       PLA
  190.       JSR WRITREG
  191.       DEX
  192.       PLA
  193.       JSR WRITREG
  194. ENDIT JMP OLDIRQ
  195.  
  196. *===============================
  197. * 40 COLUMNS ONLY--FILL IN     *
  198. * COLOR RAM WITH CURRENT       *
  199. * CURSOR COLOR.  IF WE ARE     *
  200. * IN LOWER/UPPER MODE, TURN    *
  201. * THE LOWER CASE REVERSED      *
  202. * "AM" OR "PM" TO "AM" OR "PM".*
  203. *===============================
  204.  
  205. FIN40 LDX #12
  206.       LDA $F1
  207. :L    STA $D800,X
  208.       DEX
  209.       BPL :L
  210.       LDA $A2C
  211.       CMP #22       ; LOWER/UPPER MODE
  212.       BNE ENDIT
  213.       LDA $40B
  214.       ORA #$40
  215.       STA $40B
  216.       LDA #"M"
  217.       STA $40C
  218.       BNE ENDIT
  219.