home *** CD-ROM | disk | FTP | other *** search
- ********************************
- * CLOCK PROGRAM FOR C'128 *
- * WORKS IN 40 OR 80-COLUMN *
- * TEXT MODE. *
- * (C) 1989 JOEL M. RUBIN *
- ********************************
-
- COL40_80 = $D7 ; CURRENT SCREEN IS 40-COLUMNS IF 0,
- ; 80-COLUMNS IF 128
-
- WRITDAT = $CDCA ; .A => WRITE .A TO VDC DATA REGISTER (31)
- WRITREG = WRITDAT+2 ; .A, .X => WRITE .A TO VDC REGISTER #.X
-
- RDDAT = $CDD8 ; READ VDC DATA (31) REGISTER IN .A
- RDREG = RDDAT+2 ; .X => READ VDC REGISTER #.X IN .A
-
- OLDIRQ = $FA65 ; STANDARD C'128 IRQ ROUTINE
- IRQV = $0314 ; IRQ VECTOR
-
- TIME = $DC08 ; CIA CLOCK #1
-
- ORG $1300
-
- SEI
- LDA #<NEWIRQ
- STA IRQV
- LDA #>NEWIRQ
- STA IRQV+1
- CLI
- RTS
-
- *===============================
- * PUT 2 BCD DIGITS (.A) ON *
- * CURRENT SCREEN AT CURRENT *
- * POSITION *
- *===============================
-
- PRINTIT TAY
- LSR
- LSR
- LSR
- LSR
- ORA #"0" ; DOUBLE QUOTES HERE INDICATES MOST
- ; SIGNIFICANT BIT SET, SO REVERSED
- JSR WRITIT
- TYA
- PRINT2 AND #$0F
- ORA #"0"
- JMP WRITIT
-
- *===============================
- * PUT A SCREEN VALUE AT CURRENT*
- * POSITION ON CURRENT SCREEN. *
- * *
- * DATUM IN .A *
- * FOR 40-COLUMN SCREEN, *
- * SCREEN POSITION IN .X *
- *===============================
-
- WRITIT PHA
- LDA COL40_80
- BPL :40
-
- PLA
- JMP WRITDAT
-
- :40 PLA
- STA $400,X
- INX
- RTS
-
- NEWIRQ LDA COL40_80
- BPL DO40
-
- *===============================
- * FOR 80 COLUMNS ONLY, MAKE *
- * SURE THAT WE'RE NOT DOING *
- * ANYTHING WITH THE VDC RIGHT *
- * NOW--$C400 TO $CFFF NO GOOD. *
- * *
- * COULD PROBABLY GET AWAY WITH *
- * $CD00 TO $CDFF IN BANK 15 *
- * BUT THERE IS A REFERENCE TO *
- * $D600 IN $C500 PAGE. *
- * *
- * ALSO, THERE IS A PATCH AREA *
- * AT THE END OF $CE00 PAGE *
- * TO $CFFF WHICH COULD *
- * CONTAIN VDC REFERENCES IN *
- * THE FUTURE. *
- *===============================
-
- COL80 TSX
- LDA $107,X
- CMP #$C4
- BLT OK
- CMP #$D0
- BGE OK
-
- JMP OLDIRQ
-
- *===============================
- * FOR 80 COLUMNS ONLY, *
- * PUT THE VALUES OF VDC *
- * REGISTER $12 AND $13 ON *
- * THE STACK. *
- * *
- * SINCE WE ARE GOING TO WRITE *
- * TO THE BEGINNING OF THE *
- * 80 COLUMN SCREEN, WE ARE *
- * GOING TO SET THESE REGISTERS *
- * TO 0. *
- *===============================
-
- OK LDX #$12
- JSR RDREG
- PHA
- LDA #0
- TAY
- JSR WRITREG
- INX
- JSR RDREG
- PHA
- TYA
- JSR WRITREG
-
- *===============================
- * COMMON ROUTINES FOR *
- * 40 COLUMNS AND 80 COLUMNS *
- *===============================
-
- DO40 LDX #0
- LDA TIME+3 ; HOURS + AM/PM
- PHA
- AND #$1F ; HOURS
- JSR PRINTIT
- LDA #":"
- JSR WRITIT
- LDA TIME+2 ; MINUTES
- JSR PRINTIT
- LDA #":"
- JSR WRITIT
- LDA TIME+1 ; SECONDS
- JSR PRINTIT
- LDA #"."
- JSR WRITIT
- LDA TIME ; TENTHS OF SECONDS
- JSR PRINT2
- LDA #" "
- JSR WRITIT
- PLA ; GET BACK AM/PM FLAG
- BMI PM
- LDA #"A"&"?"
- HEX 2C ; SKIP NEXT TWO BYTES
- PM LDA #"P"&"?"
- JSR WRITIT
- LDA #"M"&"?"
- JSR WRITIT
-
- LDA COL40_80
- BPL FIN40
-
- *===============================
- * 80 COLUMNS ONLY--FILL IN *
- * VDC ATTRIBUTE RAM WITH THE *
- * CURRENT COLOR. *
- *===============================
-
- LDA #8
- LDX #$12
- JSR WRITREG
- INX
- LDA #0
- JSR WRITREG
- LDA $F1
- AND #$F
- LDY #13
- :L JSR WRITDAT
- DEY
- BNE :L
-
- *===============================
- * 80 COLUMNS ONLY--TAKE OLD *
- * VALUES OF VDC REGISTERS *
- * $13 AND $12 OFF THE STACK. *
- *===============================
-
- LDX #$13
- PLA
- JSR WRITREG
- DEX
- PLA
- JSR WRITREG
- ENDIT JMP OLDIRQ
-
- *===============================
- * 40 COLUMNS ONLY--FILL IN *
- * COLOR RAM WITH CURRENT *
- * CURSOR COLOR. IF WE ARE *
- * IN LOWER/UPPER MODE, TURN *
- * THE LOWER CASE REVERSED *
- * "AM" OR "PM" TO "AM" OR "PM".*
- *===============================
-
- FIN40 LDX #12
- LDA $F1
- :L STA $D800,X
- DEX
- BPL :L
- LDA $A2C
- CMP #22 ; LOWER/UPPER MODE
- BNE ENDIT
- LDA $40B
- ORA #$40
- STA $40B
- LDA #"M"
- STA $40C
- BNE ENDIT
-