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