--- /dev/null
+\r
+#include "core.h"\r
+\r
+#define COM1_RX 0x03f8\r
+#define COM1_TX 0x03f8\r
+#define COM1_BAUD_LSB 0x03f8\r
+#define COM1_BAUD_MSB 0x03f9\r
+#define COM1_INTR_ENBL 0x03f9\r
+#define COM1_INTR_ID 0x03fa\r
+#define COM1_CTRL_FIFO 0x03fa\r
+#define COM1_CTRL_LINE 0x03fb\r
+#define COM1_CTRL_MODEM 0x03fc\r
+#define COM1_STA_LINE 0x03fd\r
+#define COM1_STA_MODEM 0x03fe\r
+\r
+void init_serial(void)\r
+{\r
+ io_out8(COM1_CTRL_LINE, 0x80); //\83{\81[\83\8c\81[\83g\90Ý\92è\8aJ\8en\r
+ io_out8(COM1_BAUD_LSB, 0x06); //0x06 = 19.2bps\r
+ io_out8(COM1_CTRL_LINE, 0x03); //\83{\81[\83\8c\81[\83g\90Ý\92è\8fI\97¹\81A\91\97\8eó\90M\83f\81[\83^8bit\r
+ io_out8(COM1_CTRL_MODEM, 0x0b); //\8a\84\82è\8d\9e\82Ý\97L\8cø\81ARTS\81ADTR\83s\83\93\82ð\83A\83N\83e\83B\83u\89»\r
+// io_out8(COM1_INTR_ENBL, 0x04); //\83\89\83C\83\93\83X\83e\81[\83^\83X\8a\84\82è\8d\9e\82Ý\r
+ io_out8(COM1_INTR_ENBL, 0x00);\r
+\r
+ return;\r
+}\r
+\r
+void send_serial(uchar *s)\r
+{\r
+ for (; *s != 0x00; s++) {\r
+ io_out8(COM1_TX, *s);\r
+ }\r
+\r
+ return;\r
+}\r
+\r
+uint readcmos(uchar addr)\r
+{\r
+ io_out8(0x70, addr);\r
+ return io_in8(0x71);\r
+}\r
+\r
+void readrtc(uchar *t)\r
+{\r
+ char err;\r
+ static uchar adr[7] = { 0x00, 0x02, 0x04, 0x07, 0x08, 0x09, 0x32 };\r
+ static uchar max[7] = { 0x60, 0x59, 0x23, 0x31, 0x12, 0x99, 0x99 };\r
+ int i;\r
+\r
+ for (;;) {\r
+ err = 0;\r
+ for (i = 0; i < 7; i++) {\r
+ t[i] = readcmos(adr[i]);\r
+ }\r
+ for (i = 0; i < 7; i++) {\r
+ if (t[i] != readcmos(adr[i]) || (t[i] & 0x0f) > 9 || t[i] > max[i]) {\r
+ err = 1;\r
+ }\r
+ }\r
+ if (err == 0) {\r
+ return;\r
+ }\r
+ }\r
+}\r
+\r
+void fdc_motor_on(uchar d)\r
+{\r
+ if(d == 0){\r
+ io_out8(0x3f2,io_in8(0x3f2) | 0x10);\r
+ } else if(d == 1){\r
+ io_out8(0x3f2,io_in8(0x3f2) | 0x20);\r
+ } else if(d == 2){\r
+ io_out8(0x3f2,io_in8(0x3f2) | 0x40);\r
+ } else if(d == 3){\r
+ io_out8(0x3f2,io_in8(0x3f2) | 0x80);\r
+ } \r
+ return;\r
+}\r
+\r
+void fdc_motor_off(uchar d)\r
+{\r
+ if(d == 0){\r
+ io_out8(0x3f2,io_in8(0x3f2) & 0xef);\r
+ } else if(d == 1){\r
+ io_out8(0x3f2,io_in8(0x3f2) & 0xdf);\r
+ } else if(d == 2){\r
+ io_out8(0x3f2,io_in8(0x3f2) & 0xbf);\r
+ } else if(d == 3){\r
+ io_out8(0x3f2,io_in8(0x3f2) & 0x7f);\r
+ } else if(d == 4){\r
+ io_out8(0x3f2,io_in8(0x3f2) & 0xef);\r
+ io_out8(0x3f2,io_in8(0x3f2) & 0xdf);\r
+ io_out8(0x3f2,io_in8(0x3f2) & 0xbf);\r
+ io_out8(0x3f2,io_in8(0x3f2) & 0x7f);\r
+ }\r
+ return;\r
+}\r
+\r
+void reset_cpu(void)\r
+{\r
+ wait_KBC_sendready();\r
+ io_out8(PORT_KEYCMD, 0xfe);\r
+ for (;;) { io_hlt(); }\r
+}\r
+\r
+\r
+\r