From 0df0b26ee267b18faa562c3c33bf8694e62610a6 Mon Sep 17 00:00:00 2001 From: TempleOS-bot Date: Mon, 23 Jan 2017 00:27:25 -0500 Subject: [PATCH] Nightly update (ISO SHA-1 0b133ba) --- TempleOSCD/0000Boot/0000Kernel.BIN.C | Bin 192128 -> 192128 bytes TempleOSCD/Adam/ADefine.HC | 2 +- TempleOSCD/Compiler/Compiler.BIN | Bin 192920 -> 192920 bytes TempleOSCD/Compiler/CompilerB.HH | 1 + TempleOSCD/Demo/AcctExample/Registry.HC | 6 +- TempleOSCD/Demo/AcctExample/TOS/TOSDistro.HC | 2 + TempleOSCD/Doc/ChgLog.DD | 2 + TempleOSCD/Doc/Comm.HC | 152 ++++++++++--------- TempleOSCD/Kernel/KernelC.HH | 2 +- 9 files changed, 94 insertions(+), 73 deletions(-) diff --git a/TempleOSCD/0000Boot/0000Kernel.BIN.C b/TempleOSCD/0000Boot/0000Kernel.BIN.C index 5e694754d2d6b5549c53a5649a1eaf9599eee2d1..56016831ce8f282eec45e6e5eefa64632459e2eb 100644 GIT binary patch delta 344 zcmZp;%iVC7dx8o3`PGtqXKcAQFJ!sMyqSmPP$VPU=JT;?tV|68o4+UJ$}-O1oZ7IS znVFqiV6vg5b7bGO}3ma|=w4?^K-pqurRf;~Ljwy$)ZN z3D>#6Y9uC~Zxh_Sq9d6RCdIUYe{*ctOgYBuo4>DEqR-UGI61IQbn~VgUzwOBuWw#? z`!NqwM(XCi7qd7S1tx2La%be8T=;1{bpY0jBHYa}GFU!cYT~Uy++mLC({O#+U z80YabN$^hh3u3GT37iXJDEqR;&Q|NqVNZg4U)HQ(60^7dmM zro5EReJ^HlG73%B{N&EaJGt=Fdd6>)6+hcE@@!80ykC})Z@Z!(W49rb-oowcoEYcv zGcDnp?ia*Z2NF0J#K?kHVN2UzE?cKAPz6JpRyZ3`` diff --git a/TempleOSCD/Adam/ADefine.HC b/TempleOSCD/Adam/ADefine.HC index e8d708a..bf6bb98 100644 --- a/TempleOSCD/Adam/ADefine.HC +++ b/TempleOSCD/Adam/ADefine.HC @@ -11,7 +11,7 @@ U0 LoadDocDefines() //This is cut and replaced when I generate a distro. //See $LK,"DD_TEMPLEOS_LOC",A="FF:::/Demo/AcctExample/TOS/TOSDistro.HC,DD_TEMPLEOS_LOC"$. $TR-C,"LineRep"$ - $ID,4$DefinePrint("DD_TEMPLEOS_LOC","119,749"); + $ID,4$DefinePrint("DD_TEMPLEOS_LOC","119,767"); DefinePrint("DD_TEMPLEOS_LOC_OFFICIAL","81,933"); $ID,-4$ DefinePrint("DD_KERNEL","%08X",bfh); diff --git a/TempleOSCD/Compiler/Compiler.BIN b/TempleOSCD/Compiler/Compiler.BIN index e87977805db96806528915571f755a7c727d0d36..49d131199d4aba25122af5e408aee0c6e3f70b9f 100644 GIT binary patch delta 293 zcmbR7n0v-!?hS(M^+gQK450>@48g$+U={W zES_Kn20jiq5R;*3^Bndol1vIAn~M|=rZEa^HtA4_VVWVZIqJz(b4I=G1~QB#2CR7k z+yV@f3+D)L-{ZrWz{q67zFp3bv7UuVA$j}!AVwikM(*vK(izv+G4gItdd4_Oo3l97 zqx+3V^P7mN7nww+7yM&n*)A%?6s*t4Fx}CPNq_qcM@48g$+U={W zES_Kn20jiq5R;*J^Bndol1zz3n~M|=rZEa`HtA4_VagEN9QEX?Ib-p50~y8=1J+-H z+yV@f3+D)L-{ZrWz{qrrW4oLmV?7HK1IzaLL5xD8j6B;nr8BOtW8~YO^o((mHm5?U zNB0|#<~I>jFEWWtFZjpEvRzb&DOjJyM!&dVdyXTMEjJ_o_EkPiyGflags,COMf_ENABLED)) { + stat=InU8(c->base+UART_IIR); + if (stat & 4) //RX + FifoU8Ins(c->RX_fifo,InU8(c->base+UART_RDR)); + if (stat & 2) { //TX + if (FifoU8Rem(c->TX_fifo,&b)) + OutU8(c->base+UART_THR,b); + else + OutU8(c->base+UART_IER,1); //RX but no THR empty + } + } +} interrupt U0 IRQComm3() { - I64 base=comm_base[2]; - if (comm_fifos[2] && (InU8(base+UART_IIR) & 0xFE)==4) //RX IRQ - FifoU8Ins(comm_fifos[2],InU8(base+UART_RDR)); - - base=comm_base[4]; - if (comm_fifos[4] && (InU8(base+UART_IIR) & 0xFE)==4) //RX IRQ - FifoU8Ins(comm_fifos[4],InU8(base+UART_RDR)); + CommHndlr(2); + CommHndlr(4); OutU8(0x20,0x20); } interrupt U0 IRQComm4() { - I64 base=comm_base[1]; - if (comm_fifos[1] && (InU8(base+UART_IIR) & 0xFE)==4) //RX IRQ - FifoU8Ins(comm_fifos[1],InU8(base+UART_RDR)); - - base=comm_base[3]; - if (comm_fifos[3] && (InU8(base+UART_IIR) & 0xFE)==4) //RX IRQ - FifoU8Ins(comm_fifos[3],InU8(base+UART_RDR)); + CommHndlr(1); + CommHndlr(3); OutU8(0x20,0x20); } -IntEntrySet(0x23,&IRQComm3); -IntEntrySet(0x24,&IRQComm4); - -public U0 CommInit8n1(I64 port,I64 baud) +U0 CommInit() { - I64 base=comm_base[port]; + MemSet(&comm_ports,0,sizeof(comm_ports)); + comm_ports[1].base=0x3F8; + comm_ports[2].base=0x2F8; + comm_ports[3].base=0x3E8; + comm_ports[4].base=0x2E8; + IntEntrySet(0x23,&IRQComm3); + IntEntrySet(0x24,&IRQComm4); +} +CommInit; + +public CComm *CommInit8n1(I64 port,I64 baud) +{ + CComm *c=&comm_ports[port]; PUSHFD CLI - if (comm_fifos[port]) - FifoU8Del(comm_fifos[port]); - comm_fifos[port]=FifoU8New(256); - OutU8(base+UART_LCR,0); //Set for IER - OutU8(base+UART_IER,0); //Disable all IRQ - OutU8(base+UART_LCR,0x80); //Enable baud rate control - OutU8(base+UART_BRDL,(0x180/(baud/300)) & 0xFF); //LSB - OutU8(base+UART_BRDH,(0x180/(baud/300)) / 256); //MSB - OutU8(base+UART_LCR,3); // 8-none-1 + if (LBts(&c->flags,COMf_ENABLED)) { + FifoU8Del(c->RX_fifo); + FifoU8Del(c->TX_fifo); + } + c->RX_fifo=FifoU8New(256); + c->TX_fifo=FifoU8New(256); + OutU8(c->base+UART_LCR,0); //Set for IER + OutU8(c->base+UART_IER,0); //Disable all IRQ + OutU8(c->base+UART_LCR,0x80); //Enable baud rate control + OutU8(c->base+UART_BRDL,(0x180/(baud/300)) & 0xFF); //LSB + OutU8(c->base+UART_BRDH,(0x180/(baud/300)) / 256); //MSB + OutU8(c->base+UART_LCR,3); //8-none-1 - InU8(base+UART_RDR); //read garbage - InU8(base+UART_LSR); + InU8(c->base+UART_RDR); //read garbage + InU8(c->base+UART_LSR); - OutU8(base+UART_MCR,4); - OutU8(base+UART_IER,0); //Disable all IRQ - OutU8(base+UART_MCR,0xA); //out2 and rts - OutU8(0x21,InU8(0x21) & (0xFF-0x18)); //Enable 8259 IRQ 3 & 4 - OutU8(base+UART_IER,1); //Enable RX IRQ + OutU8(c->base+UART_MCR,4); + OutU8(c->base+UART_IER,0); //Disable all IRQ + OutU8(c->base+UART_MCR,0xA); //out2 and rts + OutU8(0x21,InU8(0x21) & (0xFF-0x18)); //Enable 8259 IRQ 3 & 4 + OutU8(c->base+UART_IER,1); //RX but no THR empty POPFD + + return c; } -public U0 CommBusyPutChar(I64 port,U8 b) +public U0 CommPutChar(I64 port,U8 b) { - I64 base=comm_base[port]; - while (!(InU8(base+UART_LSR) & 0x20)) - Yield; - OutU8(base+UART_THR,b); - while (!(InU8(base+UART_LSR) & 0x20)) - Yield; + CComm *c=&comm_ports[port]; + PUSHFD + CLI + FifoU8Ins(c->TX_fifo,b); + OutU8(c->base+UART_IER,3); //RX and THR empty + POPFD + Sleep(10); //!!! Remove this line!!! Linux echo_socket is too slow. } -public U0 CommBusyPutS(I64 port,U8 *st) +U0 CommPutS(I64 port,U8 *st) { - I64 b,base=comm_base[port]; - while (b=*(st++)) { - while (!(InU8(base+UART_LSR) & 0x20)) - Yield; - OutU8(base+UART_THR,b); - } - while (!(InU8(base+UART_LSR) & 0x20)) - Yield; + I64 b; + while (b=*st++) + CommPutChar(port,b); } -public U0 CommBusyWriteBlk(I64 port,U8 *buf,I64 count) +public U0 CommPutBlk(I64 port,U8 *buf,I64 cnt) { - I64 base=comm_base[port]; - while (count--) { - while (!(InU8(base+UART_LSR) & 0x20)) - Yield; - OutU8(base+UART_THR,*(buf++)); - } - while (!(InU8(base+UART_LSR) & 0x20)) - Yield; + while (cnt--) + CommPutChar(port,*buf++); } -#help_index "" +public U0 CommPrint(I64 port,U8 *fmt,...) +{ + U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); + CommPutS(port,buf); + Free(buf); +} diff --git a/TempleOSCD/Kernel/KernelC.HH b/TempleOSCD/Kernel/KernelC.HH index d8244fd..2a660ae 100644 --- a/TempleOSCD/Kernel/KernelC.HH +++ b/TempleOSCD/Kernel/KernelC.HH @@ -38,7 +38,6 @@ char_bmp_zero_tab_cr_nl_cursor_dollar[16], char_bmp_macro[16], char_bmp_printable[16], char_bmp_displayable[16], char_bmp_safe_dollar[16], char_bmp_filename[16], char_bmp_non_eol[16]; - #help_index "Char/Conversion" public extern U8 *Char2KeyName(I64 ch,Bool include_ctrl=TRUE); public extern I64 Char2ScanCode(I64 ch,I64 sc_flags=0); @@ -761,4 +760,5 @@ public extern F64 tS(); //From SysTimerFreq. #help_index "Windows" public extern Bool WinInside(I64 x,I64 y,CTask *task=NULL,I64 border=0); + #help_index ""