diff --git a/basilio.webm b/basilio.webm new file mode 100644 index 0000000..1c0371d Binary files /dev/null and b/basilio.webm differ diff --git a/js/Byte.js b/js/Byte.js index 8a91f50..0af1c38 100644 --- a/js/Byte.js +++ b/js/Byte.js @@ -1,32 +1,72 @@ var Byte = (function () { function Byte(init) { - if (typeof init === "undefined") { init = 0; } - this.value = init & 0xFF; + if (init === void 0) { init = 0; } + this.value = init & 0xFF | (init < 0 ? 0x80 : 0); } Byte.prototype.Add = function (val) { - var ret = new Byte(((this.value + val.Get()) & ~0xFF) >> 8); - this.value = (this.value + val.Get()) & 0xFF; - alert(this.value + val.Get()); - return ret; + val = typeof val == "number" ? new Byte(val) : val; + var hold = this.value + val.Get(); + this.value = hold & 0xFF; + return new Byte(hold > 255 ? hold - 255 : 0); }; - Byte.prototype.Sub = function (val) { - return this.Add(new Byte(-val.Get())); + val = typeof val == "number" ? new Byte(val) : val; + return this.Add(val.Neg()); }; - Byte.prototype.Get = function () { return this.value; }; - Byte.prototype.Set = function (val) { - this.value = val & 0xFF; + this.value = typeof val == "number" ? val & 0xFF : val.Get(); + }; + Byte.prototype.Neg = function (bind) { + if (bind === void 0) { bind = false; } + var tmp = new Byte(~this.value + 1); + this.value = bind ? tmp.Get() : this.value; + return tmp; + }; + Byte.prototype.And = function (val) { + val = typeof val == "number" ? new Byte(val) : val; + this.value = this.value & val.Get(); + }; + Byte.prototype.Or = function (val) { + val = typeof val == "number" ? new Byte(val) : val; + this.value = this.value | val.Get(); + }; + Byte.prototype.Xor = function (val) { + val = typeof val == "number" ? new Byte(val) : val; + this.value = this.value ^ val.Get(); + }; + Byte.prototype.Not = function () { + this.value = ~this.value; + }; + Byte.prototype.Bit = function (pos, val) { + pos = pos % 8; + this.Set(val ? (this.value | Math.pow(2, pos)) : (this.value & ~Math.pow(2, pos))); + }; + Byte.prototype.ShiftLeft = function (carry, value) { + if (carry === void 0) { carry = false; } + if (value === void 0) { value = false; } + var ret = (this.value & 0x80) != 0; + this.Set(this.value << 1); + this.Bit(0, carry ? ret : value); + return ret; + }; + Byte.prototype.ShiftRight = function (carry, value) { + if (carry === void 0) { carry = false; } + if (value === void 0) { value = false; } + var ret = (this.value & 0x80) != 0; + this.Set(this.value >>> 1); + this.Bit(7, carry ? ret : value); + return ret; }; return Byte; })(); - var Word = (function () { - function Word() { + function Word(init) { + if (init === void 0) { init = 0; } + this.value = [new Byte((init & ~0xFF) >> 8), new Byte(init & 0xFF)]; } return Word; })(); -//# sourceMappingURL=Byte.js.map +//# sourceMappingURL=Byte.js.map \ No newline at end of file diff --git a/js/Byte.js.map b/js/Byte.js.map index 4836c46..f625dae 100644 --- a/js/Byte.js.map +++ b/js/Byte.js.map @@ -1 +1 @@ -{"version":3,"file":"Byte.js","sourceRoot":"","sources":["Byte.ts"],"names":["Byte","Byte.constructor","Byte.Add","Byte.Sub","Byte.Get","Byte.Set","Word","Word.constructor"],"mappings":"AAAA;IAGIA,cAAmBA,IAAgBA;QAAhBC,mCAAAA,IAAIA,GAAWA,CAACA;AAAAA,QAC/BA,IAAIA,CAACA,KAAKA,GAAGA,IAAIA,GAAGA,IAAIA;IAC5BA,CAACA;IAEDD,qBAAAA,UAAWA,GAASA;QAChBE,IAAIA,GAAGA,GAAGA,IAAIA,IAAIA,CAACA,CAACA,CAACA,IAAIA,CAACA,KAAKA,GAAGA,GAAGA,CAACA,GAAGA,CAACA,CAACA,CAACA,GAAGA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QAC3DA,IAAIA,CAACA,KAAKA,GAAGA,CAACA,IAAIA,CAACA,KAAKA,GAAGA,GAAGA,CAACA,GAAGA,CAACA,CAACA,CAACA,GAAGA,IAAIA;QAC5CA,KAAKA,CAACA,IAAIA,CAACA,KAAKA,GAAGA,GAAGA,CAACA,GAAGA,CAACA,CAACA,CAACA;QAC7BA,OAAOA,GAAGA;IACdA,CAACA;;IAEDF,qBAAAA,UAAWA,GAASA;QAChBG,OAAOA,IAAIA,CAACA,GAAGA,CAACA,IAAIA,IAAIA,CAACA,CAACA,GAAGA,CAACA,GAAGA,CAACA,CAACA,CAACA,CAACA;IACzCA,CAACA;;IAEDH,qBAAAA;QACII,OAAOA,IAAIA,CAACA,KAAKA;IACrBA,CAACA;;IAEDJ,qBAAAA,UAAWA,GAAWA;QAClBK,IAAIA,CAACA,KAAKA,GAAGA,GAAGA,GAAGA,IAAIA;IAC3BA,CAACA;IACLL,YAACA;AAADA,CAACA,IAAA;;AAED;IAAAM;IAIAC,CAACA;AAAAD,IAADA,YAACA;AAADA,CAACA,IAAA"} \ No newline at end of file +{"version":3,"file":"Byte.js","sourceRoot":"","sources":["Byte.ts"],"names":["Byte","Byte.constructor","Byte.Add","Byte.Sub","Byte.Get","Byte.Set","Byte.Neg","Byte.And","Byte.Or","Byte.Xor","Byte.Not","Byte.Bit","Byte.ShiftLeft","Byte.ShiftRight","Word","Word.constructor"],"mappings":"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"} \ No newline at end of file diff --git a/js/Byte.ts b/js/Byte.ts index bdf2bdd..8ecea4c 100644 --- a/js/Byte.ts +++ b/js/Byte.ts @@ -2,26 +2,83 @@ class Byte { private value: number; public constructor(init: number = 0) { - this.value = init & 0xFF; + this.value = init & 0xFF | (init < 0 ? 0x80 : 0); } - public Add(val: Byte): Byte { - var ret = new Byte(((this.value + val.Get()) & ~0xFF) >> 8); - this.value = (this.value + val.Get()) & 0xFF; - alert(this.value + val.Get()); - return ret; + public Add(val: Byte): Byte; + public Add(val: number): Byte; + public Add(val: any): Byte { + val = typeof val == "number" ? new Byte(val) : val; + var hold = this.value + val.Get(); + this.value = hold & 0xFF; + return new Byte(hold > 255 ? hold - 255 : 0); } - public Sub(val: Byte): Byte { - return this.Add(new Byte(-val.Get())); + public Sub(val: Byte): Byte; + public Sub(val: number): Byte; + public Sub(val: any): Byte { + val = typeof val == "number" ? new Byte(val) : val; + return this.Add(val.Neg()); } public Get(): number { return this.value; } - public Set(val: number) { - this.value = val & 0xFF; + public Set(val: Byte); + public Set(val: number); + public Set(val: any) { + this.value = typeof val == "number" ? val & 0xFF : val.Get(); + } + + public Neg(bind: boolean = false) { + var tmp = new Byte(~this.value + 1); + this.value = bind ? tmp.Get() : this.value; + return tmp; + } + + public And(val: Byte); + public And(val: number); + public And(val: any) { + val = typeof val == "number" ? new Byte(val) : val; + this.value = this.value & val.Get(); + } + + public Or(val: Byte); + public Or(val: number); + public Or(val: any) { + val = typeof val == "number" ? new Byte(val) : val; + this.value = this.value | val.Get(); + } + + public Xor(val: Byte); + public Xor(val: number); + public Xor(val: any) { + val = typeof val == "number" ? new Byte(val) : val; + this.value = this.value ^ val.Get(); + } + + public Not() { + this.value = ~this.value; + } + + public Bit(pos: number, val: boolean) { + pos = pos % 8; + this.Set(val ? (this.value | Math.pow(2, pos)) : (this.value & ~Math.pow(2, pos))); + } + + public ShiftLeft(carry: boolean = false, value: boolean = false): boolean { + var ret = (this.value & 0x80) != 0; + this.Set(this.value << 1); + this.Bit(0, carry ? ret : value); + return ret; + } + + public ShiftRight(carry: boolean = false, value: boolean = false): boolean { + var ret = (this.value & 0x80) != 0; + this.Set(this.value >>> 1); + this.Bit(7, carry ? ret : value); + return ret; } } @@ -29,4 +86,7 @@ class Word { private value: Byte[]; + public constructor(init: number = 0) { + this.value = [new Byte((init & ~0xFF) >> 8), new Byte(init & 0xFF)]; + } } \ No newline at end of file diff --git a/js/Memory.js b/js/Memory.js new file mode 100644 index 0000000..2e96e00 --- /dev/null +++ b/js/Memory.js @@ -0,0 +1,26 @@ +/// +var Bank = (function () { + function Bank(fill) { + if (fill === void 0) { fill = 0; } + } + return Bank; +})(); +var MemoryMap = (function () { + function MemoryMap(type, index) { + this.Set(type, index); + } + MemoryMap.prototype.Set = function (type, index) { + this.type = type; + this.index = index; + }; + return MemoryMap; +})(); +var Memory = (function () { + function Memory() { + } + Memory.Init = function () { + }; + Memory.romLock = true; + return Memory; +})(); +//# sourceMappingURL=Memory.js.map \ No newline at end of file diff --git a/js/Memory.js.map b/js/Memory.js.map new file mode 100644 index 0000000..4cddaf8 --- /dev/null +++ b/js/Memory.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Memory.js","sourceRoot":"","sources":["Memory.ts"],"names":["Bank","Bank.constructor","MemoryMap","MemoryMap.constructor","MemoryMap.Set","Memory","Memory.constructor","Memory.Init"],"mappings":"AAAA,gCAAgC;AAEhC,IAAM,IAAI;IAGNA,SAHEA,IAAIA,CAGaA,IAAgBA;QAAhBC,oBAAgBA,GAAhBA,QAAgBA;IAEnCA,CAACA;IACLD,WAACA;AAADA,CAACA,AAND,IAMC;AAED,IAAM,SAAS;IASXE,SATEA,SAASA,CASQA,IAAaA,EAAEA,KAAaA;QAC3CC,IAAIA,CAACA,GAAGA,CAACA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IAC1BA,CAACA;IAPMD,uBAAGA,GAAVA,UAAWA,IAAaA,EAAEA,KAAaA;QACnCE,IAAIA,CAACA,IAAIA,GAAGA,IAAIA,CAACA;QACjBA,IAAIA,CAACA,KAAKA,GAAGA,KAAKA,CAACA;IACvBA,CAACA;IAKLF,gBAACA;AAADA,CAACA,AAZD,IAYC;AAED,IAAM,MAAM;IAAZG,SAAMA,MAAMA;IAQZC,CAACA;IAHUD,WAAIA,GAAXA;IAEAE,CAACA;IAJMF,cAAOA,GAAYA,IAAIA,CAACA;IAKnCA,aAACA;AAADA,CAACA,AARD,IAQC"} \ No newline at end of file diff --git a/js/Memory.ts b/js/Memory.ts new file mode 100644 index 0000000..0100262 --- /dev/null +++ b/js/Memory.ts @@ -0,0 +1,33 @@ +/// + +class Bank { + public data: Byte[]; + + public constructor(fill: number = 0) { + + } +} + +class MemoryMap { + public type: boolean; // false - ROM ; true - RAM + public index: number; // page index + + public Set(type: boolean, index: number) { + this.type = type; + this.index = index; + } + + public constructor(type: boolean, index: number) { + this.Set(type, index); + } +} + +class Memory { + static rom: Bank[]; + static ram: Bank[]; + static romLock: boolean = true; + + static Init() { + + } +} \ No newline at end of file diff --git a/js/TI.js b/js/TI.js index 387392a..2fa7d38 100644 --- a/js/TI.js +++ b/js/TI.js @@ -3,10 +3,12 @@ var TI = (function () { function TI() { } TI.Init = function () { - var a = new Byte(40); + var a = new Byte(10); var b = new Byte(40); - alert(a.Get()); + //a.Add(b); + //a.Sub(b); + alert(a.Neg().Get()); }; return TI; })(); -//# sourceMappingURL=TI.js.map +//# sourceMappingURL=TI.js.map \ No newline at end of file diff --git a/js/TI.js.map b/js/TI.js.map index 6d9cc67..01a7ff3 100644 --- a/js/TI.js.map +++ b/js/TI.js.map @@ -1 +1 @@ -{"version":3,"file":"TI.js","sourceRoot":"","sources":["TI.ts"],"names":["TI","TI.constructor","TI.Init"],"mappings":"AAAA,gCAAgC;AAEhC;IAAAA;IAYAC,CAACA;AAAAD,IALGA,UAAAA;QACIE,IAAIA,CAACA,GAAGA,IAAIA,IAAIA,CAACA,EAAEA,CAACA;QACpBA,IAAIA,CAACA,GAAGA,IAAIA,IAAIA,CAACA,EAAEA,CAACA;QACpBA,KAAKA,CAACA,CAACA,CAACA,GAAGA,CAACA,CAACA,CAACA;IAClBA,CAACA;IACLF,UAACA;AAADA,CAACA,IAAA"} \ No newline at end of file +{"version":3,"file":"TI.js","sourceRoot":"","sources":["TI.ts"],"names":["TI","TI.constructor","TI.Init"],"mappings":"AAAA,gCAAgC;AAEhC,IAAM,EAAE;IAARA,SAAMA,EAAEA;IAWRC,CAACA;IAPUD,OAAIA,GAAXA;QACIE,IAAIA,CAACA,GAAGA,IAAIA,IAAIA,CAACA,EAAEA,CAACA,CAACA;QACrBA,IAAIA,CAACA,GAAGA,IAAIA,IAAIA,CAACA,EAAEA,CAACA,CAACA;QAGrBA,AAFAA,WAAWA;QACXA,WAAWA;QACXA,KAAKA,CAACA,CAACA,CAACA,GAAGA,EAAEA,CAACA,GAAGA,EAAEA,CAACA,CAACA;IACzBA,CAACA;IACLF,SAACA;AAADA,CAACA,AAXD,IAWC"} \ No newline at end of file diff --git a/js/TI.ts b/js/TI.ts index 1705e2d..e7971fd 100644 --- a/js/TI.ts +++ b/js/TI.ts @@ -1,15 +1,14 @@ /// class TI { - static rom: Byte[][]; - static ram: Byte[][]; - static mmap: any[]; static registers: any[]; static Init() { - var a = new Byte(40); + var a = new Byte(10); var b = new Byte(40); - alert(a.Get()); + //a.Add(b); + //a.Sub(b); + alert(a.Neg().Get()); } } \ No newline at end of file