From 948532f39ea593c9b77c1e666162c1e505ae89be Mon Sep 17 00:00:00 2001 From: Void NV Date: Tue, 5 May 2020 01:47:34 -0500 Subject: [PATCH] DiskATA.CC refactor --- ...o => Zenith-latest-2020-05-05-01_47_04.iso | Bin 34301952 -> 34306048 bytes src/Home/FilesRefactored.DD | 4 +- src/Kernel/BlkDev/DiskATA.CC | 886 ++++++++++-------- src/Kernel/KernelB.HH | 48 +- 4 files changed, 530 insertions(+), 408 deletions(-) rename Zenith-latest-2020-05-03-14_55_31.iso => Zenith-latest-2020-05-05-01_47_04.iso (99%) diff --git a/Zenith-latest-2020-05-03-14_55_31.iso b/Zenith-latest-2020-05-05-01_47_04.iso similarity index 99% rename from Zenith-latest-2020-05-03-14_55_31.iso rename to Zenith-latest-2020-05-05-01_47_04.iso index e7ba97d375f2e47e55ac30a5d7fc77f3adbc348f..313a40be724ff16d8d9f117e13c33897c4b909a7 100644 GIT binary patch delta 96515 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%0AJP!!Po?TT66K(=N1iTK2!G2@)P;>!c7GMTo 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

1KQVp1rbi^9p81Slz;G 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 delta 92706 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 && bd->base1) - OutU8(bd->base1+ATAR1_CTRL,0x8); - if (bd->flags & BDF_EXT_SIZE) { //48 Bit LBA? - OutU8(bd->base0+ATAR0_NSECT,count.u8[1]); - OutU8(bd->base0+ATAR0_SECT,blk.u8[3]); - OutU8(bd->base0+ATAR0_LCYL,blk.u8[4]); - OutU8(bd->base0+ATAR0_HCYL,blk.u8[5]); - OutU8(bd->base0+ATAR0_NSECT,count); - OutU8(bd->base0+ATAR0_SECT,blk); - OutU8(bd->base0+ATAR0_LCYL,blk.u8[1]); - OutU8(bd->base0+ATAR0_HCYL,blk.u8[2]); - OutU8(bd->base0+ATAR0_SEL,0xEF|bd->unit<<4); - } else { //28 Bit LBA - OutU8(bd->base0+ATAR0_NSECT,count); - OutU8(bd->base0+ATAR0_SECT,blk); - OutU8(bd->base0+ATAR0_LCYL,blk.u8[1]); - OutU8(bd->base0+ATAR0_HCYL,blk.u8[2]); - OutU8(bd->base0+ATAR0_SEL,0xE0|bd->unit<<4|blk.u8[3]); + if (bd->type != BDT_ATAPI && bd->base1) + OutU8(bd->base1 + ATAR1_CTRL, 0x8); + if (bd->flags & BDF_EXT_SIZE) + { //48 Bit LBA? + OutU8(bd->base0 + ATAR0_NSECT, count.u8[1]); + OutU8(bd->base0 + ATAR0_SECT, blk.u8[3]); + OutU8(bd->base0 + ATAR0_LCYL, blk.u8[4]); + OutU8(bd->base0 + ATAR0_HCYL, blk.u8[5]); + OutU8(bd->base0 + ATAR0_NSECT, count); + OutU8(bd->base0 + ATAR0_SECT, blk); + OutU8(bd->base0 + ATAR0_LCYL, blk.u8[1]); + OutU8(bd->base0 + ATAR0_HCYL, blk.u8[2]); + OutU8(bd->base0 + ATAR0_SEL, 0xEF | bd->unit << 4); + } + else + { //28 Bit LBA + OutU8(bd->base0 + ATAR0_NSECT, count); + OutU8(bd->base0 + ATAR0_SECT, blk); + OutU8(bd->base0 + ATAR0_LCYL, blk.u8[1]); + OutU8(bd->base0 + ATAR0_HCYL, blk.u8[2]); + OutU8(bd->base0 + ATAR0_SEL, 0xE0 | bd->unit << 4 | blk.u8[3]); } } -Bool ATAWaitNotBUSY(CBlkDev *bd,F64 timeout) +Bool ATAWaitNotBUSY(CBlkDev *bd, F64 timeout) { I64 i; - do { - for (i=0;i<3;i++) - if (!(InU8(bd->base0+ATAR0_STAT)&ATAS_BSY)) + do + { + for (i = 0; i < 3; i++) + if (!(InU8(bd->base0 + ATAR0_STAT) & ATAS_BSY)) return TRUE; Yield; - } while (!(0base0+ATAR0_STAT)&ATAS_DRQ) + do + { + for (i = 0; i < 3; i++) + if (InU8(bd->base0 + ATAR0_STAT) & ATAS_DRQ) return TRUE; Yield; - } while (!(0flags & BDF_EXT_SIZE) - OutU8(bd->base0+ATAR0_SEL,0xEF|bd->unit<<4); + OutU8(bd->base0 + ATAR0_SEL, 0xEF | bd->unit << 4); else - OutU8(bd->base0+ATAR0_SEL,0xE0|bd->unit<<4); - OutU8(bd->base0+ATAR0_FEAT,0); - OutU8(bd->base0+ATAR0_CMD,ATA_NOP); - return ATAWaitNotBUSY(bd,timeout); + OutU8(bd->base0 + ATAR0_SEL, 0xE0 | bd->unit << 4); + + OutU8(bd->base0 + ATAR0_FEAT, 0); + OutU8(bd->base0 + ATAR0_CMD, ATA_NOP); + return ATAWaitNotBUSY(bd, timeout); } -U0 ATACmd(CBlkDev *bd,U8 cmd) +U0 ATACmd(CBlkDev *bd, U8 cmd) { - OutU8(bd->base0+ATAR0_FEAT,0); - OutU8(bd->base0+ATAR0_CMD,cmd); - bd->last_time=tS; + OutU8(bd->base0 + ATAR0_FEAT, 0); + OutU8(bd->base0 + ATAR0_CMD, cmd); + bd->last_time = tS; PortNop; } -Bool ATAGetRes(CBlkDev *bd,F64 timeout,U8 *buf,I64 count, - I64 _avail,Bool one_read) +Bool ATAGetRes(CBlkDev *bd, F64 timeout, U8 *buf, I64 count, I64 _avail, Bool one_read) { - I64 avail,overflow; - bd->flags&=~BDF_LAST_WAS_WRITE; - MemSet(buf,0,count); - while (count>0) { - if (!ATAWaitDRQ(bd,timeout)) + I64 avail, overflow; + bd->flags &= ~BDF_LAST_WAS_WRITE; + MemSet(buf, 0, count); + while (count > 0) + { + if (!ATAWaitDRQ(bd, timeout)) return FALSE; if (_avail) - avail=_avail; + avail = _avail; else - avail=InU8(bd->base0+ATAR0_HCYL)<<8+InU8(bd->base0+ATAR0_LCYL); - if (avail) { - if (avail>count) { - overflow=avail-count; - avail=count; - } else - overflow=0; - if (avail&2) - RepInU16(buf,avail>>1,bd->base0+ATAR0_DATA); + avail = InU8(bd->base0 + ATAR0_HCYL) << 8 + InU8(bd->base0 + ATAR0_LCYL); + if (avail) + { + if (avail > count) + { + overflow = avail - count; + avail = count; + } else - RepInU32(buf,avail>>2,bd->base0+ATAR0_DATA); - count-=avail; - buf+=avail; - while (overflow>0) { - InU16(bd->base0+ATAR0_DATA); - overflow-=2; - if (0> 1, bd->base0 + ATAR0_DATA); + else + RepInU32(buf, avail >> 2, bd->base0 + ATAR0_DATA); + + count -= avail; + buf += avail; + while (overflow > 0) + { + InU16(bd->base0 + ATAR0_DATA); + overflow -= 2; + if (0 < timeout < tS) return FALSE; } if (one_read) break; - } else + } + else Yield; } - return ATAWaitNotBUSY(bd,timeout); + return ATAWaitNotBUSY(bd, timeout); } -Bool ATAPIWritePacketWord(CBlkDev *bd,F64 timeout,...) +Bool ATAPIWritePacketWord(CBlkDev *bd, F64 timeout, ...) { I64 i; - for (i=0;ibase0+ATAR0_DATA,EndianU16(argv[i])); - bd->last_time=tS; + + OutU16(bd->base0 + ATAR0_DATA, EndianU16(argv[i])); + bd->last_time = tS; } return TRUE; } @@ -118,494 +146,590 @@ Bool ATAPIWritePacketWord(CBlkDev *bd,F64 timeout,...) Bool ATAPISetMaxSpeed(CBlkDev *bd) { if (bd->flags & BDF_EXT_SIZE) - OutU8(bd->base0+ATAR0_SEL,0xEF|bd->unit<<4); + OutU8(bd->base0 + ATAR0_SEL, 0xEF | bd->unit << 4); else - OutU8(bd->base0+ATAR0_SEL,0xE0|bd->unit<<4); - OutU8(bd->base0+ATAR0_LCYL,0); - OutU8(bd->base0+ATAR0_HCYL,0); - ATACmd(bd,ATA_PACKET); - ATAPIWritePacketWord(bd,0,0xBB00,0xFFFF,0xFFFF,0,0,0); - return ATAWaitNotBUSY(bd,0); + OutU8(bd->base0 + ATAR0_SEL, 0xE0 | bd->unit << 4); + + OutU8(bd->base0 + ATAR0_LCYL, 0); + OutU8(bd->base0 + ATAR0_HCYL, 0); + ATACmd(bd, ATA_PACKET); + ATAPIWritePacketWord(bd, 0, ATAPI_SET_CD_SPEED, 0xFFFF, 0xFFFF, 0, 0, 0); + + return ATAWaitNotBUSY(bd, 0); } -Bool ATAPISeek(CBlkDev *bd,I64 native_blk) +Bool ATAPISeek(CBlkDev *bd, I64 native_blk) { if (bd->flags & BDF_EXT_SIZE) - OutU8(bd->base0+ATAR0_SEL,0xEF|bd->unit<<4); + OutU8(bd->base0 + ATAR0_SEL, 0xEF | bd->unit << 4); else - OutU8(bd->base0+ATAR0_SEL,0xE0|bd->unit<<4); - OutU8(bd->base0+ATAR0_LCYL,0); - OutU8(bd->base0+ATAR0_HCYL,0); - ATACmd(bd,ATA_PACKET); - ATAPIWritePacketWord(bd,0,0x2B00,native_blk>>16,native_blk,0,0,0); - return ATAWaitNotBUSY(bd,0); + OutU8(bd->base0 + ATAR0_SEL, 0xE0 | bd->unit << 4); + + OutU8(bd->base0 + ATAR0_LCYL, 0); + OutU8(bd->base0 + ATAR0_HCYL, 0); + ATACmd(bd, ATA_PACKET); + ATAPIWritePacketWord(bd, 0, ATAPI_SEEK, native_blk >> 16, native_blk, 0, 0, 0); + + return ATAWaitNotBUSY(bd, 0); } -Bool ATAPIStartStop(CBlkDev *bd,F64 timeout,Bool start) +Bool ATAPIStartStop(CBlkDev *bd, F64 timeout, Bool start) { I64 i; if (start) - i=0x100; + i = 0x100; else - i=0; + i = 0; if (bd->flags & BDF_EXT_SIZE) - OutU8(bd->base0+ATAR0_SEL,0xEF|bd->unit<<4); + OutU8(bd->base0 + ATAR0_SEL, 0xEF | bd->unit << 4); else - OutU8(bd->base0+ATAR0_SEL,0xE0|bd->unit<<4); - ATACmd(bd,ATA_PACKET); + OutU8(bd->base0 + ATAR0_SEL, 0xE0 | bd->unit << 4); + + ATACmd(bd, ATA_PACKET); //Start/Stop - if (ATAPIWritePacketWord(bd,timeout,0x1B00,0,i,0,0,0)) - return ATAWaitNotBUSY(bd,timeout); + if (ATAPIWritePacketWord(bd, timeout, ATAPI_START_STOP_UNIT, 0, i, 0, 0, 0)) + return ATAWaitNotBUSY(bd, timeout); else return FALSE; } -I64 ATAGetDevId(CBlkDev *bd,F64 timeout,Bool keep_id_record) +I64 ATAGetDevId(CBlkDev *bd, F64 timeout, Bool keep_id_record) { - I64 res=BDT_NULL; - U16 *id_record=NULL; - if (bd->type!=BDT_ATAPI && bd->base1) - OutU8(bd->base1+ATAR1_CTRL,0x8); + I64 res = BDT_NULL; + U16 *id_record = NULL; + + if (bd->type != BDT_ATAPI && bd->base1) + OutU8(bd->base1 + ATAR1_CTRL, 0x8); if (bd->flags & BDF_EXT_SIZE) - OutU8(bd->base0+ATAR0_SEL,0xEF|bd->unit<<4); + OutU8(bd->base0 + ATAR0_SEL, 0xEF | bd->unit << 4); else - OutU8(bd->base0+ATAR0_SEL,0xE0|bd->unit<<4); - ATACmd(bd,ATA_IDENTIFY); - if (ATAWaitNotBUSY(bd,timeout)) { - if (InU8(bd->base0+ATAR0_STAT)&ATAS_ERR) - res=BDT_ATAPI; - else { - id_record=ZCAlloc(512); - if (ATAGetRes(bd,timeout,id_record,512,512,FALSE)) - res=BDT_ATA; - else { + OutU8(bd->base0 + ATAR0_SEL, 0xE0 | bd->unit << 4); + + ATACmd(bd, ATA_IDENTIFY); + if (ATAWaitNotBUSY(bd, timeout)) + { + if (InU8(bd->base0 + ATAR0_STAT) & ATAS_ERR) + res = BDT_ATAPI; + else + { + id_record = ZCAlloc(512); + if (ATAGetRes(bd, timeout, id_record, 512, 512, FALSE)) + res = BDT_ATA; + else + { Free(id_record); - id_record=NULL; + id_record = NULL; } } } - if (keep_id_record) { + if (keep_id_record) + { Free(bd->dev_id_record); - bd->dev_id_record=id_record; + bd->dev_id_record = id_record; } return res; } -I64 ATAReadNativeMax(CBlkDev *bd,F64 timeout) +I64 ATAReadNativeMax(CBlkDev *bd, F64 timeout) {//Returns zero on error - I64 res=0; - Bool okay=TRUE; - if (bd->type==BDT_ATAPI) { + I64 res = 0; + Bool okay = TRUE; + if (bd->type == BDT_ATAPI) + { if (bd->flags & BDF_EXT_SIZE) - OutU8(bd->base0+ATAR0_SEL,0xEF|bd->unit<<4); + OutU8(bd->base0 + ATAR0_SEL, 0xEF | bd->unit << 4); else - OutU8(bd->base0+ATAR0_SEL,0xE0|bd->unit<<4); - ATACmd(bd,ATA_DEV_RST); - if (!ATAWaitNotBUSY(bd,0)) - okay=FALSE; - } else { - while (InU8(bd->base0+ATAR0_STAT) & ATAS_BSY) { - if (bd->flags&BDF_LAST_WAS_WRITE) - OutU16(bd->base0+ATAR0_DATA,0); + OutU8(bd->base0 + ATAR0_SEL, 0xE0 | bd->unit << 4); + + ATACmd(bd, ATA_DEV_RST); + if (!ATAWaitNotBUSY(bd, 0)) + okay = FALSE; + } + else + { + while (InU8(bd->base0 + ATAR0_STAT) & ATAS_BSY) + { + if (bd->flags & BDF_LAST_WAS_WRITE) + OutU16(bd->base0 + ATAR0_DATA, 0); else - InU16(bd->base0+ATAR0_DATA); + InU16(bd->base0 + ATAR0_DATA); Yield; - if (0flags,BDf_EXT_SIZE,Bt(&bd->dev_id_record[86],10)); + BEqual(&bd->flags, BDf_EXT_SIZE, Bt(&bd->dev_id_record[86], 10)); } - if (okay) { - if (bd->flags & BDF_EXT_SIZE && bd->base1) { - OutU8(bd->base1+ATAR1_CTRL,0x8); - OutU8(bd->base0+ATAR0_SEL,0xEF|bd->unit<<4); - ATACmd(bd,ATA_READ_NATIVE_MAX_EXT); - if (ATAWaitNotBUSY(bd,timeout)) { - res.u8[0]=InU8(bd->base0+ATAR0_SECT); - res.u8[1]=InU8(bd->base0+ATAR0_LCYL); - res.u8[2]=InU8(bd->base0+ATAR0_HCYL); + if (okay) + { + if (bd->flags & BDF_EXT_SIZE && bd->base1) + { + OutU8(bd->base1 + ATAR1_CTRL, 0x8); + OutU8(bd->base0 + ATAR0_SEL, 0xEF | bd->unit << 4); - OutU8(bd->base1+ATAR1_CTRL,0x80); - res.u8[3]=InU8(bd->base0+ATAR0_SECT); - res.u8[4]=InU8(bd->base0+ATAR0_LCYL); - res.u8[5]=InU8(bd->base0+ATAR0_HCYL); + ATACmd(bd, ATA_READ_NATIVE_MAX_EXT); + if (ATAWaitNotBUSY(bd, timeout)) + { + res.u8[0] = InU8(bd->base0 + ATAR0_SECT); + res.u8[1] = InU8(bd->base0 + ATAR0_LCYL); + res.u8[2] = InU8(bd->base0 + ATAR0_HCYL); - if (res>>24==res&0xFFFFFF) {//Kludge to make QEMU work - bd->flags&=~BDF_EXT_SIZE; - res&=0xFFFFFF; + OutU8(bd->base1+ATAR1_CTRL, 0x80); + res.u8[3] = InU8(bd->base0 + ATAR0_SECT); + res.u8[4] = InU8(bd->base0 + ATAR0_LCYL); + res.u8[5] = InU8(bd->base0 + ATAR0_HCYL); + + if (res >> 24 == res & 0xFFFFFF) + {//Kludge to make QEMU work + bd->flags &= ~BDF_EXT_SIZE; + res &= 0xFFFFFF; } } - } else { - if (bd->type!=BDT_ATAPI && bd->base1) - OutU8(bd->base1+ATAR1_CTRL,0x8); - OutU8(bd->base0+ATAR0_SEL,0xE0|bd->unit<<4); - ATACmd(bd,ATA_READ_NATIVE_MAX); - if (ATAWaitNotBUSY(bd,timeout)) { - res.u8[0]=InU8(bd->base0+ATAR0_SECT); - res.u8[1]=InU8(bd->base0+ATAR0_LCYL); - res.u8[2]=InU8(bd->base0+ATAR0_HCYL); - res.u8[3]=InU8(bd->base0+ATAR0_SEL) & 0xF; + } + else + { + if (bd->type != BDT_ATAPI && bd->base1) + OutU8(bd->base1 + ATAR1_CTRL, 0x8); + OutU8(bd->base0 + ATAR0_SEL, 0xE0 | bd->unit << 4); + ATACmd(bd, ATA_READ_NATIVE_MAX); + if (ATAWaitNotBUSY(bd, timeout)) + { + res.u8[0] = InU8(bd->base0 + ATAR0_SECT); + res.u8[1] = InU8(bd->base0 + ATAR0_LCYL); + res.u8[2] = InU8(bd->base0 + ATAR0_HCYL); + res.u8[3] = InU8(bd->base0 + ATAR0_SEL) & 0xF; } } } - return bd->max_blk=res; + return bd->max_blk = res; } -I64 ATAPIReadCapacity(CBlkDev *bd,I64 *_blk_size=NULL) +I64 ATAPIReadCapacity(CBlkDev *bd, I64 *_blk_size=NULL) {//Supposedly this can return a res +/- 75 sects. //Error might just be for music. - Bool unlock=BlkDevLock(bd); + Bool unlock = BlkDevLock(bd); U32 buf[2]; - if (ATAWaitNotBUSY(bd,0)) { + if (ATAWaitNotBUSY(bd, 0)) + { if (bd->flags & BDF_EXT_SIZE) - OutU8(bd->base0+ATAR0_SEL,0xEF|bd->unit<<4); + OutU8(bd->base0 + ATAR0_SEL, 0xEF | bd->unit << 4); else - OutU8(bd->base0+ATAR0_SEL,0xE0|bd->unit<<4); - OutU8(bd->base0+ATAR0_LCYL,8); - OutU8(bd->base0+ATAR0_HCYL,0); - ATACmd(bd,ATA_PACKET); - ATAPIWritePacketWord(bd,0,0x2500,0,0,0,0,0); - if (!ATAGetRes(bd,0,buf,8,0,TRUE)) - buf[0]=buf[1]=0; - } else - buf[0]=buf[1]=0; + OutU8(bd->base0 + ATAR0_SEL, 0xE0 | bd->unit << 4); + + OutU8(bd->base0 + ATAR0_LCYL, 8); + OutU8(bd->base0 + ATAR0_HCYL, 0); + ATACmd(bd, ATA_PACKET); + ATAPIWritePacketWord(bd, 0, ATAPI_READ_CAPACITY, 0, 0, 0, 0, 0); + + if (!ATAGetRes(bd, 0, buf, 8, 0, TRUE)) + buf[0] = buf[1] = 0; + } + else + buf[0] = buf[1] = 0; + + if (unlock) + BlkDevUnlock(bd); + if (_blk_size) + *_blk_size = EndianU32(buf[1]); - if (unlock) BlkDevUnlock(bd); - if (_blk_size) *_blk_size=EndianU32(buf[1]); return EndianU32(buf[0]); } -CATAPITrack *ATAPIReadTrackInfo(CBlkDev *bd,I64 blk) +CATAPITrack *ATAPIReadTrackInfo(CBlkDev *bd, I64 blk) { - CATAPITrack *res=CAlloc(sizeof(CATAPITrack)); - Bool unlock=BlkDevLock(bd); - if (ATAWaitNotBUSY(bd,0)) { + CATAPITrack *res = CAlloc(sizeof(CATAPITrack)); + Bool unlock = BlkDevLock(bd); + if (ATAWaitNotBUSY(bd, 0)) + { if (bd->flags & BDF_EXT_SIZE) - OutU8(bd->base0+ATAR0_SEL,0xEF|bd->unit<<4); + OutU8(bd->base0 + ATAR0_SEL, 0xEF | bd->unit << 4); else - OutU8(bd->base0+ATAR0_SEL,0xE0|bd->unit<<4); - OutU8(bd->base0+ATAR0_LCYL,sizeof(CATAPITrack)&0xFF); - OutU8(bd->base0+ATAR0_HCYL,sizeof(CATAPITrack)>>8); - ATACmd(bd,ATA_PACKET); - ATAPIWritePacketWord(bd,0,0x5200,blk.u16[1],blk.u16[0], - (sizeof(CATAPITrack)&0xFF00)>>8,(sizeof(CATAPITrack)&0x00FF)<<8,0); - if (!ATAGetRes(bd,0,res,sizeof(CATAPITrack),0,TRUE)) { + OutU8(bd->base0 + ATAR0_SEL, 0xE0 | bd->unit << 4); + + OutU8(bd->base0 + ATAR0_LCYL, sizeof(CATAPITrack) & 0xFF); + OutU8(bd->base0 + ATAR0_HCYL, sizeof(CATAPITrack) >> 8); + + ATACmd(bd, ATA_PACKET); + ATAPIWritePacketWord(bd, + 0, + ATAPI_READ_TRACK_INFO, + blk.u16[1], + blk.u16[0], + (sizeof(CATAPITrack) & 0xFF00) >> 8, + (sizeof(CATAPITrack) & 0x00FF) << 8, + 0); + + if (!ATAGetRes(bd, 0, res, sizeof(CATAPITrack), 0, TRUE)) + { Free(res); - res=NULL; + res = NULL; } - } else { - Free(res); - res=NULL; } - if (unlock) BlkDevUnlock(bd); + else + { + Free(res); + res = NULL; + } + if (unlock) + BlkDevUnlock(bd); return res; } Bool ATAInit(CBlkDev *bd) { - Bool unlock=BlkDevLock(bd),okay=FALSE; + Bool unlock = BlkDevLock(bd), okay = FALSE; - if (bd->type==BDT_ATAPI) - bd->flags&=~BDF_EXT_SIZE; + if (bd->type == BDT_ATAPI) + bd->flags &= ~BDF_EXT_SIZE; else - bd->flags|=BDF_EXT_SIZE; + bd->flags |= BDF_EXT_SIZE; - if (ATAReadNativeMax(bd,tS+0.1)) { - ATABlkSel(bd,bd->max_blk,0); - if (bd->flags&BDF_EXT_SIZE) - ATACmd(bd,ATA_SET_MAX_EXT); + if (ATAReadNativeMax(bd, tS + 0.1)) + { + ATABlkSel(bd, bd->max_blk, 0); + if (bd->flags & BDF_EXT_SIZE) + ATACmd(bd, ATA_SET_MAX_EXT); else - ATACmd(bd,ATA_SET_MAX); - if (ATAWaitNotBUSY(bd,0)) { - okay=TRUE; - if (bd->type==BDT_ATAPI) { - if (ATAPIStartStop(bd,0,TRUE)) { + ATACmd(bd, ATA_SET_MAX); + + if (ATAWaitNotBUSY(bd, 0)) + { + okay = TRUE; + if (bd->type == BDT_ATAPI) + { + if (ATAPIStartStop(bd, 0, TRUE)) + { if(!ATAPISetMaxSpeed(bd)) - okay=FALSE; - } else - okay=FALSE; + okay = FALSE; + } + else + okay = FALSE; } } } - if (unlock) BlkDevUnlock(bd); + if (unlock) + BlkDevUnlock(bd); return okay; } -Bool ATAPIWaitReady(CBlkDev *bd,F64 timeout) +Bool ATAPIWaitReady(CBlkDev *bd, F64 timeout) { - do { - if (!ATAWaitNotBUSY(bd,timeout) || - !ATANop(bd,timeout) || - !ATAPIStartStop(bd,timeout,TRUE)) + do + { + if (!ATAWaitNotBUSY(bd, timeout) || !ATANop(bd, timeout) || !ATAPIStartStop(bd, timeout, TRUE)) return FALSE; - if (InU8(bd->base0+ATAR0_STAT) & ATAS_DRDY && - !InU8(bd->base0+ATAR0_FEAT)); - return TRUE; + if (InU8(bd->base0 + ATAR0_STAT) & ATAS_DRDY && !InU8(bd->base0 + ATAR0_FEAT)); + return TRUE; + ATAInit(bd); Yield; - } while (!(0flags & BDF_EXT_SIZE) - ATACmd(bd,ATA_READ_MULTI_EXT); + ATACmd(bd, ATA_READ_MULTI_EXT); else - ATACmd(bd,ATA_READ_MULTI); - if (!ATAGetRes(bd,tS+1.0,buf,count*bd->blk_size,BLK_SIZE,FALSE)) { - if (retries--) { - ATAWaitNotBUSY(bd,0); + ATACmd(bd, ATA_READ_MULTI); + + if (!ATAGetRes(bd, tS + 1.0, buf, count * bd->blk_size, BLK_SIZE, FALSE)) + { + if (retries--) + { + ATAWaitNotBUSY(bd, 0); goto retry; - } else + } + else throw('BlkDev'); } - blkdev.read_count+=(count*bd->blk_size)>>BLK_SIZE_BITS; - if (unlock) BlkDevUnlock(bd); + blkdev.read_count += (count * bd->blk_size) >> BLK_SIZE_BITS; + + if (unlock) + BlkDevUnlock(bd); } -I64 ATAProbe(I64 base0,I64 base1,I64 unit) +I64 ATAProbe(I64 base0, I64 base1, I64 unit) { CBlkDev bd; - MemSet(&bd,0,sizeof(CBlkDev)); - bd.type=BDT_ATAPI; - bd.base0=base0; - bd.base1=base1; - bd.unit=unit; - bd.blk_size=DVD_BLK_SIZE; - return ATAGetDevId(&bd,tS+0.1,FALSE); + MemSet(&bd, 0, sizeof(CBlkDev)); + bd.type = BDT_ATAPI; + bd.base0 = base0; + bd.base1 = base1; + bd.unit = unit; + bd.blk_size = DVD_BLK_SIZE; + + return ATAGetDevId(&bd, tS + 0.1, FALSE); } -Bool ATAPIReadBlks2(CBlkDev *bd,F64 timeout,U8 *buf, - I64 native_blk, I64 count,Bool lock) +Bool ATAPIReadBlks2(CBlkDev *bd, F64 timeout, U8 *buf, I64 native_blk, I64 count, Bool lock) { - Bool res=FALSE,unlock; - if (count<=0) + Bool res = FALSE, unlock; + if (count <= 0) return FALSE; if (lock) - unlock=BlkDevLock(bd); - if (ATAPIWaitReady(bd,timeout)) { + unlock = BlkDevLock(bd); + if (ATAPIWaitReady(bd, timeout)) + { if (bd->flags & BDF_EXT_SIZE) - OutU8(bd->base0+ATAR0_SEL,0xEF|bd->unit<<4); + OutU8(bd->base0 + ATAR0_SEL, 0xEF | bd->unit << 4); else - OutU8(bd->base0+ATAR0_SEL,0xE0|bd->unit<<4); - OutU8(bd->base0+ATAR0_LCYL,bd->blk_size); - OutU8(bd->base0+ATAR0_HCYL,bd->blk_size.u8[1]); - ATACmd(bd,ATA_PACKET); - if (ATAPIWritePacketWord(bd,timeout,0xA800, - native_blk.u16[1],native_blk,count.u16[1],count,0) && - ATAGetRes(bd,timeout,buf,count*bd->blk_size,0,FALSE)) { - blkdev.read_count+=(count*bd->blk_size)>>BLK_SIZE_BITS; - res=TRUE; + OutU8(bd->base0 + ATAR0_SEL, 0xE0 | bd->unit << 4); + + OutU8(bd->base0 + ATAR0_LCYL, bd->blk_size); + OutU8(bd->base0 + ATAR0_HCYL, bd->blk_size.u8[1]); + ATACmd(bd, ATA_PACKET); + + if (ATAPIWritePacketWord(bd, timeout, ATAPI_READ, native_blk.u16[1], native_blk, count.u16[1], count, 0) && + ATAGetRes(bd, timeout, buf, count * bd->blk_size, 0, FALSE)) + { + blkdev.read_count += (count * bd->blk_size) >> BLK_SIZE_BITS; + res = TRUE; } } -// ATAPIStartStop(bd,0,FALSE); - if (lock && unlock) BlkDevUnlock(bd); +// ATAPIStartStop(bd, 0, FALSE); + if (lock && unlock) + BlkDevUnlock(bd); + return res; } -U0 ATAPIReadBlks(CBlkDev *bd,U8 *buf, I64 blk, I64 count) +U0 ATAPIReadBlks(CBlkDev *bd, U8 *buf, I64 blk, I64 count) { - CDrive *drive=Letter2Drive(bd->first_drive_let); - I64 retry,spc=bd->blk_size>>BLK_SIZE_BITS,n,blk2, - l2=bd->max_reads<<1+spc<<1; - U8 *dvd_buf=MAlloc(l2<0) { - if (blk<=bd->max_reads) - blk2=0; + CDrive *drive = Letter2Drive(bd->first_drive_let); + I64 retry,spc = bd->blk_size >> BLK_SIZE_BITS, n, blk2, l2 = bd->max_reads << 1 + spc << 1; + U8 *dvd_buf = MAlloc(l2 << BLK_SIZE_BITS); + if (count > 0) + { + if (blk <= bd->max_reads) + blk2 = 0; else - blk2=FloorU64(blk-bd->max_reads,spc); - if (blk2+l2>drive->size+drive->drv_offset) - l2=drive->size+drive->drv_offset-blk2; - n=(l2+spc-1)/spc; + blk2 = FloorU64(blk-bd->max_reads, spc); - retry=4; + if (blk2 + l2 > drive->size + drive->drv_offset) + l2 = drive->size + drive->drv_offset - blk2; + + n = (l2 + spc - 1) / spc; + + retry = 4; while (--retry) - if (ATAPIReadBlks2(bd,tS+7.0+0.004*n,dvd_buf,blk2/spc,n,TRUE)) + if (ATAPIReadBlks2(bd, tS + 7.0 + 0.004 * n, dvd_buf, blk2 / spc, n, TRUE)) //n is 0x800 if max_reads. Up to 8 additional seconds break; if (!retry) - ATAPIReadBlks2(bd,0,dvd_buf,blk2/spc,n,TRUE); + ATAPIReadBlks2(bd, 0, dvd_buf, blk2 / spc, n, TRUE); if (bd->flags & BDF_READ_CACHE) - DiskCacheAdd(drive,dvd_buf,blk2,n*spc); - MemCopy(buf,dvd_buf+(blk-blk2)<bd; - while (count>0) { - n=count; - if (n>bd->max_reads) - n=bd->max_reads; - if (bd->type==BDT_ATAPI) - ATAPIReadBlks(bd,buf,blk,n); + CBlkDev *bd = drive->bd; + while (count > 0) + { + n = count; + if (n > bd->max_reads) + n = bd->max_reads; + + if (bd->type == BDT_ATAPI) + ATAPIReadBlks(bd, buf, blk, n); else - ATAReadBlks(bd,buf,blk,n); - buf+=n<flags&BDF_EXT_SIZE) - ATACmd(bd,ATA_WRITE_MULTI_EXT); + ATABlkSel(bd, blk, count); + if (bd->flags & BDF_EXT_SIZE) + ATACmd(bd, ATA_WRITE_MULTI_EXT); else - ATACmd(bd,ATA_WRITE_MULTI); - bd->flags|=BDF_LAST_WAS_WRITE; - while (count>0) { - timeout=tS+1.0; - while (TRUE) { - i=InU8(bd->base0+ATAR0_STAT); - if (!(i & ATAS_DRDY)||!(i & ATAS_DRQ)) { + ATACmd(bd, ATA_WRITE_MULTI); + + bd->flags |= BDF_LAST_WAS_WRITE; + while (count > 0) + { + timeout = tS + 1.0; + while (TRUE) + { + i = InU8(bd->base0 + ATAR0_STAT); + if (!(i & ATAS_DRDY) || !(i & ATAS_DRQ)) + { Yield; - } else + } + else break; - if (/* i&ATAS_ERR||*/ tS>timeout) { - if (retries--) { - ATAWaitNotBUSY(bd,0); + if (/* i&ATAS_ERR||*/ tS > timeout) + { + if (retries--) + { + ATAWaitNotBUSY(bd, 0); goto retry; - } else + } + else throw('BlkDev'); } } - sects_avail=1; - U32s_avail=sects_avail<>2; - RepOutU32(buf,U32s_avail,bd->base0+ATAR0_DATA); - buf+=U32s_avail<<2; - count-=sects_avail; - retries=3; + sects_avail = 1; + U32s_avail = sects_avail << BLK_SIZE_BITS >> 2; + RepOutU32(buf, U32s_avail, bd->base0 + ATAR0_DATA); + buf += U32s_avail << 2; + count -= sects_avail; + retries = 3; } - ATAWaitNotBUSY(bd,0); - if (unlock) BlkDevUnlock(bd); + ATAWaitNotBUSY(bd, 0); + if (unlock) + BlkDevUnlock(bd); } Bool ATAPISync(CBlkDev *bd) { - Bool okay=TRUE; - if (!ATAWaitNotBUSY(bd,0)) - okay=FALSE; - else { + Bool okay = TRUE; + if (!ATAWaitNotBUSY(bd, 0)) + okay = FALSE; + else + { if (bd->flags & BDF_EXT_SIZE) - OutU8(bd->base0+ATAR0_SEL,0xEF|bd->unit<<4); + OutU8(bd->base0 + ATAR0_SEL, 0xEF | bd->unit << 4); else - OutU8(bd->base0+ATAR0_SEL,0xE0|bd->unit<<4); - OutU8(bd->base0+ATAR0_LCYL,0); - OutU8(bd->base0+ATAR0_HCYL,0); - ATACmd(bd,ATA_PACKET); - ATAPIWritePacketWord(bd,0,0x3500,0,0,0,0,0); - if (!ATAWaitNotBUSY(bd,0)) - okay=FALSE; + OutU8(bd->base0 + ATAR0_SEL, 0xE0 | bd->unit << 4); + + OutU8(bd->base0 + ATAR0_LCYL, 0); + OutU8(bd->base0 + ATAR0_HCYL, 0); + ATACmd(bd, ATA_PACKET); + ATAPIWritePacketWord(bd, 0, ATAPI_SYNC_CACHE, 0, 0, 0, 0, 0); + + if (!ATAWaitNotBUSY(bd, 0)) + okay = FALSE; } return okay; } -U0 ATAPIClose(CBlkDev *bd,I64 close_field=0x200,I64 track=0) +U0 ATAPIClose(CBlkDev *bd, I64 close_field=0x200, I64 track=0) {//0x200 CD/DVD part 1 // 0x300 DVD part 2 if (bd->flags & BDF_EXT_SIZE) - OutU8(bd->base0+ATAR0_SEL,0xEF|bd->unit<<4); + OutU8(bd->base0 + ATAR0_SEL, 0xEF | bd->unit << 4); else - OutU8(bd->base0+ATAR0_SEL,0xE0|bd->unit<<4); - OutU8(bd->base0+ATAR0_LCYL,0); - OutU8(bd->base0+ATAR0_HCYL,0); - ATACmd(bd,ATA_PACKET); - ATAPIWritePacketWord(bd,0,0x5B00,close_field,track,0,0,0); - ATAWaitNotBUSY(bd,0); + OutU8(bd->base0 + ATAR0_SEL, 0xE0 | bd->unit << 4); + + OutU8(bd->base0 + ATAR0_LCYL, 0); + OutU8(bd->base0 + ATAR0_HCYL, 0); + ATACmd(bd, ATA_PACKET); + ATAPIWritePacketWord(bd, 0, ATAPI_CLOSE_TRACK_SESSION, close_field, track, 0, 0, 0); + + ATAWaitNotBUSY(bd, 0); } -U0 ATAPIWriteBlks(CBlkDev *bd,U8 *buf, I64 native_blk, I64 count) +U0 ATAPIWriteBlks(CBlkDev *bd, U8 *buf, I64 native_blk, I64 count) { I64 U32s_avail; U8 *buf2; - ATAWaitNotBUSY(bd,0); - ATAPISeek(bd,native_blk); + ATAWaitNotBUSY(bd, 0); + ATAPISeek(bd, native_blk); - OutU8(bd->base0+ATAR0_FEAT,0); - OutU8(bd->base0+ATAR0_LCYL,bd->blk_size); - OutU8(bd->base0+ATAR0_HCYL,bd->blk_size.u8[1]); - if (bd->flags & BDF_EXT_SIZE) - OutU8(bd->base0+ATAR0_SEL,0xEF|bd->unit<<4); - else - OutU8(bd->base0+ATAR0_SEL,0xE0|bd->unit<<4); - OutU8(bd->base0+ATAR0_CMD,ATA_PACKET); - ATAPIWritePacketWord(bd,0,0x0400,native_blk.u16[1],native_blk,count.u16[1],count,0); - bd->flags|=BDF_LAST_WAS_WRITE; - ATAWaitNotBUSY(bd,0); - - ATAPISeek(bd,native_blk); + OutU8(bd->base0 + ATAR0_FEAT, 0); + OutU8(bd->base0 + ATAR0_LCYL, bd->blk_size); + OutU8(bd->base0 + ATAR0_HCYL, bd->blk_size.u8[1]); if (bd->flags & BDF_EXT_SIZE) - OutU8(bd->base0+ATAR0_SEL,0xEF|bd->unit<<4); + OutU8(bd->base0 + ATAR0_SEL, 0xEF | bd->unit << 4); else - OutU8(bd->base0+ATAR0_SEL,0xE0|bd->unit<<4); - OutU8(bd->base0+ATAR0_LCYL,bd->blk_size); - OutU8(bd->base0+ATAR0_HCYL,bd->blk_size.u8[1]); - ATACmd(bd,ATA_PACKET); - ATAPIWritePacketWord(bd,0,0xAA00,native_blk.u16[1],native_blk,count.u16[1],count,0); - buf2=buf+bd->blk_size*count; - while (bufbase0+ATAR0_HCYL)<<8+InU8(bd->base0+ATAR0_LCYL))>>2; - if (buf+U32s_avail<<2>buf2) - U32s_avail=(buf2-buf)>>2; - if (U32s_avail) { - RepOutU32(buf,U32s_avail,bd->base0+ATAR0_DATA); - buf+=U32s_avail<<2; - blkdev.write_count+=U32s_avail>>(BLK_SIZE_BITS-2); + OutU8(bd->base0 + ATAR0_SEL, 0xE0 | bd->unit << 4); + + OutU8(bd->base0 + ATAR0_CMD, ATA_PACKET); + ATAPIWritePacketWord(bd, 0, ATAPI_FORMAT_UNIT, native_blk.u16[1], native_blk, count.u16[1], count, 0); + + bd->flags |= BDF_LAST_WAS_WRITE; + + ATAWaitNotBUSY(bd, 0); + ATAPISeek(bd, native_blk); + + if (bd->flags & BDF_EXT_SIZE) + OutU8(bd->base0 + ATAR0_SEL, 0xEF | bd->unit << 4); + else + OutU8(bd->base0 + ATAR0_SEL, 0xE0 | bd->unit << 4); + + OutU8(bd->base0 + ATAR0_LCYL, bd->blk_size); + OutU8(bd->base0 + ATAR0_HCYL, bd->blk_size.u8[1]); + ATACmd(bd, ATA_PACKET); + ATAPIWritePacketWord(bd, 0, ATAPI_WRITE, native_blk.u16[1], native_blk, count.u16[1], count, 0); + + buf2 = buf + bd->blk_size * count; + while (buf < buf2) + { + ATAWaitDRQ(bd, 0); + U32s_avail = (InU8(bd->base0 + ATAR0_HCYL) << 8 + InU8(bd->base0 + ATAR0_LCYL)) >> 2; + if (buf + U32s_avail << 2 > buf2) + U32s_avail = (buf2-buf) >> 2; + if (U32s_avail) + { + RepOutU32(buf, U32s_avail, bd->base0 + ATAR0_DATA); + buf += U32s_avail << 2; + blkdev.write_count += U32s_avail >> (BLK_SIZE_BITS - 2); } } - ATAWaitNotBUSY(bd,0); + ATAWaitNotBUSY(bd, 0); } -Bool ATAWBlks(CDrive *drive,U8 *buf, I64 blk, I64 count) +Bool ATAWBlks(CDrive *drive, U8 *buf, I64 blk, I64 count) { - I64 n,spc; - CBlkDev *bd=drive->bd; + I64 n, spc; + CBlkDev *bd = drive->bd; Bool unlock; - spc=bd->blk_size>>BLK_SIZE_BITS; - if (bd->type==BDT_ATAPI) { - unlock=BlkDevLock(bd); - ATAPIWaitReady(bd,0); + spc = bd->blk_size >> BLK_SIZE_BITS; + if (bd->type == BDT_ATAPI) + { + unlock = BlkDevLock(bd); + ATAPIWaitReady(bd, 0); } - while (count>0) { - n=count; - if (n>bd->max_writes) - n=bd->max_writes; - if (bd->type==BDT_ATAPI) - ATAPIWriteBlks(bd,buf,blk/spc,(n+spc-1)/spc); + while (count > 0) + { + n = count; + if (n > bd->max_writes) + n = bd->max_writes; + + if (bd->type == BDT_ATAPI) + ATAPIWriteBlks(bd, buf, blk / spc, (n + spc - 1) / spc); else - ATAWriteBlks(bd,buf,blk,n); - buf+=n<type==BDT_ATAPI) { + if (bd->type == BDT_ATAPI) + { ATAPISync(bd); // ATAPIStartStop(bd,0,FALSE); - if (unlock) BlkDevUnlock(bd); + if (unlock) + BlkDevUnlock(bd); } return TRUE; } diff --git a/src/Kernel/KernelB.HH b/src/Kernel/KernelB.HH index 2602a427..0506fe42 100755 --- a/src/Kernel/KernelB.HH +++ b/src/Kernel/KernelB.HH @@ -6,44 +6,40 @@ $LK,"KernelB",A="FF:::/StartOS.CC,KernelB"$ StartOS.CC #help_index "Bit" #help_file "::/Doc/Bit" -public _intern IC_BSF I64 Bsf(I64 bit_field_val);//Scan forward from lowest for 1st set. -1 if not found. -public _intern IC_BSR I64 Bsr(I64 bit_field_val);//Scan rev from highest for 1st set. -1 if not found. -public _intern IC_BT Bool Bt(U8 *bit_field,I64 bit); //Bit test. -public _intern IC_BTC Bool Btc(U8 *bit_field,I64 bit); //Bit test and complement (same as xor with 1). -public _intern IC_BTR Bool Btr(U8 *bit_field,I64 bit); //Bit test and reset to zero. -public _intern IC_BTS Bool Bts(U8 *bit_field,I64 bit); //Bit test and set to one. -public _intern IC_LBTC Bool LBtc(U8 *bit_field,I64 bit); //Locked bit test and complement (xor with 1). -public _intern IC_LBTR Bool LBtr(U8 *bit_field,I64 bit); //Locked bit test and reset to zero. -public _intern IC_LBTS Bool LBts(U8 *bit_field,I64 bit); //Locked bit test and set to one. -public _intern IC_POPCNT I64 PopCount(I64 bit_field_val); //Count number of set bits in number. -public _extern _BEQUAL Bool BEqual(U8 *bit_field,I64 bit,Bool val);//Set bit equ to val. +public _intern IC_BSF I64 Bsf(I64 bit_field_val);//Scan forward from lowest for 1st set. -1 if not found. +public _intern IC_BSR I64 Bsr(I64 bit_field_val);//Scan rev from highest for 1st set. -1 if not found. +public _intern IC_BT Bool Bt(U8 *bit_field,I64 bit); //Bit test. +public _intern IC_BTC Bool Btc(U8 *bit_field,I64 bit); //Bit test and complement (same as xor with 1). +public _intern IC_BTR Bool Btr(U8 *bit_field,I64 bit); //Bit test and reset to zero. +public _intern IC_BTS Bool Bts(U8 *bit_field,I64 bit); //Bit test and set to one. +public _intern IC_LBTC Bool LBtc(U8 *bit_field,I64 bit); //Locked bit test and complement (xor with 1). +public _intern IC_LBTR Bool LBtr(U8 *bit_field,I64 bit); //Locked bit test and reset to zero. +public _intern IC_LBTS Bool LBts(U8 *bit_field,I64 bit); //Locked bit test and set to one. +public _intern IC_POPCNT I64 PopCount(I64 bit_field_val); //Count number of set bits in number. +public _extern _BEQUAL Bool BEqual(U8 *bit_field,I64 bit,Bool val);//Set bit equ to val. +public _extern _LBEQUAL Bool LBEqual(U8 *bit_field,I64 bit,Bool val); //Locked Set bit equ to val. public _extern _BIT_FIELD_EXT_U32 U32 BFieldExtU32(U8 *bit_field,I64 bit,I64 size); //Extract U32 from bit field. public _extern _BIT_FIELD_OR_U32 U0 BFieldOrU32(U8 *bit_field,I64 bit,U32 pattern); //Or U32 into bit field. -public _extern _LBEQUAL Bool LBEqual(U8 *bit_field,I64 bit,Bool val); //Locked Set bit equ to val. #help_index "Boot" -_extern MEM_BOOT_BASE U32 mem_boot_base; -_extern SYS_BOOT_BLK U32 sys_boot_blk; +_extern MEM_BOOT_BASE U32 mem_boot_base; +_extern SYS_BOOT_BLK U32 sys_boot_blk; _extern SYS_BOOT_PATCH_TABLE_BASE U32 sys_boot_patch_table_base; -_extern SYS_BOOT_SRC U32 sys_boot_src; -_extern SYS_RUN_LEVEL U32 sys_run_level; +_extern SYS_BOOT_SRC U32 sys_boot_src; +_extern SYS_RUN_LEVEL U32 sys_run_level; #help_index "Call" -public _extern _CALL I64 Call(U8 *machine_code); //Call addr with no args. -public _extern _CALLEXTSTR I64 CallExtStr( - /*argpop*/ U8 *name,...); //Search sym table for fun and pass it args. +public _extern _CALL I64 Call(U8 *machine_code); //Call addr with no args. +public _extern _CALLEXTSTR I64 CallExtStr(/*argpop*/ U8 *name,...); //Search sym table for fun and pass it args. //Can have any fixed number of arguments. -public _extern _CALL_IND I64 CallInd( - /*argpop*/I64 (*fp_addr)(...),...); //Call with fixed number of args. +public _extern _CALL_IND I64 CallInd(/*argpop*/I64 (*fp_addr)(...),...); //Call with fixed number of args. #help_index "Call/System Extern Num" -public _extern SYS_EXTERN_TABLE /*argpop*/ - I64 (**ext)(...); //Array of fun ptrs. See $LK,"Extern Num Definitions",A="MN:EXT_EXTS_NUM"$ -public _extern _CALLEXTNUM - I64 CallExtNum(I64 num,...); //Call ext num with fixed number of args. +public _extern SYS_EXTERN_TABLE /*argpop*/I64 (**ext)(...); //Array of fun ptrs. See $LK,"Extern Num Definitions",A="MN:EXT_EXTS_NUM"$ +public _extern _CALLEXTNUM I64 CallExtNum(I64 num,...); //Call ext num with fixed number of args. #help_index "Char/Conversion" -public _intern IC_TOUPPER I64 ToUpper(U8 ch); //Convert char to upper case. +public _intern IC_TOUPPER I64 ToUpper(U8 ch); //Convert char to upper case. #help_index "Char/Operations" public _intern IC_STRLEN I64 StrLen(U8 *st); //String length.