diff basic/makeflot.c @ 57:2088fd998865

sbc09 directry clean up
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 23 Jul 2018 16:07:12 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/basic/makeflot.c	Mon Jul 23 16:07:12 2018 +0900
@@ -0,0 +1,56 @@
+/* This program converts floating point numbers to
+   the 5-bit binary representation used in 6809 BASIC.
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include <ctype.h>
+#include <string.h>
+
+main()
+{
+ double num;
+ char line[128],label[128];
+ unsigned char byte[5];
+ int expo,sign,i;
+ unsigned long mant;
+ label[0]=0;
+ printf("* These are the floating point constants.\n");
+ printf("* They are generated by the program makeflot.c\n");
+ while(fgets(line,128,stdin)) {
+  line[strlen(line)-1]=0;
+  if(!line[0])continue;
+  if(line[0]=='*'){printf("%s\n",line);continue;}
+  if(isalpha(line[0])) {
+   sscanf(line,"%s",label);
+  }else{
+   sscanf(line,"%lf",&num);
+   if(num==0) {
+    sign=0;
+    expo=0;
+    mant=0;
+   }else{
+    sign=0x80*(num<0);
+    num=fabs(num);
+    expo=0x9f;
+    while(num<2147483648.0){
+     num=num*2;
+     expo-=1;
+    }
+    while(num>=4294967296.0){
+     num=num/2;
+     expo+=1;
+    }
+    mant=num+0.5;
+   }  
+   byte[0]=expo;byte[1]=((mant>>24)&0x7f)+sign;
+   byte[2]=((mant>>16)&0xff);byte[3]=((mant>>8)&0xff);byte[4]=mant&0xff;
+   printf("%-16s fcb $%02x,$%02x,$%02x,$%02x,$%02x ;%s\n",
+    label,byte[0],byte[1],byte[2],byte[3],byte[4],line);
+   label[0]=0;
+  }
+ }
+ printf("* End of floating point constants.\n"); 
+ exit(0);
+}