diff --git a/projects/05/Memory.hdl b/projects/05/Memory.hdl index f3cc861..7982ab8 100644 --- a/projects/05/Memory.hdl +++ b/projects/05/Memory.hdl @@ -35,19 +35,15 @@ CHIP Memory { // 10 11111 1111 1111 <- Last SCREEN Register // 11 00000 0000 0000 <- One Keyboard Register - DMux4Way(in=load, sel=address[13..14], a=toRAM1, - b=toRAM2, - c=toScreen, - d=notNeeded); + // Keyboard doesn't require load bit + DMux(in=load, sel=address[14], a=toRAM, b=toSCR); - Or(a=toRAM1, b=toRAM2, out=toRAM); + // 14 bit address for RAM (16384 registers) + // 13 bit address for SCR (8192 registers) RAM16K(in=in, load=toRAM, address=address[0..13], out=fromRAM); - Screen(in=in, load=toScreen, address=address[0..12], out=fromScreen); - Keyboard(out=fromKeyboard); - - Mux4Way16(sel=address[13..14], out=out, a=fromRAM, - b=fromRAM, - c=fromScreen, - d=fromKeyboard); + Screen(in=in, load=toSCR, address=address[0..12], out=fromSCR); + Keyboard(out=fromKBD); + Mux16(a=fromSCR, b=fromKBD, sel=address[13], out=fromDEV); + Mux16(a=fromRAM, b=fromDEV, sel=address[14], out=out); } diff --git a/stats-05.md b/stats-05.md index 6c6429d..1ce5e32 100644 --- a/stats-05.md +++ b/stats-05.md @@ -3,10 +3,9 @@ | Chip | Count | NANDs | Total | |------------|------------|------------|------------| -|DMux4Way | 1| 15| 15| -|Or | 1| 3| 3| +|DMux | 1| 5| 5| |RAM16K | 1| 5324667| 5324667| |Screen | 1| 0| 0| |Keyboard | 1| 0| 0| -|Mux4Way16 | 1| 384| 384| -|**Total** ||| **5325069**| +|Mux16 | 2| 128| 256| +|**Total** ||| **5324928**|