From c01d26042aea79643d30ead58ebc623d1789453c Mon Sep 17 00:00:00 2001 From: Joshua Bell Date: Sun, 25 Jun 2023 11:46:35 -0700 Subject: [PATCH] The Cricket!: Add unified SET.DATETIME util --- clocks/cricket/Makefile | 1 + clocks/cricket/README.md | 1 + clocks/cricket/set.datetime.s | 122 ++++++++++++++++++++++++++++++++++ package.sh | 1 + 4 files changed, 125 insertions(+) create mode 100644 clocks/cricket/set.datetime.s diff --git a/clocks/cricket/Makefile b/clocks/cricket/Makefile index 732cadd..c1d9eda 100644 --- a/clocks/cricket/Makefile +++ b/clocks/cricket/Makefile @@ -10,6 +10,7 @@ TARGETS = \ $(OUTDIR)/prodos.mod.BIN \ $(OUTDIR)/cricket.system.SYS \ $(OUTDIR)/test.BIN \ + $(OUTDIR)/set.datetime.BIN \ $(OUTDIR)/set.time.BIN \ $(OUTDIR)/set.date.BIN diff --git a/clocks/cricket/README.md b/clocks/cricket/README.md index 0624b8d..019e473 100644 --- a/clocks/cricket/README.md +++ b/clocks/cricket/README.md @@ -38,6 +38,7 @@ I ended up disassembling both [NS.CLOCK.SYSTEM](../ns.clock/ns.clock.system.s) ( These `BRUN`able files are also built: * [TEST](test.s) attempts to identify an SSC in Slot 2 and the Cricket via the ID sequence, to test routines. +* [SET.DATETIME](set.datetime.s) sets the Cricket's current date and time. * [SET.DATE](set.date.s) sets the Cricket's current date. * [SET.TIME](set.time.s) sets the Cricket's current time. diff --git a/clocks/cricket/set.datetime.s b/clocks/cricket/set.datetime.s new file mode 100644 index 0000000..c643323 --- /dev/null +++ b/clocks/cricket/set.datetime.s @@ -0,0 +1,122 @@ +;;; SET.DATETIME utility for The Cricket! +;;; Prompts for date and time and updates Cricket. + + .setcpu "6502" + .linecont + + .feature string_escapes + + .include "apple2.inc" + .include "apple2.mac" + + .include "../../inc/apple2.inc" + .include "../../inc/macros.inc" + .include "../../inc/ascii.inc" + + .org $2000 + +.proc main + ;; -------------------------------------------------- + ;; Date + + jsr zstrout + scrcode "\rDate: WWW MM/DD/YY\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08" + .byte 0 + + jsr GETLN2 + + ;; Configure SSC + lda #%00001011 ; no parity/echo/interrupts, RTS low, DTR low + sta COMMAND + lda #%10011110 ; 9600 baud, 8 data bits, 2 stop bits + sta CONTROL + + ;; Clock Commands + ;; Set Date "SD WWW MM/DD/YY" + lda #HI('S') + jsr sendbyte + lda #HI('D') + jsr sendbyte + lda #HI(' ') + jsr sendbyte + + ldx #0 +: lda INPUT_BUFFER,x + jsr sendbyte + inx + cmp #HI(ASCII_CR) + bne :- + + ;; -------------------------------------------------- + ;; Time + + jsr zstrout + scrcode "\rTime: HH:MM:SS XM\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08" + .byte 0 + + jsr GETLN2 + + ;; Configure SSC + lda #%00001011 ; no parity/echo/interrupts, RTS low, DTR low + sta COMMAND + lda #%10011110 ; 9600 baud, 8 data bits, 2 stop bits + sta CONTROL + + ;; Clock Commands + ;; Set Time "ST HH:MM:SS:XM" + lda #HI('S') + jsr sendbyte + lda #HI('T') + jsr sendbyte + lda #HI(' ') + jsr sendbyte + + ldx #0 +: lda INPUT_BUFFER,x + jsr sendbyte + inx + cmp #HI(ASCII_CR) + bne :- + + rts +.endproc + + ;; Write byte in A to SSC +.proc sendbyte + pha +: lda STATUS + and #(1 << 4) ; transmit register empty? (bit 4) + beq :- ; nope, keep waiting + pla + sta TDREG + rts +.endproc + + +;;; ------------------------------------------------------------ +;;; Output a high-ascii, null-terminated string. +;;; String immediately follows the JSR. + +.proc zstrout + ptr := $A5 + + pla ; read address from stack + sta ptr + pla + sta ptr+1 + bne skip ; always (since data not on ZP) + +next: jsr COUT +skip: inc ptr + bne :+ + inc ptr+1 +: ldy #0 + lda (ptr),y + bne next + + lda ptr+1 ; restore address to stack + pha + lda ptr + pha + rts +.endproc + diff --git a/package.sh b/package.sh index bf8e583..b885913 100755 --- a/package.sh +++ b/package.sh @@ -20,6 +20,7 @@ add_file () { } add_file "clocks/cricket/out/cricket.system.SYS" "cricket.system#FF0000" "/$VOLNAME" +add_file "clocks/cricket/out/set.datetime.BIN" "set.datetime#062000" "/$VOLNAME/CRICKET.UTIL" add_file "clocks/cricket/out/set.date.BIN" "set.date#062000" "/$VOLNAME/CRICKET.UTIL" add_file "clocks/cricket/out/set.time.BIN" "set.time#062000" "/$VOLNAME/CRICKET.UTIL" add_file "clocks/cricket/out/test.BIN" "test#062000" "/$VOLNAME/CRICKET.UTIL"