Advertisement
0xFFF1

C++ SUBLEQ interpreter (unfinished)

Jun 22nd, 2013
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. //This program has some error in it related to it can't find main.
  2. //it was 3 AM when I last looked at it. i fell asleep soon after. (lol)
  3.  
  4. ////////////
  5. //Main File:
  6. ////////////
  7.  
  8. #include <iostream>
  9. #include <ifstream>
  10. #include <ofstream>
  11. #include "SUBLCQ.h"
  12.  
  13. using namescape std;
  14.  
  15. int main(int argc, char* argv[])
  16. {
  17.     Memory m = new Memory();
  18.     fstream f(argv[0]);
  19.     if(f.is_open())
  20.     {
  21.         //open a program here for execution here;
  22.     }
  23.     f.close();
  24.     while(!m.Subleq());
  25.     f.open(argv[1]);
  26.     if(f.is_open())
  27.     {
  28.         //open a program for saving here;
  29.     }
  30.     f.close();
  31.     return 0;
  32. }
  33. //////////////
  34. //class header
  35. //////////////
  36.  
  37. #ifndef SUBLEQ_H
  38. #define SUBLEQ_H
  39.  
  40. //Program Counter, Accumulator and Terminator
  41. #define PRC 0
  42.  
  43.  
  44.  
  45. //making sure C++ doesn't think I am dealing with ASCII char arrays.
  46. typedef unsigned char byte;
  47.  
  48. class Memory {
  49. private:
  50.     byte mem[256];
  51.     byte getPCV();
  52.     void setPCV();
  53.     void setPCVS();
  54.     void setPCP();
  55.     byte getVal(byte addr);
  56. public:
  57.     Memory();
  58.     byte Subleq();
  59. };
  60. #endif
  61.  
  62. ////////////////////////////
  63. // class implementation file
  64. ////////////////////////////
  65. #include "SUBLEQ.h"
  66.  
  67. byte Memory::getPCV()
  68. {
  69.     return mem[PRC];
  70. }
  71.  
  72. byte Memory::getVal(byte addr)
  73. {
  74.     return mem[addr];
  75. }
  76.  
  77. void Memory::setPCP()
  78. {
  79.     mem[mem[PRC]]=mem[mem[PRC]+1]-mem[mem[PRC]];
  80. }
  81. void Memory::setPCVS()
  82. {
  83.     mem[PRC]=mem[mem[PRC]+2];
  84. }
  85.  
  86. void Memory::setPCV()
  87. {
  88.     mem[PRC]=mem[PRC]+3;
  89. }
  90.  
  91. Memory::Memory()
  92. {
  93.     for(int i = 0;i<256;i++)
  94.         mem[i]=0;//do not rely upon it being 0;
  95.     mem[PRC]=1;//set program counter to first spot after it.
  96. }
  97.  
  98. //returns the stop address.
  99. byte Memory::Subleq()
  100. {
  101.     setPCP();
  102.     if(getVal(getVal(PRC))>127)
  103.         setPCV();
  104.     else
  105.         setPCVS();
  106.     //detect the ascii string "\STOP"
  107.     if(getVal(getVal(PRC))==92&&getVal(getVal(PRC)+1)==83&&getVal(getVal(PRC)+2)==84&&getVal(getVal(PRC)+3)==79&&getVal(getVal(PRC)+4)==80)
  108.     {
  109.         return getVal(PRC);
  110.     }
  111.     else
  112.         return 0;
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement