From 6648236fb62a5c04c556cf249b8b0e8290adcde0 Mon Sep 17 00:00:00 2001 From: Bill Chatfield Date: Mon, 24 Aug 2015 02:40:05 -0400 Subject: [PATCH] Added stuff --- 12hourclk.c | 56 ++++++ 12hourclk.h | 1 + Makefile | 13 +- alarmclk.c | 29 +-- alarmclk.dsk | Bin 0 -> 143360 bytes alarmclk.s | 515 ++++++++++++++++++++++++++++++++++++++++++++++++++ calcClkfreq.c | 9 + calibrate.s | 93 +++++++++ clkfreq | Bin 0 -> 1283 bytes clkfreq.h | 10 + clkfreq.s | 115 +++++++---- printf.s | 37 ++++ putc.c | 6 + putc.s | 25 +++ 14 files changed, 855 insertions(+), 54 deletions(-) create mode 100644 alarmclk.dsk create mode 100644 alarmclk.s create mode 100644 calcClkfreq.c create mode 100644 calibrate.s create mode 100644 clkfreq create mode 100644 clkfreq.h create mode 100644 printf.s create mode 100644 putc.c create mode 100644 putc.s diff --git a/12hourclk.c b/12hourclk.c index f8e9ee9..0419e62 100644 --- a/12hourclk.c +++ b/12hourclk.c @@ -1,7 +1,20 @@ #include /* printf, scanf */ +#include /* bool */ +#include /* strerror */ +#include /* time_t, time, localtime */ #include /* toupper */ +#include /* errno */ + #include "12hourclk.h" +#define TIME_ERR_RESULT ((time_t) -1) +#define LOCALTIME_ERR_RESULT NULL +#define ERR_MSG_SIZE 128 + +static void set_err_msg(char *prefix, int errno); + +static char G_err_msg[ERR_MSG_SIZE]; + static char *meridiem_text(meridiem_t m) { if (m == ANTE_MERIDIEM) { @@ -12,6 +25,49 @@ static char *meridiem_text(meridiem_t m) } } +bool set_clock(twleve_hour_clock_t *clock, struct tm *t) +{ + clock->seconds = t->tm_sec; + clock->minutes = t->tm_min; + if (t->tm_hour == 0) { + clock->hours = 12; + clock->meridiem = ANTE_MERIDIEM; + } + else if (t->tm_hour < 12) { + clock->meridiem = ANTE_MERIDIEM; + } + else if (t->tm_hour == 12) { + clock->meridiem = POST_MERIDIEM; + } + else { + clock->hours = t->tm_hour - 12; + clock->meridiem = POST_MERIDIEM; + } + return true; +} + + +void set_err_msg(char *what_failed, int err_code) +{ + snprintf(G_err_msg, ERR_MSG_SIZE, "%s: %s", what_failed, strerror(err_code)); +} + +bool load_system_time(twleve_hour_clock_t *clock) +{ + time_t now; + bool is_successful = false; /* It will not be successful until it is. */ + struct tm *curr_time; + + if (time(&now) != TIME_ERR_RESULT) + if ((curr_time = localtime(&now)) != LOCALTIME_ERR_RESULT) + is_successful = set_clock(clock, curr_time); + else + set_err_msg("Localtime function failed", errno); + else + set_err_msg("Time function failed", errno); + return is_successful; +} + void read_interactively(twleve_hour_clock_t *clock) { char meridiem_input[3]; diff --git a/12hourclk.h b/12hourclk.h index 44b2ba5..ae35e32 100644 --- a/12hourclk.h +++ b/12hourclk.h @@ -15,6 +15,7 @@ typedef struct { } twleve_hour_clock_t; extern void read_interactively(twleve_hour_clock_t *clock); +extern bool load_system_time(twleve_hour_clock_t *clock); extern void add_one_second(twleve_hour_clock_t *clock); extern void add_seconds(twleve_hour_clock_t *clock, uint8_t seconds); extern void print_time(twleve_hour_clock_t *clock); diff --git a/Makefile b/Makefile index 51583c8..a5f92d8 100644 --- a/Makefile +++ b/Makefile @@ -13,17 +13,18 @@ endif PGM=alarmclk OBJS=alarmclk.o 12hourclk.o clkfreq.o -PGM2=cpufreq -OBJS2=clkfreq.o +PGM2=calibrate +OBJS2=calibrate.o CC=cl65 AS=ca65 +LD=ld65 CFLAGS=-t $(CC65_TARGET) -O ASFLAGS=-t $(CC65_TARGET) LDFLAGS=-t $(CC65_TARGET) -DISK_VOL=ALARMCLK +DISK_VOL=alarmclk DISK=$(DISK_VOL).dsk AC=java -jar lib/AppleCommander-1.3.5.14.jar @@ -36,12 +37,14 @@ all: $(DISK) $(DISK): $(PGM) $(PGM2) $(AC) -d $(DISK) $< $(AC) -cc65 $(DISK) $< BIN < $< + $(AC) -d $(DISK) $(PGM2) + $(AC) -cc65 $(DISK) $(PGM2) BIN < $(PGM2) $(PGM): $(OBJS) $(CC) $(LDFLAGS) -o $@ $^ -$(PGM2): clkfreq.s - $(AS) $(ASFLAGS) -o $@ $^ +$(PGM2): $(OBJS2) + $(CC) $(LDFLAGS) -o $@ $^ # Compile and assemble rules use the defuault rules after CC and CFLAGS # are set. diff --git a/alarmclk.c b/alarmclk.c index 23f4ad5..cea6020 100644 --- a/alarmclk.c +++ b/alarmclk.c @@ -5,8 +5,8 @@ #include /* clrscr, kbhit */ #include "12hourclk.h" -extern void clkfreq(); -extern uint8_t ticks[4]; +extern void ClockFreq(); +extern uint8_t Ticks[4]; #define CLOCK_FREQUENCY 1023000L #define CYCLES_PER_NOOP 2 @@ -23,17 +23,18 @@ static twleve_hour_clock_t alarm_time; void main(void) { - clkfreq(); + ClockFreq(); printf("%c%c.%c%c%c%c%c%c MHz\n", - ticks[0] & 0x70, - ticks[0] & 0x07, - ticks[1] & 0x70, - ticks[1] & 0x07, - ticks[2] & 0x70, - ticks[2] & 0x07, - ticks[3] & 0x70, - ticks[3] & 0x07); + Ticks[0] & 0x70, + Ticks[0] & 0x07, + Ticks[1] & 0x70, + Ticks[1] & 0x07, + Ticks[2] & 0x70, + Ticks[2] & 0x07, + Ticks[3] & 0x70, + Ticks[3] & 0x07); + clrscr(); read_inputs(); clrscr(); @@ -46,8 +47,10 @@ void main(void) void read_inputs() { - puts("Current Time"); - read_interactively(&curr_time); + if (! load_system_time(&curr_time)) { + puts("Current Time"); + read_interactively(&curr_time); + } puts("Alarm Time"); read_interactively(&alarm_time); } diff --git a/alarmclk.dsk b/alarmclk.dsk new file mode 100644 index 0000000000000000000000000000000000000000..de3662d13d9be3893cc1686bedb76a5487b88a2d GIT binary patch literal 143360 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 + jsr _load_system_time + jsr bnega + jeq L0028 + lda #<(L002C) + ldx #>(L002C) + jsr _puts + lda #<(_curr_time) + ldx #>(_curr_time) + jsr _read_interactively +L0028: lda #<(L0031) + ldx #>(L0031) + jsr _puts + lda #<(_alarm_time) + ldx #>(_alarm_time) + jsr _read_interactively + rts + +.endproc + +; --------------------------------------------------------------- +; void __near__ elapse_one_second (void) +; --------------------------------------------------------------- + +.segment "CODE" + +.proc _elapse_one_second: near + +.segment "CODE" + + jsr decsp4 + ldx #$07 + lda #$FE + ldy #$00 + jsr staxysp + ldx #$00 + lda #$00 + ldy #$02 + jsr staxysp +L0050: ldy #$03 + jsr ldaxysp + jsr pushax + ldy #$03 + jsr ldaxysp + jsr tosltax + jne L0053 + jmp L0051 +L0053: nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + ldy #$02 + ldx #$00 + lda #$01 + jsr addeqysp + jmp L0050 +L0051: jsr incsp4 + rts + +.endproc + +; --------------------------------------------------------------- +; void __near__ run_clock (void) +; --------------------------------------------------------------- + +.segment "CODE" + +.proc _run_clock: near + +.segment "CODE" + + jsr decsp1 + lda #<(_curr_time) + ldx #>(_curr_time) + jsr _print_time + jmp L003A +L0038: jsr _elapse_one_second + lda #<(_curr_time) + ldx #>(_curr_time) + jsr _add_one_second + lda #<(_curr_time) + ldx #>(_curr_time) + jsr _reprint_time + jsr _kbhit + tax + jeq L003A + jsr _cgetc + ldy #$00 + sta (sp),y + ldy #$00 + ldx #$00 + lda (sp),y + cmp #$1B + jsr booleq + jne L0046 + ldy #$00 + ldx #$00 + lda (sp),y + ldx #$00 + jsr _toupper + cpx #$00 + bne L0048 + cmp #$51 +L0048: jsr booleq + jne L0046 + ldy #$00 + ldx #$00 + lda (sp),y + cmp #$03 + jsr booleq + jne L0046 + ldx #$00 + lda #$00 + jeq L0049 +L0046: ldx #$00 + lda #$01 +L0049: jeq L003A + lda #<(L004B) + ldx #>(L004B) + jsr _puts + jmp L0039 +L003A: jmp L0038 +L0039: jsr incsp1 + rts + +.endproc + +; --------------------------------------------------------------- +; void __near__ main (void) +; --------------------------------------------------------------- + +.segment "CODE" + +.proc _main: near + +.segment "CODE" + + ldy #$00 + jsr _ClockFreq + lda #<(L0009) + ldx #>(L0009) + jsr pushax + ldx #$00 + lda _Ticks + ldx #$00 + and #$70 + jsr pushax + ldx #$00 + lda _Ticks + ldx #$00 + and #$07 + jsr pushax + ldx #$00 + lda _Ticks+1 + ldx #$00 + and #$70 + jsr pushax + ldx #$00 + lda _Ticks+1 + ldx #$00 + and #$07 + jsr pushax + ldx #$00 + lda _Ticks+2 + ldx #$00 + and #$70 + jsr pushax + ldx #$00 + lda _Ticks+2 + ldx #$00 + and #$07 + jsr pushax + ldx #$00 + lda _Ticks+3 + ldx #$00 + and #$70 + jsr pushax + ldx #$00 + lda _Ticks+3 + ldx #$00 + and #$07 + jsr pushax + ldy #$12 + jsr _printf + jsr _clrscr + jsr _read_inputs + jsr _clrscr + lda #<(L001F) + ldx #>(L001F) + jsr pushax + ldy #$02 + jsr _printf + lda #<(_alarm_time) + ldx #>(_alarm_time) + jsr _print_time + lda #<(L0024) + ldx #>(L0024) + jsr pushax + ldy #$02 + jsr _printf + jsr _run_clock + rts + +.endproc + diff --git a/calcClkfreq.c b/calcClkfreq.c new file mode 100644 index 0000000..b637092 --- /dev/null +++ b/calcClkfreq.c @@ -0,0 +1,9 @@ +/* This file is only here to make clkfreq.s load successfully. */ + +#include "clkfreq.h" + +void main() +{ + clkfreq(); +} + diff --git a/calibrate.s b/calibrate.s new file mode 100644 index 0000000..f07f647 --- /dev/null +++ b/calibrate.s @@ -0,0 +1,93 @@ +.forceimport __STARTUP__ +.export _main + +.segment "RODATA" + +; All numbers are going to be this size and type. +Unsigned_Integer_Size = 4 +; Standard character output routine +COUT = $fded + +.segment "BSS" + +Sleep_Loop_Count: .res Unsigned_Integer_Size,0 ; Byte values initialized to 0 + +; ************************************* +; +; Macros +; +; ************************************* + +; Number++ +.macro Increment Number + .local Next_Byte + .local Done + ldx #0 ; X := 0 +Next_Byte: + inc Number,X ; Increment the value at Count+X address + bne Done ; Incrementing Count did not cause it to roll over to 0. + inx ; Increment X to the next byte + cpx #Unsigned_Integer_Size ; Compare X with 4. + bmi Next_Byte ; If X < Count_Size continue with next byte. +Done: +.endmacro + +; Minuend = Minuend - Subtrahend +.macro Subtract Minuend, Subtrahend + .local Next_Byte + ldx #0 + clc +Next_Byte: + lda Addr1,X + sbc Addr2,X + inx + cpx #Unsigned_Integer_Size + bmi Next_Byte +.endmacro + +; ************************************* +; +; Main +; +; ************************************* + +.segment "CODE" + +.proc _main: near + +.segment "CODE" + +Sleep_Loop: + +; Do nothing 10 times. + + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + + Increment Sleep_Loop_Count + lda #1 + cmp Sleep_Loop_Count+3 + bmi Sleep_Loop + +; Output result + + ldx #0 +Next_Byte: + lda Sleep_Loop_Count,X + jsr COUT + inx + cpx #Unsigned_Integer_Size + bmi Next_Byte + + rts ; from _main + +.endproc + diff --git a/clkfreq b/clkfreq new file mode 100644 index 0000000000000000000000000000000000000000..36ea60707a225e023169f8f7b50f00cc35d8cee6 GIT binary patch literal 1283 zcmaJ>UuYaf7@z$U?{;S{y?|m$5$B7y(R|Mg$teF#v~XdO1L0WauH;UJ`_aoDXFBnY!hixgRZl8TG0oGo$vc* z=J)%)nQv!4B^szsFxr-06d#xEm^s$}aZO+9zs!OCgE`V)z@y*uUK{;u>4<>Vm+&ld zPVp#S)!IH>#6N0|ykMd6O=UU0?d)CXMFqMX-w`p4Cs7Dk|GkYa5@+1jtlxs6-GFzp z+mHjc3E3KCw;)@GtP1%bYy@1&KHSf2F%IG}VZ3i%!}A z>DpzWizKQW&{L{D?{$ia6~*%|l;X zUiP+mlLN@YmrzI!9FQo{j$dSxPRrNQwv@}$R3=Z!+(=@E7DiHex-?e^&4MtAnHw0y z@9Sn}AS;y7q_YAlWhS!h60$C%Qf^|96_IrX6~!4}M#E~w@N|(GcN9&HA!0~6Ue%{x znVf$LwaWgPT>Jje>hvG53W#5KWWkv}#=ol@Pm8?S-x@pmM6NVwjUqON8gl+V8_Z-X zx+n9PM)8}`B~M<-E_-X&2IH$782ccP7TI)sLvKsX5Oz`IEd zPoaWO<$C|Gr*O<(L)Hj#^GLiIPzEE2aH)gXvbd9nomhA$oxO8(ycdb;fbWlqsd6N#L@dOg}#P~*YL0SAX rJf@b!FV$=eN+erNF^zaboL6A=3o+KBxq literal 0 HcmV?d00001 diff --git a/clkfreq.h b/clkfreq.h new file mode 100644 index 0000000..70c3545 --- /dev/null +++ b/clkfreq.h @@ -0,0 +1,10 @@ +#ifndef CLKFREQ_H +#define CLKFREQ_H + +#include /* uint8_t */ + +extern void clkfreq(void); +extern uint8_t ticks[4]; + +#endif + diff --git a/clkfreq.s b/clkfreq.s index 470e928..a41a8ae 100644 --- a/clkfreq.s +++ b/clkfreq.s @@ -1,3 +1,18 @@ + .setcpu "65C02" + .smart on + .autoimport on + .case on + .debuginfo off + .importzp sp, sreg, regsave, regbank + .importzp tmp1, tmp2, tmp3, tmp4, ptr1, ptr2, ptr3, ptr4 + .macpack longbranch + .forceimport __STARTUP__ + .import _fputc + .import _stdout + + .export _Ticks + .export _ClockFreq + rgConfig = $6000 ; write: D6=1 - NMI is off, D6=0 - NMI is on rgStatus = $6000 ; read: D6=0 - UART is busy rgTxD = $5000 ; write: data to send via UART @@ -6,9 +21,12 @@ vcNMI = $FFFA Refresh = 450 ; NMI rate in Hz -.export _clkfreq -.export _ticks -_clkfreq: +.segment "CODE" + +.proc _ClockFreq: near + +.segment "CODE" + ldx #NMI stx vcNMI @@ -19,10 +37,10 @@ _clkfreq: Again: lda #0 sta Flag - sta _ticks ; initializing counter - sta _ticks+1 - sta _ticks+2 - sta _ticks+3 + sta _Ticks ; initializing counter + sta _Ticks+1 + sta _Ticks+2 + sta _Ticks+3 lda #$FE ; initializing NMI counter (zeropoint minus 2 ticks) sta Timer lda #$FF @@ -45,40 +63,40 @@ L2: bit Flag ; waiting for true zeropoint Main: ; main counting cycle ;number of ticks per command sum of ticks ; v v - lda _ticks ;4 + lda _Ticks ;4 clc ;2 6 sed ;2 8 adc #$53 ;2 10 - sta _ticks ;4 14 - lda _ticks+1 ;4 18 + sta _Ticks ;4 14 + lda _Ticks+1 ;4 18 adc #0 ;2 20 - sta _ticks+1 ;4 24 - lda _ticks+2 ;4 28 + sta _Ticks+1 ;4 24 + lda _Ticks+2 ;4 28 adc #0 ;2 30 - sta _ticks+2 ;4 34 - lda _ticks+3 ;4 38 + sta _Ticks+2 ;4 34 + lda _Ticks+3 ;4 38 adc #0 ;2 40 - sta _ticks+3 ;4 44 + sta _Ticks+3 ;4 44 cld ;2 46 bit Flag ;4 50 bpl Main ;3 53 lda #0 ;2 sta Flag ;4 6 - lda _ticks ;4 10 + lda _Ticks ;4 10 clc ;2 12 sed ;2 14 adc #$95 ;2 16 - sta _ticks ;4 20 - lda _ticks+1 ;4 24 + sta _Ticks ;4 20 + lda _Ticks+1 ;4 24 adc #0 ;2 26 - sta _ticks+1 ;4 30 - lda _ticks+2 ;4 34 + sta _Ticks+1 ;4 30 + lda _Ticks+2 ;4 34 adc #0 ;2 36 - sta _ticks+2 ;4 40 - lda _ticks+3 ;4 44 + sta _Ticks+2 ;4 40 + lda _Ticks+3 ;4 44 adc #0 ;2 46 - sta _ticks+3 ;4 50 + sta _Ticks+3 ;4 50 cld ;2 52 lda Timer ;4 56 cmp # + +void main(void) +{ + putc('A', stdout); +} diff --git a/putc.s b/putc.s new file mode 100644 index 0000000..54eae22 --- /dev/null +++ b/putc.s @@ -0,0 +1,25 @@ + .file "putc.c" + .text + .globl main + .type main, @function +main: +.LFB0: + .cfi_startproc + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset 6, -16 + movq %rsp, %rbp + .cfi_def_cfa_register 6 + movq stdout(%rip), %rax + movq %rax, %rsi + movl $65, %edi + call _IO_putc + nop + popq %rbp + .cfi_def_cfa 7, 8 + ret + .cfi_endproc +.LFE0: + .size main, .-main + .ident "GCC: (GNU) 5.1.1 20150618 (Red Hat 5.1.1-4)" + .section .note.GNU-stack,"",@progbits