diff --git a/.map b/.map new file mode 100644 index 0000000..809d24a --- /dev/null +++ b/.map @@ -0,0 +1,871 @@ +Modules list: +------------- +alarmclock.o: + CODE Offs=000000 Size=0001B9 Align=00001 Fill=0000 + RODATA Offs=000000 Size=000038 Align=00001 Fill=0000 + BSS Offs=000000 Size=00000A Align=00001 Fill=0000 +thclock.o: + CODE Offs=0001B9 Size=0002F1 Align=00001 Fill=0000 + RODATA Offs=000038 Size=000041 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(_file.o): + DATA Offs=000000 Size=00001E Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(_hextab.o): + RODATA Offs=000079 Size=000010 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(_longminstr.o): + RODATA Offs=000089 Size=00000C Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(_oserror.o): + BSS Offs=00000A Size=000001 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(_printf.o): + CODE Offs=0004AA Size=0003A5 Align=00001 Fill=0000 + BSS Offs=00000B Size=00002B Align=00001 Fill=0000 + DATA Offs=00001E Size=000003 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(_scanf.o): + CODE Offs=00084F Size=000770 Align=00001 Fill=0000 + RODATA Offs=000095 Size=000008 Align=00001 Fill=0000 + BSS Offs=000036 Size=000042 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(_seterrno.o): + CODE Offs=000FBF Size=000009 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(addeqsp.o): + CODE Offs=000FC8 Size=000011 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(addysp.o): + CODE Offs=000FD9 Size=00000E Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(along.o): + CODE Offs=000FE7 Size=000012 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(axlong.o): + CODE Offs=000FF9 Size=000012 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(callmain.o): + CODE Offs=00100B Size=000017 Align=00001 Fill=0000 + BSS Offs=000078 Size=000004 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(cgetc.o): + CODE Offs=001022 Size=000012 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(clrscr.o): +/home/bill/opt/cc65/lib/apple2enh.lib(compl.o): + CODE Offs=001034 Size=000009 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(condes.o): + CODE Offs=00103D Size=00000C Align=00001 Fill=0000 + DATA Offs=000021 Size=000025 Align=00001 Fill=0000 + INIT Offs=000000 Size=00000C Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(cout.o): + LOWCODE Offs=000000 Size=00000A Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(crt0.o): + CODE Offs=001049 Size=000012 Align=00001 Fill=0000 + RODATA Offs=00009D Size=000007 Align=00001 Fill=0000 + BSS Offs=00007C Size=000003 Align=00001 Fill=0000 + DATA Offs=000046 Size=000003 Align=00001 Fill=0000 + STARTUP Offs=000000 Size=00006A Align=00001 Fill=0000 + INIT Offs=00000C Size=00004E Align=00001 Fill=0000 + ZPSAVE Offs=000000 Size=00001A Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(ctype.o): + RODATA Offs=0000A4 Size=000100 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(decaxy.o): + CODE Offs=00105B Size=000009 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(decsp1.o): + CODE Offs=001064 Size=000009 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(decsp3.o): + CODE Offs=00106D Size=00000D Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(decsp4.o): + CODE Offs=00107A Size=00000D Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(decsp6.o): + CODE Offs=001087 Size=00000D Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(dosdetect.o): + BSS Offs=00007F Size=000001 Align=00001 Fill=0000 + INIT Offs=00005A Size=000014 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(errno.o): + CODE Offs=001094 Size=000018 Align=00001 Fill=0000 + BSS Offs=000080 Size=000002 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(exehdr.o): + EXEHDR Offs=000000 Size=000004 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(fgetc.o): + CODE Offs=0010AC Size=000084 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(filedes.o): + CODE Offs=001130 Size=000016 Align=00001 Fill=0000 + DATA Offs=000049 Size=000020 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(fmisc.o): + CODE Offs=001146 Size=000044 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(fwrite.o): + CODE Offs=00118A Size=00007B Align=00001 Fill=0000 + BSS Offs=000082 Size=000002 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(home.o): + LOWCODE Offs=00000A Size=00000A Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(icmp.o): + CODE Offs=001205 Size=00002E Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(incsp1.o): + CODE Offs=001233 Size=000007 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(incsp2.o): + CODE Offs=00123A Size=000015 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(incsp3.o): + CODE Offs=00124F Size=000005 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(incsp4.o): + CODE Offs=001254 Size=000005 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(incsp5.o): + CODE Offs=001259 Size=000005 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(incsp6.o): + CODE Offs=00125E Size=000005 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(incsp8.o): + CODE Offs=001263 Size=000005 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(isdigit.o): + CODE Offs=001268 Size=00000F Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(isspace.o): + CODE Offs=001277 Size=00000F Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(isxdigit.o): + CODE Offs=001286 Size=00000F Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(jmpvec.o): + DATA Offs=000069 Size=000003 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(kbhit.o): + CODE Offs=001295 Size=000009 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(ladd.o): + CODE Offs=00129E Size=000024 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(ldaxi.o): + CODE Offs=0012C2 Size=00000D Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(ldaxsp.o): + CODE Offs=0012CF Size=000009 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(leaaxsp.o): + CODE Offs=0012D8 Size=00000C Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(lmul.o): + CODE Offs=0012E4 Size=00005C Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(lneg.o): + CODE Offs=001340 Size=00001E Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(longjmp.o): + CODE Offs=00135E Size=000030 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(lpush.o): + CODE Offs=00138E Size=000021 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(ltoa.o): + CODE Offs=0013AF Size=0000AF Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(makebool.o): + CODE Offs=00145E Size=000031 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(mli.o): + BSS Offs=000084 Size=000012 Align=00001 Fill=0000 + DATA Offs=00006C Size=000016 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(mul.o): + CODE Offs=00148F Size=000045 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(mul8.o): + CODE Offs=0014D4 Size=00003A Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(mulax10.o): + CODE Offs=00150E Size=000019 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(oserror.o): + CODE Offs=001527 Size=000016 Align=00001 Fill=0000 + RODATA Offs=0001A4 Size=000030 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(popsreg.o): + CODE Offs=00153D Size=00000F Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(printf.o): + CODE Offs=00154C Size=000033 Align=00001 Fill=0000 + BSS Offs=000096 Size=000001 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(push1.o): + CODE Offs=00157F Size=000005 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(pusha.o): + CODE Offs=001584 Size=000016 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(pushax.o): + CODE Offs=00159A Size=00001A Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(pushwsp.o): + CODE Offs=0015B4 Size=00001C Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(puts.o): + CODE Offs=0015D0 Size=000065 Align=00001 Fill=0000 + DATA Offs=000082 Size=000001 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(rdkey.o): + LOWCODE Offs=000014 Size=00000A Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(read.o): + CODE Offs=001635 Size=00005A Align=00001 Fill=0000 + INIT Offs=00006E Size=000005 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(regswap2.o): + CODE Offs=00168F Size=000016 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(return0.o): + CODE Offs=0016A5 Size=000004 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(rwcommon.o): + CODE Offs=0016A9 Size=000041 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(scanf.o): + CODE Offs=0016EA Size=000033 Align=00001 Fill=0000 + BSS Offs=000097 Size=000001 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(setjmp.o): + CODE Offs=00171D Size=000026 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(staspidx.o): + CODE Offs=001743 Size=000016 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(staxsp.o): + CODE Offs=001759 Size=00000B Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(strlen.o): + CODE Offs=001764 Size=000016 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(strlower.o): + CODE Offs=00177A Size=000028 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(sub.o): + CODE Offs=0017A2 Size=000014 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(tolower.o): + CODE Offs=0017B6 Size=000010 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(toupper.o): + CODE Offs=0017C6 Size=000010 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(udiv.o): + CODE Offs=0017D6 Size=00004F Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(umod.o): + CODE Offs=001825 Size=000011 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(ungetc.o): + CODE Offs=001836 Size=00002E Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(vfprintf.o): + CODE Offs=001864 Size=000060 Align=00001 Fill=0000 + DATA Offs=000083 Size=000008 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(vfscanf.o): + CODE Offs=0018C4 Size=000033 Align=00001 Fill=0000 + DATA Offs=00008B Size=000006 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(write.o): + CODE Offs=0018F7 Size=00006A Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(zerobss.o): + INIT Offs=000073 Size=000023 Align=00001 Fill=0000 +/home/bill/opt/cc65/lib/apple2enh.lib(zeropage.o): + ZEROPAGE Offs=000000 Size=00001A Align=00001 Fill=0000 + + +Segment list: +------------- +Name Start End Size Align +---------------------------------------------------- +EXEHDR 000000 000003 000004 00001 +ZEROPAGE 000080 000099 00001A 00001 +STARTUP 000803 00086C 00006A 00001 +LOWCODE 00086D 00088A 00001E 00001 +CODE 00088B 0021EB 001961 00001 +RODATA 0021EC 0023BF 0001D4 00001 +DATA 0023C0 002450 000091 00001 +ZPSAVE 002451 00246A 00001A 00001 +BSS 00246B 002502 000098 00001 +INIT 002503 00259C 00009A 00001 + + +Exports list by name: +--------------------- +COUT 00086D RLA HOME 000877 RLA +RDKEY 000881 RLA __BSS_RUN__ 00246B RLA +__BSS_SIZE__ 000098 REA __CONSTRUCTOR_COUNT__ 000002 REA +__CONSTRUCTOR_TABLE__ 002599 RLA __DESTRUCTOR_COUNT__ 000000 REA +__DESTRUCTOR_TABLE__ 0023C0 RLA __EXEHDR__ 000001 REA +__HIMEM__ 009600 REA __INIT_RUN__ 002503 RLA +__INIT_SIZE__ 00009A REA __LCADDR__ 00D400 REA +__LCSIZE__ 000C00 REA __LC_LAST__ 00D400 RLA +__LC_START__ 00D400 RLA __LOADADDR__ 000803 REA +__LOADSIZE__ 001CE8 REA __MOVE_LAST__ 00009A RLA +__MOVE_START__ 000000 RLA __STACKSIZE__ 000800 REA +__STARTUP_RUN__ 000803 RLA __STARTUP__ 000001 REA +__ZPSAVE_RUN__ 002451 RLA __ctype 002290 RLA +__directerrno 00191F RLA __dos_type 0024EA RLA +__errno 0024EB RLA __hextab 002265 RLA +__longminstr 002275 RLA __mappederrno 001927 RLA +__oserror 002475 RLA __osmaperrno 001DB2 RLA +__printf 000E28 RLA __scanf 0010DA RLA +__seterrno 00184A RLA __setjmp 001FA8 RLA +_add_one_second 000AF4 RLA _cgetc 0018AD RLA +_clrscr 000877 RLA _ferror 0019F4 RLA +_fgetc 001937 RLA _fwrite 001A15 RLA +_isdigit 001AF3 RLA _isspace 001B02 RLA +_isxdigit 001B11 RLA _kbhit 001B20 RLA +_longjmp 001BE9 RLA _ltoa 001C56 RLA +_main 000A1C RLA _print_time 000CB4 RLA +_printf 001DD7 RLA _puts 001E5B RLA +_read 001EC0 RLA _read_interactively 000A44 RLA +_reprint_time 000D04 RLA _scanf 001F75 RLA +_stdin 0023D8 RLA _stdout 0023DA RLA +_strlen 001FEF RLA _strlower 002005 RLA +_tolower 002041 RLA _toupper 002051 RLA +_ultoa 001CAD RLA _ungetc 0020C1 RLA +_vfprintf 002126 RLA _vfscanf 00214F RLA +_write 002182 RLA addeqysp 001855 RLA +addysp 001865 RLA addysp1 001864 RLA +aulong 001872 RLA axlong 00188B RLA +axulong 001884 RLA booleq 001CEF RLA +callmain 001896 RLA callmli 00242C RLA +complax 0018BF RLA decaxy 0018E6 RLA +decsp1 0018EF RLA decsp3 0018F8 RLA +decsp4 001905 RLA decsp6 001912 RLA +donelib 0018C8 RLA fdtab 002409 RLA +getfd 0019BB RLA incsp1 001ABE RLA +incsp2 001ACC RLA incsp3 001ADA RLA +incsp4 001ADF RLA incsp5 001AE4 RLA +incsp6 001AE9 RLA incsp8 001AEE RLA +initdostype 00255D LAI initlib 002503 RLA +initprompt 002571 LAI jmpvec 002429 RLA +ldax0sp 001B5A RLA ldaxi 001B4D RLA +ldaxidx 001B4F RLA ldaxysp 001B5C RLA +leaa0sp 001B63 RLA mliparam 0024EF RLA +mul8x16 001D61 RLA mul8x16a 001D6C RLA +mulax10 001D99 RLA negeax 001BCB RLA +popax 001AC5 RLA popsreg 001DC8 RLA +ptr1 000088 RLZ ptr2 00008A RLZ +ptr3 00008C RLZ ptr4 00008E RLZ +push1 001E0A RLA pusha 001E13 RLA +pusha0 001E27 RLA pushax 001E29 RLA +pusheax 001C22 RLA pushwysp 001E41 RLA +regbank 000094 RLZ regsave 000084 RLZ +regswap2 001F1A RLA return0 001F30 RLA +rwcommon 001F45 RLA rwepilog 001F68 RLA +rwprolog 001F34 RLA sp 000080 RLZ +sreg 000082 RLZ staspidx 001FCE RLA +stax0sp 001FE4 RLA staxysp 001FE6 RLA +tmp1 000090 RLZ tmp2 000091 RLZ +tmp3 000092 RLZ tmp4 000093 RLZ +tosaddeax 001B2F RLA tosicmp0 001A90 RLA +tosmuleax 001B75 RLA tossuba0 00202D RLA +tosudiva0 002061 RLA tosudivax 002063 RLA +tosumoda0 0020B0 RLA tosumulax 001D1A RLA +udiv16 002072 RLA zerobss 002576 RLA + + + +Exports list by value: +---------------------- +__DESTRUCTOR_COUNT__ 000000 REA __MOVE_START__ 000000 RLA +__EXEHDR__ 000001 REA __STARTUP__ 000001 REA +__CONSTRUCTOR_COUNT__ 000002 REA sp 000080 RLZ +sreg 000082 RLZ regsave 000084 RLZ +ptr1 000088 RLZ ptr2 00008A RLZ +ptr3 00008C RLZ ptr4 00008E RLZ +tmp1 000090 RLZ tmp2 000091 RLZ +tmp3 000092 RLZ tmp4 000093 RLZ +regbank 000094 RLZ __BSS_SIZE__ 000098 REA +__INIT_SIZE__ 00009A REA __MOVE_LAST__ 00009A RLA +__STACKSIZE__ 000800 REA __LOADADDR__ 000803 REA +__STARTUP_RUN__ 000803 RLA COUT 00086D RLA +HOME 000877 RLA _clrscr 000877 RLA +RDKEY 000881 RLA _main 000A1C RLA +_read_interactively 000A44 RLA _add_one_second 000AF4 RLA +__LCSIZE__ 000C00 REA _print_time 000CB4 RLA +_reprint_time 000D04 RLA __printf 000E28 RLA +__scanf 0010DA RLA __seterrno 00184A RLA +addeqysp 001855 RLA addysp1 001864 RLA +addysp 001865 RLA aulong 001872 RLA +axulong 001884 RLA axlong 00188B RLA +callmain 001896 RLA _cgetc 0018AD RLA +complax 0018BF RLA donelib 0018C8 RLA +decaxy 0018E6 RLA decsp1 0018EF RLA +decsp3 0018F8 RLA decsp4 001905 RLA +decsp6 001912 RLA __directerrno 00191F RLA +__mappederrno 001927 RLA _fgetc 001937 RLA +getfd 0019BB RLA _ferror 0019F4 RLA +_fwrite 001A15 RLA tosicmp0 001A90 RLA +incsp1 001ABE RLA popax 001AC5 RLA +incsp2 001ACC RLA incsp3 001ADA RLA +incsp4 001ADF RLA incsp5 001AE4 RLA +incsp6 001AE9 RLA incsp8 001AEE RLA +_isdigit 001AF3 RLA _isspace 001B02 RLA +_isxdigit 001B11 RLA _kbhit 001B20 RLA +tosaddeax 001B2F RLA ldaxi 001B4D RLA +ldaxidx 001B4F RLA ldax0sp 001B5A RLA +ldaxysp 001B5C RLA leaa0sp 001B63 RLA +tosmuleax 001B75 RLA negeax 001BCB RLA +_longjmp 001BE9 RLA pusheax 001C22 RLA +_ltoa 001C56 RLA _ultoa 001CAD RLA +__LOADSIZE__ 001CE8 REA booleq 001CEF RLA +tosumulax 001D1A RLA mul8x16 001D61 RLA +mul8x16a 001D6C RLA mulax10 001D99 RLA +__osmaperrno 001DB2 RLA popsreg 001DC8 RLA +_printf 001DD7 RLA push1 001E0A RLA +pusha 001E13 RLA pusha0 001E27 RLA +pushax 001E29 RLA pushwysp 001E41 RLA +_puts 001E5B RLA _read 001EC0 RLA +regswap2 001F1A RLA return0 001F30 RLA +rwprolog 001F34 RLA rwcommon 001F45 RLA +rwepilog 001F68 RLA _scanf 001F75 RLA +__setjmp 001FA8 RLA staspidx 001FCE RLA +stax0sp 001FE4 RLA staxysp 001FE6 RLA +_strlen 001FEF RLA _strlower 002005 RLA +tossuba0 00202D RLA _tolower 002041 RLA +_toupper 002051 RLA tosudiva0 002061 RLA +tosudivax 002063 RLA udiv16 002072 RLA +tosumoda0 0020B0 RLA _ungetc 0020C1 RLA +_vfprintf 002126 RLA _vfscanf 00214F RLA +_write 002182 RLA __hextab 002265 RLA +__longminstr 002275 RLA __ctype 002290 RLA +__DESTRUCTOR_TABLE__ 0023C0 RLA _stdin 0023D8 RLA +_stdout 0023DA RLA fdtab 002409 RLA +jmpvec 002429 RLA callmli 00242C RLA +__ZPSAVE_RUN__ 002451 RLA __BSS_RUN__ 00246B RLA +__oserror 002475 RLA __dos_type 0024EA RLA +__errno 0024EB RLA mliparam 0024EF RLA +__INIT_RUN__ 002503 RLA initlib 002503 RLA +initdostype 00255D LAI initprompt 002571 LAI +zerobss 002576 RLA __CONSTRUCTOR_TABLE__ 002599 RLA +__HIMEM__ 009600 REA __LCADDR__ 00D400 REA +__LC_LAST__ 00D400 RLA __LC_START__ 00D400 RLA + + + +Imports list: +------------- +COUT (cout.o): + read.o apple2/read.s(10) + write.o apple2/write.s(9) +HOME (home.o): + clrscr.o apple2/clrscr.s(8) +RDKEY (rdkey.o): + read.o apple2/read.s(10) +__BSS_RUN__ ([linker generated]): + zerobss.o common/zerobss.s(8) +__BSS_SIZE__ ([linker generated]): + zerobss.o common/zerobss.s(8) +__CONSTRUCTOR_COUNT__ ([linker generated]): + condes.o runtime/condes.s(18) +__CONSTRUCTOR_TABLE__ ([linker generated]): + condes.o runtime/condes.s(18) +__DESTRUCTOR_COUNT__ ([linker generated]): + condes.o runtime/condes.s(19) +__DESTRUCTOR_TABLE__ ([linker generated]): + condes.o runtime/condes.s(19) +__EXEHDR__ (exehdr.o): + [linker generated] /home/bill/opt/cc65/cfg/apple2enh.cfg(7) +__HIMEM__ ([linker generated]): + [linker generated] /home/bill/opt/cc65/cfg/apple2enh.cfg(19) +__INIT_RUN__ ([linker generated]): + crt0.o apple2/crt0.s(13) +__INIT_SIZE__ ([linker generated]): + crt0.o apple2/crt0.s(13) +__LCADDR__ ([linker generated]): + [linker generated] /home/bill/opt/cc65/cfg/apple2enh.cfg(21) +__LCSIZE__ ([linker generated]): + [linker generated] /home/bill/opt/cc65/cfg/apple2enh.cfg(21) +__LC_LAST__ ([linker generated]): + crt0.o apple2/crt0.s(12) +__LC_START__ ([linker generated]): + crt0.o apple2/crt0.s(12) +__LOADADDR__ ([linker generated]): + exehdr.o apple2/exehdr.s(9) +__LOADSIZE__ ([linker generated]): + exehdr.o apple2/exehdr.s(9) +__MOVE_LAST__ ([linker generated]): + [linker generated] /home/bill/opt/cc65/cfg/apple2enh.cfg(14) +__MOVE_START__ ([linker generated]): + [linker generated] /home/bill/opt/cc65/cfg/apple2enh.cfg(14) +__STACKSIZE__ ([linker generated]): + [linker generated] /home/bill/opt/cc65/cfg/apple2enh.cfg(19) +__STARTUP_RUN__ ([linker generated]): + [linker generated] /home/bill/opt/cc65/cfg/apple2enh.cfg(13) + [linker generated] /home/bill/opt/cc65/cfg/apple2enh.cfg(12) +__STARTUP__ (crt0.o): + alarmclock.o alarmclock.s(13) +__ZPSAVE_RUN__ ([linker generated]): + crt0.o apple2/crt0.s(14) + [linker generated] /home/bill/opt/cc65/cfg/apple2enh.cfg(13) +__ctype (ctype.o): + tolower.o common/tolower.s(8) + strlower.o common/strlower.s(13) + isxdigit.o /home/bill/opt/cc65/cc65/asminc/ctype.inc(9) + isspace.o /home/bill/opt/cc65/cc65/asminc/ctype.inc(9) + isdigit.o /home/bill/opt/cc65/cc65/asminc/ctype.inc(9) + toupper.o common/toupper.s(8) +__directerrno (errno.o): + read.o /home/bill/opt/cc65/cc65/asminc/errno.inc(10) + write.o /home/bill/opt/cc65/cc65/asminc/errno.inc(10) +__dos_type (dosdetect.o): + mli.o apple2/mli.s(7) +__errno (errno.o): + _seterrno.o /home/bill/opt/cc65/cc65/asminc/errno.inc(7) +__hextab (_hextab.o): + ltoa.o common/ltoa.s(10) +__longminstr (_longminstr.o): + ltoa.o common/ltoa.s(10) +__mappederrno (errno.o): + rwcommon.o /home/bill/opt/cc65/cc65/asminc/errno.inc(10) + write.o /home/bill/opt/cc65/cc65/asminc/errno.inc(10) +__oserror (_oserror.o): + rwcommon.o /home/bill/opt/cc65/cc65/asminc/errno.inc(7) + read.o /home/bill/opt/cc65/cc65/asminc/errno.inc(7) + errno.o /home/bill/opt/cc65/cc65/asminc/errno.inc(7) +__osmaperrno (oserror.o): + errno.o /home/bill/opt/cc65/cc65/asminc/errno.inc(8) +__printf (_printf.o): + vfprintf.o common/vfprintf.s(10) +__scanf (_scanf.o): + vfscanf.o common/_scanf.inc(17) +__seterrno (_seterrno.o): + ungetc.o /home/bill/opt/cc65/cc65/asminc/errno.inc(9) + fwrite.o /home/bill/opt/cc65/cc65/asminc/errno.inc(9) + fmisc.o /home/bill/opt/cc65/cc65/asminc/errno.inc(9) + errno.o /home/bill/opt/cc65/cc65/asminc/errno.inc(9) + _scanf.o ../libwrk/apple2enh/_scanf.s(16) +__setjmp (setjmp.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(14) +_add_one_second (thclock.o): + alarmclock.o alarmclock.s(21) +_cgetc (cgetc.o): + alarmclock.o alarmclock.s(19) +_clrscr (clrscr.o): + alarmclock.o alarmclock.s(17) +_ferror (fmisc.o): + vfscanf.o common/vfscanf.s(9) +_fgetc (fgetc.o): + vfscanf.o common/vfscanf.s(9) +_fwrite (fwrite.o): + vfprintf.o common/vfprintf.s(10) +_isdigit (isdigit.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(17) +_isspace (isspace.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(18) +_isxdigit (isxdigit.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(19) +_kbhit (kbhit.o): + alarmclock.o alarmclock.s(18) +_longjmp (longjmp.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(15) +_ltoa (ltoa.o): + _printf.o common/_printf.s(12) +_main (alarmclock.o): + callmain.o runtime/callmain.s(11) +_print_time (thclock.o): + alarmclock.o alarmclock.s(22) +_printf (printf.o): + thclock.o thclock.s(13) + alarmclock.o alarmclock.s(14) +_puts (puts.o): + alarmclock.o alarmclock.s(15) +_read (read.o): + fgetc.o ../libwrk/apple2enh/fgetc.s(14) +_read_interactively (thclock.o): + alarmclock.o alarmclock.s(20) +_reprint_time (thclock.o): + alarmclock.o alarmclock.s(23) +_scanf (scanf.o): + thclock.o thclock.s(14) +_stdin (_file.o): + scanf.o common/scanf.s(10) +_stdout (_file.o): + puts.o ../libwrk/apple2enh/puts.s(13) + printf.o common/printf.s(8) +_strlen (strlen.o): + _printf.o common/_printf.s(13) + puts.o ../libwrk/apple2enh/puts.s(15) +_strlower (strlower.o): + _printf.o common/_printf.s(13) +_tolower (tolower.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(20) +_toupper (toupper.o): + thclock.o thclock.s(15) + alarmclock.o alarmclock.s(16) +_ultoa (ltoa.o): + _printf.o common/_printf.s(12) +_ungetc (ungetc.o): + vfscanf.o common/vfscanf.s(9) +_vfprintf (vfprintf.o): + printf.o common/printf.s(8) +_vfscanf (vfscanf.o): + scanf.o common/scanf.s(10) +_write (write.o): + fwrite.o common/fwrite.s(10) + puts.o ../libwrk/apple2enh/puts.s(16) +addeqysp (addeqsp.o): + alarmclock.o alarmclock.s(432) +addysp (addysp.o): + incsp8.o runtime/incsp8.s(8) + incsp6.o runtime/incsp6.s(8) + incsp3.o runtime/incsp3.s(8) + fwrite.o common/fwrite.s(11) + scanf.o common/scanf.s(10) + printf.o common/printf.s(8) + incsp5.o runtime/incsp5.s(8) + incsp4.o runtime/incsp4.s(8) + thclock.o thclock.s(459) +addysp1 (addysp.o): + sub.o runtime/sub.s(8) + lmul.o runtime/lmul.s(8) + ladd.o runtime/ladd.s(8) +aulong (along.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) +axlong (axlong.o): + _printf.o common/_printf.s(11) +axulong (axlong.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + _printf.o common/_printf.s(11) +booleq (makebool.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) +callmain (callmain.o): + crt0.o apple2/crt0.s(11) +callmli (mli.o): + rwcommon.o apple2/mli.inc(131) + write.o apple2/mli.inc(131) +complax (compl.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) +decaxy (decaxy.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) +decsp1 (decsp1.o): + fgetc.o ../libwrk/apple2enh/fgetc.s(94) + alarmclock.o alarmclock.s(432) +decsp3 (decsp3.o): + thclock.o thclock.s(459) +decsp4 (decsp4.o): + lpush.o runtime/lpush.s(11) + alarmclock.o alarmclock.s(432) +decsp6 (decsp6.o): + _printf.o common/_printf.s(11) + thclock.o thclock.s(459) +donelib (condes.o): + crt0.o apple2/crt0.s(10) +fdtab (filedes.o): + read.o apple2/filedes.inc(13) + write.o apple2/filedes.inc(13) +getfd (filedes.o): + rwcommon.o apple2/filedes.inc(14) +incsp1 (incsp1.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + alarmclock.o alarmclock.s(432) +incsp2 (incsp2.o): + popsreg.o runtime/popsreg.s(8) + staspidx.o runtime/staspidx.s(8) + puts.o ../libwrk/apple2enh/puts.s(78) + thclock.o thclock.s(459) + thclock.o thclock.s(459) + thclock.o thclock.s(459) + thclock.o thclock.s(459) +incsp3 (incsp3.o): + fgetc.o ../libwrk/apple2enh/fgetc.s(94) +incsp4 (incsp4.o): + alarmclock.o alarmclock.s(432) +incsp5 (incsp5.o): + thclock.o thclock.s(459) +incsp6 (incsp6.o): + fwrite.o common/fwrite.s(11) + vfprintf.o common/vfprintf.s(9) +incsp8 (incsp8.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) +initlib (condes.o): + crt0.o apple2/crt0.s(10) +jmpvec (jmpvec.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) +ldax0sp (ldaxsp.o): + thclock.o thclock.s(459) + thclock.o thclock.s(459) + thclock.o thclock.s(459) +ldaxi (ldaxi.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) +ldaxidx (ldaxi.o): + thclock.o thclock.s(459) + thclock.o thclock.s(459) +ldaxysp (ldaxsp.o): + fwrite.o common/fwrite.s(11) + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + puts.o ../libwrk/apple2enh/puts.s(78) + thclock.o thclock.s(459) + thclock.o thclock.s(459) + thclock.o thclock.s(459) + alarmclock.o alarmclock.s(432) +leaa0sp (leaaxsp.o): + fgetc.o ../libwrk/apple2enh/fgetc.s(94) + thclock.o thclock.s(459) +mliparam (mli.o): + rwcommon.o apple2/mli.inc(130) + write.o apple2/mli.inc(130) +mul8x16 (mul8.o): + mul.o runtime/mul.s(8) +mul8x16a (mul8.o): + mul.o runtime/mul.s(8) +mulax10 (mulax10.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) +negeax (lneg.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) +popax (incsp2.o): + ungetc.o common/ungetc.s(10) + rwcommon.o apple2/rwcommon.s(6) + ltoa.o common/ltoa.s(9) + longjmp.o common/longjmp.s(8) + _printf.o common/_printf.s(11) +popsreg (popsreg.o): + mul8.o runtime/mul8.s(9) + mul.o runtime/mul.s(9) + umod.o runtime/umod.s(8) + udiv.o runtime/udiv.s(8) +ptr1 (zeropage.o): + ungetc.o common/ungetc.s(11) + strlower.o common/strlower.s(14) + setjmp.o common/setjmp.s(8) + rwcommon.o /home/bill/opt/cc65/cc65/asminc/zeropage.inc(12) + read.o /home/bill/opt/cc65/cc65/asminc/zeropage.inc(12) + mulax10.o runtime/mulax10.s(9) + ltoa.o common/ltoa.s(11) + longjmp.o common/longjmp.s(9) + lmul.o runtime/lmul.s(9) + fwrite.o common/fwrite.s(14) + fmisc.o common/fmisc.s(9) + _scanf.o ../libwrk/apple2enh/_scanf.s(11) + _printf.o /home/bill/opt/cc65/cc65/asminc/zeropage.inc(12) + zerobss.o common/zerobss.s(9) + write.o /home/bill/opt/cc65/cc65/asminc/zeropage.inc(12) + vfprintf.o common/vfprintf.s(11) + umod.o runtime/umod.s(9) + udiv.o runtime/udiv.s(9) + strlen.o common/strlen.s(8) + staspidx.o runtime/staspidx.s(9) + scanf.o common/scanf.s(11) + puts.o ../libwrk/apple2enh/puts.s(11) + printf.o common/printf.s(9) + ldaxi.o runtime/ldaxi.s(8) + thclock.o thclock.s(11) +ptr2 (zeropage.o): + strlower.o common/strlower.s(14) + rwcommon.o /home/bill/opt/cc65/cc65/asminc/zeropage.inc(12) + read.o /home/bill/opt/cc65/cc65/asminc/zeropage.inc(12) + ltoa.o common/ltoa.s(11) + longjmp.o common/longjmp.s(9) + _printf.o /home/bill/opt/cc65/cc65/asminc/zeropage.inc(12) + write.o /home/bill/opt/cc65/cc65/asminc/zeropage.inc(12) +ptr3 (zeropage.o): + read.o /home/bill/opt/cc65/cc65/asminc/zeropage.inc(12) + ltoa.o common/ltoa.s(11) + lmul.o runtime/lmul.s(9) + vfscanf.o /home/bill/opt/cc65/cc65/asminc/zeropage.inc(12) +ptr4 (zeropage.o): + mul8.o runtime/mul8.s(10) + mul.o runtime/mul.s(10) + lmul.o runtime/lmul.s(9) + umod.o runtime/umod.s(9) + udiv.o runtime/udiv.s(9) +push1 (push1.o): + _printf.o common/_printf.s(11) + vfprintf.o common/vfprintf.s(9) +pusha (pusha.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + thclock.o thclock.s(459) +pusha0 (pushax.o): + push1.o runtime/push1.s(8) + fgetc.o ../libwrk/apple2enh/fgetc.s(94) + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + puts.o ../libwrk/apple2enh/puts.s(78) + thclock.o thclock.s(459) +pushax (pushax.o): + fwrite.o common/fwrite.s(11) + fgetc.o ../libwrk/apple2enh/fgetc.s(94) + callmain.o runtime/callmain.s(11) + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + _printf.o common/_printf.s(11) + scanf.o common/scanf.s(10) + puts.o ../libwrk/apple2enh/puts.s(78) + printf.o common/printf.s(8) + thclock.o thclock.s(459) + thclock.o thclock.s(459) + thclock.o thclock.s(459) + thclock.o thclock.s(459) + thclock.o thclock.s(459) + alarmclock.o alarmclock.s(432) +pusheax (lpush.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) + _printf.o common/_printf.s(11) +pushwysp (pushwsp.o): + fwrite.o common/fwrite.s(11) + vfprintf.o common/vfprintf.s(9) + puts.o ../libwrk/apple2enh/puts.s(78) + thclock.o thclock.s(459) + thclock.o thclock.s(459) +regbank (zeropage.o): + regswap2.o runtime/regswap2.s(8) + fgetc.o ../libwrk/apple2enh/fgetc.s(10) + _scanf.o ../libwrk/apple2enh/_scanf.s(10) + _printf.o /home/bill/opt/cc65/cc65/asminc/zeropage.inc(14) +regsave (zeropage.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(10) +regswap2 (regswap2.o): + fgetc.o ../libwrk/apple2enh/fgetc.s(94) +return0 (return0.o): + fmisc.o common/fmisc.s(8) +rwcommon (rwcommon.o): + read.o apple2/read.s(9) + write.o apple2/write.s(8) +rwepilog (rwcommon.o): + write.o apple2/write.s(8) +rwprolog (rwcommon.o): + read.o apple2/read.s(9) + write.o apple2/write.s(8) +sp (zeropage.o): + sub.o runtime/sub.s(9) + setjmp.o common/setjmp.s(8) + regswap2.o runtime/regswap2.s(8) + popsreg.o runtime/popsreg.s(9) + lpush.o runtime/lpush.s(12) + longjmp.o common/longjmp.s(9) + lmul.o runtime/lmul.s(9) + ladd.o runtime/ladd.s(9) + icmp.o runtime/icmp.s(9) + fgetc.o ../libwrk/apple2enh/fgetc.s(10) + _scanf.o ../libwrk/apple2enh/_scanf.s(10) + _printf.o /home/bill/opt/cc65/cc65/asminc/zeropage.inc(11) + vfscanf.o /home/bill/opt/cc65/cc65/asminc/zeropage.inc(11) + vfprintf.o common/vfprintf.s(11) + staxsp.o runtime/staxsp.s(8) + staspidx.o runtime/staspidx.s(9) + scanf.o common/scanf.s(11) + pushwsp.o runtime/pushwsp.s(8) + pushax.o runtime/pushax.s(8) + pusha.o runtime/pusha.s(8) + printf.o common/printf.s(9) + leaaxsp.o runtime/leaaxsp.s(8) + ldaxsp.o runtime/ldaxsp.s(8) + incsp2.o runtime/incsp2.s(8) + incsp1.o runtime/incsp1.s(8) + decsp6.o runtime/decsp6.s(8) + decsp4.o runtime/decsp4.s(8) + decsp3.o runtime/decsp3.s(8) + decsp1.o runtime/decsp1.s(8) + crt0.o /home/bill/opt/cc65/cc65/asminc/zeropage.inc(11) + addysp.o runtime/addysp.s(8) + addeqsp.o runtime/addeqsp.s(8) + thclock.o thclock.s(10) + alarmclock.o alarmclock.s(10) +sreg (zeropage.o): + popsreg.o runtime/popsreg.s(9) + mul8.o runtime/mul8.s(10) + mul.o runtime/mul.s(10) + ltoa.o common/ltoa.s(11) + lpush.o runtime/lpush.s(12) + lneg.o runtime/lneg.s(11) + lmul.o runtime/lmul.s(9) + ladd.o runtime/ladd.s(9) + icmp.o runtime/icmp.s(9) + axlong.o runtime/axlong.s(8) + along.o runtime/along.s(8) + _scanf.o ../libwrk/apple2enh/_scanf.s(10) + _printf.o /home/bill/opt/cc65/cc65/asminc/zeropage.inc(11) + udiv.o runtime/udiv.s(9) +staspidx (staspidx.o): + thclock.o thclock.s(459) +stax0sp (staxsp.o): + thclock.o thclock.s(459) + alarmclock.o alarmclock.s(432) +staxysp (staxsp.o): + thclock.o thclock.s(459) + alarmclock.o alarmclock.s(432) +tmp1 (zeropage.o): + ungetc.o common/ungetc.s(11) + mul.o runtime/mul.s(10) + ltoa.o common/ltoa.s(11) + ladd.o runtime/ladd.s(9) + decaxy.o runtime/decaxy.s(8) + _printf.o /home/bill/opt/cc65/cc65/asminc/zeropage.inc(13) + staspidx.o runtime/staspidx.s(9) +tmp2 (zeropage.o): + lmul.o runtime/lmul.s(9) +tmp3 (zeropage.o): + lmul.o runtime/lmul.s(9) +tmp4 (zeropage.o): + lmul.o runtime/lmul.s(9) +tosaddeax (ladd.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) +tosicmp0 (icmp.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) +tosmuleax (lmul.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) +tossuba0 (sub.o): + _scanf.o ../libwrk/apple2enh/_scanf.s(1058) +tosudiva0 (udiv.o): + thclock.o thclock.s(459) +tosudivax (udiv.o): + fwrite.o common/fwrite.s(12) +tosumoda0 (umod.o): + thclock.o thclock.s(459) +tosumulax (mul.o): + fwrite.o common/fwrite.s(12) +udiv16 (udiv.o): + umod.o runtime/umod.s(8) +zerobss (zerobss.o): + crt0.o apple2/crt0.s(9) + diff --git a/.noslotclock.c.swp b/.noslotclock.c.swp new file mode 100644 index 0000000..12c69f8 Binary files /dev/null and b/.noslotclock.c.swp differ diff --git a/.swp b/.swp new file mode 100644 index 0000000..f8a8fea Binary files /dev/null and b/.swp differ diff --git a/.trace.c.swp b/.trace.c.swp new file mode 100644 index 0000000..4edc6f8 Binary files /dev/null and b/.trace.c.swp differ diff --git a/12hourclk.c b/12hourclk.c deleted file mode 100644 index 0419e62..0000000 --- a/12hourclk.c +++ /dev/null @@ -1,160 +0,0 @@ -#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) { - return "am"; - } - else { - return "pm"; - } -} - -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]; - - printf("Hour:"); - scanf("%2ui", &(clock->hours)); - printf("Minute:"); - scanf("%2ui", &(clock->minutes)); - printf("AM or PM:"); - scanf("%2s", meridiem_input); - clock->seconds = 0; - if (toupper(meridiem_input[0]) == 'A') { - clock->meridiem = ANTE_MERIDIEM; - } - else { - clock->meridiem = POST_MERIDIEM; - } -} - -void add_one_second(twleve_hour_clock_t *clock) -{ - if (clock->seconds < 59) { - ++(clock->seconds); - } - else { - clock->seconds = 0; - if (clock->minutes < 59) { - ++(clock->minutes); - } - else { - clock->minutes = 0; - if (clock->hours < 11) { - ++(clock->hours); - } - else if (clock->hours == 11) { - ++(clock->hours); - if (clock->meridiem == ANTE_MERIDIEM) { - clock->meridiem = POST_MERIDIEM; - } - else { - clock->meridiem = ANTE_MERIDIEM; - } - } - else { - clock->hours = 1; - } - } - } -} - -void add_seconds(twleve_hour_clock_t *clock, uint8_t seconds) -{ - uint16_t sum; - uint16_t minutes_carry; - uint16_t hours_carry; - - sum = ((uint16_t) clock->seconds) + ((uint16_t) seconds); - if (sum >= 60) { - minutes_carry = sum / 60; - clock->seconds = sum % 60; - - sum = ((uint16_t) clock->minutes) + minutes_carry; - if (sum >= 60) { - hours_carry = sum / 60; - clock->minutes = sum % 60; - - sum = ((uint16_t) clock->hours) + hours_carry; - if (sum >= 12) { - } - } - else { - clock->minutes = sum; - } - } - else { - clock->seconds = sum; - } -} - -void print_time(twleve_hour_clock_t *clock) -{ - printf("%2u:%02u:%02u %2s", clock->hours, clock->minutes, clock->seconds, meridiem_text(clock->meridiem)); -} - -void reprint_time(twleve_hour_clock_t *clock) -{ - printf("\b\b\b\b\b\b\b\b\b\b\b"); - print_time(clock); -} - diff --git a/12hourclk.h b/12hourclk.h deleted file mode 100644 index ae35e32..0000000 --- a/12hourclk.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef TWELVE_HOUR_CLOCK_H -#define TWELVE_HOUR_CLOCK_H - -#include /* uint8_t */ - -typedef enum { - ANTE_MERIDIEM, POST_MERIDIEM -} meridiem_t; - -typedef struct { - uint8_t hours; - uint8_t minutes; - uint8_t seconds; - meridiem_t meridiem; -} 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); -extern void reprint_time(twleve_hour_clock_t *clock); - -#endif - diff --git a/alarmclk.dsk b/ALARM.CLOCK.dsk similarity index 84% rename from alarmclk.dsk rename to ALARM.CLOCK.dsk index de3662d..c20606b 100644 Binary files a/alarmclk.dsk and b/ALARM.CLOCK.dsk differ diff --git a/ALARMCLK.dsk b/ALARMCLK.dsk deleted file mode 100644 index ad55f14..0000000 Binary files a/ALARMCLK.dsk and /dev/null differ diff --git a/Makefile b/Makefile index a5f92d8..08abd15 100644 --- a/Makefile +++ b/Makefile @@ -10,8 +10,8 @@ ifndef CC65_TARGET CC65_TARGET:=apple2enh endif -PGM=alarmclk -OBJS=alarmclk.o 12hourclk.o clkfreq.o +PGM=alarm.clock +OBJS=alarm.clock.o time.o noslotclock.o prodos.o trace.o PGM2=calibrate OBJS2=calibrate.o @@ -20,11 +20,11 @@ CC=cl65 AS=ca65 LD=ld65 -CFLAGS=-t $(CC65_TARGET) -O +CFLAGS=-t $(CC65_TARGET) -O -DTRACE ASFLAGS=-t $(CC65_TARGET) LDFLAGS=-t $(CC65_TARGET) -DISK_VOL=alarmclk +DISK_VOL=ALARM.CLOCK DISK=$(DISK_VOL).dsk AC=java -jar lib/AppleCommander-1.3.5.14.jar @@ -32,19 +32,17 @@ MKDISK=$(AC) -pro140 $(DISK) $(DISK_VOL) ######################################## -all: $(DISK) - -$(DISK): $(PGM) $(PGM2) - $(AC) -d $(DISK) $< - $(AC) -cc65 $(DISK) $< BIN < $< - $(AC) -d $(DISK) $(PGM2) - $(AC) -cc65 $(DISK) $(PGM2) BIN < $(PGM2) +all: $(PGM) $(PGM2) $(PGM): $(OBJS) $(CC) $(LDFLAGS) -o $@ $^ + $(AC) -d $(DISK) $@ + $(AC) -cc65 $(DISK) $@ BIN < $@ $(PGM2): $(OBJS2) $(CC) $(LDFLAGS) -o $@ $^ + $(AC) -d $(DISK) $@ + $(AC) -cc65 $(DISK) $@ BIN < $@ # Compile and assemble rules use the defuault rules after CC and CFLAGS # are set. diff --git a/alarmclk.c b/alarm.clock.c similarity index 83% rename from alarmclk.c rename to alarm.clock.c index cea6020..bd636a8 100644 --- a/alarmclk.c +++ b/alarm.clock.c @@ -3,67 +3,64 @@ #include /* true */ #include /* toupper */ #include /* clrscr, kbhit */ +#include /* time_t, struct tm */ -#include "12hourclk.h" -extern void ClockFreq(); -extern uint8_t Ticks[4]; +#include "noslotclock.h" +#include "time.h" +#include "trace.h" #define CLOCK_FREQUENCY 1023000L #define CYCLES_PER_NOOP 2 #define NOOPS_PER_SEC 511500 #define CTRL_C '\x03' #define ESC '\x1B' +#define FMTD_TIME_SIZE 16 void read_inputs(void); -void elapse_one_second(void); +void sleep_one_second(void); +void do_nothing_for_one_second(void); void run_clock(void); -static twleve_hour_clock_t curr_time; -static twleve_hour_clock_t alarm_time; +static struct tm G_Current_Time; +static struct tm G_Alarm_Time; void main(void) { - 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); + TRACE_ENTER("main"); + load_driver(); clrscr(); read_inputs(); clrscr(); printf("\nAlarm Time: "); - print_time(&alarm_time); + print_12_hour_time(&G_Alarm_Time); + printf("\nCurrent Time: "); run_clock(); + + TRACE_EXIT("main"); } void read_inputs() { - if (! load_system_time(&curr_time)) { - puts("Current Time"); - read_interactively(&curr_time); - } + TRACE_ENTER("read_inputs"); + read_time(&G_Current_Time); puts("Alarm Time"); - read_interactively(&alarm_time); + read_time_interactively(&G_Alarm_Time); + TRACE_EXIT("read_inputs"); } void run_clock() { char c; - print_time(&curr_time); + TRACE_ENTER("run_clock"); + print_12_hour_time(&G_Current_Time); while (true) { - elapse_one_second(); - add_one_second(&curr_time); - reprint_time(&curr_time); + sleep_one_second(); + reprint_12_hour_time(&G_Current_Time); if (kbhit()) { c = cgetc(); if (c == ESC || toupper(c) == 'Q' || c == CTRL_C) { @@ -72,16 +69,35 @@ void run_clock() } } } + TRACE_EXIT("run_clock"); } -void elapse_one_second() +/** + * Waits for one second. Modifies the global G_Current_Time. + */ +void sleep_one_second() { - int i; + time_t old_time; + + TRACE_ENTER("sleep_one_second"); + old_time = mktime(read_time(&G_Current_Time)); + + while (mktime(read_time(&G_Current_Time)) <= old_time) { + do_nothing_for_one_second(); + } + TRACE_EXIT("sleep_one_second"); +} + +void do_nothing_for_one_second() +{ + int i = 0; int max_loops; + TRACE_ENTER("do_nothing_for_one_second"); max_loops = NOOPS_PER_SEC / 250; - for (i = 0; i < max_loops; ++i) { + for ( ; i < max_loops; ++i) { + asm("nop"); asm("nop"); asm("nop"); @@ -333,5 +349,6 @@ void elapse_one_second() asm("nop"); asm("nop"); } + TRACE_EXIT("do_nothing_for_one_second"); } diff --git a/alarmclk.s b/alarmclk.s deleted file mode 100644 index 992ca52..0000000 --- a/alarmclk.s +++ /dev/null @@ -1,515 +0,0 @@ -; -; File generated by cc65 v 2.15 - Git 6f24c07 -; - .fopt compiler,"cc65 v 2.15 - Git 6f24c07" - .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 _printf - .import _puts - .import _toupper - .import _clrscr - .import _kbhit - .import _cgetc - .import _read_interactively - .import _load_system_time - .import _add_one_second - .import _print_time - .import _reprint_time - .import _ClockFreq - .import _Ticks - .export _read_inputs - .export _elapse_one_second - .export _run_clock - .export _main - -.segment "RODATA" - -L0009: - .byte $25,$63,$25,$63,$2E,$25,$63,$25,$63,$25,$63,$25,$63,$25,$63,$25 - .byte $63,$20,$4D,$48,$7A,$0A,$00 -L001F: - .byte $0A,$41,$6C,$61,$72,$6D,$20,$54,$69,$6D,$65,$3A,$20,$20,$20,$00 -L0024: - .byte $0A,$43,$75,$72,$72,$65,$6E,$74,$20,$54,$69,$6D,$65,$3A,$20,$00 -L002C: - .byte $43,$75,$72,$72,$65,$6E,$74,$20,$54,$69,$6D,$65,$00 -L0031: - .byte $41,$6C,$61,$72,$6D,$20,$54,$69,$6D,$65,$00 -L004B := L0009+22 - -.segment "BSS" - -_curr_time: - .res 5,$00 -_alarm_time: - .res 5,$00 - -; --------------------------------------------------------------- -; void __near__ read_inputs (void) -; --------------------------------------------------------------- - -.segment "CODE" - -.proc _read_inputs: near - -.segment "CODE" - - lda #<(_curr_time) - ldx #>(_curr_time) - 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/ascii.h b/ascii.h new file mode 100644 index 0000000..99ce9ca --- /dev/null +++ b/ascii.h @@ -0,0 +1,17 @@ +#ifndef ASCII_CODES_H +#define ASCII_CODES_H + +#define NULLCHAR '\x00' +#define STARTHDR '\x01' +#define STARTTXT '\x02' +#define ENDTXT '\x03' +#define ENDTRANS '\x04' +#define ENQUIRY '\x05' +#define ACK '\x06' +#define BELL '\x07' +#define ESCAPE '\x1b' +#define BACKSPC '\x08' +#define DELETE '\x7f' + +#endif + diff --git a/calcClkfreq.c b/calcClkfreq.c deleted file mode 100644 index b637092..0000000 --- a/calcClkfreq.c +++ /dev/null @@ -1,9 +0,0 @@ -/* This file is only here to make clkfreq.s load successfully. */ - -#include "clkfreq.h" - -void main() -{ - clkfreq(); -} - diff --git a/clkfreq b/clkfreq deleted file mode 100644 index 36ea607..0000000 Binary files a/clkfreq and /dev/null differ diff --git a/clkfreq.h b/clkfreq.h deleted file mode 100644 index 70c3545..0000000 --- a/clkfreq.h +++ /dev/null @@ -1,10 +0,0 @@ -#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 deleted file mode 100644 index a41a8ae..0000000 --- a/clkfreq.s +++ /dev/null @@ -1,218 +0,0 @@ - .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 - -vcNMI = $FFFA - -Refresh = 450 ; NMI rate in Hz - -.segment "CODE" - -.proc _ClockFreq: near - -.segment "CODE" - - ldx #NMI - stx vcNMI - sty vcNMI+1 - lda #$40 ; on start NMI is off - sta InUse - -Again: - lda #0 - sta Flag - 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 - sta Timer+1 - lda InUse ; turn on NMI - and #$BF - sta rgConfig - sta InUse - -L1: bit Flag ; waiting for zeropoint minus 1 tick - bpl L1 - lda #0 - sta Flag - -L2: bit Flag ; waiting for true zeropoint - bpl L2 - lda #0 - sta Flag - -Main: ; main counting cycle -;number of ticks per command sum of ticks -; v v - lda _Ticks ;4 - clc ;2 6 - sed ;2 8 - adc #$53 ;2 10 - sta _Ticks ;4 14 - lda _Ticks+1 ;4 18 - adc #0 ;2 20 - sta _Ticks+1 ;4 24 - lda _Ticks+2 ;4 28 - adc #0 ;2 30 - sta _Ticks+2 ;4 34 - lda _Ticks+3 ;4 38 - adc #0 ;2 40 - 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 - clc ;2 12 - sed ;2 14 - adc #$95 ;2 16 - sta _Ticks ;4 20 - lda _Ticks+1 ;4 24 - adc #0 ;2 26 - sta _Ticks+1 ;4 30 - lda _Ticks+2 ;4 34 - adc #0 ;2 36 - sta _Ticks+2 ;4 40 - lda _Ticks+3 ;4 44 - adc #0 ;2 46 - sta _Ticks+3 ;4 50 - cld ;2 52 - lda Timer ;4 56 - cmp #Refresh ; 2 - bne Main ; 3 - - lda InUse ; turn off NMI - ora #$40 - sta rgConfig - sta InUse - -; Output - - ldx #0 ; send first string to the host -L3: lda Mes1,x - beq L4 - jsr PutChar - inx - jmp L3 - -L4: lda _Ticks+3 - pha - lsr - lsr - lsr - lsr - beq L5 ; delete non-significant zero (clock < 10MHz) - jsr PrintDigit -L5: pla - and #15 - jsr PrintDigit - lda #'.' ; decimal point - jsr PutChar - lda _Ticks+2 - jsr PrintTwoDigits - lda _Ticks+1 - jsr PrintTwoDigits - lda _Ticks - jsr PrintTwoDigits - - ldx #0 ; send second string to the host -L6: lda Mes2,x - beq L7 - jsr PutChar - inx - jmp L6 -L7: - rts - -.endproc - -PrintTwoDigits: - pha - lsr - lsr - lsr - lsr - jsr PrintDigit - pla - and #15 - jsr PrintDigit - rts - -PrintDigit: - ora #$30 - jsr PutChar - rts - -PutChar: -; The character should be in the Accumulator - ldx #$00 - jsr pushax - lda _stdout - ldx _stdout+1 - jsr _fputc - rts - -Send: - bit rgStatus - bvc Send - sta rgTxD - rts - -.segment "RODATA" - -Mes1: - .byte 13 - .byte "Current clock frequency is " - .byte 0 - -Mes2: - .byte " MHz" - .byte 0 - -.segment "DATA" - -_Ticks: .res 4,0 ; uint8_t _Ticks[4] -Timer: .res 2,0 ; uint16_t Timer -InUse: .byte 0 ; uint8_t InUse -Flag: .byte 0 ; uint8_t Flag - -.segment "CODE" - -; Called when an non-maskable interrupt occurs. -; 1. Increments Timer -; 2. Sets the high bit in Flag to 1 -; -NMI: ;6 - pha ;3 9 - inc Timer ;6 15 - bne L8 ;3 18 - inc Timer+1 ; 5 -L8: lda #$80 ;2 20 - sta Flag ;4 24 - pla ;4 28 - rti ;6 34 - diff --git a/noslotclock.c b/noslotclock.c new file mode 100644 index 0000000..e14f9f4 --- /dev/null +++ b/noslotclock.c @@ -0,0 +1,87 @@ +#include /* fprintf, stderr */ +#include /* bool, true, false */ +#include /* uint8_t */ +#include /* struct tm */ + +#include "noslotclock.h" +#include "prodos.h" +#include "trace.h" + +#define NSC_STRING_RESULT_ADDR 0x0280 /* String result, Ends at 0x0291 */ +#define NSC_STRING_RESULT_LEN 12 /* The length of the above result */ +#define NSC_UPDATE_SUB_ADDR 0x030B /* Start address of update subroutine */ + +typedef struct { + uint8_t year; /* 0..99 */ + uint8_t month; /* 1..12 */ + uint8_t day_of_month; /* 1..31 */ + uint8_t day_of_week; /* 1..7 */ + uint8_t hour; /* 0..23 */ + uint8_t min; /* 0..59 */ + uint8_t sec; /* 0..59 */ + uint8_t hundredths_of_sec; /* 0..99 */ +} no_slot_clock_time_t; + +static const no_slot_clock_time_t *nsc = (no_slot_clock_time_t *) 0x0303; +static const char *nsc_absent_addr = (char *) 0x0304; + +static bool is_nsc_absent(void); +static void read_time_from_nsc(void); + +static void read_time_from_nsc() +{ + TRACE_ENTER("read_time_from_nsc"); + asm("jsr %w", NSC_UPDATE_SUB_ADDR); + TRACE_EXIT("read_time_from_nsc"); +} + +/** + * load_driver must be called first. + */ +static bool is_nsc_absent() +{ + TRACE_ENTER("is_nsc_absent"); + read_time_from_nsc(); + TRACE_EXIT("is_nsc_absent"); + return nsc_absent_addr[0] == NULL; +} + +bool load_driver() +{ + bool status = false; + + TRACE_ENTER("load_driver"); + if (run_basic_system_command("BLOAD READ.TIME")) { + + /* Check for a missing NSC. */ + if (! is_nsc_absent()) { + fprintf(stderr, "The No-Slot Clock hardware is missing"); + status = true; + } + } + TRACE_RET_BOOL("load_driver", status); + return status; +} + +/** + * The setup function must be called first. + */ +struct tm *read_time(struct tm *t) +{ + /* Reload the current time from the No-Slot Clock into memory. */ + read_time_from_nsc(); + + /* Transfer loaded values into a standard C struct tm. */ + t->tm_sec = nsc->sec; + t->tm_min = nsc->min; + t->tm_hour = nsc->hour; + t->tm_mday = nsc->day_of_month; + t->tm_mon = nsc->month - 1; + t->tm_year = nsc->year + 100; + t->tm_wday = nsc->day_of_week == 7 ? 0 : nsc->day_of_week; + t->tm_yday = 0; + t->tm_isdst = 0; + return t; +} + + diff --git a/noslotclock.h b/noslotclock.h new file mode 100644 index 0000000..e1b97d2 --- /dev/null +++ b/noslotclock.h @@ -0,0 +1,10 @@ +#ifndef NOSLOTCLOCK_H +#define NOSLOTCLOCK_H + +#include + +extern bool load_driver(void); +extern struct tm *read_time(struct tm *t); + +#endif + diff --git a/old/old-time.c b/old/old-time.c new file mode 100644 index 0000000..e4f4e6c --- /dev/null +++ b/old/old-time.c @@ -0,0 +1,176 @@ +#include /* printf, scanf */ +#include /* bool */ +#include /* strerror */ +#include /* time_t, time, localtime */ +#include /* toupper */ +#include /* errno */ +#include /* atoi */ + +#include "time.h" + +#define TIME_ERR_RESULT ((time_t) -1) +#define LOCALTIME_ERR_RESULT NULL +#define ERR_MSG_SIZE 128 + +static const char *AM="AM"; +static const char *PM="PM"; + +static char *to_upper_case(char *s); +static void set_err_msg(char *prefix, int errno); +static void copy_struct_tm(struct tm *dest, struct tm *src); +static const char *convert_24_hour_to_meridiem(uint8_t hours); +static uint8_t convert_12_hour_to_24_hour(uint8_t twelve_hour, char *meridiem); +static void convert_24_hour_to_12_hour(uint8_t twenty_four_hour, uint8_t *twelve_hour, char const **meridiem); + +static char G_err_msg[ERR_MSG_SIZE]; + +void copy_struct_tm(struct tm *dest, struct tm *src) +{ + dest->tm_sec = src->tm_sec; + dest->tm_min = src->tm_sec; + dest->tm_hour = src->tm_hour; + dest->tm_mday = src->tm_mday; + dest->tm_mon = src->tm_mon; + dest->tm_year = src->tm_year; + dest->tm_wday = src->tm_wday; + dest->tm_yday = src->tm_wday; + dest->tm_isdst = src->tm_isdst; +} + +static const char *convert_24_hour_to_meridiem(uint8_t hours) +{ + if (hours < 12) { + return AM; + } + else { + return PM; + } +} + +static uint8_t convert_12_hour_to_24_hour(uint8_t twelve_hour, char *meridiem) +{ + uint8_t twenty_four_hour; + + /* Default */ + twenty_four_hour = twelve_hour; + + /* Special cases */ + if (strcmp(meridiem, AM) == 0) { + if (twelve_hour == 12) { + twenty_four_hour = 0; + } + } + else if (twelve_hour < 12) { + twenty_four_hour = twelve_hour + 12; + } + return twenty_four_hour; +} + +void convert_24_hour_to_12_hour(uint8_t twenty_four_hour, uint8_t *twelve_hour, char const **meridiem) +{ + if (twenty_four_hour == 0) { + *twelve_hour = 12; + } + else if (twenty_four_hour < 12) { + *meridiem = AM; + } + else if (twenty_four_hour == 12) { + *meridiem = PM; + } + else { + *twelve_hour = twenty_four_hour - 12; + *meridiem = PM; + } +} + +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(struct tm *t) +{ + time_t now; + struct tm *now_breakdown; + bool success = false; + + if (time(&now) != TIME_ERR_RESULT) { + if ((now_breakdown = localtime(&now)) != LOCALTIME_ERR_RESULT) { + copy_struct_tm(t, now_breakdown); + success = true; + } + else { + perror("Localtime failed"); + } + } + else { + perror("Time function failed"); + } + return success; +} + +char *to_upper_case(char *s) +{ + size_t i; + + for (i = 0; s[i] != '\0'; ++i) { + s[i] = toupper(s[i]); + } + return s; +} + +void read_time_interactively(struct tm *t) +{ + char line[4]; + int8_t hour; + int8_t min; + + printf("Hour:"); + hour = atoi(fgets(line, sizeof(line), stdin)); + printf("Minute:"); + min = atoi(fgets(line, sizeof(line), stdin)); + printf("AM or PM:"); + fgets(line, sizeof(line), stdin); + + t->tm_hour = convert_12_hour_to_24_hour(hour, line); + t->tm_min = min; + t->tm_sec = 0; +} + +void add_one_second(struct tm *t) +{ + if (t->tm_sec < 59) { + ++(t->tm_sec); + } + else { + t->tm_sec = 0; + if (t->tm_min < 59) { + ++(t->tm_min); + } + else { + t->tm_min = 0; + if (t->tm_hour < 23) { + ++(t->tm_hour); + } + else { + t->tm_hour = 0; + } + } + } +} + +void print_12_hour_time(struct tm *t) +{ + uint8_t hour; + const char *meridiem; + + convert_24_hour_to_12_hour(t->tm_hour, &hour, &meridiem); + printf("%2hu:%02d:%02d %2s", hour, t->tm_min, t->tm_sec, meridiem); +} + +void reprint_12_hour_time(struct tm *t) +{ + printf("\b\b\b\b\b\b\b\b\b\b\b"); + print_12_hour_time(t); +} + diff --git a/old/old-time.h b/old/old-time.h new file mode 100644 index 0000000..c23f1f4 --- /dev/null +++ b/old/old-time.h @@ -0,0 +1,27 @@ +#ifndef TWELVE_HOUR_CLOCK_H +#define TWELVE_HOUR_CLOCK_H + +#include /* uint8_t */ + +typedef enum meridiem { + ANTE_MERIDIEM, POST_MERIDIEM +} meridiem; + +typedef struct { + /* Bit fields */ + unsigned int seconds : 5; /* Stores 0..31, need 0..59 */ + unsigned int minutes : 6; /* Stores 0..63, need 0..59 */ + unsigned int hours : 6; /* Stores 0..31, need 0..23 */ + unsigned int day : 5; /* Stores 0..31, need 1..31 */ + unsigned int month : 4; /* Stores 0..16, need 1..12 */ + unsigned int year : 7; /* Stores 0..127, need 0..99 */ +} unused_clock; + +extern void read_time_interactively(struct tm *t); +extern bool load_system_time(struct tm *t); +extern void add_one_second(struct tm *t); +extern void print_12_hour_time(struct tm *t); +extern void reprint_12_hour_time(struct tm *t); + +#endif + diff --git a/old/old_funcs.c b/old/old_funcs.c new file mode 100644 index 0000000..714ecec --- /dev/null +++ b/old/old_funcs.c @@ -0,0 +1,92 @@ + +void add_one_second(clock *clock) +{ + if (clock->seconds < 59) { + ++(clock->seconds); + } + else { + clock->seconds = 0; + if (clock->minutes < 59) { + ++(clock->minutes); + } + else { + clock->minutes = 0; + if (clock->hours < 11) { + ++(clock->hours); + } + else if (clock->hours == 11) { + ++(clock->hours); + if (clock->meridiem == ANTE_MERIDIEM) { + clock->meridiem = POST_MERIDIEM; + } + else { + clock->meridiem = ANTE_MERIDIEM; + } + } + else { + clock->hours = 1; + } + } + } +} + + +/** + * Doesn't work for all cases, but is not needed right now. + */ +void add_seconds(clock *clock, uint8_t seconds) +{ + uint16_t sum; + uint16_t minutes_carry; + uint16_t hours_carry; + + sum = ((uint16_t) clock->seconds) + ((uint16_t) seconds); + if (sum >= 60) { + minutes_carry = sum / 60; + clock->seconds = sum % 60; + + sum = ((uint16_t) clock->minutes) + minutes_carry; + if (sum >= 60) { + hours_carry = sum / 60; + clock->minutes = sum % 60; + + sum = ((uint16_t) clock->hours) + hours_carry; + if (sum >= 12) { + } + } + else { + clock->minutes = sum; + } + } + else { + clock->seconds = sum; + } +} + +void old_print(clock *clock) +{ + printf("%2u:%02u:%02u %2s", clock->hours, clock->minutes, clock->seconds, convert_24_hour_to_meridiem(clock->hours)); +} + +void add_one_second(struct tm *t) +{ + if (t->tm_sec < 59) { + ++(t->tm_sec); + } + else { + t->tm_sec = 0; + if (t->tm_min < 59) { + ++(t->tm_min); + } + else { + t->tm_min = 0; + if (t->tm_hour < 23) { + ++(t->tm_hour); + } + else { + t->tm_hour = 0; + } + } + } +} + diff --git a/printf.s b/printf.s deleted file mode 100644 index 0f3526c..0000000 --- a/printf.s +++ /dev/null @@ -1,37 +0,0 @@ -; -; File generated by cc65 v 2.15 - Git 6f24c07 -; - .fopt compiler,"cc65 v 2.15 - Git 6f24c07" - .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 _stdout - .import _fputc - .export _main - -; --------------------------------------------------------------- -; void __near__ main (void) -; --------------------------------------------------------------- - -.segment "CODE" - -.proc _main: near - -.segment "CODE" - - ldx #$00 - lda #$41 - jsr pushax - lda _stdout - ldx _stdout+1 - jsr _fputc - rts - -.endproc - diff --git a/prodos.c b/prodos.c new file mode 100644 index 0000000..9f39237 --- /dev/null +++ b/prodos.c @@ -0,0 +1,50 @@ +#include /* size_t */ + +#include "prodos.h" +#include "symbols.h" +#include "trace.h" + +/* +char *turn_on_high_bits(char *s) +{ + size_t i = 0; + + for ( ; s[i] != '\0'; ++i) { + s[i] |= '\x80'; + } + return s; +} +*/ + +bool run_basic_system_command(const char *command) +{ + size_t i = 0; + bool finished_successfully = false; + + TRACE_ENTER_STR("run_basic_system_command", (char *) command); + for ( ; command[i] != '\0'; ++i) { + /* Set the high bit and copy into the input buffer. */ + INPBUF[i] = command[i] | '\x80'; + } + /* Append carriage return with high bit set. */ + INPBUF[i] = '\x8d'; + TRACE_MSG("About to JSR DOSCMD"); + asm("JSR %w", DOSCMD); /* %w is for a "word" value. */ + asm("BIT %w", KBDSTRB); /* Clear strobe. */ + + /* If the command failed, the carry flag is set and register A has the + error code. */ + asm("BCS %g", doscmd_error_handler); + finished_successfully = true; + goto finished; + + doscmd_error_handler: + TRACE_MSG("About to JSR PRERR"); + asm("JSR %w", PRERR); /* Prints the error. */ + asm("CLC"); /* Required or bad stuff happens. */ + + finished: + TRACE_RET_BOOL("run_basic_system_command", finished_successfully); + return finished_successfully; +} + diff --git a/prodos.h b/prodos.h new file mode 100644 index 0000000..45ced67 --- /dev/null +++ b/prodos.h @@ -0,0 +1,32 @@ +#ifndef PRODOS_H +#define PRODOS_H + +#include /* bool */ + +/* C99 specifies that char can be either signed or unsigned. In cc65 it is + unsigned. This can be tested by checking if CHAR_MIN is either negative + or zero. + + With cc65 an 8-bit byte is represented by a char. The 6502 is byte- + addressable, so a memory address is represented by a char pointer + (char *) which is a 16-bit value. */ + +#define INPBUF ((char *) 0x0200) +#define DOSCMD 0xBE03 +/* #define PRERR 0xBE0C */ +#define PRERR 0xFF2D +#define COUT 0xFDED + +#define KBD ((char *) 0xC000) +#define KBDSTRB 0xC010 +#define VECTOUT ((char **) 0xbe30) +#define VECTIN ((char **) 0xbe32) + +#define KBDSTRB_ON() (*KBDSTRB & '\x80') +#define SET_KBDSTRB() *KBDSTRB |= '\x80' +#define CLR_KBDSTRB() + +extern bool run_basic_system_command(const char *command); + +#endif + diff --git a/putc.c b/putc.c deleted file mode 100644 index 29fbf23..0000000 --- a/putc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -void main(void) -{ - putc('A', stdout); -} diff --git a/putc.s b/putc.s deleted file mode 100644 index 54eae22..0000000 --- a/putc.s +++ /dev/null @@ -1,25 +0,0 @@ - .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 diff --git a/symbols.h b/symbols.h new file mode 100644 index 0000000..a08eedb --- /dev/null +++ b/symbols.h @@ -0,0 +1,6 @@ +#ifndef APPLE2_ADDRESSES_H +#define APPLE2_ADDRESSES_H + + +#endif + diff --git a/time.c b/time.c new file mode 100644 index 0000000..d7091ec --- /dev/null +++ b/time.c @@ -0,0 +1,154 @@ +#include /* printf, scanf */ +#include /* bool */ +#include /* strerror */ +#include /* time_t, time, localtime */ +#include /* toupper */ +#include /* errno */ +#include /* atoi */ + +#include "time.h" + +#define TIME_ERR_RESULT ((time_t) -1) +#define LOCALTIME_ERR_RESULT NULL +#define ERR_MSG_SIZE 128 + +static const char *AM="AM"; +static const char *PM="PM"; + +static char *to_upper_case(char *s); +static void set_err_msg(char *prefix, int errno); +static void copy_struct_tm(struct tm *dest, struct tm *src); +static const char *convert_24_hour_to_meridiem(uint8_t hours); +static uint8_t convert_12_hour_to_24_hour(uint8_t twelve_hour, char *meridiem); +static void convert_24_hour_to_12_hour(uint8_t twenty_four_hour, uint8_t *twelve_hour, char const **meridiem); + +static char G_err_msg[ERR_MSG_SIZE]; + +void copy_struct_tm(struct tm *dest, struct tm *src) +{ + dest->tm_sec = src->tm_sec; + dest->tm_min = src->tm_sec; + dest->tm_hour = src->tm_hour; + dest->tm_mday = src->tm_mday; + dest->tm_mon = src->tm_mon; + dest->tm_year = src->tm_year; + dest->tm_wday = src->tm_wday; + dest->tm_yday = src->tm_wday; + dest->tm_isdst = src->tm_isdst; +} + +static const char *convert_24_hour_to_meridiem(uint8_t hours) +{ + if (hours < 12) { + return AM; + } + else { + return PM; + } +} + +static uint8_t convert_12_hour_to_24_hour(uint8_t twelve_hour, char *meridiem) +{ + uint8_t twenty_four_hour; + + /* Default */ + twenty_four_hour = twelve_hour; + + /* Special cases */ + if (strcmp(meridiem, AM) == 0) { + if (twelve_hour == 12) { + twenty_four_hour = 0; + } + } + else if (twelve_hour < 12) { + twenty_four_hour = twelve_hour + 12; + } + return twenty_four_hour; +} + +void convert_24_hour_to_12_hour(uint8_t twenty_four_hour, uint8_t *twelve_hour, char const **meridiem) +{ + if (twenty_four_hour == 0) { + *twelve_hour = 12; + } + else if (twenty_four_hour < 12) { + *meridiem = AM; + } + else if (twenty_four_hour == 12) { + *meridiem = PM; + } + else { + *twelve_hour = twenty_four_hour - 12; + *meridiem = PM; + } +} + +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(struct tm *t) +{ + time_t now; + struct tm *now_breakdown; + bool success = false; + + if (time(&now) != TIME_ERR_RESULT) { + if ((now_breakdown = localtime(&now)) != LOCALTIME_ERR_RESULT) { + copy_struct_tm(t, now_breakdown); + success = true; + } + else { + perror("Localtime failed"); + } + } + else { + perror("Time function failed"); + } + return success; +} + +char *to_upper_case(char *s) +{ + size_t i; + + for (i = 0; s[i] != '\0'; ++i) { + s[i] = toupper(s[i]); + } + return s; +} + +void read_time_interactively(struct tm *t) +{ + char line[4]; + int8_t hour; + int8_t min; + + printf("Hour:"); + hour = atoi(fgets(line, sizeof(line), stdin)); + printf("Minute:"); + min = atoi(fgets(line, sizeof(line), stdin)); + printf("AM or PM:"); + fgets(line, sizeof(line), stdin); + + t->tm_hour = convert_12_hour_to_24_hour(hour, line); + t->tm_min = min; + t->tm_sec = 0; +} + +void print_12_hour_time(struct tm *t) +{ + uint8_t hour; + const char *meridiem; + + convert_24_hour_to_12_hour(t->tm_hour, &hour, &meridiem); + printf("%2hu:%02d:%02d %2s", hour, t->tm_min, t->tm_sec, meridiem); +} + +void reprint_12_hour_time(struct tm *t) +{ + printf("\b\b\b\b\b\b\b\b\b\b\b"); + print_12_hour_time(t); +} + diff --git a/time.h b/time.h new file mode 100644 index 0000000..fec08bf --- /dev/null +++ b/time.h @@ -0,0 +1,14 @@ +#ifndef TWELVE_HOUR_CLOCK_H +#define TWELVE_HOUR_CLOCK_H + +#include /* uint8_t */ +#include /* time_t */ + +extern void read_time_interactively(struct tm *t); +extern bool load_system_time(struct tm *t); +extern void add_one_second(struct tm *t); +extern void print_12_hour_time(struct tm *t); +extern void reprint_12_hour_time(struct tm *t); + +#endif + diff --git a/trace.c b/trace.c new file mode 100644 index 0000000..22ad0e0 --- /dev/null +++ b/trace.c @@ -0,0 +1,59 @@ +#include + +#include "trace.h" + +static void open(void); +static void close(void); +static FILE *t; +static char mode[2] = {'w', '\0'}; + +static void open() +{ + t = fopen(TRACE_FILE_NAME, mode); + if (t == NULL) { + perror(TRACE_FILE_NAME); + } + mode[0] = 'a'; +} + +static void close() +{ + if (fclose(t) == EOF) { + perror(TRACE_FILE_NAME); + } +} + +void trace_enter(char *func_name) +{ + open(); + fprintf(t, "Entering %s\n", func_name); + close(); +} + +void trace_enter_str(char *func_name, char *str_param) +{ + open(); + fprintf(t, "Entering %s(%s)\n", func_name, str_param); + close(); +} + +void trace_exit(char *func_name) +{ + open(); + fprintf(t, "Exiting %s\n", func_name); + close(); +} + +void trace_ret_bool(char *func_name, bool bool_param) +{ + open(); + fprintf(t, "Exiting %s with %d\n", func_name, bool_param); + close(); +} + +void trace_msg(const char *message) +{ + open(); + fprintf(t, "%s\n", message); + close(); +} diff --git a/trace.h b/trace.h new file mode 100644 index 0000000..c234a24 --- /dev/null +++ b/trace.h @@ -0,0 +1,38 @@ +#ifndef TRACE_H +#define TRACE_H + +#ifdef TRACE + +#include /* bool */ + +#define TRACE_FILE_NAME "trace" + +extern void trace_enter(char *func_name); +extern void trace_enter_str(char *func_name, char *str_param); +extern void trace_exit(char *func_name); +extern void trace_ret_bool(char *func_name, bool bool_param); +extern void trace_msg(const char *msg); + +#define TRACE_ENTER(f) trace_enter(f) +#define TRACE_ENTER_STR(f, s) trace_enter_str(f, s) +#define TRACE_EXIT(f) trace_exit(f) +#define TRACE_RET_BOOL(f, b) trace_ret_bool(f, b) +#define TRACE_MSG(m) trace_msg(m) + +#else + +#define TRACE_ENTER(f) +#define TRACE_ENTER_STR(f, s) +#define TRACE_EXIT(f); +#define TRACE_RET_BOOL(f, b) +#define TRACE_MSG(m) + +#define trace_enter(f) +#define trace_enter_str(f, s) +#define trace_exit(f); +#define trace_ret_bool(f, b) +#define trace_msg(m) + +#endif + +#endif